From ebb83c66e225375212f8e82e6b1bd8d3e3eb8646 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 2 Nov 2025 21:49:27 +0800 Subject: Impl timer on SDL. --- include/cru/platform/gui/sdl/UiApplication.h | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'include/cru/platform/gui/sdl/UiApplication.h') diff --git a/include/cru/platform/gui/sdl/UiApplication.h b/include/cru/platform/gui/sdl/UiApplication.h index f47e26bb..c300568c 100644 --- a/include/cru/platform/gui/sdl/UiApplication.h +++ b/include/cru/platform/gui/sdl/UiApplication.h @@ -3,9 +3,12 @@ #include "../UiApplication.h" #include "Base.h" -#include -#include +#include +#include +#include +#include +#include #include namespace cru::platform::gui::sdl { @@ -15,13 +18,9 @@ class SdlUiApplication : public SdlResource, public virtual IUiApplication { friend SdlWindow; public: - explicit SdlUiApplication( - graphics::cairo::CairoGraphicsFactory* cairo_factory = nullptr); + explicit SdlUiApplication(graphics::IGraphicsFactory* graphics_factory, bool release_graphics_factory); ~SdlUiApplication(); - public: - graphics::cairo::CairoGraphicsFactory* GetCairoFactory(); - public: int Run() override; @@ -55,15 +54,21 @@ class SdlUiApplication : public SdlResource, public virtual IUiApplication { private: void RegisterWindow(SdlWindow* window); void UnregisterWindow(SdlWindow* window); + void RunOnMainThread(std::function action); + void PostEmptyEvent(); + long long SetTimer(std::chrono::milliseconds milliseconds, + std::function action, bool repeat); private: - graphics::cairo::CairoGraphicsFactory* cairo_factory_; - bool release_cairo_factory_; + graphics::IGraphicsFactory* graphics_factory_; + bool release_graphics_factory_; - cru::platform::unix::UnixEventLoop event_loop_; + std::uint32_t empty_event_type_; + TimerRegistry> timers_; + std::atomic_int quit_code_; std::vector> quit_handlers_; bool is_quit_on_all_window_closed_; std::vector windows_; }; -} // namespace cru::platform::gui::xcb +} // namespace cru::platform::gui::sdl -- cgit v1.2.3