aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-28 15:30:58 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-28 15:30:58 +0800
commit268b396afe2f09abfa8813c5f1edc1641a7c0a9f (patch)
treecc1b1887c68287c74df7239b94c24335ad3ca9e1 /include/cru/platform/gui
parentb7c4620007274844669337df703aba206ea6c4d3 (diff)
downloadcru-268b396afe2f09abfa8813c5f1edc1641a7c0a9f.tar.gz
cru-268b396afe2f09abfa8813c5f1edc1641a7c0a9f.tar.bz2
cru-268b396afe2f09abfa8813c5f1edc1641a7c0a9f.zip
Add event handling of sdl native window.
Diffstat (limited to 'include/cru/platform/gui')
-rw-r--r--include/cru/platform/gui/Input.h1
-rw-r--r--include/cru/platform/gui/sdl/Input.h12
-rw-r--r--include/cru/platform/gui/sdl/Window.h8
3 files changed, 21 insertions, 0 deletions
diff --git a/include/cru/platform/gui/Input.h b/include/cru/platform/gui/Input.h
index 1dbba850..d731cefa 100644
--- a/include/cru/platform/gui/Input.h
+++ b/include/cru/platform/gui/Input.h
@@ -16,6 +16,7 @@ struct MouseButtons {
constexpr static MouseButton Left = MouseButton::FromOffset(1);
constexpr static MouseButton Middle = MouseButton::FromOffset(2);
constexpr static MouseButton Right = MouseButton::FromOffset(3);
+ constexpr static MouseButton Unknown = MouseButton::FromOffset(4);
};
// Because of the complexity of keyboard layout, I only add code in US keyboard
diff --git a/include/cru/platform/gui/sdl/Input.h b/include/cru/platform/gui/sdl/Input.h
new file mode 100644
index 00000000..c6b97727
--- /dev/null
+++ b/include/cru/platform/gui/sdl/Input.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <cru/platform/gui/Input.h>
+
+#include <SDL3/SDL_mouse.h>
+#include <SDL3/SDL_keyboard.h>
+
+namespace cru::platform::gui::sdl {
+MouseButton ConvertMouseButton(Uint8 button);
+KeyModifier ConvertKeyModifier(SDL_Keymod keymod);
+KeyModifier GetKeyModifier();
+} // namespace cru::platform::gui::sdl
diff --git a/include/cru/platform/gui/sdl/Window.h b/include/cru/platform/gui/sdl/Window.h
index c9d6505b..9947a1b9 100644
--- a/include/cru/platform/gui/sdl/Window.h
+++ b/include/cru/platform/gui/sdl/Window.h
@@ -4,6 +4,7 @@
#include <cru/platform/GraphicsBase.h>
#include <cru/platform/gui/Window.h>
+#include <SDL3/SDL_events.h>
#include <SDL3/SDL_video.h>
#include <optional>
@@ -53,6 +54,11 @@ class SdlWindow : public SdlResource, public virtual INativeWindow {
*/
void SetWindowRect(const Rect& rect) override;
+ /**
+ * Note: SDL3 doesn't have an API to solely set focus without raising the
+ * window. So this method actually calls SDL_RaiseWindow to raise and set
+ * focus to the window.
+ */
bool RequestFocus() override;
Point GetMousePosition() override;
@@ -85,6 +91,8 @@ class SdlWindow : public SdlResource, public virtual INativeWindow {
void DoUpdateStyleFlag();
void DoUpdateTitle();
+ bool HandleEvent(const SDL_Event* event);
+
private:
SdlUiApplication* application_;
SDL_Window* sdl_window_;