diff --git a/src/openrct2-ui/windows/Finances.cpp b/src/openrct2-ui/windows/Finances.cpp index 43fea6a86c..879fa9025f 100644 --- a/src/openrct2-ui/windows/Finances.cpp +++ b/src/openrct2-ui/windows/Finances.cpp @@ -669,7 +669,7 @@ static void window_finances_summary_paint(rct_window* w, rct_drawpixelinfo* dpi) auto screenCoords = w->windowPos + ScreenCoordsXY{ 8, 51 }; // Expenditure / Income heading - draw_string_left_underline(dpi, STR_FINANCES_SUMMARY_EXPENDITURE_INCOME, nullptr, COLOUR_BLACK, screenCoords); + DrawTextBasic(dpi, screenCoords, STR_FINANCES_SUMMARY_EXPENDITURE_INCOME, nullptr, COLOUR_BLACK, TextAlignment::LEFT, true); screenCoords.y += 14; // Expenditure / Income row labels @@ -755,9 +755,10 @@ static void window_finances_summary_scrollpaint(rct_window* w, rct_drawpixelinfo auto ft = Formatter::Common(); ft.Add(STR_FINANCES_SUMMARY_MONTH_HEADING); ft.Add(monthyear); - draw_string_right_underline( - dpi, monthyear == currentMonthYear ? STR_WINDOW_COLOUR_2_STRINGID : STR_BLACK_STRING, gCommonFormatArgs, - COLOUR_BLACK, screenCoords + ScreenCoordsXY{ EXPENDITURE_COLUMN_WIDTH, 0 }); + DrawTextBasic( + dpi, screenCoords + ScreenCoordsXY{ EXPENDITURE_COLUMN_WIDTH, 0 }, + monthyear == currentMonthYear ? STR_WINDOW_COLOUR_2_STRINGID : STR_BLACK_STRING, ft, COLOUR_BLACK, + TextAlignment::RIGHT, true); screenCoords.y += 14; // Month expenditures diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index 115ee6a4ac..c3c1465048 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -13,6 +13,7 @@ #include "../common.h" #include "../interface/Colour.h" #include "../interface/ZoomLevel.hpp" +#include "Text.h" #include #include @@ -648,24 +649,23 @@ void FASTCALL gfx_draw_sprite_raw_masked_software( // string void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t colour, const ScreenCoordsXY& coords); +/** @deprecated */ void gfx_draw_string_left( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); +/** @deprecated */ void gfx_draw_string_centred( rct_drawpixelinfo* dpi, rct_string_id format, const ScreenCoordsXY& coords, uint8_t colour, const void* args); +/** @deprecated */ void gfx_draw_string_right( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); -void draw_string_left_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); -void draw_string_centred_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); -void draw_string_right_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); - +/** @deprecated */ void gfx_draw_string_left_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); +/** @deprecated */ void gfx_draw_string_centred_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); +/** @deprecated */ void gfx_draw_string_right_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); diff --git a/src/openrct2/drawing/Text.cpp b/src/openrct2/drawing/Text.cpp index 34ae6faaf1..6d8cbd930c 100644 --- a/src/openrct2/drawing/Text.cpp +++ b/src/openrct2/drawing/Text.cpp @@ -115,18 +115,25 @@ static void DrawText( DrawText(dpi, coords, paint, buffer); } -static void DrawTextCompat( - rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const void* args, uint8_t colour, - TextAlignment alignment, bool underline = false) +void DrawTextBasic( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const void* args, colour_t colour, + TextAlignment alignment, bool underline) { TextPaint textPaint = { colour, FONT_SPRITE_BASE_MEDIUM, underline, alignment }; gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; DrawText(dpi, coords, textPaint, format, args); } -static void DrawTextEllipsisedCompat( - rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, void* args, uint8_t colour, - TextAlignment alignment, bool underline = false) +void DrawTextBasic( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const Formatter& ft, colour_t colour, + TextAlignment alignment, bool underline) +{ + return DrawTextBasic(dpi, coords, format, ft.GetStartBuf(), colour, alignment, underline); +} + +void DrawTextEllipsised( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, const void* args, + colour_t colour, TextAlignment alignment, bool underline) { TextPaint textPaint = { colour, FONT_SPRITE_BASE_MEDIUM, underline, alignment }; gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; @@ -138,6 +145,13 @@ static void DrawTextEllipsisedCompat( DrawText(dpi, coords, textPaint, buffer); } +void DrawTextEllipsised( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, const Formatter& ft, + colour_t colour, TextAlignment alignment, bool underline) +{ + return DrawTextEllipsised(dpi, coords, width, format, ft.GetStartBuf(), colour, alignment, underline); +} + void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t colour, const ScreenCoordsXY& coords) { TextPaint textPaint = { colour, gCurrentFontSpriteBase, false, TextAlignment::LEFT }; @@ -148,56 +162,38 @@ void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t co void gfx_draw_string_left( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) { - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::LEFT); + DrawTextBasic(dpi, coords, format, args, colour, TextAlignment::LEFT); } void gfx_draw_string_centred( rct_drawpixelinfo* dpi, rct_string_id format, const ScreenCoordsXY& coords, uint8_t colour, const void* args) { - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::CENTRE); + DrawTextBasic(dpi, coords, format, args, colour, TextAlignment::CENTRE); } void gfx_draw_string_right( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) { - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::RIGHT); -} -// Underline -void draw_string_left_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) -{ - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::LEFT, true); -} - -void draw_string_centred_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) -{ - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::CENTRE, true); -} - -void draw_string_right_underline( - rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) -{ - DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::RIGHT, true); + DrawTextBasic(dpi, coords, format, args, colour, TextAlignment::RIGHT); } // Ellipsised void gfx_draw_string_left_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) { - DrawTextEllipsisedCompat(dpi, coords, width, format, args, colour, TextAlignment::LEFT); + DrawTextEllipsised(dpi, coords, width, format, args, colour, TextAlignment::LEFT); } void gfx_draw_string_centred_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) { - DrawTextEllipsisedCompat(dpi, coords, width, format, args, colour, TextAlignment::CENTRE); + DrawTextEllipsised(dpi, coords, width, format, args, colour, TextAlignment::CENTRE); } void gfx_draw_string_right_clipped( rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) { - DrawTextEllipsisedCompat(dpi, coords, width, format, args, colour, TextAlignment::RIGHT); + DrawTextEllipsised(dpi, coords, width, format, args, colour, TextAlignment::RIGHT); } // Wrapping diff --git a/src/openrct2/drawing/Text.h b/src/openrct2/drawing/Text.h index b668fd284e..577db97a41 100644 --- a/src/openrct2/drawing/Text.h +++ b/src/openrct2/drawing/Text.h @@ -13,6 +13,7 @@ struct ScreenCoordsXY; struct rct_drawpixelinfo; +class Formatter; enum class TextAlignment { @@ -48,3 +49,16 @@ public: int32_t GetWidth(); int32_t GetLineCount(); }; + +void DrawTextBasic( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const Formatter& ft, colour_t colour, + TextAlignment alignment, bool underline = false); +void DrawTextBasic( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const void* args, colour_t colour, + TextAlignment alignment, bool underline = false); +void DrawTextEllipsised( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, const Formatter& ft, + colour_t colour, TextAlignment alignment, bool underline = false); +void DrawTextEllipsised( + rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, const void* args, + colour_t colour, TextAlignment alignment, bool underline = false); diff --git a/src/openrct2/localisation/Localisation.h b/src/openrct2/localisation/Localisation.h index 4277f3295c..72326161d9 100644 --- a/src/openrct2/localisation/Localisation.h +++ b/src/openrct2/localisation/Localisation.h @@ -107,6 +107,11 @@ public: return CurrentBuf; } + auto GetStartBuf() const + { + return StartBuf; + } + void Increment(size_t count) { CurrentBuf += count;