Skip to content

Commit 266c588

Browse files
committed
clapper-gtk: seek-bar: Make custom markers colorful
1 parent 1c0049e commit 266c588

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

src/lib/clapper-gtk/clapper-gtk-seek-bar.c

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
398439
static 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

src/lib/clapper-gtk/css/styles.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,15 @@ clapper-gtk-seek-bar label {
129129
margin-left: 2px;
130130
margin-right: 2px;
131131
}
132+
clapper-gtk-seek-bar scale marks .custom1 indicator {
133+
color: tomato;
134+
}
135+
clapper-gtk-seek-bar scale marks .custom2 indicator {
136+
color: goldenrod;
137+
}
138+
clapper-gtk-seek-bar scale marks .custom3 indicator {
139+
color: limegreen;
140+
}
132141

133142
clapper-gtk-extra-menu-button popover .spinsidebutton {
134143
min-width: 28px;

0 commit comments

Comments
 (0)