diff options
author | crupest <crupest@outlook.com> | 2020-10-28 21:28:15 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-10-28 21:28:15 +0800 |
commit | df4df679e157f974773dad7776b204e9d4f3009e (patch) | |
tree | bbc1e939a6e7cf38c2b982ad071e145e3f583caa /include/cru/win | |
parent | 6ce70ed4b08c7db20b6b384be26c7fc4e11c98de (diff) | |
download | cru-df4df679e157f974773dad7776b204e9d4f3009e.tar.gz cru-df4df679e157f974773dad7776b204e9d4f3009e.tar.bz2 cru-df4df679e157f974773dad7776b204e9d4f3009e.zip |
...
Diffstat (limited to 'include/cru/win')
-rw-r--r-- | include/cru/win/native/Base.hpp | 4 | ||||
-rw-r--r-- | include/cru/win/native/InputMethod.hpp | 21 | ||||
-rw-r--r-- | include/cru/win/native/UiApplication.hpp | 6 | ||||
-rw-r--r-- | include/cru/win/native/Window.hpp | 35 |
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 |