aboutsummaryrefslogtreecommitdiff
path: root/include/cru/win
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-10-28 21:28:15 +0800
committercrupest <crupest@outlook.com>2020-10-28 21:28:15 +0800
commitdf4df679e157f974773dad7776b204e9d4f3009e (patch)
treebbc1e939a6e7cf38c2b982ad071e145e3f583caa /include/cru/win
parent6ce70ed4b08c7db20b6b384be26c7fc4e11c98de (diff)
downloadcru-df4df679e157f974773dad7776b204e9d4f3009e.tar.gz
cru-df4df679e157f974773dad7776b204e9d4f3009e.tar.bz2
cru-df4df679e157f974773dad7776b204e9d4f3009e.zip
...
Diffstat (limited to 'include/cru/win')
-rw-r--r--include/cru/win/native/Base.hpp4
-rw-r--r--include/cru/win/native/InputMethod.hpp21
-rw-r--r--include/cru/win/native/UiApplication.hpp6
-rw-r--r--include/cru/win/native/Window.hpp35
4 files changed, 11 insertions, 55 deletions
diff --git a/include/cru/win/native/Base.hpp b/include/cru/win/native/Base.hpp
index 7ddc6b54..881dd8b1 100644
--- a/include/cru/win/native/Base.hpp
+++ b/include/cru/win/native/Base.hpp
@@ -11,8 +11,6 @@ class WinCursorManager;
class WindowClass;
class WindowManager;
class WinNativeWindow;
-class WinNativeWindowResolver;
class WinUiApplication;
-class WinInputMethodManager;
-class WinInputMethodContextRef;
+class WinInputMethodContext;
} // namespace cru::platform::native::win
diff --git a/include/cru/win/native/InputMethod.hpp b/include/cru/win/native/InputMethod.hpp
index 113f460d..f3dc15c0 100644
--- a/include/cru/win/native/InputMethod.hpp
+++ b/include/cru/win/native/InputMethod.hpp
@@ -72,31 +72,16 @@ class WinInputMethodContext : public WinNativeResource,
std::u16string GetResultString();
- std::optional<AutoHIMC> TryGetHIMC();
+ AutoHIMC GetHIMC();
private:
- std::shared_ptr<INativeWindowResolver> native_window_resolver_;
+ WinNativeWindow* native_window_;
- std::vector<EventRevokerGuard> event_revoker_guards_;
+ EventRevokerListGuard event_guard_;
Event<std::nullptr_t> composition_start_event_;
Event<std::nullptr_t> composition_end_event_;
Event<std::nullptr_t> composition_event_;
Event<std::u16string_view> text_event_;
};
-
-class WinInputMethodManager : public WinNativeResource,
- public virtual IInputMethodManager {
- public:
- WinInputMethodManager(WinUiApplication* application);
-
- CRU_DELETE_COPY(WinInputMethodManager)
- CRU_DELETE_MOVE(WinInputMethodManager)
-
- ~WinInputMethodManager() override;
-
- public:
- std::unique_ptr<IInputMethodContext> GetContext(
- INativeWindow* window) override;
-};
} // namespace cru::platform::native::win
diff --git a/include/cru/win/native/UiApplication.hpp b/include/cru/win/native/UiApplication.hpp
index 328a6b84..170be532 100644
--- a/include/cru/win/native/UiApplication.hpp
+++ b/include/cru/win/native/UiApplication.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "Resource.hpp"
+#include "cru/platform/native/Base.hpp"
#include "cru/platform/native/UiApplication.hpp"
#include <memory>
@@ -40,8 +41,7 @@ class WinUiApplication : public WinNativeResource,
void CancelTimer(long long id) override;
std::vector<INativeWindow*> GetAllWindow() override;
- std::shared_ptr<INativeWindowResolver> CreateWindow(
- INativeWindow* parent) override;
+ INativeWindow* CreateWindow(INativeWindow* parent) override;
cru::platform::graph::IGraphFactory* GetGraphFactory() override;
@@ -50,7 +50,6 @@ class WinUiApplication : public WinNativeResource,
}
ICursorManager* GetCursorManager() override;
- IInputMethodManager* GetInputMethodManager() override;
HINSTANCE GetInstanceHandle() const { return instance_handle_; }
@@ -69,7 +68,6 @@ class WinUiApplication : public WinNativeResource,
std::unique_ptr<WindowManager> window_manager_;
std::unique_ptr<WinCursorManager> cursor_manager_;
- std::unique_ptr<WinInputMethodManager> input_method_manager_;
std::vector<std::function<void()>> quit_handlers_;
};
diff --git a/include/cru/win/native/Window.hpp b/include/cru/win/native/Window.hpp
index ecc0dd04..6bf71601 100644
--- a/include/cru/win/native/Window.hpp
+++ b/include/cru/win/native/Window.hpp
@@ -3,6 +3,7 @@
#include "WindowNativeMessageEventArgs.hpp"
#include "cru/platform/GraphBase.hpp"
+#include "cru/platform/native/Base.hpp"
#include "cru/platform/native/Window.hpp"
#include "cru/win/graph/direct/WindowRenderTarget.hpp"
@@ -22,10 +23,6 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
~WinNativeWindow() override;
public:
- std::shared_ptr<INativeWindowResolver> GetResolver() override {
- return std::static_pointer_cast<INativeWindowResolver>(resolver_);
- }
-
void Close() override;
WinNativeWindow* GetParent() override { return parent_window_; }
@@ -81,6 +78,8 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
return &native_message_event_;
}
+ IInputMethodContext* GetInputMethodContext() override;
+
// Get the handle of the window. Return null if window is invalid.
HWND GetWindowHandle() const { return hwnd_; }
@@ -148,8 +147,6 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
// again.
bool sync_flag_ = false;
- std::shared_ptr<WinNativeWindowResolver> resolver_;
-
HWND hwnd_;
WinNativeWindow* parent_window_;
@@ -163,6 +160,8 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
std::shared_ptr<WinCursor> cursor_;
+ std::unique_ptr<WinInputMethodContext> input_method_context_;
+
Event<std::nullptr_t> destroy_event_;
Event<std::nullptr_t> paint_event_;
Event<Size> resize_event_;
@@ -176,28 +175,4 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
Event<WindowNativeMessageEventArgs&> native_message_event_;
};
-
-class WinNativeWindowResolver : public WinNativeResource,
- public virtual INativeWindowResolver {
- friend WinNativeWindow::~WinNativeWindow();
-
- public:
- WinNativeWindowResolver(WinNativeWindow* window) : window_(window) {}
-
- CRU_DELETE_COPY(WinNativeWindowResolver)
- CRU_DELETE_MOVE(WinNativeWindowResolver)
-
- ~WinNativeWindowResolver() override = default;
-
- public:
- INativeWindow* Resolve() override { return window_; }
-
- private:
- void Reset();
-
- private:
- WinNativeWindow* window_;
-};
-
-WinNativeWindow* Resolve(gsl::not_null<INativeWindowResolver*> resolver);
} // namespace cru::platform::native::win