aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-05-12 08:57:45 +0800
committercrupest <crupest@outlook.com>2021-05-12 08:57:45 +0800
commit1497b881c6d13c5e037dcd57988029df0b0e50eb (patch)
tree5f89c071cdb7c891d5afb35c49e3a337418bf026 /src
parent02baef645090f0514fa14b43aecf954fd55257dc (diff)
downloadcru-1497b881c6d13c5e037dcd57988029df0b0e50eb.tar.gz
cru-1497b881c6d13c5e037dcd57988029df0b0e50eb.tar.bz2
cru-1497b881c6d13c5e037dcd57988029df0b0e50eb.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/ui/host/WindowHost.cpp15
-rw-r--r--src/ui/render/ScrollRenderObject.cpp5
-rw-r--r--src/win/gui/Window.cpp5
3 files changed, 22 insertions, 3 deletions
diff --git a/src/ui/host/WindowHost.cpp b/src/ui/host/WindowHost.cpp
index eac2ef41..e24a883f 100644
--- a/src/ui/host/WindowHost.cpp
+++ b/src/ui/host/WindowHost.cpp
@@ -36,6 +36,7 @@ CRU_DEFINE_EVENT_NAME(MouseLeave)
CRU_DEFINE_EVENT_NAME(MouseMove)
CRU_DEFINE_EVENT_NAME(MouseDown)
CRU_DEFINE_EVENT_NAME(MouseUp)
+CRU_DEFINE_EVENT_NAME(MouseWheel)
CRU_DEFINE_EVENT_NAME(KeyDown)
CRU_DEFINE_EVENT_NAME(KeyUp)
@@ -145,6 +146,8 @@ gsl::not_null<platform::gui::INativeWindow*> WindowHost::CreateNativeWindow(
&WindowHost::OnNativeMouseDown, event_revoker_guards_);
BindNativeEvent(this, native_window, native_window->MouseUpEvent(),
&WindowHost::OnNativeMouseUp, event_revoker_guards_);
+ BindNativeEvent(this, native_window, native_window->MouseWheelEvent(),
+ &WindowHost::OnNativeMouseWheel, event_revoker_guards_);
BindNativeEvent(this, native_window, native_window->KeyDownEvent(),
&WindowHost::OnNativeKeyDown, event_revoker_guards_);
BindNativeEvent(this, native_window, native_window->KeyUpEvent(),
@@ -383,6 +386,18 @@ void WindowHost::OnNativeMouseUp(
nullptr, args.point, args.button, args.modifier);
}
+void WindowHost::OnNativeMouseWheel(
+ platform::gui::INativeWindow* window,
+ const platform::gui::NativeMouseWheelEventArgs& args) {
+ CRU_UNUSED(window)
+
+ controls::Control* control =
+ mouse_captured_control_ ? mouse_captured_control_ : HitTest(args.point);
+ DispatchEvent(event_names::MouseWheel, control,
+ &controls::Control::MouseWheelEvent, nullptr, args.point,
+ args.delta, args.modifier);
+}
+
void WindowHost::OnNativeKeyDown(
INativeWindow* window, const platform::gui::NativeKeyEventArgs& args) {
CRU_UNUSED(window)
diff --git a/src/ui/render/ScrollRenderObject.cpp b/src/ui/render/ScrollRenderObject.cpp
index d0cdfdf6..93472cdc 100644
--- a/src/ui/render/ScrollRenderObject.cpp
+++ b/src/ui/render/ScrollRenderObject.cpp
@@ -212,7 +212,10 @@ void ScrollRenderObject::InstallMouseWheelHandler(controls::Control* control) {
if (control != nullptr) {
guard_ += control->MouseWheelEvent()->Bubble()->PrependShortCircuitHandler(
[this](event::MouseWheelEventArgs& args) {
- const auto delta = args.GetDelta();
+ auto delta = args.GetDelta();
+
+ delta *= 24;
+
if (delta > 0) {
if (VerticalCanScrollDown()) {
ApplyScroll(
diff --git a/src/win/gui/Window.cpp b/src/win/gui/Window.cpp
index efd3bfcc..4c75a319 100644
--- a/src/win/gui/Window.cpp
+++ b/src/win/gui/Window.cpp
@@ -438,8 +438,9 @@ void WinNativeWindow::OnMouseUpInternal(platform::gui::MouseButton button,
}
void WinNativeWindow::OnMouseWheelInternal(short delta, POINT point) {
- CRU_UNUSED(delta)
- CRU_UNUSED(point)
+ const auto dip_point = PixelToDip(point);
+ const float d = -((float)delta / 120.f);
+ mouse_wheel_event_.Raise({d, dip_point, RetrieveKeyMofifier()});
}
void WinNativeWindow::OnKeyDownInternal(int virtual_code) {