From 5c79b920eefb219f0dd4491b709af4f116d3a988 Mon Sep 17 00:00:00 2001 From: Ira Rice Date: Sat, 24 Jan 2009 18:16:17 -0700 Subject: Tweaks to the speech bubbles so that being status (GM, mob, npc, regular player) is displayed in the speech bubbles now. No need to view your own name to be able to see whether you're showing as a GM now. Signed-off-by: Ira Rice --- src/gui/speechbubble.cpp | 52 +++++++++++++++++++++++++++++------------------- src/gui/speechbubble.h | 4 +++- 2 files changed, 34 insertions(+), 22 deletions(-) (limited to 'src/gui') diff --git a/src/gui/speechbubble.cpp b/src/gui/speechbubble.cpp index eb3232ea..97e3fd73 100644 --- a/src/gui/speechbubble.cpp +++ b/src/gui/speechbubble.cpp @@ -22,6 +22,8 @@ #include +#include + #include "gui.h" #include "speechbubble.h" @@ -33,23 +35,30 @@ // TODO: Fix windows so that they can each load their own skins without the // other windows overriding another window's skin. SpeechBubble::SpeechBubble(): - Window(_(""), false, NULL, "graphics/gui/speechbubble.xml") + Window(_("Speech"), false, NULL, "graphics/gui/speechbubble.xml") { + // Height == Top Graphic (14px) + 1 Row of Text (15px) + Bottom Graphic (17px) + setContentSize(140, 46); + setShowTitle(false); + setTitleBarHeight(0); + + mCaption = new gcn::Label(""); + mCaption->setFont(boldFont); + mCaption->setPosition(5, 3); + mSpeechBox = new TextBox(); mSpeechBox->setEditable(false); mSpeechBox->setOpaque(false); mSpeechArea = new ScrollArea(mSpeechBox); - // Height == Top Graphic (14px) + 1 Row of Text (15px) + Bottom Graphic (17px) - setContentSize(140, 46); - setTitleBarHeight(5); - mSpeechArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); mSpeechArea->setVerticalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); - mSpeechArea->setDimension(gcn::Rectangle(4, 15, 130, 28)); + mSpeechArea->setDimension(gcn::Rectangle(4, boldFont->getHeight() + 3, + 130, 28)); mSpeechArea->setOpaque(false); + add(mCaption); add(mSpeechArea); setLocationRelativeTo(getParent()); @@ -60,38 +69,39 @@ SpeechBubble::SpeechBubble(): mSpeechBox->setTextWrapped( "" ); } -void SpeechBubble::setName(const std::string &name) +void SpeechBubble::setCaption(const std::string &name, const gcn::Color &color) { - setWindowName(name); - setCaption(name); + mCaption->setCaption(name); + mCaption->adjustSize(); + mCaption->setForegroundColor(color); } void SpeechBubble::setText(std::string mText) { mSpeechBox->setMinWidth(140); - mSpeechBox->setTextWrapped( mText ); + mSpeechBox->setTextWrapped(mText); const int fontHeight = getFont()->getHeight(); - int numRows = mSpeechBox->getNumberOfRows(); + const int numRows = mSpeechBox->getNumberOfRows() + 1; - if (numRows > 1) + if (numRows > 2) { // 15 == height of each line of text (based on font heights) // 14 == speechbubble Top + Bottom graphic pixel heights - setContentSize(mSpeechBox->getMinWidth() + fontHeight, fontHeight + - (numRows * fontHeight)); - mSpeechArea->setDimension(gcn::Rectangle(4, fontHeight, - mSpeechBox->getMinWidth() + 5, - 3 + (numRows * fontHeight))); + setContentSize(mSpeechBox->getMinWidth() + fontHeight, + (numRows * fontHeight) + 6); + mSpeechArea->setDimension(gcn::Rectangle(4, fontHeight + 3, + mSpeechBox->getMinWidth() + 5, + (numRows * fontHeight))); } else { - int width = boldFont->getWidth(this->getCaption()); + int width = mCaption->getWidth() + 8; if (width < getFont()->getWidth(mText)) width = getFont()->getWidth(mText); - setContentSize(width + fontHeight, fontHeight * 2); - mSpeechArea->setDimension(gcn::Rectangle(4, fontHeight, - width + 5, fontHeight + 2)); + setContentSize(width + fontHeight, (fontHeight * 2) + 6); + mSpeechArea->setDimension(gcn::Rectangle(4, fontHeight + 3, + width + 5, fontHeight)); } } diff --git a/src/gui/speechbubble.h b/src/gui/speechbubble.h index 6d8a94d4..23733813 100644 --- a/src/gui/speechbubble.h +++ b/src/gui/speechbubble.h @@ -33,12 +33,14 @@ class SpeechBubble : public Window SpeechBubble(); - void setName(const std::string &name); + void setCaption(const std::string &name, + const gcn::Color &color = 0x000000); void setText(std::string mText); void setLocation(int x, int y); unsigned int getNumRows(); private: + gcn::Label *mCaption; TextBox *mSpeechBox; ScrollArea *mSpeechArea; }; -- cgit v1.2.3-70-g09d2