summaryrefslogtreecommitdiffstats
path: root/src/ui/previewholder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/previewholder.cpp')
-rw-r--r--src/ui/previewholder.cpp26
1 files changed, 22 insertions, 4 deletions
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()