aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform')
-rw-r--r--include/cru/platform/gui/sdl/Base.h2
-rw-r--r--include/cru/platform/gui/sdl/UiApplication.h27
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