summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gfx.cpp37
-rw-r--r--src/gfx_layout.cpp15
-rw-r--r--src/gfx_layout.h38
3 files changed, 45 insertions, 45 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 2cb9d0ebf..3278f972c 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -51,43 +51,6 @@ byte _colour_gradient[COLOUR_END][8];
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = NULL, SpriteID sprite_id = SPR_CURSOR_MOUSE);
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = NULL, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL);
-/**
- * Text drawing parameters, which can change while drawing a line, but are kept between multiple parts
- * of the same text, e.g. on line breaks.
- */
-struct DrawStringParams {
- FontSize fontsize;
- TextColour cur_colour, prev_colour;
-
- DrawStringParams(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour), prev_colour(colour) {}
-
- /**
- * Switch to new colour \a c.
- * @param c New colour to use.
- */
- inline void SetColour(TextColour c)
- {
- assert(c >= TC_BLUE && c <= TC_BLACK);
- this->prev_colour = this->cur_colour;
- this->cur_colour = c;
- }
-
- /** Switch to previous colour. */
- inline void SetPreviousColour()
- {
- Swap(this->cur_colour, this->prev_colour);
- }
-
- /**
- * Switch to using a new font \a f.
- * @param f New font to use.
- */
- inline void SetFontSize(FontSize f)
- {
- this->fontsize = f;
- }
-};
-
static ReusableBuffer<uint8> _cursor_backup;
/**
diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp
index 114c5c3e6..767bdc1d3 100644
--- a/src/gfx_layout.cpp
+++ b/src/gfx_layout.cpp
@@ -410,11 +410,11 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
const CharType *buffer_last = lastof(this->buffer);
CharType *buff = this->buffer;
- TextColour cur_colour = colour, prev_colour = colour;
+ FontState state(colour, fontsize);
WChar c = 0;
do {
- Font *f = new Font(fontsize, cur_colour);
+ Font *f = new Font(state.fontsize, state.cur_colour);
CharType *buff_begin = buff;
FontMap fontMapping;
@@ -428,14 +428,13 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
if (c == '\0' || c == '\n') {
break;
} else if (c >= SCC_BLUE && c <= SCC_BLACK) {
- prev_colour = cur_colour;
- cur_colour = (TextColour)(c - SCC_BLUE);
+ state.SetColour((TextColour)(c - SCC_BLUE));
} else if (c == SCC_PREVIOUS_COLOUR) { // Revert to the previous colour.
- Swap(prev_colour, cur_colour);
+ state.SetPreviousColour();
} else if (c == SCC_TINYFONT) {
- fontsize = FS_SMALL;
+ state.SetFontSize(FS_SMALL);
} else if (c == SCC_BIGFONT) {
- fontsize = FS_LARGE;
+ state.SetFontSize(FS_LARGE);
} else {
buff += AppendToBuffer(buff, buffer_last, c);
continue;
@@ -447,7 +446,7 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
} else {
delete f;
}
- f = new Font(fontsize, cur_colour);
+ f = new Font(state.fontsize, state.cur_colour);
}
/* Better safe than sorry. */
diff --git a/src/gfx_layout.h b/src/gfx_layout.h
index 0fadd5126..6dbf3f872 100644
--- a/src/gfx_layout.h
+++ b/src/gfx_layout.h
@@ -24,6 +24,44 @@
#endif /* WITH_ICU */
/**
+ * Text drawing parameters, which can change while drawing a line, but are kept between multiple parts
+ * of the same text, e.g. on line breaks.
+ */
+struct FontState {
+ FontSize fontsize; ///< Current font size.
+ TextColour cur_colour; ///< Current text colour.
+ TextColour prev_colour; ///< Text colour from before the last colour switch.
+
+ FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour), prev_colour(colour) {}
+
+ /**
+ * Switch to new colour \a c.
+ * @param c New colour to use.
+ */
+ inline void SetColour(TextColour c)
+ {
+ assert(c >= TC_BLUE && c <= TC_BLACK);
+ this->prev_colour = this->cur_colour;
+ this->cur_colour = c;
+ }
+
+ /** Switch to previous colour. */
+ inline void SetPreviousColour()
+ {
+ Swap(this->cur_colour, this->prev_colour);
+ }
+
+ /**
+ * Switch to using a new font \a f.
+ * @param f New font to use.
+ */
+ inline void SetFontSize(FontSize f)
+ {
+ this->fontsize = f;
+ }
+};
+
+/**
* Container with information about a font.
*/
class Font ICU_FONTINSTANCE {