diff --git a/src/lib/clapper-gtk/clapper-gtk-seek-bar.c b/src/lib/clapper-gtk/clapper-gtk-seek-bar.c index f157379b..6afdbf99 100644 --- a/src/lib/clapper-gtk/clapper-gtk-seek-bar.c +++ b/src/lib/clapper-gtk/clapper-gtk-seek-bar.c @@ -55,6 +55,9 @@ struct _ClapperGtkSeekBar gboolean has_hours; gboolean has_markers; + gboolean can_scrub; + gboolean scrubbing; + gboolean dragging; guint position_uint; @@ -288,6 +291,38 @@ scale_css_classes_changed_cb (GtkWidget *widget, } } +static void +scale_scroll_begin_cb (GtkEventControllerScroll *scroll, ClapperGtkSeekBar *self) +{ + self->can_scrub = TRUE; +} + +static gboolean +scale_scroll_cb (GtkEventControllerScroll *scroll, + gdouble dx, gdouble dy, ClapperGtkSeekBar *self) +{ + if (self->can_scrub && !self->scrubbing) { + GST_DEBUG_OBJECT (self, "Scrubbing start"); + self->scrubbing = TRUE; + gtk_widget_add_css_class (self->scale, "dragging"); + + return TRUE; + } + + return FALSE; +} + +static void +scale_scroll_end_cb (GtkEventControllerScroll *scroll, ClapperGtkSeekBar *self) +{ + if (self->scrubbing) { + GST_DEBUG_OBJECT (self, "Scrubbing end"); + gtk_widget_remove_css_class (self->scale, "dragging"); + self->scrubbing = FALSE; + } + self->can_scrub = FALSE; +} + static void motion_cb (GtkEventControllerMotion *motion, gdouble x, gdouble y, ClapperGtkSeekBar *self) @@ -773,6 +808,9 @@ clapper_gtk_seek_bar_class_init (ClapperGtkSeekBarClass *klass) gtk_widget_class_bind_template_callback (widget_class, scale_value_changed_cb); gtk_widget_class_bind_template_callback (widget_class, scale_css_classes_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_begin_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_end_cb); gtk_widget_class_bind_template_callback (widget_class, motion_cb); gtk_widget_class_bind_template_callback (widget_class, motion_leave_cb); gtk_widget_class_bind_template_callback (widget_class, touch_released_cb); diff --git a/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui b/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui index 264ecb49..c0109aa0 100644 --- a/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui +++ b/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui @@ -29,6 +29,15 @@ position_adjustment + + + capture + both-axes + + + + +