From 21db65167f60a6bff0afbd698e31fdba93fd3a1e Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Tue, 27 Sep 2016 18:27:59 -0700 Subject: [PATCH] line-visualizer-row: use default foreground to draw When drawing lines, default to the foreground color of the widget. This means we also need to queue a draw when the CSS style has been updated. --- lib/sp-line-visualizer-row.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/sp-line-visualizer-row.c b/lib/sp-line-visualizer-row.c index 1bf53b3a..f032e1ad 100644 --- a/lib/sp-line-visualizer-row.c +++ b/lib/sp-line-visualizer-row.c @@ -83,12 +83,14 @@ typedef struct gdouble line_width; GdkRGBA background; GdkRGBA foreground; + guint use_default_style : 1; } LineInfo; typedef struct { PointCache *cache; GArray *lines; + GdkRGBA color; gint width; gint height; } RenderData; @@ -415,6 +417,19 @@ sp_line_visualizer_row_size_allocate (GtkWidget *widget, sp_line_visualizer_row_begin_offscreen_draw (self); } +static void +sp_line_visualizer_row_style_updated (GtkWidget *widget) +{ + SpLineVisualizerRow *self = (SpLineVisualizerRow *)widget; + + g_assert (SP_IS_LINE_VISUALIZER_ROW (self)); + + GTK_WIDGET_CLASS (sp_line_visualizer_row_parent_class)->style_updated (widget); + + sp_line_visualizer_row_begin_offscreen_draw (self); +} + + static void sp_line_visualizer_row_destroy (GtkWidget *widget) { @@ -500,6 +515,7 @@ sp_line_visualizer_row_class_init (SpLineVisualizerRowClass *klass) widget_class->draw = sp_line_visualizer_row_draw; widget_class->destroy = sp_line_visualizer_row_destroy; widget_class->size_allocate = sp_line_visualizer_row_size_allocate; + widget_class->style_updated = sp_line_visualizer_row_style_updated; visualizer_class->set_reader = sp_line_visualizer_row_set_reader; @@ -563,8 +579,7 @@ sp_line_visualizer_row_add_counter (SpLineVisualizerRow *self, g_assert (priv->lines != NULL); line_info.id = counter_id; - line_info.foreground.alpha = 0.4; - line_info.background.alpha = 0.2; + line_info.use_default_style = TRUE; line_info.line_width = 1.0; g_array_append_val (priv->lines, line_info); @@ -851,7 +866,12 @@ sp_line_visualizer_row_render_worker (GTask *task, } cairo_set_line_width (cr, line_info->line_width); - gdk_cairo_set_source_rgba (cr, &line_info->foreground); + + if (line_info->use_default_style) + gdk_cairo_set_source_rgba (cr, &render->color); + else + gdk_cairo_set_source_rgba (cr, &line_info->foreground); + cairo_stroke (cr); } } @@ -895,7 +915,9 @@ sp_line_visualizer_row_render_async (SpLineVisualizerRow *self, SpLineVisualizerRowPrivate *priv = sp_line_visualizer_row_get_instance_private (self); RenderData *render; g_autoptr(GTask) task = NULL; + GtkStyleContext *style_context; GtkAllocation alloc; + GtkStateFlags state; g_assert (SP_IS_LINE_VISUALIZER_ROW (self)); g_assert (cache != NULL); @@ -913,6 +935,10 @@ sp_line_visualizer_row_render_async (SpLineVisualizerRow *self, render->width = alloc.width; render->height = alloc.height; + style_context = gtk_widget_get_style_context (GTK_WIDGET (self)); + state = gtk_widget_get_state_flags (GTK_WIDGET (self)); + gtk_style_context_get_color (style_context, state, &render->color); + g_task_set_task_data (task, render, render_data_free); g_task_run_in_thread (task, sp_line_visualizer_row_render_worker); }