From 1e30e3596dabe8a72f420cd247f55eb09968fe17 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Sun, 17 Aug 2025 16:49:30 +0300 Subject: [PATCH] Fixed quick menu popping up in incorrect position if GUI Scale is not 1.0 --- src/DrawingProgram/DrawingProgram.cpp | 2 +- src/Toolbar.cpp | 8 ++++++-- src/Toolbar.hpp | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index fe71a3a..09d9271 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -254,7 +254,7 @@ void DrawingProgram::update() { if(world.main.toolbar.paintPopupLocation) world.main.toolbar.paintPopupLocation = std::nullopt; else - world.main.toolbar.paintPopupLocation = world.main.input.mouse.pos / world.main.window.scale; + world.main.toolbar.paintPopupLocation = world.main.input.mouse.pos / world.main.toolbar.final_gui_scale(); } controls.previousMouseWorldPos = controls.currentMouseWorldPos; diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index a428205..7888c84 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -1673,7 +1673,7 @@ void Toolbar::start_gui() { io->mouse.rightClick = main.input.mouse.rightClicks; io->mouse.leftHeld = main.input.mouse.leftDown; io->mouse.rightHeld = main.input.mouse.rightDown; - io->mouse.globalPos = main.input.mouse.pos / (guiScale * main.window.scale); + io->mouse.globalPos = main.input.mouse.pos / final_gui_scale(); io->mouse.scroll = main.input.mouse.scrollAmount; io->deltaTime = main.deltaTime; @@ -1707,6 +1707,10 @@ void Toolbar::start_gui() { gui.begin(); } +float Toolbar::final_gui_scale() { + return guiScale * main.window.scale; +} + void Toolbar::end_gui() { gui.end(); if(io->acceptingTextInput) @@ -1718,7 +1722,7 @@ void Toolbar::end_gui() { void Toolbar::draw(SkCanvas* canvas) { if(!main.takingScreenshot) { canvas->save(); - canvas->scale(guiScale * main.window.scale, guiScale * main.window.scale); + canvas->scale(final_gui_scale(), final_gui_scale()); gui.draw(canvas); canvas->restore(); } diff --git a/src/Toolbar.hpp b/src/Toolbar.hpp index 05de11d..fe69b56 100644 --- a/src/Toolbar.hpp +++ b/src/Toolbar.hpp @@ -77,6 +77,8 @@ class Toolbar { Vector4f* colorLeft = nullptr; Vector4f* colorRight = nullptr; std::optional paintPopupLocation; + + float final_gui_scale(); private: static void sdl_open_file_dialog_callback(void* userData, const char * const * fileList, int filter); @@ -128,14 +130,14 @@ class Toolbar { bool justAssignedColorLeft = false; bool justAssignedColorRight = false; - float guiScale = 1.0f; - bool showPerformance = false; bool menuPopUpOpen = false; bool optionsMenuOpen = false; bool playerMenuOpen = false; + float guiScale = 1.0f; + enum { CHATBOXSTATE_OPEN, CHATBOXSTATE_JUSTOPEN,