aboutsummaryrefslogtreecommitdiff
path: root/src/win/native/UiApplication.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-10-17 15:57:53 +0800
committercrupest <crupest@outlook.com>2020-10-17 15:57:53 +0800
commit46ff47d2f47a66372ca0a8a09dd08c4fb04004f3 (patch)
tree0a1168ea234cb545f76b6d9a8031c36c0f224f5c /src/win/native/UiApplication.cpp
parent937b16dff40b6eba68d6bc13162f838c8432f43b (diff)
downloadcru-46ff47d2f47a66372ca0a8a09dd08c4fb04004f3.tar.gz
cru-46ff47d2f47a66372ca0a8a09dd08c4fb04004f3.tar.bz2
cru-46ff47d2f47a66372ca0a8a09dd08c4fb04004f3.zip
Refactor timer.
Diffstat (limited to 'src/win/native/UiApplication.cpp')
-rw-r--r--src/win/native/UiApplication.cpp28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/win/native/UiApplication.cpp b/src/win/native/UiApplication.cpp
index dbf52e05..a806db88 100644
--- a/src/win/native/UiApplication.cpp
+++ b/src/win/native/UiApplication.cpp
@@ -1,6 +1,8 @@
#include "cru/win/native/UiApplication.hpp"
#include "../DebugLogger.hpp"
+#include "TimerManager.hpp"
+#include "WindowManager.hpp"
#include "cru/common/Logger.hpp"
#include "cru/platform/Check.hpp"
#include "cru/win/graph/direct/Factory.hpp"
@@ -9,9 +11,6 @@
#include "cru/win/native/GodWindow.hpp"
#include "cru/win/native/InputMethod.hpp"
#include "cru/win/native/Window.hpp"
-#include "GodWindowMessage.hpp"
-#include "Timer.hpp"
-#include "WindowManager.hpp"
namespace cru::platform::native {
std::unique_ptr<IUiApplication> CreateUiApplication() {
@@ -64,30 +63,27 @@ void WinUiApplication::AddOnQuitHandler(std::function<void()> handler) {
quit_handlers_.push_back(std::move(handler));
}
-void WinUiApplication::InvokeLater(std::function<void()> action) {
- // copy the action to a safe place
- auto p_action_copy = new std::function<void()>(std::move(action));
-
- if (::PostMessageW(GetGodWindow()->GetHandle(), invoke_later_message_id,
- reinterpret_cast<WPARAM>(p_action_copy), 0) == 0)
- throw Win32Error(::GetLastError(), "InvokeLater failed to post message.");
+long long WinUiApplication::SetImmediate(std::function<void()> action) {
+ return this->timer_manager_->SetTimer(TimerType::Immediate, 0,
+ std::move(action));
}
long long WinUiApplication::SetTimeout(std::chrono::milliseconds milliseconds,
std::function<void()> action) {
- return gsl::narrow<long long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), false, std::move(action)));
+ return this->timer_manager_->SetTimer(TimerType::Timeout,
+ gsl::narrow<int>(milliseconds.count()),
+ std::move(action));
}
long long WinUiApplication::SetInterval(std::chrono::milliseconds milliseconds,
std::function<void()> action) {
- return gsl::narrow<long long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), true, std::move(action)));
+ return this->timer_manager_->SetTimer(TimerType::Interval,
+ gsl::narrow<int>(milliseconds.count()),
+ std::move(action));
}
void WinUiApplication::CancelTimer(long long id) {
- if (id < 0) return;
- timer_manager_->KillTimer(static_cast<UINT_PTR>(id));
+ timer_manager_->CancelTimer(id);
}
std::vector<INativeWindow*> WinUiApplication::GetAllWindow() {