summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/text.cpp27
-rw-r--r--src/text.h10
2 files changed, 28 insertions, 9 deletions
diff --git a/src/text.cpp b/src/text.cpp
index 4f56f7cdf..0331b5263 100644
--- a/src/text.cpp
+++ b/src/text.cpp
@@ -46,6 +46,7 @@ Text::Text(const std::string &text, const int x, const int y,
const Color *const color, const bool isSpeech,
Font *const font) :
mFont(font ? font : (gui ? gui->getFont() : nullptr)),
+ mTextChunk(),
mX(x),
mY(y),
mWidth(mFont ? mFont->getWidth(text) : 1),
@@ -53,8 +54,9 @@ Text::Text(const std::string &text, const int x, const int y,
mXOffset(0),
mText(text),
mColor(color),
- mOutlineColor(isSpeech ? color : theme->getColor(Theme::OUTLINE, 255)),
- mIsSpeech(isSpeech)
+ mOutlineColor(isSpeech ? *color : theme->getColor(Theme::OUTLINE, 255)),
+ mIsSpeech(isSpeech),
+ mTextChanged(true)
{
if (!textManager)
{
@@ -117,10 +119,11 @@ Text::~Text()
void Text::setColor(const Color *const color)
{
+ mTextChanged = true;
if (mIsSpeech)
{
mColor = color;
- mOutlineColor = color;
+ mOutlineColor = *color;
}
else
{
@@ -153,9 +156,21 @@ void Text::draw(Graphics *const graphics, const int xOff, const int yOff)
mBubble);
}
- mFont->drawString(graphics,
- *mColor, mOutlineColor,
- mText, mX - xOff, mY - yOff);
+ if (mTextChanged)
+ {
+ mTextChunk.textFont = mFont;
+ mTextChunk.deleteImage();
+ mTextChunk.text = mText;
+ mTextChunk.color = *mColor;
+ mTextChunk.color2 = mOutlineColor;
+ mFont->generate(mTextChunk);
+ mTextChanged = false;
+ }
+
+ const Image *const image = mTextChunk.img;
+ if (image)
+ graphics->drawImage(image, mX - xOff, mY - yOff);
+
BLOCK_END("Text::draw")
}
diff --git a/src/text.h b/src/text.h
index fbb36050b..845b96353 100644
--- a/src/text.h
+++ b/src/text.h
@@ -24,6 +24,8 @@
#ifndef TEXT_H
#define TEXT_H
+#include "gui/fonts/textchunk.h"
+
#include "render/graphics.h"
#include "localconsts.h"
@@ -70,7 +72,8 @@ class Text notfinal
const int xOff, const int yOff);
private:
- Font *mFont; /**< The font of the text */
+ Font *mFont; /**< The font of the text */
+ TextChunk mTextChunk;
int mX; /**< Actual x-value of left of text written. */
int mY; /**< Actual y-value of top of text written. */
int mWidth; /**< The width of the text. */
@@ -78,9 +81,10 @@ class Text notfinal
int mXOffset; /**< The offset of mX from the desired x. */
static int mInstances; /**< Instances of text. */
std::string mText; /**< The text to display. */
- const Color *mColor; /**< The color of the text. */
- const Color mOutlineColor;
+ const Color *mColor; /**< The color of the text. */
+ Color mOutlineColor;
bool mIsSpeech; /**< Is this text a speech bubble? */
+ bool mTextChanged;
protected:
static ImageRect mBubble; /**< Speech bubble graphic */