(svn r25567) -Codechange: Revive dead DrawStringParams as FontState.

This commit is contained in:
frosch 2013-07-06 18:54:26 +00:00
parent 3c0fbaaa13
commit 3fa1b4e8c3
3 changed files with 45 additions and 45 deletions

View File

@ -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;
/**

View File

@ -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. */

View File

@ -23,6 +23,44 @@
#define ICU_FONTINSTANCE
#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.
*/