1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 00:03:11 +01:00

Merge pull request #12785 from Gymnasiast/refactor/text-drawing

Start removal of gfx_draw_string_*()
This commit is contained in:
Michael Steenbeek
2020-08-26 22:51:39 +02:00
committed by GitHub
5 changed files with 57 additions and 41 deletions

View File

@@ -669,7 +669,7 @@ static void window_finances_summary_paint(rct_window* w, rct_drawpixelinfo* dpi)
auto screenCoords = w->windowPos + ScreenCoordsXY{ 8, 51 }; auto screenCoords = w->windowPos + ScreenCoordsXY{ 8, 51 };
// Expenditure / Income heading // 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; screenCoords.y += 14;
// Expenditure / Income row labels // Expenditure / Income row labels
@@ -755,9 +755,10 @@ static void window_finances_summary_scrollpaint(rct_window* w, rct_drawpixelinfo
auto ft = Formatter::Common(); auto ft = Formatter::Common();
ft.Add<rct_string_id>(STR_FINANCES_SUMMARY_MONTH_HEADING); ft.Add<rct_string_id>(STR_FINANCES_SUMMARY_MONTH_HEADING);
ft.Add<uint16_t>(monthyear); ft.Add<uint16_t>(monthyear);
draw_string_right_underline( DrawTextBasic(
dpi, monthyear == currentMonthYear ? STR_WINDOW_COLOUR_2_STRINGID : STR_BLACK_STRING, gCommonFormatArgs, dpi, screenCoords + ScreenCoordsXY{ EXPENDITURE_COLUMN_WIDTH, 0 },
COLOUR_BLACK, 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; screenCoords.y += 14;
// Month expenditures // Month expenditures

View File

@@ -13,6 +13,7 @@
#include "../common.h" #include "../common.h"
#include "../interface/Colour.h" #include "../interface/Colour.h"
#include "../interface/ZoomLevel.hpp" #include "../interface/ZoomLevel.hpp"
#include "Text.h"
#include <optional> #include <optional>
#include <vector> #include <vector>
@@ -648,24 +649,23 @@ void FASTCALL gfx_draw_sprite_raw_masked_software(
// string // string
void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t colour, const ScreenCoordsXY& coords); void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t colour, const ScreenCoordsXY& coords);
/** @deprecated */
void gfx_draw_string_left( void gfx_draw_string_left(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords);
/** @deprecated */
void gfx_draw_string_centred( void gfx_draw_string_centred(
rct_drawpixelinfo* dpi, rct_string_id format, const ScreenCoordsXY& coords, uint8_t colour, const void* args); rct_drawpixelinfo* dpi, rct_string_id format, const ScreenCoordsXY& coords, uint8_t colour, const void* args);
/** @deprecated */
void gfx_draw_string_right( void gfx_draw_string_right(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords); rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords);
void draw_string_left_underline( /** @deprecated */
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);
void gfx_draw_string_left_clipped( void gfx_draw_string_left_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); 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( void gfx_draw_string_centred_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); 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( void gfx_draw_string_right_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width); rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width);

View File

@@ -115,18 +115,25 @@ static void DrawText(
DrawText(dpi, coords, paint, buffer); DrawText(dpi, coords, paint, buffer);
} }
static void DrawTextCompat( void DrawTextBasic(
rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const void* args, uint8_t colour, rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const void* args, colour_t colour,
TextAlignment alignment, bool underline = false) TextAlignment alignment, bool underline)
{ {
TextPaint textPaint = { colour, FONT_SPRITE_BASE_MEDIUM, underline, alignment }; TextPaint textPaint = { colour, FONT_SPRITE_BASE_MEDIUM, underline, alignment };
gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM;
DrawText(dpi, coords, textPaint, format, args); DrawText(dpi, coords, textPaint, format, args);
} }
static void DrawTextEllipsisedCompat( void DrawTextBasic(
rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, int32_t width, rct_string_id format, void* args, uint8_t colour, rct_drawpixelinfo* dpi, const ScreenCoordsXY& coords, rct_string_id format, const Formatter& ft, colour_t colour,
TextAlignment alignment, bool underline = false) 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 }; TextPaint textPaint = { colour, FONT_SPRITE_BASE_MEDIUM, underline, alignment };
gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM;
@@ -138,6 +145,13 @@ static void DrawTextEllipsisedCompat(
DrawText(dpi, coords, textPaint, buffer); 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) void gfx_draw_string(rct_drawpixelinfo* dpi, const_utf8string buffer, uint8_t colour, const ScreenCoordsXY& coords)
{ {
TextPaint textPaint = { colour, gCurrentFontSpriteBase, false, TextAlignment::LEFT }; 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( void gfx_draw_string_left(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) 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( void gfx_draw_string_centred(
rct_drawpixelinfo* dpi, rct_string_id format, const ScreenCoordsXY& coords, uint8_t colour, const void* args) 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( void gfx_draw_string_right(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords) rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords)
{ {
DrawTextCompat(dpi, coords, format, args, colour, TextAlignment::RIGHT); DrawTextBasic(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);
} }
// Ellipsised // Ellipsised
void gfx_draw_string_left_clipped( void gfx_draw_string_left_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) 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( void gfx_draw_string_centred_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) 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( void gfx_draw_string_right_clipped(
rct_drawpixelinfo* dpi, rct_string_id format, void* args, uint8_t colour, const ScreenCoordsXY& coords, int32_t width) 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 // Wrapping

View File

@@ -13,6 +13,7 @@
struct ScreenCoordsXY; struct ScreenCoordsXY;
struct rct_drawpixelinfo; struct rct_drawpixelinfo;
class Formatter;
enum class TextAlignment enum class TextAlignment
{ {
@@ -48,3 +49,16 @@ public:
int32_t GetWidth(); int32_t GetWidth();
int32_t GetLineCount(); 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);

View File

@@ -107,6 +107,11 @@ public:
return CurrentBuf; return CurrentBuf;
} }
auto GetStartBuf() const
{
return StartBuf;
}
void Increment(size_t count) void Increment(size_t count)
{ {
CurrentBuf += count; CurrentBuf += count;