@@ -395,6 +395,47 @@ _update_duration_label (ClapperGtkSeekBar *self, gdouble duration)
395395 gtk_adjustment_set_upper (adjustment , duration );
396396}
397397
398+ static gboolean
399+ _find_marks_in_widget (GtkWidget * widget , GtkWidget * * top_marks , GtkWidget * * bottom_marks )
400+ {
401+ GtkWidget * child ;
402+
403+ if (g_strcmp0 (gtk_widget_get_css_name (widget ), "marks" ) == 0 ) {
404+ if (gtk_widget_has_css_class (widget , "top" ))
405+ * top_marks = widget ;
406+ else if (gtk_widget_has_css_class (widget , "bottom" ))
407+ * bottom_marks = widget ;
408+
409+ /* Its unexpected to have marks within marks,
410+ * so do not iterate children of marks widget */
411+ return (* top_marks && * bottom_marks );
412+ }
413+
414+ child = gtk_widget_get_first_child (widget );
415+
416+ while (child != NULL ) {
417+ if (_find_marks_in_widget (child , top_marks , bottom_marks ))
418+ return TRUE;
419+
420+ child = gtk_widget_get_next_sibling (child );
421+ }
422+
423+ return FALSE;
424+ }
425+
426+ static gboolean
427+ _find_last_mark_in_marks (GtkWidget * marks , GtkWidget * * last_mark )
428+ {
429+ GtkWidget * widget = gtk_widget_get_last_child (marks );
430+
431+ if (widget && g_strcmp0 (gtk_widget_get_css_name (widget ), "mark" ) == 0 ) {
432+ * last_mark = widget ;
433+ return TRUE;
434+ }
435+
436+ return FALSE;
437+ }
438+
398439static void
399440_update_scale_marks (ClapperGtkSeekBar * self , ClapperTimeline * timeline )
400441{
@@ -423,11 +464,43 @@ _update_scale_marks (ClapperGtkSeekBar *self, ClapperTimeline *timeline)
423464
424465 for (i = 0 ; i < n_markers ; ++ i ) {
425466 ClapperMarker * marker = clapper_timeline_get_marker (timeline , i );
467+ ClapperMarkerType marker_type = clapper_marker_get_marker_type (marker );
426468 gdouble start = clapper_marker_get_start (marker );
427469
428470 gtk_scale_add_mark (GTK_SCALE (self -> scale ), start , GTK_POS_TOP , NULL );
429471 gtk_scale_add_mark (GTK_SCALE (self -> scale ), start , GTK_POS_BOTTOM , NULL );
430472
473+ if (marker_type >= CLAPPER_MARKER_TYPE_CUSTOM_1 ) {
474+ GtkWidget * top_marks = NULL , * bottom_marks = NULL ;
475+ GtkWidget * top_mark = NULL , * bottom_mark = NULL ;
476+
477+ if (_find_marks_in_widget (self -> scale , & top_marks , & bottom_marks )
478+ && _find_last_mark_in_marks (top_marks , & top_mark )
479+ && _find_last_mark_in_marks (bottom_marks , & bottom_mark )) {
480+ const gchar * custom_name ;
481+
482+ switch (marker_type ) {
483+ case CLAPPER_MARKER_TYPE_CUSTOM_1 :
484+ custom_name = "custom1" ;
485+ break ;
486+ case CLAPPER_MARKER_TYPE_CUSTOM_2 :
487+ custom_name = "custom2" ;
488+ break ;
489+ case CLAPPER_MARKER_TYPE_CUSTOM_3 :
490+ custom_name = "custom3" ;
491+ break ;
492+ default :
493+ custom_name = NULL ;
494+ break ;
495+ }
496+
497+ if (G_LIKELY (custom_name != NULL )) {
498+ gtk_widget_add_css_class (top_mark , custom_name );
499+ gtk_widget_add_css_class (bottom_mark , custom_name );
500+ }
501+ }
502+ }
503+
431504 gst_object_unref (marker );
432505 }
433506
0 commit comments