aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/win/native/keyboard.hpp3
-rw-r--r--include/cru/win/native/window.hpp12
-rw-r--r--src/win/native/keyboard.cpp8
-rw-r--r--src/win/native/window.cpp11
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) {