diff options
| -rw-r--r-- | include/cru/platform/gui/sdl/UiApplication.h | 3 | ||||
| -rw-r--r-- | src/platform/gui/sdl/UiApplication.cpp | 4 | ||||
| -rw-r--r-- | src/platform/gui/sdl/Window.cpp | 15 |
3 files changed, 20 insertions, 2 deletions
diff --git a/include/cru/platform/gui/sdl/UiApplication.h b/include/cru/platform/gui/sdl/UiApplication.h index 5cb8276e..b903189e 100644 --- a/include/cru/platform/gui/sdl/UiApplication.h +++ b/include/cru/platform/gui/sdl/UiApplication.h @@ -20,6 +20,9 @@ class SdlClipboard; class SdlUiApplication : public SdlResource, public virtual IUiApplication { friend SdlWindow; + private: + constexpr static auto kLogTag = "cru::platform::gui::sdl::SdlUiApplication"; + public: explicit SdlUiApplication(graphics::IGraphicsFactory* graphics_factory, bool release_graphics_factory); diff --git a/src/platform/gui/sdl/UiApplication.cpp b/src/platform/gui/sdl/UiApplication.cpp index 6064159d..edf1e20c 100644 --- a/src/platform/gui/sdl/UiApplication.cpp +++ b/src/platform/gui/sdl/UiApplication.cpp @@ -65,6 +65,10 @@ int SdlUiApplication::Run() { break; } + // char buf[512]; + // SDL_GetEventDescription(&event, buf, sizeof(buf) / sizeof(*buf)); + // CruLogDebug(kLogTag, "{}", buf); + DispatchEvent(event); delete_later_pool_.Clean(); diff --git a/src/platform/gui/sdl/Window.cpp b/src/platform/gui/sdl/Window.cpp index d06f8abc..e5de9310 100644 --- a/src/platform/gui/sdl/Window.cpp +++ b/src/platform/gui/sdl/Window.cpp @@ -322,13 +322,15 @@ NativeKeyEventArgs ConvertKeyEvent(const SDL_KeyboardEvent& event) { std::optional<SDL_WindowID> GetEventWindowId(const SDL_Event& event) { switch (event.type) { - case SDL_EVENT_WINDOW_MOVED: - case SDL_EVENT_WINDOW_RESIZED: case SDL_EVENT_WINDOW_SHOWN: case SDL_EVENT_WINDOW_HIDDEN: + case SDL_EVENT_WINDOW_EXPOSED: + case SDL_EVENT_WINDOW_MOVED: + case SDL_EVENT_WINDOW_RESIZED: case SDL_EVENT_WINDOW_MINIMIZED: case SDL_EVENT_WINDOW_FOCUS_GAINED: case SDL_EVENT_WINDOW_FOCUS_LOST: + case SDL_EVENT_WINDOW_CLOSE_REQUESTED: case SDL_EVENT_WINDOW_MOUSE_ENTER: case SDL_EVENT_WINDOW_MOUSE_LEAVE: case SDL_EVENT_WINDOW_DESTROYED: @@ -358,9 +360,14 @@ bool SdlWindow::HandleEvent(const SDL_Event* event) { client_rect_.top = event->window.data2; return true; } + case SDL_EVENT_WINDOW_EXPOSED: { + RequestRepaint(); + return true; + } case SDL_EVENT_WINDOW_RESIZED: { client_rect_.width = event->window.data1; client_rect_.height = event->window.data2; + RequestRepaint(); #ifdef __unix int width, height; CheckSdlReturn(SDL_GetWindowSizeInPixels(sdl_window_, &width, &height)); @@ -389,6 +396,10 @@ bool SdlWindow::HandleEvent(const SDL_Event* event) { FocusEvent_.Raise(FocusChangeType::Lose); return true; } + case SDL_EVENT_WINDOW_CLOSE_REQUESTED: { + Close(); + return true; + } case SDL_EVENT_WINDOW_MOUSE_ENTER: { MouseEnterLeaveEvent_.Raise(MouseEnterLeaveType::Enter); return true; |
