[sysprof] libsysprof-ui: add units display for line graphs
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] libsysprof-ui: add units display for line graphs
- Date: Wed, 31 Jul 2019 22:57:15 +0000 (UTC)
commit 12866c4e15bce0c0650662081a2affbe7b45fdf9
Author: Christian Hergert <chergert redhat com>
Date: Wed Jul 31 15:55:19 2019 -0700
libsysprof-ui: add units display for line graphs
src/libsysprof-ui/sysprof-line-visualizer.c | 51 +++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 2 deletions(-)
---
diff --git a/src/libsysprof-ui/sysprof-line-visualizer.c b/src/libsysprof-ui/sysprof-line-visualizer.c
index c23e8de..188b2e1 100644
--- a/src/libsysprof-ui/sysprof-line-visualizer.c
+++ b/src/libsysprof-ui/sysprof-line-visualizer.c
@@ -49,6 +49,9 @@ typedef struct
*/
PointCache *cache;
+ /* The format for units (such as mHz, Watts, etc). */
+ gchar *units;
+
/*
* Range of the scale for lower and upper.
*/
@@ -105,6 +108,7 @@ enum {
PROP_0,
PROP_Y_LOWER,
PROP_Y_UPPER,
+ PROP_UNITS,
N_PROPS
};
@@ -141,9 +145,12 @@ static gboolean
sysprof_line_visualizer_draw (GtkWidget *widget,
cairo_t *cr)
{
+ static PangoAttrList *attrs = NULL;
SysprofLineVisualizer *self = (SysprofLineVisualizer *)widget;
SysprofLineVisualizerPrivate *priv = sysprof_line_visualizer_get_instance_private (self);
+ g_autofree gchar *upper = NULL;
GtkStyleContext *style_context;
+ PangoLayout *layout;
GtkStateFlags flags;
GtkAllocation alloc;
GdkRectangle clip;
@@ -260,6 +267,28 @@ sysprof_line_visualizer_draw (GtkWidget *widget,
}
}
+ if (!attrs)
+ {
+ attrs = pango_attr_list_new ();
+ pango_attr_list_insert (attrs, pango_attr_scale_new (0.666));
+ }
+
+ if (priv->y_upper != 100.0)
+ {
+ if (priv->units)
+ upper = g_strdup_printf ("%lg %s", priv->y_upper, priv->units);
+ else
+ upper = g_strdup_printf ("%lg", priv->y_upper);
+
+ layout = gtk_widget_create_pango_layout (widget, upper);
+ pango_layout_set_attributes (layout, attrs);
+ cairo_move_to (cr, 2, 2);
+ foreground.alpha *= 0.5;
+ gdk_cairo_set_source_rgba (cr, &foreground);
+ pango_cairo_show_layout (cr, layout);
+ g_clear_object (&layout);
+ }
+
return ret;
}
@@ -356,6 +385,7 @@ sysprof_line_visualizer_finalize (GObject *object)
SysprofLineVisualizer *self = (SysprofLineVisualizer *)object;
SysprofLineVisualizerPrivate *priv = sysprof_line_visualizer_get_instance_private (self);
+ g_clear_pointer (&priv->units, g_free);
g_clear_pointer (&priv->lines, g_array_unref);
g_clear_pointer (&priv->cache, point_cache_unref);
g_clear_pointer (&priv->reader, sysprof_capture_reader_unref);
@@ -388,6 +418,10 @@ sysprof_line_visualizer_get_property (GObject *object,
g_value_set_double (value, priv->y_upper);
break;
+ case PROP_UNITS:
+ g_value_set_string (value, priv->units);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -407,13 +441,19 @@ sysprof_line_visualizer_set_property (GObject *object,
case PROP_Y_LOWER:
priv->y_lower = g_value_get_double (value);
priv->y_lower_set = TRUE;
- gtk_widget_queue_resize (GTK_WIDGET (self));
+ gtk_widget_queue_allocate (GTK_WIDGET (self));
break;
case PROP_Y_UPPER:
priv->y_upper = g_value_get_double (value);
priv->y_upper_set = TRUE;
- gtk_widget_queue_resize (GTK_WIDGET (self));
+ gtk_widget_queue_allocate (GTK_WIDGET (self));
+ break;
+
+ case PROP_UNITS:
+ g_free (priv->units);
+ priv->units = g_value_dup_string (value);
+ gtk_widget_queue_allocate (GTK_WIDGET (self));
break;
default:
@@ -454,6 +494,13 @@ sysprof_line_visualizer_class_init (SysprofLineVisualizerClass *klass)
100.0,
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ properties [PROP_UNITS] =
+ g_param_spec_string ("units",
+ "Units",
+ "The format for units (mHz, Watts, etc)",
+ NULL,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_properties (object_class, N_PROPS, properties);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]