From 465a6750e84e6d769d09890f442e3def959e8a08 Mon Sep 17 00:00:00 2001 From: Thomas Holder Date: Mon, 17 Jun 2019 14:44:06 +0200 Subject: fix horizontal palette scrolling for macOS --- src/ui/previewholder.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/ui/previewholder.cpp') diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 1e15d054d..1787665f2 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -66,8 +66,15 @@ PreviewHolder::PreviewHolder() : PreviewHolder::~PreviewHolder() = default; +/** + * Translates vertical scrolling into horizontal + */ bool PreviewHolder::on_scroll_event(GdkEventScroll *event) { + if (_wrap) { + return FALSE; + } + // Scroll horizontally by page on mouse wheel auto adj = _scroller->get_hadjustment(); @@ -75,24 +82,35 @@ bool PreviewHolder::on_scroll_event(GdkEventScroll *event) return FALSE; } - int move; + double move; switch (event->direction) { case GDK_SCROLL_UP: + case GDK_SCROLL_LEFT: move = -adj->get_page_size(); break; case GDK_SCROLL_DOWN: + case GDK_SCROLL_RIGHT: move = adj->get_page_size(); break; case GDK_SCROLL_SMOOTH: - move = event->delta_y > 0 ? adj->get_page_size() : -adj->get_page_size(); + if (fabs(event->delta_y) <= fabs(event->delta_x)) { + return FALSE; + } +#ifdef GDK_WINDOWING_QUARTZ + move = event->delta_y; +#else + move = event->delta_y * adj->get_page_size(); +#endif break; + default: + return FALSE; } - double value = std::min(adj->get_upper() - move, adj->get_value() + move ); + double value = adj->get_value() + move; adj->set_value(value); - return FALSE; + return TRUE; } void PreviewHolder::clear() -- cgit v1.2.3