From 2a9118d137b411b3871073bb6ab18ba98c225d34 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Thu, 16 Oct 2025 23:57:23 +0800 Subject: Bootstrap sdl. --- include/cru/platform/gui/sdl/Window.h | 104 ++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 include/cru/platform/gui/sdl/Window.h (limited to 'include/cru/platform/gui/sdl/Window.h') diff --git a/include/cru/platform/gui/sdl/Window.h b/include/cru/platform/gui/sdl/Window.h new file mode 100644 index 00000000..1bcd42bf --- /dev/null +++ b/include/cru/platform/gui/sdl/Window.h @@ -0,0 +1,104 @@ +#pragma once +#include +#include "../../GraphicsBase.h" +#include "../Window.h" +#include "Base.h" + +#include +#include +#include + +namespace cru::platform::gui::sdl { +class SdlUiApplication; + +class SdlWindow : public SdlResource, public virtual INativeWindow { + CRU_DEFINE_CLASS_LOG_TAG("cru::platform::gui::xcb::SdlWindow") + + friend SdlUiApplication; + + public: + explicit SdlWindow(SdlUiApplication* application); + ~SdlWindow() override; + + bool IsCreated() override; + void Close() override; + + INativeWindow* GetParent() override; + void SetParent(INativeWindow* parent) override; + + WindowStyleFlag GetStyleFlag() override; + void SetStyleFlag(WindowStyleFlag flag) override; + + String GetTitle() override; + void SetTitle(String title) override; + + WindowVisibilityType GetVisibility() override; + void SetVisibility(WindowVisibilityType visibility) override; + + Size GetClientSize() override; + void SetClientSize(const Size& size) override; + + Rect GetClientRect() override; + void SetClientRect(const Rect& rect) override; + + Rect GetWindowRect() override; + void SetWindowRect(const Rect& rect) override; + + bool RequestFocus() override; + + Point GetMousePosition() override; + + bool CaptureMouse() override; + bool ReleaseMouse() override; + + void SetCursor(std::shared_ptr cursor) override; + + void SetToForeground() override; + + void RequestRepaint() override; + + std::unique_ptr BeginPaint() override; + + IEvent* CreateEvent() override; + IEvent* DestroyEvent() override; + IEvent* PaintEvent() override; + + IEvent* VisibilityChangeEvent() override; + IEvent* ResizeEvent() override; + IEvent* FocusEvent() override; + + IEvent* MouseEnterLeaveEvent() override; + IEvent* MouseMoveEvent() override; + IEvent* MouseDownEvent() override; + IEvent* MouseUpEvent() override; + IEvent* MouseWheelEvent() override; + IEvent* KeyDownEvent() override; + IEvent* KeyUpEvent() override; + + IInputMethodContext* GetInputMethodContext() override; + + public: + std::optional GetSdlWindow(); + SdlUiApplication* GetSdlUiApplication(); + + private: + SdlUiApplication* application_; + std::optional sdl_window_; + SdlWindow* parent_; + WindowStyleFlag style_; + + Event create_event_; + Event destroy_event_; + Event paint_event_; + Event visibility_change_event_; + Event resize_event_; + Event focus_event_; + Event mouse_enter_leave_event_; + Event mouse_move_event_; + Event mouse_down_event_; + Event mouse_up_event_; + Event mouse_wheel_event_; + Event key_down_event_; + Event key_up_event_; +}; +} // namespace cru::platform::gui::xcb -- cgit v1.2.3