From df4df679e157f974773dad7776b204e9d4f3009e Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 28 Oct 2020 21:28:15 +0800 Subject: ... --- include/cru/win/native/Base.hpp | 4 +--- include/cru/win/native/InputMethod.hpp | 21 +++---------------- include/cru/win/native/UiApplication.hpp | 6 ++---- include/cru/win/native/Window.hpp | 35 +++++--------------------------- 4 files changed, 11 insertions(+), 55 deletions(-) (limited to 'include/cru/win') 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 TryGetHIMC(); + AutoHIMC GetHIMC(); private: - std::shared_ptr native_window_resolver_; + WinNativeWindow* native_window_; - std::vector event_revoker_guards_; + EventRevokerListGuard event_guard_; Event composition_start_event_; Event composition_end_event_; Event composition_event_; Event 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 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 @@ -40,8 +41,7 @@ class WinUiApplication : public WinNativeResource, void CancelTimer(long long id) override; std::vector GetAllWindow() override; - std::shared_ptr 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 window_manager_; std::unique_ptr cursor_manager_; - std::unique_ptr input_method_manager_; std::vector> 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 GetResolver() override { - return std::static_pointer_cast(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 resolver_; - HWND hwnd_; WinNativeWindow* parent_window_; @@ -163,6 +160,8 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { std::shared_ptr cursor_; + std::unique_ptr input_method_context_; + Event destroy_event_; Event paint_event_; Event resize_event_; @@ -176,28 +175,4 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { Event 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 resolver); } // namespace cru::platform::native::win -- cgit v1.2.3