From a06db62288bc3fdbf3f25bcfa046c20510036665 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Tue, 5 Mar 2024 10:21:43 +0100 Subject: Added support for scaling the output * Added "Scale" user option, which can either by "Auto" or an explicit scaling factor. Its maximum value depends on the current resolution. The "Auto" factor is based on keeping the logical resolution on at least 800x600, wheres the maximum scale is based on keeping the logical resolution on at least 640x480. * Enabled support for High DPI. This means the rendering target can now have a different resolution than the window size, which can happen on macOS, Windows and Wayland. The resulting scale is multiplied by the above user-controlled scale. Currently, this looks ugly for non-integer scales, which are not used on macOS and can only be configured on some Wayland compositors. Has not been tested on Windows. * Simplified OpenGL initialization (moved out of _beginDraw). * Made sure _beginDraw/_endDraw sets a clip area also for SDLGraphics. --- src/gui/viewport.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src/gui/viewport.cpp') diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index a31a65f6..b71e6530 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -39,14 +39,10 @@ #include "net/net.h" #include "net/playerhandler.h" -#include "resources/resourcemanager.h" - #include "utils/stringutils.h" #include -extern volatile int tick_time; - Viewport::Viewport() { setOpaque(false); @@ -81,8 +77,6 @@ void Viewport::setMap(Map *map) mMap = map; } -extern MiniStatusWindow *miniStatusWindow; - void Viewport::draw(gcn::Graphics *gcnGraphics) { static int lastTick = tick_time; @@ -291,7 +285,13 @@ void Viewport::logic() void Viewport::_followMouse() { - Uint8 button = SDL_GetMouseState(&mMouseX, &mMouseY); + const Uint8 button = SDL_GetMouseState(&mMouseX, &mMouseY); + float logicalX; + float logicalY; + graphics->windowToLogical(mMouseX, mMouseY, logicalX, logicalY); + mMouseX = static_cast(logicalX); + mMouseY = static_cast(logicalY); + // If the left button is dragged if (mPlayerFollowMouse && button & SDL_BUTTON(1)) { @@ -459,7 +459,8 @@ void Viewport::mousePressed(gcn::MouseEvent &event) mPopupMenu->showPopup(event.getX(), event.getY(), mHoverBeing); return; } - else if (mHoverItem) + + if (mHoverItem) { mPopupMenu->showPopup(event.getX(), event.getY(), mHoverItem); return; @@ -541,7 +542,7 @@ void Viewport::mouseDragged(gcn::MouseEvent &event) { mLocalWalkTime = tick_time; local_player->setDestination(event.getX() + (int) mPixelViewX, - event.getY() + (int) mPixelViewY); + event.getY() + (int) mPixelViewY); local_player->pathSetByMouse(); } } -- cgit v1.2.3-70-g09d2