aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform')
-rw-r--r--include/cru/platform/gui/TimerHelper.h69
-rw-r--r--include/cru/platform/gui/UiApplication.h9
-rw-r--r--include/cru/platform/gui/xcb/Window.h2
3 files changed, 10 insertions, 70 deletions
diff --git a/include/cru/platform/gui/TimerHelper.h b/include/cru/platform/gui/TimerHelper.h
deleted file mode 100644
index 91d436a4..00000000
--- a/include/cru/platform/gui/TimerHelper.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#pragma once
-#include "UiApplication.h"
-
-namespace cru::platform::gui {
-
-class TimerAutoCanceler {
- public:
- TimerAutoCanceler() : id_(0) {}
- explicit TimerAutoCanceler(long long id) : id_(id) {}
-
- CRU_DELETE_COPY(TimerAutoCanceler)
-
- TimerAutoCanceler(TimerAutoCanceler&& other) : id_(other.id_) {
- other.id_ = 0;
- }
-
- TimerAutoCanceler& operator=(TimerAutoCanceler&& other) {
- if (&other == this) {
- return *this;
- }
- Reset(other.id_);
- other.id_ = 0;
- return *this;
- }
-
- TimerAutoCanceler& operator=(long long other) {
- return this->operator=(TimerAutoCanceler(other));
- }
-
- ~TimerAutoCanceler() { Reset(); }
-
- long long Release() {
- auto temp = id_;
- id_ = 0;
- return temp;
- }
-
- void Reset(long long id = 0) {
- if (id_ > 0) IUiApplication::GetInstance()->CancelTimer(id_);
- id_ = id;
- }
-
- explicit operator bool() const { return id_; }
-
- private:
- long long id_;
-};
-
-class TimerListAutoCanceler {
- public:
- TimerListAutoCanceler() = default;
- CRU_DELETE_COPY(TimerListAutoCanceler)
- CRU_DEFAULT_MOVE(TimerListAutoCanceler)
- ~TimerListAutoCanceler() = default;
-
- TimerListAutoCanceler& operator+=(long long id) {
- list_.push_back(TimerAutoCanceler(id));
- return *this;
- }
-
- void Clear() { list_.clear(); }
-
- bool IsEmpty() const { return list_.empty(); }
-
- private:
- std::vector<TimerAutoCanceler> list_;
-};
-
-} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/UiApplication.h b/include/cru/platform/gui/UiApplication.h
index d15a3c72..84011275 100644
--- a/include/cru/platform/gui/UiApplication.h
+++ b/include/cru/platform/gui/UiApplication.h
@@ -3,6 +3,7 @@
#include "Menu.h"
#include "SaveOpenDialogOptions.h"
+#include <cru/base/Guard.h>
#include <cru/platform/graphics/Factory.h>
#include <chrono>
@@ -74,4 +75,12 @@ struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource {
virtual std::optional<std::vector<std::string>> ShowOpenDialog(
OpenDialogOptions options);
};
+
+namespace details {
+inline void CancelTimer(long long id) noexcept {
+ IUiApplication::GetInstance()->CancelTimer(id);
+}
+} // namespace details
+
+using TimerAutoCanceler = AutoDestruct<long long, details::CancelTimer>;
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h
index 4cb5f6da..293732c5 100644
--- a/include/cru/platform/gui/xcb/Window.h
+++ b/include/cru/platform/gui/xcb/Window.h
@@ -2,7 +2,7 @@
#pragma once
#include "Base.h"
-#include <cru/platform/gui/TimerHelper.h>
+#include <cru/platform/gui/UiApplication.h>
#include <cru/platform/gui/Window.h>
#include <cairo.h>