diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-11-28 15:30:58 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-11-28 15:30:58 +0800 |
| commit | 268b396afe2f09abfa8813c5f1edc1641a7c0a9f (patch) | |
| tree | cc1b1887c68287c74df7239b94c24335ad3ca9e1 /include/cru/platform/gui | |
| parent | b7c4620007274844669337df703aba206ea6c4d3 (diff) | |
| download | cru-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.h | 1 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/Input.h | 12 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/Window.h | 8 |
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_; |
