mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r25567) -Codechange: Revive dead DrawStringParams as FontState.
This commit is contained in:
parent
3c0fbaaa13
commit
3fa1b4e8c3
37
src/gfx.cpp
37
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 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);
|
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;
|
static ReusableBuffer<uint8> _cursor_backup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -410,11 +410,11 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
|
||||||
const CharType *buffer_last = lastof(this->buffer);
|
const CharType *buffer_last = lastof(this->buffer);
|
||||||
CharType *buff = this->buffer;
|
CharType *buff = this->buffer;
|
||||||
|
|
||||||
TextColour cur_colour = colour, prev_colour = colour;
|
FontState state(colour, fontsize);
|
||||||
WChar c = 0;
|
WChar c = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Font *f = new Font(fontsize, cur_colour);
|
Font *f = new Font(state.fontsize, state.cur_colour);
|
||||||
CharType *buff_begin = buff;
|
CharType *buff_begin = buff;
|
||||||
FontMap fontMapping;
|
FontMap fontMapping;
|
||||||
|
|
||||||
|
@ -428,14 +428,13 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
|
||||||
if (c == '\0' || c == '\n') {
|
if (c == '\0' || c == '\n') {
|
||||||
break;
|
break;
|
||||||
} else if (c >= SCC_BLUE && c <= SCC_BLACK) {
|
} else if (c >= SCC_BLUE && c <= SCC_BLACK) {
|
||||||
prev_colour = cur_colour;
|
state.SetColour((TextColour)(c - SCC_BLUE));
|
||||||
cur_colour = (TextColour)(c - SCC_BLUE);
|
|
||||||
} else if (c == SCC_PREVIOUS_COLOUR) { // Revert to the previous colour.
|
} else if (c == SCC_PREVIOUS_COLOUR) { // Revert to the previous colour.
|
||||||
Swap(prev_colour, cur_colour);
|
state.SetPreviousColour();
|
||||||
} else if (c == SCC_TINYFONT) {
|
} else if (c == SCC_TINYFONT) {
|
||||||
fontsize = FS_SMALL;
|
state.SetFontSize(FS_SMALL);
|
||||||
} else if (c == SCC_BIGFONT) {
|
} else if (c == SCC_BIGFONT) {
|
||||||
fontsize = FS_LARGE;
|
state.SetFontSize(FS_LARGE);
|
||||||
} else {
|
} else {
|
||||||
buff += AppendToBuffer(buff, buffer_last, c);
|
buff += AppendToBuffer(buff, buffer_last, c);
|
||||||
continue;
|
continue;
|
||||||
|
@ -447,7 +446,7 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi
|
||||||
} else {
|
} else {
|
||||||
delete f;
|
delete f;
|
||||||
}
|
}
|
||||||
f = new Font(fontsize, cur_colour);
|
f = new Font(state.fontsize, state.cur_colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Better safe than sorry. */
|
/* Better safe than sorry. */
|
||||||
|
|
|
@ -23,6 +23,44 @@
|
||||||
#define ICU_FONTINSTANCE
|
#define ICU_FONTINSTANCE
|
||||||
#endif /* WITH_ICU */
|
#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.
|
* Container with information about a font.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue