aboutsummaryrefslogtreecommitdiff
path: root/include/cru
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-04-05 23:35:15 +0800
committercrupest <crupest@outlook.com>2020-04-05 23:35:15 +0800
commit41e17e281ba31e9eff612017f5a2dafd847278b0 (patch)
treef0736679652abbfa1beeef3aa3d7dabfae8da0b9 /include/cru
parente9590859b1aaa1c2bf4714893daf34fbfd4166fd (diff)
downloadcru-41e17e281ba31e9eff612017f5a2dafd847278b0.tar.gz
cru-41e17e281ba31e9eff612017f5a2dafd847278b0.tar.bz2
cru-41e17e281ba31e9eff612017f5a2dafd847278b0.zip
...
Diffstat (limited to 'include/cru')
-rw-r--r--include/cru/platform/native/base.hpp1
-rw-r--r--include/cru/platform/native/input_method.hpp6
-rw-r--r--include/cru/platform/native/ui_application.hpp1
-rw-r--r--include/cru/win/native/base.hpp19
-rw-r--r--include/cru/win/native/god_window.hpp7
-rw-r--r--include/cru/win/native/input_method.hpp19
-rw-r--r--include/cru/win/native/keyboard.hpp2
-rw-r--r--include/cru/win/native/resource.hpp2
-rw-r--r--include/cru/win/native/ui_application.hpp7
-rw-r--r--include/cru/win/native/window.hpp7
-rw-r--r--include/cru/win/native/window_class.hpp4
-rw-r--r--include/cru/win/native/window_render_target.hpp8
12 files changed, 50 insertions, 33 deletions
diff --git a/include/cru/platform/native/base.hpp b/include/cru/platform/native/base.hpp
index 883a9450..3cbf77c5 100644
--- a/include/cru/platform/native/base.hpp
+++ b/include/cru/platform/native/base.hpp
@@ -11,6 +11,7 @@ struct IUiApplication;
struct INativeWindow;
struct INativeWindowResolver;
struct IInputMethodManager;
+struct IInputMethodContextRef;
struct Dpi {
float x;
diff --git a/include/cru/platform/native/input_method.hpp b/include/cru/platform/native/input_method.hpp
index 6ca85852..cce10d93 100644
--- a/include/cru/platform/native/input_method.hpp
+++ b/include/cru/platform/native/input_method.hpp
@@ -8,7 +8,7 @@
namespace cru::platform::native {
// It is a reference, so there is a ref count, remember to destroy it to release
// the ref after use.
-struct IInputMethodContextRef : INativeResource {
+struct IInputMethodContextRef : virtual INativeResource {
// Return true if you should draw composition text manually. Return false if
// system will take care of that for you.
virtual bool ShouldManuallyDrawCompositionText() = 0;
@@ -17,7 +17,7 @@ struct IInputMethodContextRef : INativeResource {
// Get the composition string.
virtual std::string GetCompositionText() = 0;
// Set the candidate window lefttop. Use this method to prepare typing.
- virtual void SetCandidateWindowPosition(const Point& point);
+ virtual void SetCandidateWindowPosition(const Point& point) = 0;
// Triggered when user starts composition.
virtual IEvent<std::nullptr_t>* CompositionStartEvent() = 0;
// Triggered when user stops composition.
@@ -27,7 +27,7 @@ struct IInputMethodContextRef : INativeResource {
virtual IEvent<std::string>* CompositionTextChangeEvent() = 0;
};
-struct IInputMethodManager : INativeResource {
+struct IInputMethodManager : virtual INativeResource {
// Get a reference of context of a window.
virtual std::unique_ptr<IInputMethodContextRef> GetContext(
INativeWindow* window) = 0;
diff --git a/include/cru/platform/native/ui_application.hpp b/include/cru/platform/native/ui_application.hpp
index 0825251e..92222929 100644
--- a/include/cru/platform/native/ui_application.hpp
+++ b/include/cru/platform/native/ui_application.hpp
@@ -45,5 +45,6 @@ struct IUiApplication : public virtual INativeResource {
virtual cru::platform::graph::IGraphFactory* GetGraphFactory() = 0;
virtual ICursorManager* GetCursorManager() = 0;
+ virtual IInputMethodManager* GetInputMethodManager() = 0;
};
} // namespace cru::platform::native
diff --git a/include/cru/win/native/base.hpp b/include/cru/win/native/base.hpp
new file mode 100644
index 00000000..61c9f4da
--- /dev/null
+++ b/include/cru/win/native/base.hpp
@@ -0,0 +1,19 @@
+#pragma once
+#include "../win_pre_config.hpp"
+
+#include "cru/common/base.hpp"
+
+namespace cru::platform::native::win {
+class GodWindow;
+class TimerManager;
+class WinCursor;
+class WinCursorManager;
+class WindowClass;
+class WindowManager;
+class WindowRenderTarget;
+class WinNativeWindow;
+class WinNativeWindowResolver;
+class WinUiApplication;
+class WinInputMethodManager;
+class WinInputMethodContextRef;
+} // namespace cru::platform::native::win
diff --git a/include/cru/win/native/god_window.hpp b/include/cru/win/native/god_window.hpp
index 3cf97e0b..33218a55 100644
--- a/include/cru/win/native/god_window.hpp
+++ b/include/cru/win/native/god_window.hpp
@@ -1,14 +1,9 @@
#pragma once
-#include "../win_pre_config.hpp"
-
-#include "cru/common/base.hpp"
+#include "base.hpp"
#include <memory>
namespace cru::platform::native::win {
-class WinUiApplication;
-class WindowClass;
-
class GodWindow : public Object {
public:
explicit GodWindow(WinUiApplication* application);
diff --git a/include/cru/win/native/input_method.hpp b/include/cru/win/native/input_method.hpp
index a0b18d63..7dc9526a 100644
--- a/include/cru/win/native/input_method.hpp
+++ b/include/cru/win/native/input_method.hpp
@@ -10,10 +10,8 @@
#include <imm.h>
namespace cru::platform::native::win {
-class WinNativeWindow;
-
class WinInputMethodContextRef : public WinNativeResource,
- public IInputMethodContextRef {
+ public virtual IInputMethodContextRef {
public:
WinInputMethodContextRef(WinNativeWindow* window);
@@ -53,4 +51,19 @@ class WinInputMethodContextRef : public WinNativeResource,
Event<std::nullptr_t> composition_end_event_;
Event<std::string> composition_text_change_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<IInputMethodContextRef> GetContext(
+ INativeWindow* window) override;
+};
} // namespace cru::platform::native::win
diff --git a/include/cru/win/native/keyboard.hpp b/include/cru/win/native/keyboard.hpp
index 2d5cc151..afa51c92 100644
--- a/include/cru/win/native/keyboard.hpp
+++ b/include/cru/win/native/keyboard.hpp
@@ -1,5 +1,5 @@
#pragma once
-#include "../win_pre_config.hpp"
+#include "base.hpp"
#include "cru/platform/native/keyboard.hpp"
diff --git a/include/cru/win/native/resource.hpp b/include/cru/win/native/resource.hpp
index 2c76fe6b..5601e40e 100644
--- a/include/cru/win/native/resource.hpp
+++ b/include/cru/win/native/resource.hpp
@@ -1,5 +1,5 @@
#pragma once
-#include "../win_pre_config.hpp"
+#include "base.hpp"
#include "cru/platform/resource.hpp"
diff --git a/include/cru/win/native/ui_application.hpp b/include/cru/win/native/ui_application.hpp
index 8de9d1b5..1c54cc05 100644
--- a/include/cru/win/native/ui_application.hpp
+++ b/include/cru/win/native/ui_application.hpp
@@ -10,11 +10,6 @@ class DirectGraphFactory;
}
namespace cru::platform::native::win {
-class GodWindow;
-class TimerManager;
-class WindowManager;
-class WinCursorManager;
-
class WinUiApplication : public WinNativeResource,
public virtual IUiApplication {
public:
@@ -55,6 +50,7 @@ class WinUiApplication : public WinNativeResource,
}
ICursorManager* GetCursorManager() override;
+ IInputMethodManager* GetInputMethodManager() override;
HINSTANCE GetInstanceHandle() const { return instance_handle_; }
@@ -73,6 +69,7 @@ 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 a27a3384..2129895c 100644
--- a/include/cru/win/native/window.hpp
+++ b/include/cru/win/native/window.hpp
@@ -7,13 +7,6 @@
#include <memory>
namespace cru::platform::native::win {
-class WinUiApplication;
-class WinCursor;
-class WindowClass;
-class WindowManager;
-class WindowRenderTarget;
-class WinNativeWindowResolver;
-
class WinNativeWindow : public WinNativeResource, public virtual INativeWindow {
public:
WinNativeWindow(WinUiApplication* application, WindowClass* window_class,
diff --git a/include/cru/win/native/window_class.hpp b/include/cru/win/native/window_class.hpp
index fd5102a5..2140c304 100644
--- a/include/cru/win/native/window_class.hpp
+++ b/include/cru/win/native/window_class.hpp
@@ -1,7 +1,5 @@
#pragma once
-#include "../win_pre_config.hpp"
-
-#include "cru/common/base.hpp"
+#include "base.hpp"
#include <string>
diff --git a/include/cru/win/native/window_render_target.hpp b/include/cru/win/native/window_render_target.hpp
index ab1d68ef..552e87bc 100644
--- a/include/cru/win/native/window_render_target.hpp
+++ b/include/cru/win/native/window_render_target.hpp
@@ -1,7 +1,5 @@
#pragma once
-#include "../win_pre_config.hpp"
-
-#include "cru/common/base.hpp"
+#include "base.hpp"
namespace cru::platform::graph::win::direct {
class DirectGraphFactory;
@@ -24,7 +22,9 @@ class WindowRenderTarget : public Object {
return factory_;
}
- ID2D1DeviceContext* GetD2D1DeviceContext() { return d2d1_device_context_.Get(); }
+ ID2D1DeviceContext* GetD2D1DeviceContext() {
+ return d2d1_device_context_.Get();
+ }
// Resize the underlying buffer.
void ResizeBuffer(int width, int height);