aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/native
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-10-28 16:58:56 +0800
committercrupest <crupest@outlook.com>2020-10-28 16:58:56 +0800
commit2df47ffbfff02fb6b64d19e404adc41a93677afe (patch)
treee15a566c95b68b6266bdcab14bba64be729ab300 /include/cru/platform/native
parentfde24556042b76863bdec34dcc213cb7298f68f9 (diff)
downloadcru-2df47ffbfff02fb6b64d19e404adc41a93677afe.tar.gz
cru-2df47ffbfff02fb6b64d19e404adc41a93677afe.tar.bz2
cru-2df47ffbfff02fb6b64d19e404adc41a93677afe.zip
...
Diffstat (limited to 'include/cru/platform/native')
-rw-r--r--include/cru/platform/native/UiApplication.hpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/include/cru/platform/native/UiApplication.hpp b/include/cru/platform/native/UiApplication.hpp
index 135e95c3..4c1b3456 100644
--- a/include/cru/platform/native/UiApplication.hpp
+++ b/include/cru/platform/native/UiApplication.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "../Resource.hpp"
#include "Base.hpp"
+#include "cru/common/Base.hpp"
#include <chrono>
#include <functional>
@@ -53,6 +54,60 @@ struct IUiApplication : public virtual INativeResource {
virtual IInputMethodManager* GetInputMethodManager() = 0;
};
+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) {
+ Reset(other.id_);
+ other.id_ = 0;
+ return *this;
+ }
+
+ ~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;
+ }
+
+ 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_;
+};
+
// Bootstrap from this.
std::unique_ptr<IUiApplication> CreateUiApplication();
} // namespace cru::platform::native