From 7f7ac0e998506fb2b19b03ae4f2ef6ef04b87b13 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 16 Dec 2013 19:51:22 +0300 Subject: fix speechbubble size. --- src/gui/popups/speechbubble.cpp | 29 +++++++++++------------------ src/gui/popups/speechbubble.h | 1 + src/gui/widgets/browserbox.cpp | 8 ++++++++ src/gui/widgets/browserbox.h | 4 ++++ 4 files changed, 24 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/gui/popups/speechbubble.cpp b/src/gui/popups/speechbubble.cpp index 3033b7923..7febfdf4c 100644 --- a/src/gui/popups/speechbubble.cpp +++ b/src/gui/popups/speechbubble.cpp @@ -36,16 +36,16 @@ SpeechBubble::SpeechBubble() : Popup("Speech", "speechbubble.xml"), mText(), + mSpacing(mSkin ? mSkin->getOption("spacing") : 2), mCaption(new Label(this)), mSpeechBox(new BrowserBox(this, BrowserBox::AUTO_SIZE, true, - "browserbox.xml")) + "speechbrowserbox.xml")) { setContentSize(140, 46); - setMinWidth(29); - setMinHeight(29); + setMinWidth(8); + setMinHeight(8); mCaption->setFont(boldFont); -// mSpeechBox->setEditable(false); mSpeechBox->setOpaque(false); mSpeechBox->setForegroundColorAll(getThemeColor(Theme::BUBBLE_TEXT), getThemeColor(Theme::BUBBLE_TEXT_OUTLINE)); @@ -75,28 +75,21 @@ void SpeechBubble::setText(const std::string &text, const bool showName) getThemeColor(Theme::BUBBLE_TEXT_OUTLINE)); const int pad = mPadding; - const int pad2 = 2 * pad; - int width = mCaption->getWidth() + pad2; + int width = mCaption->getWidth(); mSpeechBox->clearRows(); mSpeechBox->addRow(text); - const int speechWidth = mSpeechBox->getWidth() + pad2; + mSpeechBox->setWidth(mSpeechBox->getDataWidth()); + const int speechWidth = mSpeechBox->getWidth(); const int fontHeight = getFont()->getHeight(); - const int nameHeight = showName ? mCaption->getHeight() + pad / 2 : 0; - const int numRows = 1; - const int height = fontHeight + nameHeight + pad; + const int nameHeight = showName ? mCaption->getHeight() + mSpacing : 0; + int height = fontHeight + nameHeight; if (width < speechWidth) width = speechWidth; - width += pad2; - setContentSize(width, height); - const gcn::Rectangle &rect = mDimension; - const int xPos = ((rect.width - width) / 2); - const int yPos = ((rect.height - height) / 2) + nameHeight; - - mCaption->setPosition(xPos, pad); - mSpeechBox->setPosition(xPos, yPos); + mCaption->setPosition(0, 0); + mSpeechBox->setPosition(0, nameHeight); } diff --git a/src/gui/popups/speechbubble.h b/src/gui/popups/speechbubble.h index 496b3d71c..41c210eab 100644 --- a/src/gui/popups/speechbubble.h +++ b/src/gui/popups/speechbubble.h @@ -59,6 +59,7 @@ class SpeechBubble final : public Popup private: std::string mText; + int mSpacing; Label *mCaption; BrowserBox *mSpeechBox; }; diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index 014e4cf58..d3e2efc67 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -72,6 +72,7 @@ BrowserBox::BrowserBox(const Widget2 *const widget, mPadding(0), mNewLinePadding(15), mItemPadding(0), + mDataWidth(0), mHighlightColor(getThemeColor(Theme::HIGHLIGHT)), mHyperLinkColor(getThemeColor(Theme::HYPERLINK)), mOpaque(opaque), @@ -403,6 +404,7 @@ void BrowserBox::clearRows() setHeight(0); mSelectedLink = -1; mUpdateTime = 0; + mDataWidth = 0; updateHeight(); } @@ -751,7 +753,11 @@ int BrowserBox::calcHeight() start += 3; if (start == row.size()) + { + if (x > mDataWidth) + mDataWidth = x; break; + } } } const size_t len = (end == std::string::npos) ? end : end - start; @@ -832,6 +838,8 @@ int BrowserBox::calcHeight() break; x += width; + if (x > mDataWidth) + mDataWidth = x; } y += fontHeight; } diff --git a/src/gui/widgets/browserbox.h b/src/gui/widgets/browserbox.h index fd037506b..5a09f60d6 100644 --- a/src/gui/widgets/browserbox.h +++ b/src/gui/widgets/browserbox.h @@ -234,6 +234,9 @@ class BrowserBox final : public gcn::Widget, void setForegroundColorAll(const gcn::Color &color1, const gcn::Color &color2); + int getDataWidth() const + { return mDataWidth; } + private: int calcHeight() A_WARN_UNUSED; @@ -264,6 +267,7 @@ class BrowserBox final : public gcn::Widget, int mPadding; int mNewLinePadding; int mItemPadding; + unsigned int mDataWidth; gcn::Color mHighlightColor; gcn::Color mHyperLinkColor; -- cgit v1.2.3-60-g2f50