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.
This commit is contained in:
Christian Hergert
2016-09-27 18:27:59 -07:00
parent 7aee4c428b
commit 21db65167f

View File

@ -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);
}