diff options
author | crupest <crupest@outlook.com> | 2021-05-12 08:57:45 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-05-12 08:57:45 +0800 |
commit | 1497b881c6d13c5e037dcd57988029df0b0e50eb (patch) | |
tree | 5f89c071cdb7c891d5afb35c49e3a337418bf026 /src | |
parent | 02baef645090f0514fa14b43aecf954fd55257dc (diff) | |
download | cru-1497b881c6d13c5e037dcd57988029df0b0e50eb.tar.gz cru-1497b881c6d13c5e037dcd57988029df0b0e50eb.tar.bz2 cru-1497b881c6d13c5e037dcd57988029df0b0e50eb.zip |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/host/WindowHost.cpp | 15 | ||||
-rw-r--r-- | src/ui/render/ScrollRenderObject.cpp | 5 | ||||
-rw-r--r-- | src/win/gui/Window.cpp | 5 |
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) { |