#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