From 883845bcf9dd2e898c7746ea4ef5095ed57ba693 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 11 Apr 2025 20:39:26 +0200 Subject: [PATCH] Use larger cross glyph for close button when title bar is enlarged --- src/openrct2-ui/interface/Widget.h | 27 ++++++++++++++-------- src/openrct2-ui/scripting/CustomWindow.cpp | 10 ++++---- src/openrct2/interface/Widget.h | 7 +++++- src/openrct2/interface/WindowBase.cpp | 7 ++++++ 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/openrct2-ui/interface/Widget.h b/src/openrct2-ui/interface/Widget.h index 1404c9108a..6ef59f8c18 100644 --- a/src/openrct2-ui/interface/Widget.h +++ b/src/openrct2-ui/interface/Widget.h @@ -15,18 +15,25 @@ #include #include +// clang-format off +#define WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, CLOSE_STR) \ + { WindowWidgetType::Frame, 0, 0, WIDTH - 1, 0, HEIGHT - 1, 0xFFFFFFFF, kStringIdNone }, \ + { WindowWidgetType::Caption, 0, 1, WIDTH - 2, 1, 14, TITLE, STR_WINDOW_TITLE_TIP }, \ + { .type = WindowWidgetType::CloseBox, \ + .colour = 0, \ + .left = WIDTH - 13, \ + .right = WIDTH - 3, \ + .top = 2, \ + .bottom = 13, \ + .string = CLOSE_STR, \ + .tooltip = STR_CLOSE_WINDOW_TIP } + +#define WINDOW_SHIM(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, kCloseBoxStringBlackNormal) +#define WINDOW_SHIM_WHITE(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, kCloseBoxStringWhiteNormal) +// clang-format on + namespace OpenRCT2::Ui { - // clang-format off -#define WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, CLOSE_STR) \ - { WindowWidgetType::Frame, 0, 0, WIDTH - 1, 0, HEIGHT - 1, 0xFFFFFFFF, kStringIdNone }, \ - { WindowWidgetType::Caption, 0, 1, WIDTH - 2, 1, 14, TITLE, STR_WINDOW_TITLE_TIP }, \ - { WindowWidgetType::CloseBox, 0, WIDTH - 13, WIDTH - 3, 2, 13, CLOSE_STR, STR_CLOSE_WINDOW_TIP } - -#define WINDOW_SHIM(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, STR_CLOSE_X) -#define WINDOW_SHIM_WHITE(TITLE, WIDTH, HEIGHT) WINDOW_SHIM_RAW(TITLE, WIDTH, HEIGHT, STR_CLOSE_X_WHITE) - // clang-format on - ImageId GetColourButtonImage(colour_t colour); Widget* GetWidgetByIndex(const WindowBase& w, WidgetIndex widgetIndex); diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 5d220a63cb..b5f856147b 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -21,6 +21,7 @@ #include #include + #include #include #include #include @@ -475,10 +476,11 @@ namespace OpenRCT2::Ui::Windows void OnPrepareDraw() override { - // This has to be called to ensure the window frame is correctly initialised - not doing this will - // cause an assertion to be hit. - ResizeFrameWithPage(); - widgets[WIDX_CLOSE].text = colours[0].hasFlag(ColourFlag::translucent) ? STR_CLOSE_X_WHITE : STR_CLOSE_X; + bool useWhite = colours[0].hasFlag(ColourFlag::translucent); + if (Config::Get().interface.EnlargedUi) + widgets[WIDX_CLOSE].string = !useWhite ? kCloseBoxStringBlackLarge : kCloseBoxStringWhiteLarge; + else + widgets[WIDX_CLOSE].string = !useWhite ? kCloseBoxStringBlackNormal : kCloseBoxStringWhiteNormal; // Having the content panel visible for transparent windows makes the borders darker than they should be // For now just hide it if there are no tabs and the window is not resizable diff --git a/src/openrct2/interface/Widget.h b/src/openrct2/interface/Widget.h index cffcd2f979..e82b526fa3 100644 --- a/src/openrct2/interface/Widget.h +++ b/src/openrct2/interface/Widget.h @@ -68,6 +68,11 @@ namespace OpenRCT2 SCROLL_BOTH = SCROLL_HORIZONTAL | SCROLL_VERTICAL }; + constexpr const char* kCloseBoxStringBlackNormal = u8"{BLACK}❌"; + constexpr const char* kCloseBoxStringBlackLarge = u8"{BLACK}X"; + constexpr const char* kCloseBoxStringWhiteNormal = u8"{WHITE}❌"; + constexpr const char* kCloseBoxStringWhiteLarge = u8"{WHITE}X"; + struct Widget { WindowWidgetType type{}; @@ -81,7 +86,7 @@ namespace OpenRCT2 uint32_t content; ImageId image{}; StringId text; - utf8* string; + const utf8* string; }; StringId tooltip{ kStringIdNone }; diff --git a/src/openrct2/interface/WindowBase.cpp b/src/openrct2/interface/WindowBase.cpp index a042c943ce..99b9c9591d 100644 --- a/src/openrct2/interface/WindowBase.cpp +++ b/src/openrct2/interface/WindowBase.cpp @@ -54,6 +54,13 @@ namespace OpenRCT2 closeButton.left = windowWidth - 3 - closeButtonSize; closeButton.right = windowWidth - 3; } + + // Set appropriate close button + bool useWhite = closeButton.string == kCloseBoxStringWhiteLarge || closeButton.string == kCloseBoxStringWhiteNormal; + if (closeButtonSize == kCloseButtonSizeTouch) + closeButton.string = !useWhite ? kCloseBoxStringBlackLarge : kCloseBoxStringWhiteLarge; + else + closeButton.string = !useWhite ? kCloseBoxStringBlackNormal : kCloseBoxStringWhiteNormal; } void WindowBase::ResizeFrame()