aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-01 16:00:29 +0800
committercrupest <crupest@outlook.com>2019-04-01 16:00:29 +0800
commit0a429ee13c9fb9a9da6df62b1ebae101180278f5 (patch)
tree7c6f34ca466e19e423d54178825b517e94663f8d
parent9e382d2175c6706e69b734480e26032e16d0bde4 (diff)
downloadcru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.tar.gz
cru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.tar.bz2
cru-0a429ee13c9fb9a9da6df62b1ebae101180278f5.zip
...
-rw-r--r--include/cru/platform/ui_applicaition.hpp2
-rw-r--r--include/cru/platform/win/win_application.hpp3
-rw-r--r--src/platform_win/win_application.cpp22
3 files changed, 26 insertions, 1 deletions
diff --git a/include/cru/platform/ui_applicaition.hpp b/include/cru/platform/ui_applicaition.hpp
index 1f30ce17..16739f9d 100644
--- a/include/cru/platform/ui_applicaition.hpp
+++ b/include/cru/platform/ui_applicaition.hpp
@@ -25,7 +25,7 @@ struct UiApplication : public virtual Interface {
virtual void CancelTimer(unsigned long id) = 0;
virtual std::vector<NativeWindow*> GetAllWindow() = 0;
- virtual NativeWindow* CreateWindow() = 0;
+ virtual NativeWindow* CreateWindow(NativeWindow* parent) = 0;
virtual GraphFactory* GetGraphFactory() = 0;
};
diff --git a/include/cru/platform/win/win_application.hpp b/include/cru/platform/win/win_application.hpp
index 7defa703..f8150aed 100644
--- a/include/cru/platform/win/win_application.hpp
+++ b/include/cru/platform/win/win_application.hpp
@@ -41,6 +41,9 @@ class WinApplication : public Object, public virtual UiApplication {
const std::function<void()>& action) override;
void CancelTimer(unsigned long id) override;
+ std::vector<NativeWindow*> GetAllWindow() override;
+ NativeWindow* CreateWindow(NativeWindow* parent) override;
+
GraphFactory* GetGraphFactory() override;
diff --git a/src/platform_win/win_application.cpp b/src/platform_win/win_application.cpp
index ce85dc67..31d8c990 100644
--- a/src/platform_win/win_application.cpp
+++ b/src/platform_win/win_application.cpp
@@ -4,11 +4,13 @@
#include "cru/platform/win/god_window.hpp"
#include "cru/platform/win/graph_manager.hpp"
#include "cru/platform/win/win_graph_factory.hpp"
+#include "cru/platform/win/win_native_window.hpp"
#include "god_window_message.hpp"
#include "timer.hpp"
#include "window_manager.hpp"
#include <VersionHelpers.h>
+#include <cassert>
namespace cru::platform {
UiApplication* UiApplication::GetInstance() {
@@ -79,5 +81,25 @@ unsigned long WinApplication::SetInterval(
void WinApplication::CancelTimer(unsigned long id) {
timer_manager_->KillTimer(static_cast<UINT_PTR>(id));
}
+
+std::vector<NativeWindow*> WinApplication::GetAllWindow() {
+ const auto&& windows = window_manager_->GetAllWindows();
+ std::vector<NativeWindow*> result;
+ for (const auto w : windows) {
+ result.push_back(static_cast<NativeWindow*>(w));
+ }
+ return result;
+}
+
+NativeWindow* WinApplication::CreateWindow(NativeWindow* parent) {
+ WinNativeWindow* p = nullptr;
+ if (parent != nullptr) {
+ p = dynamic_cast<WinNativeWindow*>(parent);
+ assert(p);
+ }
+ return new WinNativeWindow(this, window_manager_->GetGeneralWindowClass(),
+ WS_OVERLAPPEDWINDOW, p);
+}
+
GraphFactory* WinApplication::GetGraphFactory() { return graph_factory_.get(); }
} // namespace cru::platform::win