diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gfx.cpp | 37 | ||||
-rw-r--r-- | src/gfx_layout.cpp | 15 | ||||
-rw-r--r-- | src/gfx_layout.h | 38 |
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 { |