diff options
author | crupest <crupest@outlook.com> | 2020-03-29 23:29:01 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-03-29 23:29:01 +0800 |
commit | 725d296ff1d58451010295b2dff1a95a18623c44 (patch) | |
tree | bb6b58d2a9e6f4fd37f4310b982b08480f27982c | |
parent | 85322feaa9f646bf9e6f35f57f6d08244b298a46 (diff) | |
download | cru-725d296ff1d58451010295b2dff1a95a18623c44.tar.gz cru-725d296ff1d58451010295b2dff1a95a18623c44.tar.bz2 cru-725d296ff1d58451010295b2dff1a95a18623c44.zip |
...
-rw-r--r-- | include/cru/win/native/keyboard.hpp | 3 | ||||
-rw-r--r-- | include/cru/win/native/window.hpp | 12 | ||||
-rw-r--r-- | src/win/native/keyboard.cpp | 8 | ||||
-rw-r--r-- | src/win/native/window.cpp | 11 |
4 files changed, 21 insertions, 13 deletions
diff --git a/include/cru/win/native/keyboard.hpp b/include/cru/win/native/keyboard.hpp index bf59e519..2d5cc151 100644 --- a/include/cru/win/native/keyboard.hpp +++ b/include/cru/win/native/keyboard.hpp @@ -5,4 +5,5 @@ namespace cru::platform::native::win { KeyCode VirtualKeyToKeyCode(int virtual_key); -} +KeyModifier RetrieveKeyMofifier(); +} // namespace cru::platform::native::win diff --git a/include/cru/win/native/window.hpp b/include/cru/win/native/window.hpp index 819fbfd9..a137463b 100644 --- a/include/cru/win/native/window.hpp +++ b/include/cru/win/native/window.hpp @@ -110,16 +110,12 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { void OnMouseMoveInternal(POINT point); void OnMouseLeaveInternal(); - void OnMouseDownInternal(platform::native::MouseButton button, POINT point, - platform::native::KeyModifier modifier); - void OnMouseUpInternal(platform::native::MouseButton button, POINT point, - platform::native::KeyModifier modifier); + void OnMouseDownInternal(platform::native::MouseButton button, POINT point); + void OnMouseUpInternal(platform::native::MouseButton button, POINT point); void OnMouseWheelInternal(short delta, POINT point); - void OnKeyDownInternal(int virtual_code, - platform::native::KeyModifier modifier); - void OnKeyUpInternal(int virtual_code, - platform::native::KeyModifier modifier); + void OnKeyDownInternal(int virtual_code); + void OnKeyUpInternal(int virtual_code); void OnCharInternal(wchar_t c); void OnActivatedInternal(); diff --git a/src/win/native/keyboard.cpp b/src/win/native/keyboard.cpp index b73d0ffb..98a95778 100644 --- a/src/win/native/keyboard.cpp +++ b/src/win/native/keyboard.cpp @@ -63,4 +63,12 @@ KeyCode VirtualKeyToKeyCode(int virtual_key) { } } } + +KeyModifier RetrieveKeyMofifier() { + KeyModifier result{0}; + if (::GetKeyState(VK_SHIFT) < 0) result |= key_modifiers::shift; + if (::GetKeyState(VK_CONTROL) < 0) result |= key_modifiers::ctrl; + if (::GetKeyState(VK_MENU) < 0) result |= key_modifiers::alt; + return result; +} } // namespace cru::platform::native::win diff --git a/src/win/native/window.cpp b/src/win/native/window.cpp index c7bb1b9d..fea269d2 100644 --- a/src/win/native/window.cpp +++ b/src/win/native/window.cpp @@ -5,6 +5,7 @@ #include "cru/platform/check.hpp" #include "cru/win/native/cursor.hpp" #include "cru/win/native/exception.hpp" +#include "cru/win/native/keyboard.hpp" #include "cru/win/native/ui_application.hpp" #include "cru/win/native/window_class.hpp" #include "cru/win/native/window_render_target.hpp" @@ -383,13 +384,13 @@ void WinNativeWindow::OnMouseLeaveInternal() { void WinNativeWindow::OnMouseDownInternal(platform::native::MouseButton button, POINT point) { const auto dip_point = PiToDip(point); - mouse_down_event_.Raise({button, dip_point}); + mouse_down_event_.Raise({button, dip_point, RetrieveKeyMofifier()}); } void WinNativeWindow::OnMouseUpInternal(platform::native::MouseButton button, POINT point) { const auto dip_point = PiToDip(point); - mouse_up_event_.Raise({button, dip_point}); + mouse_up_event_.Raise({button, dip_point, RetrieveKeyMofifier()}); } void WinNativeWindow::OnMouseWheelInternal(short delta, POINT point) { @@ -398,11 +399,13 @@ void WinNativeWindow::OnMouseWheelInternal(short delta, POINT point) { } void WinNativeWindow::OnKeyDownInternal(int virtual_code) { - key_down_event_.Raise(virtual_code); + key_down_event_.Raise( + {VirtualKeyToKeyCode(virtual_code), RetrieveKeyMofifier()}); } void WinNativeWindow::OnKeyUpInternal(int virtual_code) { - key_up_event_.Raise(virtual_code); + key_up_event_.Raise( + {VirtualKeyToKeyCode(virtual_code), RetrieveKeyMofifier()}); } void WinNativeWindow::OnCharInternal(wchar_t c) { |