@@ -694,10 +694,11 @@ static gboolean _event_scroll(GtkWidget *widget,
694694 gdouble dx = 0.0 , dy = 0.0 ;
695695 if (dt_gui_get_scroll_deltas (e , & dx , & dy ) && (dx != 0.0 || dy != 0.0 ))
696696 {
697- // dt_gui_get_scroll_deltas gives the raw fractional platform delta.
697+ // dt_gui_get_scroll_deltas gives the raw fractional platform delta.
698698 // Scale so that one full unit of scroll (delta_y == 1.0) matches the
699- // 0.5 zoom_delta of a discrete mouse-wheel click.
700- const float zoom_delta = (float )(- (dx + dy ) * 0.5 );
699+ // 0.5 zoom_delta of a discrete mouse-wheel click. right==up==zoom-in
700+ const gdouble delta = fabs (dx ) > fabs (dy ) ? - dx : dy ;
701+ const float zoom_delta = (float )(- delta * 0.5 );
701702 // convert screen to culling coordinates
702703 int ox = 0 , oy = 0 ;
703704 GdkWindow * win = gtk_widget_get_window (table -> widget );
@@ -750,12 +751,14 @@ static gboolean _event_scroll(GtkWidget *widget,
750751 }
751752 }
752753
753- int delta ;
754- if (dt_gui_get_scroll_unit_delta (e , & delta ))
754+ int delta_x = 0 , delta_y = 0 ;
755+ if (dt_gui_get_scroll_unit_deltas (e , & delta_x , & delta_y ))
755756 {
757+ const gboolean is_horizontal = abs (delta_x ) > abs (delta_y );
756758 if (dt_modifiers_include (e -> state , GDK_CONTROL_MASK ))
757759 {
758- // zooming
760+ // zooming: right==up==zoom-in
761+ const int delta = is_horizontal ? - delta_x : delta_y ;
759762 const float zoom_delta = delta < 0 ? 0.5f : -0.5f ;
760763 // convert screen to culling coordinates
761764 int ox = 0 , oy = 0 ;
@@ -775,6 +778,8 @@ static gboolean _event_scroll(GtkWidget *widget,
775778 }
776779 else
777780 {
781+ // navigation: right==down==next
782+ const int delta = is_horizontal ? delta_x : delta_y ;
778783 const int move = delta < 0 ? -1 : 1 ;
779784 dt_print (DT_DEBUG_INPUT , "[culling scroll] navigate move=%d" , move );
780785 _thumbs_move (table , move );
0 commit comments