diff --git a/src/openrct2/drawing/Text.cpp b/src/openrct2/drawing/Text.cpp new file mode 100644 index 0000000000..3cbe403b2a --- /dev/null +++ b/src/openrct2/drawing/Text.cpp @@ -0,0 +1,262 @@ +#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#include "Text.h" + +extern "C" +{ + #include "../localisation/localisation.h" +} + +static TextPaint _legacyPaint; + +void drawText(rct_drawpixelinfo *dpi, float x, float y, TextPaint *paint, utf8string text); +void drawText(rct_drawpixelinfo *dpi, float x, float y, TextPaint *paint, rct_string_id format, void *args); + +StaticLayout::StaticLayout(utf8string source, TextPaint paint, sint32 width) +{ + _buffer = source; + _paint = paint; + + sint32 fontSpriteBase; + + gCurrentFontSpriteBase = paint.spriteBase; + _maxWidth = gfx_wrap_string(_buffer, width, &_lineCount, &fontSpriteBase); + _lineCount += 1; + _lineHeight = font_get_line_height(fontSpriteBase); +} + +void StaticLayout::Draw(rct_drawpixelinfo *dpi, float x, float y) +{ + gCurrentFontFlags = 0; + gCurrentFontSpriteBase = _paint.spriteBase; + + TextPaint tempPaint = _paint; + + gCurrentFontFlags = 0; + sint32 lineY = y; + sint32 lineX = x; + switch (_paint.alignment) { + case TextAlignment::LEFT: + lineX = x; + break; + case TextAlignment::CENTRE: + lineX = x + _maxWidth / 2; + break; + case TextAlignment::RIGHT: + lineX = x + _maxWidth; + break; + } + utf8 *buffer = _buffer; + for (sint32 line = 0; line < _lineCount; ++line) { + drawText(dpi, lineX, lineY, &tempPaint, buffer); + tempPaint.colour = TEXT_COLOUR_254; + buffer = get_string_end(buffer) + 1; + lineY += _lineHeight; + } +} + +sint32 StaticLayout::GetHeight() +{ + return _lineHeight * _lineCount; +} + +sint32 StaticLayout::GetWidth() +{ + return _maxWidth; +} + +sint32 StaticLayout::GetLineCount() +{ + return _lineCount; +} + + +void drawText(rct_drawpixelinfo *dpi, float x, float y, TextPaint *paint, utf8string text) +{ + + sint32 width = gfx_get_string_width(text); + + switch (paint->alignment) { + case TextAlignment::LEFT: + break; + case TextAlignment::CENTRE: + x -= width / 2; + break; + case TextAlignment::RIGHT: + x -= width; + break; + } + + ttf_draw_string(dpi, text, paint->colour, x, y); + + if (paint->underlineText) { + gfx_fill_rect(dpi, x, y + 11, x + width, y + 11, text_palette[1]); + if (text_palette[2] != 0) + gfx_fill_rect(dpi, x + 1, y + 12, x + width + 1, y + 12, text_palette[2]); + } +} + +void drawText(rct_drawpixelinfo *dpi, float x, float y, TextPaint *paint, rct_string_id format, void *args) +{ + + utf8 buffer[256]; + + format_string(buffer, sizeof(buffer), format, args); + drawText(dpi, x, y, paint, buffer); +} + +static void +drawTextCompat(rct_drawpixelinfo *dpi, sint32 x, sint32 y, rct_string_id format, void *args, uint8 colour, + TextAlignment alignment, bool underline = false) +{ + _legacyPaint.underlineText = underline; + _legacyPaint.colour = colour; + _legacyPaint.alignment = alignment; + _legacyPaint.spriteBase = FONT_SPRITE_BASE_MEDIUM; + gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; + drawText(dpi, x, y, &_legacyPaint, format, args); +} + +static void +drawTextEllipsisedCompat(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 width, rct_string_id format, void *args, + uint8 colour, + TextAlignment alignment, bool underline = false) +{ + _legacyPaint.underlineText = underline; + _legacyPaint.colour = colour; + _legacyPaint.alignment = alignment; + _legacyPaint.spriteBase = FONT_SPRITE_BASE_MEDIUM; + gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; + + utf8 buffer[256]; + format_string(buffer, sizeof(buffer), format, args); + gfx_clip_string(buffer, width); + + drawText(dpi, x, y, &_legacyPaint, buffer); +} + +extern "C" { +void gfx_draw_string(rct_drawpixelinfo *dpi, char *buffer, uint8 colour, sint32 x, sint32 y) +{ + _legacyPaint.underlineText = false; + _legacyPaint.colour = colour; + _legacyPaint.alignment = TextAlignment::LEFT; + _legacyPaint.spriteBase = gCurrentFontSpriteBase; + drawText(dpi, x, y, &_legacyPaint, buffer); +} + +// Basic + +void gfx_draw_string_left(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::LEFT); +} + +void +gfx_draw_string_centred(rct_drawpixelinfo *dpi, rct_string_id format, sint32 x, sint32 y, uint8 colour, void *args) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::CENTRE); +} + +void +gfx_draw_string_right(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::RIGHT); +} + +// Underline + +void draw_string_left_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, + sint32 y) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::LEFT, true); +} + +void draw_string_centred_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, + sint32 y) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::CENTRE, true); +} + +void draw_string_right_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, + sint32 y) +{ + drawTextCompat(dpi, x, y, format, args, colour, TextAlignment::RIGHT, true); +} + +// Ellipsised + +void gfx_draw_string_left_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, + sint32 y, sint32 width) +{ + drawTextEllipsisedCompat(dpi, x, y, width, format, args, colour, TextAlignment::LEFT); +} + +void gfx_draw_string_centred_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, + sint32 y, sint32 width) +{ + drawTextEllipsisedCompat(dpi, x, y, width, format, args, colour, TextAlignment::CENTRE); +} + +// Wrapping + +sint32 +gfx_draw_string_left_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, + uint8 colour) +{ + utf8 buffer[256]; + format_string(buffer, sizeof(buffer), format, args); + + _legacyPaint.underlineText = false; + _legacyPaint.colour = colour; + _legacyPaint.alignment = TextAlignment::LEFT; + _legacyPaint.spriteBase = gCurrentFontSpriteBase; + + auto layout = StaticLayout(buffer, _legacyPaint, width); + layout.Draw(dpi, x, y); + + return layout.GetHeight(); +} + +sint32 gfx_draw_string_centred_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, + rct_string_id format, uint8 colour) +{ + utf8 buffer[256]; + format_string(buffer, sizeof(buffer), format, args); + + if (gCurrentFontSpriteBase >= 0) { + gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; + } + + _legacyPaint.underlineText = false; + _legacyPaint.colour = colour; + _legacyPaint.alignment = TextAlignment::CENTRE; + _legacyPaint.spriteBase = gCurrentFontSpriteBase; + + auto layout = StaticLayout(buffer, _legacyPaint, width); + + // The original tried to vertically centre the text, but used line count - 1 + sint32 lineCount = layout.GetLineCount(); + sint32 lineHeight = layout.GetHeight() / lineCount; + sint32 yOffset = (lineCount - 1) * lineHeight / 2; + + layout.Draw(dpi, x - layout.GetWidth() / 2, y - yOffset); + + return layout.GetHeight(); +} + +} diff --git a/src/openrct2/drawing/Text.h b/src/openrct2/drawing/Text.h new file mode 100644 index 0000000000..18372bfb2b --- /dev/null +++ b/src/openrct2/drawing/Text.h @@ -0,0 +1,55 @@ +#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#pragma once + +#include "../common.h" + +extern "C" { + #include "drawing.h" +} + +enum class TextAlignment +{ + LEFT, + CENTRE, + RIGHT +}; + +struct TextPaint +{ + uint8 colour; + sint16 spriteBase; + bool underlineText; + TextAlignment alignment; +}; + +class StaticLayout +{ +private: + utf8string _buffer; + TextPaint _paint; + sint32 _lineCount; + sint32 _lineHeight; + sint32 _maxWidth; + +public: + StaticLayout(utf8string source, TextPaint paint, sint32 width); + void Draw(rct_drawpixelinfo *dpi, float x, float y); + sint32 GetHeight(); + sint32 GetWidth(); + sint32 GetLineCount(); +}; diff --git a/src/openrct2/drawing/drawing.h b/src/openrct2/drawing/drawing.h index 9c87ec34cb..719ab1e7da 100644 --- a/src/openrct2/drawing/drawing.h +++ b/src/openrct2/drawing/drawing.h @@ -343,28 +343,34 @@ void FASTCALL gfx_draw_sprite_palette_set_software(rct_drawpixelinfo *dpi, sint3 void FASTCALL gfx_draw_sprite_raw_masked_software(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 maskImage, sint32 colourImage); // string -sint32 clip_text(char *buffer, sint32 width); +void gfx_draw_string(rct_drawpixelinfo *dpi, char *buffer, uint8 colour, sint32 x, sint32 y); + +void gfx_draw_string_left(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y); +void gfx_draw_string_centred(rct_drawpixelinfo *dpi, rct_string_id format, sint32 x, sint32 y, uint8 colour, void *args); +void gfx_draw_string_right(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y); + +void draw_string_left_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y); +void draw_string_centred_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y); +void draw_string_right_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y); + +void gfx_draw_string_left_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y, sint32 width); +void gfx_draw_string_centred_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, uint8 colour, sint32 x, sint32 y, sint32 width); + +sint32 gfx_draw_string_left_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, uint8 colour); +sint32 gfx_draw_string_centred_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, uint8 colour); + +void gfx_draw_string_left_centred(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); +void draw_string_centred_raw(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 numLines, char *text); +void gfx_draw_string_centred_wrapped_partial(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 width, sint32 colour, rct_string_id format, void *args, sint32 ticks); +void gfx_draw_string_with_y_offsets(rct_drawpixelinfo *dpi, const utf8 *text, sint32 colour, sint32 x, sint32 y, const sint8 *yOffsets, bool forceSpriteFont); + sint32 gfx_wrap_string(char* buffer, sint32 width, sint32* num_lines, sint32* font_height); sint32 gfx_get_string_width(const utf8 * buffer); sint32 gfx_get_string_width_new_lined(char* buffer); -void gfx_draw_string(rct_drawpixelinfo *dpi, char *buffer, sint32 colour, sint32 x, sint32 y); -void gfx_draw_string_left(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); -void gfx_draw_string_left_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y, sint32 width); -sint32 gfx_draw_string_left_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, sint32 colour); -void draw_string_left_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); -void gfx_draw_string_left_centred(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); -void gfx_draw_string_centred(rct_drawpixelinfo *dpi, rct_string_id format, sint32 x, sint32 y, sint32 colour, void *args); -void gfx_draw_string_centred_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y, sint32 width); -void draw_string_centred_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); -sint32 gfx_draw_string_centred_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, sint32 colour); -void draw_string_centred_raw(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 numLines, char *text); -void gfx_draw_string_right(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); -void draw_string_right_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y); sint32 string_get_height_raw(char *buffer); -void gfx_draw_string_centred_wrapped_partial(rct_drawpixelinfo *dpi, sint32 x, sint32 y, sint32 width, sint32 colour, rct_string_id format, void *args, sint32 ticks); -void gfx_draw_string_with_y_offsets(rct_drawpixelinfo *dpi, const utf8 *text, sint32 colour, sint32 x, sint32 y, const sint8 *yOffsets, bool forceSpriteFont); sint32 gfx_clip_string(char* buffer, sint32 width); void shorten_path(utf8 *buffer, size_t bufferSize, const utf8 *path, sint32 availableWidth); +void ttf_draw_string(rct_drawpixelinfo *dpi, char *text, sint32 colour, sint32 x, sint32 y); typedef struct paint_session paint_session; diff --git a/src/openrct2/drawing/string.c b/src/openrct2/drawing/string.c index 1dc93ebc63..f302b3a3b7 100644 --- a/src/openrct2/drawing/string.c +++ b/src/openrct2/drawing/string.c @@ -33,7 +33,6 @@ enum { }; static sint32 ttf_get_string_width(const utf8 *text); -static void ttf_draw_string(rct_drawpixelinfo *dpi, char *buffer, sint32 colour, sint32 x, sint32 y); /** * @@ -211,202 +210,6 @@ sint32 gfx_wrap_string(utf8 *text, sint32 width, sint32 *outNumLines, sint32 *ou return maxWidth == 0 ? lineWidth : maxWidth; } -/** - * Draws i formatted text string left aligned at i specified position but clips - * the text with an ellipsis if the text width exceeds the specified width. - * rct2: 0x006C1B83 - * dpi (edi) - * format (bx) - * args (esi) - * colour (al) - * x (cx) - * y (dx) - * width (bp) - */ -void gfx_draw_string_left_clipped(rct_drawpixelinfo* dpi, rct_string_id format, void* args, sint32 colour, sint32 x, sint32 y, sint32 width) -{ - char* buffer = gCommonStringFormatBuffer; - format_string(buffer, 256, format, args); - - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - - // Clip text - return value is not needed - gfx_clip_string(buffer, width); - - gfx_draw_string(dpi, buffer, colour, x, y); -} - -/** - * Draws i formatted text string centred at i specified position but clips the - * text with an ellipsis if the text width exceeds the specified width. - * rct2: 0x006C1BBA - * dpi (edi) - * format (bx) - * args (esi) - * colour (al) - * x (cx) - * y (dx) - * width (bp) - */ -void gfx_draw_string_centred_clipped(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y, sint32 width) -{ - char* buffer = gCommonStringFormatBuffer; - format_string(buffer, 256, format, args); - - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - - // Clip text - sint32 text_width = gfx_clip_string(buffer, width); - - // Draw the text centred - if (text_width <= 0xFFFF && text_width >= 0) { - x -= (text_width - 1) / 2; - gfx_draw_string(dpi, buffer, colour, x, y); - } else { - log_warning("improper text width %d for string %s", text_width, buffer); - } -} - -/** - * Draws i formatted text string right aligned. - * rct2: 0x006C1BFC - * dpi (edi) - * format (bx) - * args (esi) - * colour (al) - * x (cx) - * y (dx) - */ -void gfx_draw_string_right(rct_drawpixelinfo* dpi, rct_string_id format, void* args, sint32 colour, sint32 x, sint32 y) -{ - char* buffer = gCommonStringFormatBuffer; - format_string(buffer, 256, format, args); - - // Measure text width - sint16 text_width = gfx_get_string_width(buffer); - - // Draw the text right aligned - x -= text_width; - gfx_draw_string(dpi, buffer, colour, x, y); -} - -/** - * Draws i formatted text string centred at i specified position. - * rct2: 0x006C1D6C - * dpi (edi) - * format (bx) - * x (cx) - * y (dx) - * colour (al) - * args (esi) - */ -void gfx_draw_string_centred(rct_drawpixelinfo *dpi, rct_string_id format, sint32 x, sint32 y, sint32 colour, void *args) -{ - gfx_draw_string_centred_wrapped(dpi, args, x, y, INT32_MAX, format, colour); -} - -/** - * - * rct2: 0x006C1E53 - * dpi (edi) - * args (esi) - * x (cx) - * y (dx) - * width (bp) - * colour (al) - * format (ebx) - */ -sint32 gfx_draw_string_centred_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, sint32 colour) -{ - sint32 font_height, line_height, line_y, num_lines; - - if (gCurrentFontSpriteBase >= 0) { - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - } - - char *buffer = gCommonStringFormatBuffer; - gfx_draw_string(dpi, "", colour, dpi->x, dpi->y); - format_string(buffer, 256, format, args); - - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - - gfx_wrap_string(buffer, width, &num_lines, &font_height); - line_height = font_get_line_height(font_height); - - if (*buffer == FORMAT_OUTLINE) { - line_height = line_height + 1; - } - - font_height = (line_height / 2) * num_lines; - line_y = y - font_height; - - gCurrentFontFlags = 0; - - for (sint32 line = 0; line <= num_lines; ++line) { - sint32 half_width = gfx_get_string_width(buffer) / 2; - gfx_draw_string(dpi, buffer, TEXT_COLOUR_254, x - half_width, line_y); - - buffer = get_string_end(buffer) + 1; - line_y += line_height; - } - - return line_y - y; -} - -/** - * - * rct2: 0x006C2105 - * dpi (edi) - * args (esi) - * x (cx) - * y (dx) - * width (bp) - * format (bx) - * colour (al) - */ -sint32 gfx_draw_string_left_wrapped(rct_drawpixelinfo *dpi, void *args, sint32 x, sint32 y, sint32 width, rct_string_id format, sint32 colour) -{ - // font height might actually be something else - sint32 fontSpriteBase, lineHeight, lineY, numLines; - - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - - char *buffer = gCommonStringFormatBuffer; - gfx_draw_string(dpi, "", colour, dpi->x, dpi->y); - format_string(buffer, 256, format, args); - - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - gfx_wrap_string(buffer, width, &numLines, &fontSpriteBase); - lineHeight = font_get_line_height(fontSpriteBase); - - gCurrentFontFlags = 0; - lineY = y; - for (sint32 line = 0; line <= numLines; ++line) { - gfx_draw_string(dpi, buffer, TEXT_COLOUR_254, x, lineY); - buffer = get_string_end(buffer) + 1; - lineY += lineHeight; - } - return lineY - y; -} - -/** - * Draws i formatted text string. - * rct2: 0x006C1B2F - * dpi (edi) - * format (bx) - * args (esi) - * colour (al) - * x (cx) - * y (dx) - */ -void gfx_draw_string_left(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y) -{ - char* buffer = gCommonStringFormatBuffer; - format_string(buffer, 256, format, args); - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - gfx_draw_string(dpi, buffer, colour, x, y); -} - /** * Draws text that is left aligned and vertically centred. */ @@ -459,64 +262,6 @@ static void colour_char_window(uint8 colour, uint16* current_font_flags,uint8* p palette_pointer[4] = (eax >> 24) & 0xFF; } -/** - * - * rct2: 0x00682702 - * dpi (edi) - * buffer (esi) - * colour (al) - * x (cx) - * y (dx) - */ -void gfx_draw_string(rct_drawpixelinfo *dpi, char *buffer, sint32 colour, sint32 x, sint32 y) -{ - ttf_draw_string(dpi, buffer, colour, x, y); -} - -void draw_string_left_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y) -{ - char buffer[128]; - sint32 width; - - format_string(buffer, 128, format, args); - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - width = gfx_get_string_width(buffer); - gfx_draw_string(dpi, buffer, colour, x, y); - gfx_fill_rect(dpi, x, y + 11, x + width, y + 11, text_palette[1]); - if (text_palette[2] != 0) - gfx_fill_rect(dpi, x + 1, y + 12, x + width + 1, y + 12, text_palette[2]); -} - -void draw_string_right_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y) -{ - char buffer[128]; - sint32 width; - - format_string(buffer, 128, format, args); - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - width = gfx_get_string_width(buffer); - x -= width; - gfx_draw_string(dpi, buffer, colour, x, y); - gfx_fill_rect(dpi, x, y + 11, x + width, y + 11, text_palette[1]); - if (text_palette[2] != 0) - gfx_fill_rect(dpi, x + 1, y + 12, x + width + 1, y + 12, text_palette[2]); -} - -void draw_string_centred_underline(rct_drawpixelinfo *dpi, rct_string_id format, void *args, sint32 colour, sint32 x, sint32 y) -{ - char buffer[128]; - sint32 width; - - format_string(buffer, 128, format, args); - gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; - width = gfx_get_string_width(buffer); - x -= width / 2; - gfx_draw_string(dpi, buffer, colour, x, y); - gfx_fill_rect(dpi, x, y + 11, x + width, y + 11, text_palette[1]); - if (text_palette[2] != 0) - gfx_fill_rect(dpi, x + 1, y + 12, x + width + 1, y + 12, text_palette[2]); -} - /** * * rct2: 0x006C1DB7 @@ -1033,7 +778,7 @@ static void ttf_process_initial_colour(sint32 colour, text_draw_info *info) } } -static void ttf_draw_string(rct_drawpixelinfo *dpi, char *text, sint32 colour, sint32 x, sint32 y) +void ttf_draw_string(rct_drawpixelinfo *dpi, char *text, sint32 colour, sint32 x, sint32 y) { if (text == NULL) return;