diff options
author | crupest <crupest@outlook.com> | 2018-11-27 17:53:21 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-27 17:53:21 +0800 |
commit | 7ccb08ac09a83e81a822712b712dc0473c9b23cf (patch) | |
tree | a5757aca9903a5bcddf6b480d57030fd27b2ba1f /src/ui/controls | |
parent | 7e00386fc0895f8b08cd64ef737cb6c618955635 (diff) | |
download | cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.gz cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.bz2 cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.zip |
Add mouse wheel support.
Diffstat (limited to 'src/ui/controls')
-rw-r--r-- | src/ui/controls/scroll_control.cpp | 23 | ||||
-rw-r--r-- | src/ui/controls/scroll_control.hpp | 4 |
2 files changed, 26 insertions, 1 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_; diff --git a/src/ui/controls/scroll_control.hpp b/src/ui/controls/scroll_control.hpp index 76762f21..0541a010 100644 --- a/src/ui/controls/scroll_control.hpp +++ b/src/ui/controls/scroll_control.hpp @@ -16,7 +16,7 @@ namespace cru::ui::controls // Done: Draw(no need) // Done: API // Done: ScrollBar - // TODO: MouseEvent + // Done: MouseEvent class ScrollControl : public Control { private: @@ -128,6 +128,8 @@ namespace cru::ui::controls void OnMouseMoveCore(events::MouseEventArgs& args) override final; void OnMouseUpCore(events::MouseButtonEventArgs& args) override final; + void OnMouseWheelCore(events::MouseWheelEventArgs& args) override; + private: void CoerceAndSetOffsets(float offset_x, float offset_y, bool update_children = true); void UpdateScrollBarVisibility(); |