diff options
Diffstat (limited to 'include/cru/platform/gui')
| -rw-r--r-- | include/cru/platform/gui/sdl/Base.h | 2 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/UiApplication.h | 27 |
2 files changed, 18 insertions, 11 deletions
diff --git a/include/cru/platform/gui/sdl/Base.h b/include/cru/platform/gui/sdl/Base.h index 89d2dad6..bd53fb51 100644 --- a/include/cru/platform/gui/sdl/Base.h +++ b/include/cru/platform/gui/sdl/Base.h @@ -19,4 +19,6 @@ class SdlException : public PlatformException { public: using PlatformException::PlatformException; }; + +void CheckSdlReturn(bool success); } // namespace cru::platform::gui::sdl 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 <cru/base/platform/unix/EventLoop.h> -#include <cru/platform/graphics/cairo/CairoGraphicsFactory.h> +#include <cru/base/Timer.h> +#include <cru/platform/graphics/Factory.h> +#include <atomic> +#include <chrono> +#include <cstdint> #include <functional> namespace cru::platform::gui::sdl { @@ -15,14 +18,10 @@ 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; void RequestQuit(int quit_code) 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<void()> action); + void PostEmptyEvent(); + long long SetTimer(std::chrono::milliseconds milliseconds, + std::function<void()> 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<std::function<void()>> timers_; + std::atomic_int quit_code_; std::vector<std::function<void()>> quit_handlers_; bool is_quit_on_all_window_closed_; std::vector<SdlWindow*> windows_; }; -} // namespace cru::platform::gui::xcb +} // namespace cru::platform::gui::sdl |
