diff --git a/src/libsysprof-gtk/sysprof-line-layer.c b/src/libsysprof-gtk/sysprof-line-layer.c index 16a801cb..c0fe42b8 100644 --- a/src/libsysprof-gtk/sysprof-line-layer.c +++ b/src/libsysprof-gtk/sysprof-line-layer.c @@ -26,11 +26,15 @@ struct _SysprofLineLayer { SysprofChartLayer parent_instance; + SysprofXYSeries *series; + GdkRGBA color; - guint use_curves : 1; - guint flip_y : 1; + + guint dashed : 1; guint fill : 1; + guint flip_y : 1; + guint use_curves : 1; }; G_DEFINE_FINAL_TYPE (SysprofLineLayer, sysprof_line_layer, SYSPROF_TYPE_CHART_LAYER) @@ -38,6 +42,7 @@ G_DEFINE_FINAL_TYPE (SysprofLineLayer, sysprof_line_layer, SYSPROF_TYPE_CHART_LA enum { PROP_0, PROP_COLOR, + PROP_DASHED, PROP_FILL, PROP_FLIP_Y, PROP_SERIES, @@ -145,6 +150,9 @@ sysprof_line_layer_snapshot (GtkWidget *widget, cairo_fill_preserve (cr); } + if (self->dashed) + cairo_set_dash (cr, (double[]){(1./height*2)}, 1, 0); + gdk_cairo_set_source_rgba (cr, &self->color); cairo_stroke (cr); @@ -175,6 +183,10 @@ sysprof_line_layer_get_property (GObject *object, g_value_set_boxed (value, sysprof_line_layer_get_color (self)); break; + case PROP_DASHED: + g_value_set_boolean (value, sysprof_line_layer_get_dashed (self)); + break; + case PROP_FILL: g_value_set_boolean (value, sysprof_line_layer_get_fill (self)); break; @@ -210,6 +222,10 @@ sysprof_line_layer_set_property (GObject *object, sysprof_line_layer_set_color (self, g_value_get_boxed (value)); break; + case PROP_DASHED: + sysprof_line_layer_set_dashed (self, g_value_get_boolean (value)); + break; + case PROP_FILL: sysprof_line_layer_set_fill (self, g_value_get_boolean (value)); break; @@ -248,6 +264,11 @@ sysprof_line_layer_class_init (SysprofLineLayerClass *klass) GDK_TYPE_RGBA, (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); + properties [PROP_DASHED] = + g_param_spec_boolean ("dashed", NULL, NULL, + FALSE, + (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); + properties [PROP_FILL] = g_param_spec_boolean ("fill", NULL, NULL, FALSE, @@ -336,6 +357,30 @@ sysprof_line_layer_set_series (SysprofLineLayer *self, gtk_widget_queue_draw (GTK_WIDGET (self)); } +gboolean +sysprof_line_layer_get_dashed (SysprofLineLayer *self) +{ + g_return_val_if_fail (SYSPROF_IS_LINE_LAYER (self), FALSE); + + return self->dashed; +} + +void +sysprof_line_layer_set_dashed (SysprofLineLayer *self, + gboolean dashed) +{ + g_return_if_fail (SYSPROF_IS_LINE_LAYER (self)); + + dashed = !!dashed; + + if (dashed != self->dashed) + { + self->dashed = dashed; + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DASHED]); + gtk_widget_queue_draw (GTK_WIDGET (self)); + } +} + gboolean sysprof_line_layer_get_fill (SysprofLineLayer *self) { diff --git a/src/libsysprof-gtk/sysprof-line-layer.h b/src/libsysprof-gtk/sysprof-line-layer.h index 7f7660cd..a8a3a1f2 100644 --- a/src/libsysprof-gtk/sysprof-line-layer.h +++ b/src/libsysprof-gtk/sysprof-line-layer.h @@ -45,6 +45,11 @@ SYSPROF_AVAILABLE_IN_ALL void sysprof_line_layer_set_series (SysprofLineLayer *self, SysprofXYSeries *series); SYSPROF_AVAILABLE_IN_ALL +gboolean sysprof_line_layer_get_dashed (SysprofLineLayer *self); +SYSPROF_AVAILABLE_IN_ALL +void sysprof_line_layer_set_dashed (SysprofLineLayer *self, + gboolean dashed); +SYSPROF_AVAILABLE_IN_ALL gboolean sysprof_line_layer_get_fill (SysprofLineLayer *self); SYSPROF_AVAILABLE_IN_ALL void sysprof_line_layer_set_fill (SysprofLineLayer *self,