diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-01-24 16:56:01 +0100 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-01-24 16:56:01 +0100 |
commit | 944c187b91e823075dd1708b4f575acd43f0428f (patch) | |
tree | d8513a7d1eac88ab6d4abcf9939e89db482c135b /src/text.cpp | |
parent | 72e65a1cc2f2f9f541d24382eff4a2edb2535e57 (diff) | |
download | mana-944c187b91e823075dd1708b4f575acd43f0428f.tar.gz mana-944c187b91e823075dd1708b4f575acd43f0428f.tar.bz2 mana-944c187b91e823075dd1708b4f575acd43f0428f.tar.xz mana-944c187b91e823075dd1708b4f575acd43f0428f.zip |
Added speech bubble background by QOAL
Diffstat (limited to 'src/text.cpp')
-rw-r--r-- | src/text.cpp | 71 |
1 files changed, 61 insertions, 10 deletions
diff --git a/src/text.cpp b/src/text.cpp index c0cd1ecc..d256b82d 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -25,23 +25,50 @@ #include <guichan/font.hpp> +#include "configuration.h" #include "textmanager.h" +#include "resources/resourcemanager.h" +#include "resources/image.h" int Text::mInstances = 0; - +ImageRect Text::mBubble; +Image *Text::mBubbleArrow; Text::Text(const std::string &text, int x, int y, gcn::Graphics::Alignment alignment, gcn::Font *font, - gcn::Color colour) : - mText(text), mColour(colour) + gcn::Color colour, bool isSpeech) : + mText(text), + mColour(colour), + mIsSpeech(isSpeech) { if (textManager == 0) { - textManager = new TextManager(); + textManager = new TextManager; + ResourceManager *resman = ResourceManager::getInstance(); + Image *sbImage = resman->getImage("graphics/gui/bubble.png|W:#" + + config.getValue("speechBubbleColour", "000000")); + mBubble.grid[0] = sbImage->getSubImage(0, 0, 5, 5); + mBubble.grid[1] = sbImage->getSubImage(5, 0, 5, 5); + mBubble.grid[2] = sbImage->getSubImage(10, 0, 5, 5); + mBubble.grid[3] = sbImage->getSubImage(0, 5, 5, 5); + mBubble.grid[4] = sbImage->getSubImage(5, 5, 5, 5); + mBubble.grid[5] = sbImage->getSubImage(10, 5, 5, 5); + mBubble.grid[6] = sbImage->getSubImage(0, 10, 5, 5); + mBubble.grid[7] = sbImage->getSubImage(5, 10, 5, 5); + mBubble.grid[8] = sbImage->getSubImage(10, 10, 5, 5); + mBubbleArrow = sbImage->getSubImage(0, 15, 15, 10); + double bubbleAlpha = config.getValue("speechBubbleAlpha", 0.4); + for (int i = 0; i < 9; i++) + { + mBubble.grid[i]->setAlpha(bubbleAlpha); + } + mBubbleArrow->setAlpha(bubbleAlpha); + sbImage->decRef(); } ++mInstances; mHeight = font->getHeight(); mWidth = font->getWidth(text); + switch (alignment) { case gcn::Graphics::LEFT: @@ -60,11 +87,6 @@ Text::Text(const std::string &text, int x, int y, mFont = font; } -void Text::adviseXY(int x, int y) -{ - textManager->moveText(this, x - mXOffset, y); -} - Text::~Text() { textManager->removeText(this); @@ -72,14 +94,43 @@ Text::~Text() { delete textManager; textManager = 0; + delete mBubble.grid[0]; + delete mBubble.grid[1]; + delete mBubble.grid[2]; + delete mBubble.grid[3]; + delete mBubble.grid[4]; + delete mBubble.grid[5]; + delete mBubble.grid[6]; + delete mBubble.grid[7]; + delete mBubble.grid[8]; + delete mBubbleArrow; } } +void Text::adviseXY(int x, int y) +{ + textManager->moveText(this, x - mXOffset, y); +} + void Text::draw(Graphics *graphics, int xOff, int yOff) { graphics->setFont(mFont); graphics->setColor(mColour); - graphics->drawText(mText, mX - xOff, mY - yOff, gcn::Graphics::LEFT); + + if (mIsSpeech) { + static_cast<Graphics*>(graphics)->drawImageRect( + mX - xOff - 5, mY - yOff - 5, mWidth + 10, mHeight + 10, + mBubble); + + if (mWidth >= 15) { + static_cast<Graphics*>(graphics)->drawImage( + mBubbleArrow, mX - xOff - 7 + mWidth / 2, + mY - yOff + mHeight + 4); + } + } + + graphics->drawText(mText, mX - xOff, mY - yOff, + gcn::Graphics::LEFT); } FlashText::FlashText(const std::string &text, int x, int y, |