Skip to content

Commit ee37574

Browse files
committed
fix some scroll direction regressions where up!=right (e.g. up==left==previous, down==right==next)
1 parent 9fb12ff commit ee37574

3 files changed

Lines changed: 22 additions & 12 deletions

File tree

src/develop/imageop.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2368,9 +2368,13 @@ static gboolean _presets_scroll_callback(GtkWidget *widget,
23682368
{
23692369
if(dt_gui_ignore_scroll(event)) return FALSE;
23702370

2371-
int delta_y = 0;
2372-
if(dt_gui_get_scroll_unit_delta(event, &delta_y))
2373-
dt_gui_presets_apply_adjacent_preset(module, delta_y);
2371+
// preset cycling: right==down==next
2372+
int delta_x = 0, delta_y = 0;
2373+
if(dt_gui_get_scroll_unit_deltas(event, &delta_x, &delta_y))
2374+
{
2375+
const int delta = abs(delta_x) > abs(delta_y) ? delta_x : delta_y;
2376+
dt_gui_presets_apply_adjacent_preset(module, delta);
2377+
}
23742378

23752379
return TRUE;
23762380
}

src/dtgtk/culling.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/libs/tools/timeline.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,10 +1342,11 @@ static gboolean _lib_timeline_scroll_callback(GtkWidget *w, GdkEventScroll *e, d
13421342
}
13431343
else
13441344
{
1345-
int delta;
1346-
if(dt_gui_get_scroll_unit_delta(e, &delta))
1345+
// timeline panning: right==down==forward
1346+
int delta_x = 0, delta_y = 0;
1347+
if(dt_gui_get_scroll_unit_deltas(e, &delta_x, &delta_y))
13471348
{
1348-
int move = delta;
1349+
int move = abs(delta_x) > abs(delta_y) ? delta_x : delta_y;
13491350
if(dt_modifier_is(e->state, GDK_SHIFT_MASK)) move *= 2;
13501351

13511352
_time_add(&(strip->time_pos), move, strip->zoom);

0 commit comments

Comments
 (0)