Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/application
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-04-19 08:52:35 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-04-19 08:52:35 +1000
commitd5f5fb5ddf0d4a9f0b0e6ac012121926d2fcd949 (patch)
tree5f1bca917aacc2bb22d0ac00857edb15b134add2 /source/application
parent9533c8d0a50c2e09d4880776f5ddfda2b7482c32 (diff)
Add hardware cursor game setting
Diffstat (limited to 'source/application')
-rw-r--r--source/application/StarApplicationController.hpp1
-rw-r--r--source/application/StarMainApplication_sdl.cpp15
2 files changed, 13 insertions, 3 deletions
diff --git a/source/application/StarApplicationController.hpp b/source/application/StarApplicationController.hpp
index 0e288d2..9ae8a87 100644
--- a/source/application/StarApplicationController.hpp
+++ b/source/application/StarApplicationController.hpp
@@ -41,6 +41,7 @@ public:
virtual void setVSyncEnabled(bool vSync) = 0;
virtual void setCursorVisible(bool cursorVisible) = 0;
virtual void setCursorPosition(Vec2I cursorPosition) = 0;
+ virtual void setCursorHardware(bool cursorHardware) = 0;
virtual bool setCursorImage(const String& id, const ImageConstPtr& image, unsigned scale, const Vec2I& offset) = 0;
virtual void setAcceptingTextInput(bool acceptingTextInput) = 0;
diff --git a/source/application/StarMainApplication_sdl.cpp b/source/application/StarMainApplication_sdl.cpp
index cb631ff..277df57 100644
--- a/source/application/StarMainApplication_sdl.cpp
+++ b/source/application/StarMainApplication_sdl.cpp
@@ -630,6 +630,10 @@ private:
SDL_WarpMouseInWindow(parent->m_sdlWindow, cursorPosition[0], cursorPosition[1]);
}
+ void setCursorHardware(bool hardware) override {
+ parent->m_cursorHardware = hardware;
+ }
+
bool setCursorImage(const String& id, const ImageConstPtr& image, unsigned scale, const Vec2I& offset) override {
return parent->setCursorImage(id, image, scale, offset);
}
@@ -828,12 +832,16 @@ private:
}
}
- static const size_t MaximumCursorDimensions = 128;
- static const size_t MaximumCursorPixelCount = MaximumCursorDimensions * MaximumCursorDimensions;
+ static const size_t MaxCursorSize = 128;
bool setCursorImage(const String& id, const ImageConstPtr& image, unsigned scale, const Vec2I& offset) {
auto imageSize = image->size().piecewiseMultiply(Vec2U::filled(scale));
- if (!scale || imageSize.max() > MaximumCursorDimensions || (size_t)(imageSize[0] * imageSize[1]) > MaximumCursorPixelCount)
+ if (!m_cursorHardware || !scale || imageSize.max() > MaxCursorSize || imageSize.product() > square(MaxCursorSize)) {
+ if (auto defaultCursor = SDL_GetDefaultCursor()) {
+ if (SDL_GetCursor() != defaultCursor)
+ SDL_SetCursor(defaultCursor);
+ }
return m_cursorVisible = false;
+ }
auto& entry = m_cursorCache.get(m_currentCursor = { scale, offset, id }, [&](auto const&) {
auto entry = std::make_shared<CursorEntry>();
@@ -926,6 +934,7 @@ private:
bool m_windowVSync = true;
unsigned m_maxFrameSkip = 5;
bool m_cursorVisible = true;
+ bool m_cursorHardware = true;
bool m_acceptingTextInput = false;
bool m_audioEnabled = false;
bool m_quitRequested = false;