mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-ui: add units display for line graphs
This commit is contained in:
@ -49,6 +49,9 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
PointCache *cache;
|
PointCache *cache;
|
||||||
|
|
||||||
|
/* The format for units (such as mHz, Watts, etc). */
|
||||||
|
gchar *units;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Range of the scale for lower and upper.
|
* Range of the scale for lower and upper.
|
||||||
*/
|
*/
|
||||||
@ -105,6 +108,7 @@ enum {
|
|||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_Y_LOWER,
|
PROP_Y_LOWER,
|
||||||
PROP_Y_UPPER,
|
PROP_Y_UPPER,
|
||||||
|
PROP_UNITS,
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -141,9 +145,12 @@ static gboolean
|
|||||||
sysprof_line_visualizer_draw (GtkWidget *widget,
|
sysprof_line_visualizer_draw (GtkWidget *widget,
|
||||||
cairo_t *cr)
|
cairo_t *cr)
|
||||||
{
|
{
|
||||||
|
static PangoAttrList *attrs = NULL;
|
||||||
SysprofLineVisualizer *self = (SysprofLineVisualizer *)widget;
|
SysprofLineVisualizer *self = (SysprofLineVisualizer *)widget;
|
||||||
SysprofLineVisualizerPrivate *priv = sysprof_line_visualizer_get_instance_private (self);
|
SysprofLineVisualizerPrivate *priv = sysprof_line_visualizer_get_instance_private (self);
|
||||||
|
g_autofree gchar *upper = NULL;
|
||||||
GtkStyleContext *style_context;
|
GtkStyleContext *style_context;
|
||||||
|
PangoLayout *layout;
|
||||||
GtkStateFlags flags;
|
GtkStateFlags flags;
|
||||||
GtkAllocation alloc;
|
GtkAllocation alloc;
|
||||||
GdkRectangle clip;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,6 +385,7 @@ sysprof_line_visualizer_finalize (GObject *object)
|
|||||||
SysprofLineVisualizer *self = (SysprofLineVisualizer *)object;
|
SysprofLineVisualizer *self = (SysprofLineVisualizer *)object;
|
||||||
SysprofLineVisualizerPrivate *priv = sysprof_line_visualizer_get_instance_private (self);
|
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->lines, g_array_unref);
|
||||||
g_clear_pointer (&priv->cache, point_cache_unref);
|
g_clear_pointer (&priv->cache, point_cache_unref);
|
||||||
g_clear_pointer (&priv->reader, sysprof_capture_reader_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);
|
g_value_set_double (value, priv->y_upper);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_UNITS:
|
||||||
|
g_value_set_string (value, priv->units);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
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:
|
case PROP_Y_LOWER:
|
||||||
priv->y_lower = g_value_get_double (value);
|
priv->y_lower = g_value_get_double (value);
|
||||||
priv->y_lower_set = TRUE;
|
priv->y_lower_set = TRUE;
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (self));
|
gtk_widget_queue_allocate (GTK_WIDGET (self));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_Y_UPPER:
|
case PROP_Y_UPPER:
|
||||||
priv->y_upper = g_value_get_double (value);
|
priv->y_upper = g_value_get_double (value);
|
||||||
priv->y_upper_set = TRUE;
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -454,6 +494,13 @@ sysprof_line_visualizer_class_init (SysprofLineVisualizerClass *klass)
|
|||||||
100.0,
|
100.0,
|
||||||
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
(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);
|
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user