diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index cc0dc13c37..ec05c08c7f 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -129,6 +129,8 @@ public: return TitleMenuOpen(); case WindowClass::TitleOptions: return TitleOptionsOpen(); + case WindowClass::TitleVersion: + return TitleVersionOpen(); case WindowClass::TopToolbar: return TopToolbarOpen(); case WindowClass::ViewClipping: diff --git a/src/openrct2-ui/input/Shortcuts.cpp b/src/openrct2-ui/input/Shortcuts.cpp index 9fd1832e24..692a6247a2 100644 --- a/src/openrct2-ui/input/Shortcuts.cpp +++ b/src/openrct2-ui/input/Shortcuts.cpp @@ -155,7 +155,7 @@ static void ShortcutRemoveTopBottomToolbarToggle() WindowCloseByClass(WindowClass::TitleOptions); WindowCloseByClass(WindowClass::TitleMenu); WindowCloseByClass(WindowClass::TitleExit); - TitleSetHideVersionInfo(true); + WindowCloseByClass(WindowClass::TitleVersion); } else { diff --git a/src/openrct2-ui/libopenrct2ui.vcxproj b/src/openrct2-ui/libopenrct2ui.vcxproj index 9c6aeaafc4..a46933ff85 100644 --- a/src/openrct2-ui/libopenrct2ui.vcxproj +++ b/src/openrct2-ui/libopenrct2ui.vcxproj @@ -217,6 +217,7 @@ + diff --git a/src/openrct2-ui/windows/TitleVersion.cpp b/src/openrct2-ui/windows/TitleVersion.cpp new file mode 100644 index 0000000000..4474219f3f --- /dev/null +++ b/src/openrct2-ui/windows/TitleVersion.cpp @@ -0,0 +1,58 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +namespace OpenRCT2::Ui::Windows +{ + static constexpr int32_t WW = 500; + static constexpr int32_t WH = 30; + + static Widget _widgets[] = { + kWidgetsEnd, + }; + + class TitleVersionWindow final : public Window + { + void OnOpen() override + { + widgets = _widgets; + } + + void OnDraw(DrawPixelInfo& dpi) override + { + // Write name and version information + const auto whiteOutline = ColourWithFlags{ COLOUR_WHITE }.withFlag(ColourFlag::withOutline, true); + DrawText(dpi, windowPos, { whiteOutline }, gVersionInfoFull); + width = GfxGetStringWidth(gVersionInfoFull, FontStyle::Medium); + + // Write platform information + constexpr const char platformInfo[] = OPENRCT2_PLATFORM " (" OPENRCT2_ARCHITECTURE ")"; + DrawText(dpi, windowPos + ScreenCoordsXY(0, kListRowHeight), { whiteOutline }, platformInfo); + width = std::max(width, GfxGetStringWidth(platformInfo, FontStyle::Medium)); + } + }; + + WindowBase* TitleVersionOpen() + { + auto* window = WindowBringToFrontByClass(WindowClass::TitleVersion); + if (window == nullptr) + { + window = WindowCreate( + WindowClass::TitleVersion, ScreenCoordsXY(8, ContextGetHeight() - 30), WW, WH, + WF_STICK_TO_BACK | WF_TRANSPARENT); + } + return window; + } +} // namespace OpenRCT2::Ui::Windows diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index 95e861019d..48d6394636 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -75,6 +75,7 @@ namespace OpenRCT2::Ui::Windows WindowBase* TitleLogoOpen(); WindowBase* TitleMenuOpen(); WindowBase* TitleOptionsOpen(); + WindowBase* TitleVersionOpen(); WindowBase* ViewportOpen(); WindowBase* WaterOpen(); WindowBase* ViewClippingOpen(); diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index da472130c3..19f9e0bb48 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -1389,6 +1389,10 @@ void WindowResizeGui(int32_t width, int32_t height) titleWind->windowPos.y = height - 182; } + WindowBase* versionWind = WindowFindByClass(WindowClass::TitleVersion); + if (versionWind != nullptr) + versionWind->windowPos.y = height - 30; + WindowBase* exitWind = WindowFindByClass(WindowClass::TitleExit); if (exitWind != nullptr) { diff --git a/src/openrct2/interface/WindowClasses.h b/src/openrct2/interface/WindowClasses.h index 30f4e81f1e..7da1b0f756 100644 --- a/src/openrct2/interface/WindowClasses.h +++ b/src/openrct2/interface/WindowClasses.h @@ -89,6 +89,7 @@ enum class WindowClass : uint8_t AssetPacks = 135, ResetShortcutKeysPrompt = 136, ProgressWindow = 137, + TitleVersion = 138, // Only used for colour schemes Staff = 220, diff --git a/src/openrct2/paint/Painter.cpp b/src/openrct2/paint/Painter.cpp index 791d4ab4af..9120a14ec1 100644 --- a/src/openrct2/paint/Painter.cpp +++ b/src/openrct2/paint/Painter.cpp @@ -56,11 +56,6 @@ void Painter::Paint(IDrawingEngine& de) UpdatePaletteEffects(); _uiContext->Draw(*dpi); - if ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) && !TitleShouldHideVersionInfo()) - { - DrawOpenRCT2(*dpi, { 0, _uiContext->GetHeight() - 20 }); - } - GfxDrawPickedUpPeep(*dpi); GfxInvalidatePickedUpPeep(); @@ -106,13 +101,10 @@ void Painter::PaintReplayNotice(DrawPixelInfo& dpi, const char* text) static bool ShouldShowFPS() { - if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO && !TitleShouldHideVersionInfo()) + if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) return true; - if (!WindowFindByClass(WindowClass::TopToolbar)) - return false; - - return true; + return WindowFindByClass(WindowClass::TopToolbar); } void Painter::PaintFPS(DrawPixelInfo& dpi) diff --git a/src/openrct2/scenes/title/TitleScene.cpp b/src/openrct2/scenes/title/TitleScene.cpp index 99a1b61afd..35cf181096 100644 --- a/src/openrct2/scenes/title/TitleScene.cpp +++ b/src/openrct2/scenes/title/TitleScene.cpp @@ -15,7 +15,6 @@ #include "../../GameState.h" #include "../../Input.h" #include "../../OpenRCT2.h" -#include "../../Version.h" #include "../../audio/audio.h" #include "../../config/Config.h" #include "../../core/Console.hpp" @@ -91,16 +90,6 @@ bool TitleScene::IsPreviewingSequence() return _previewingSequence; } -bool TitleScene::ShouldHideVersionInfo() -{ - return _hideVersionInfo; -} - -void TitleScene::SetHideVersionInfo(bool value) -{ - _hideVersionInfo = value; -} - void TitleScene::Load() { LOG_VERBOSE("TitleScene::Load()"); @@ -210,8 +199,8 @@ void TitleScene::CreateWindows() ContextOpenWindow(WindowClass::TitleExit); ContextOpenWindow(WindowClass::TitleOptions); ContextOpenWindow(WindowClass::TitleLogo); + ContextOpenWindow(WindowClass::TitleVersion); WindowResizeGui(ContextGetWidth(), ContextGetHeight()); - _hideVersionInfo = false; } void TitleScene::TitleInitialise() @@ -370,27 +359,6 @@ void TitleSequenceChangePreset(size_t preset) } } -bool TitleShouldHideVersionInfo() -{ - auto* context = OpenRCT2::GetContext(); - auto* titleScene = static_cast(context->GetTitleScene()); - if (titleScene != nullptr) - { - return titleScene->ShouldHideVersionInfo(); - } - return false; -} - -void TitleSetHideVersionInfo(bool value) -{ - auto* context = OpenRCT2::GetContext(); - auto* titleScene = static_cast(context->GetTitleScene()); - if (titleScene != nullptr) - { - titleScene->SetHideVersionInfo(value); - } -} - size_t TitleGetConfigSequence() { return TitleSequenceManagerGetIndexForConfigID(Config::Get().interface.CurrentTitleSequencePreset.c_str()); @@ -438,30 +406,3 @@ bool TitleIsPreviewingSequence() } return false; } - -void DrawOpenRCT2(DrawPixelInfo& dpi, const ScreenCoordsXY& screenCoords) -{ - thread_local std::string buffer; - buffer.clear(); - buffer.assign("{OUTLINE}{WHITE}"); - - // Write name and version information - buffer += gVersionInfoFull; - - DrawText(dpi, screenCoords + ScreenCoordsXY(5, 5 - 13), { COLOUR_BLACK }, buffer.c_str()); - int16_t width = static_cast(GfxGetStringWidth(buffer, FontStyle::Medium)); - - // Write platform information - buffer.assign("{OUTLINE}{WHITE}"); - buffer.append(OPENRCT2_PLATFORM); - buffer.append(" ("); - buffer.append(OPENRCT2_ARCHITECTURE); - buffer.append(")"); - - DrawText(dpi, screenCoords + ScreenCoordsXY(5, 5), { COLOUR_BLACK }, buffer.c_str()); - width = std::max(width, static_cast(GfxGetStringWidth(buffer, FontStyle::Medium))); - - // Invalidate screen area - GfxSetDirtyBlocks({ screenCoords - ScreenCoordsXY(0, 13), - screenCoords + ScreenCoordsXY{ width + 5, 30 } }); // 30 is an arbitrary height to catch both strings -} diff --git a/src/openrct2/scenes/title/TitleScene.h b/src/openrct2/scenes/title/TitleScene.h index 5a92fed19f..289a903ba6 100644 --- a/src/openrct2/scenes/title/TitleScene.h +++ b/src/openrct2/scenes/title/TitleScene.h @@ -26,8 +26,6 @@ namespace OpenRCT2 bool PreviewSequence(size_t value); void StopPreviewingSequence(); bool IsPreviewingSequence(); - bool ShouldHideVersionInfo(); - void SetHideVersionInfo(bool value); void Load() override; void Tick() override; @@ -39,7 +37,6 @@ namespace OpenRCT2 ITitleSequencePlayer* _sequencePlayer = nullptr; size_t _loadedTitleSequenceId = SIZE_MAX; size_t _currentSequence = SIZE_MAX; - bool _hideVersionInfo = false; bool _previewingSequence = false; void TitleInitialise(); @@ -53,11 +50,8 @@ extern bool gPreviewingTitleSequenceInGame; void TitleCreateWindows(); void* TitleGetSequencePlayer(); void TitleSequenceChangePreset(size_t preset); -bool TitleShouldHideVersionInfo(); -void TitleSetHideVersionInfo(bool value); size_t TitleGetConfigSequence(); size_t TitleGetCurrentSequence(); bool TitlePreviewSequence(size_t value); void TitleStopPreviewingSequence(); bool TitleIsPreviewingSequence(); -void DrawOpenRCT2(DrawPixelInfo& dpi, const ScreenCoordsXY& screenCoords);