aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls/scroll_control.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-11-27 17:53:21 +0800
committercrupest <crupest@outlook.com>2018-11-27 17:53:21 +0800
commit7ccb08ac09a83e81a822712b712dc0473c9b23cf (patch)
treea5757aca9903a5bcddf6b480d57030fd27b2ba1f /src/ui/controls/scroll_control.cpp
parent7e00386fc0895f8b08cd64ef737cb6c618955635 (diff)
downloadcru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.gz
cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.bz2
cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.zip
Add mouse wheel support.
Diffstat (limited to 'src/ui/controls/scroll_control.cpp')
-rw-r--r--src/ui/controls/scroll_control.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/ui/controls/scroll_control.cpp b/src/ui/controls/scroll_control.cpp
index 103a5c20..aa5403d4 100644
--- a/src/ui/controls/scroll_control.cpp
+++ b/src/ui/controls/scroll_control.cpp
@@ -308,6 +308,29 @@ namespace cru::ui::controls
}
}
+ void ScrollControl::OnMouseWheelCore(events::MouseWheelEventArgs& args)
+ {
+ Control::OnMouseWheelCore(args);
+
+ constexpr const auto view_delta = 30.0f;
+
+ if (args.GetDelta() == 0.0f)
+ return;
+
+ const auto content_rect = GetRect(RectRange::Content);
+ if (IsVerticalScrollEnabled() && GetScrollOffsetY() != (args.GetDelta() > 0.0f ? 0.0f : AtLeast0(GetViewHeight() - content_rect.height)))
+ {
+ SetScrollOffset(std::nullopt, GetScrollOffsetY() - args.GetDelta() / WHEEL_DELTA * view_delta);
+ return;
+ }
+
+ if (IsHorizontalScrollEnabled() && GetScrollOffsetX() != (args.GetDelta() > 0.0f ? 0.0f : AtLeast0(GetViewWidth() - content_rect.width)))
+ {
+ SetScrollOffset(GetScrollOffsetX() - args.GetDelta() / WHEEL_DELTA * view_delta, std::nullopt);
+ return;
+ }
+ }
+
void ScrollControl::CoerceAndSetOffsets(const float offset_x, const float offset_y, const bool update_children)
{
const auto old_offset_x = offset_x_;