mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
rectangles: add basic tooltip support
We definitely want to do something better, but this at least allows testing some data which is useful now to see what is going on.
This commit is contained in:
@ -200,3 +200,33 @@ rectangles_set_end_time (Rectangles *self,
|
|||||||
/* We might not know the real end time until we've exhausted the stream */
|
/* We might not know the real end time until we've exhausted the stream */
|
||||||
self->end_time = end_time;
|
self->end_time = end_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
rectangles_query_tooltip (Rectangles *self,
|
||||||
|
GtkTooltip *tooltip,
|
||||||
|
const gchar *group,
|
||||||
|
gint x,
|
||||||
|
gint y)
|
||||||
|
{
|
||||||
|
g_assert (self != NULL);
|
||||||
|
g_assert (GTK_IS_TOOLTIP (tooltip));
|
||||||
|
|
||||||
|
/* TODO: Sort, binary search, etc. */
|
||||||
|
|
||||||
|
for (guint i = 0; i < self->rectangles->len; i++)
|
||||||
|
{
|
||||||
|
const Rectangle *r = &g_array_index (self->rectangles, Rectangle, i);
|
||||||
|
|
||||||
|
if (r->area.x <= x &&
|
||||||
|
r->area.y <= y &&
|
||||||
|
r->area.x + r->area.width >= x &&
|
||||||
|
r->area.y + r->area.height >= y)
|
||||||
|
{
|
||||||
|
g_autofree gchar *text = g_strdup_printf ("%s:%s: %s", group, r->name, r->message);
|
||||||
|
gtk_tooltip_set_text (tooltip, text);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|||||||
@ -39,5 +39,10 @@ void rectangles_add (Rectangles *self,
|
|||||||
const gchar *message);
|
const gchar *message);
|
||||||
void rectangles_set_end_time (Rectangles *self,
|
void rectangles_set_end_time (Rectangles *self,
|
||||||
gint64 end_time);
|
gint64 end_time);
|
||||||
|
gboolean rectangles_query_tooltip (Rectangles *self,
|
||||||
|
GtkTooltip *tooltip,
|
||||||
|
const gchar *group,
|
||||||
|
gint x,
|
||||||
|
gint y);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -117,6 +117,24 @@ sp_mark_visualizer_row_worker (GTask *task,
|
|||||||
g_task_return_pointer (task, g_steal_pointer (&state->rects), (GDestroyNotify)rectangles_free);
|
g_task_return_pointer (task, g_steal_pointer (&state->rects), (GDestroyNotify)rectangles_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sp_mark_visualizer_row_query_tooltip (GtkWidget *widget,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gboolean keyboard_mode,
|
||||||
|
GtkTooltip *tooltip)
|
||||||
|
{
|
||||||
|
SpMarkVisualizerRow *self = (SpMarkVisualizerRow *)widget;
|
||||||
|
SpMarkVisualizerRowPrivate *priv = sp_mark_visualizer_row_get_instance_private (self);
|
||||||
|
|
||||||
|
g_assert (SP_IS_MARK_VISUALIZER_ROW (self));
|
||||||
|
|
||||||
|
if (priv->rectangles == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return rectangles_query_tooltip (priv->rectangles, tooltip, priv->group, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
sp_mark_visualizer_row_draw (GtkWidget *widget,
|
sp_mark_visualizer_row_draw (GtkWidget *widget,
|
||||||
cairo_t *cr)
|
cairo_t *cr)
|
||||||
@ -282,6 +300,7 @@ sp_mark_visualizer_row_class_init (SpMarkVisualizerRowClass *klass)
|
|||||||
object_class->set_property = sp_mark_visualizer_row_set_property;
|
object_class->set_property = sp_mark_visualizer_row_set_property;
|
||||||
|
|
||||||
widget_class->draw = sp_mark_visualizer_row_draw;
|
widget_class->draw = sp_mark_visualizer_row_draw;
|
||||||
|
widget_class->query_tooltip = sp_mark_visualizer_row_query_tooltip;
|
||||||
|
|
||||||
visualizer_class->set_reader = sp_mark_visualizer_row_set_reader;
|
visualizer_class->set_reader = sp_mark_visualizer_row_set_reader;
|
||||||
|
|
||||||
@ -308,6 +327,8 @@ sp_mark_visualizer_row_init (SpMarkVisualizerRow *self)
|
|||||||
SpMarkVisualizerRowPrivate *priv = sp_mark_visualizer_row_get_instance_private (self);
|
SpMarkVisualizerRowPrivate *priv = sp_mark_visualizer_row_get_instance_private (self);
|
||||||
PangoAttrList *attrs = pango_attr_list_new ();
|
PangoAttrList *attrs = pango_attr_list_new ();
|
||||||
|
|
||||||
|
gtk_widget_set_has_tooltip (GTK_WIDGET (self), TRUE);
|
||||||
|
|
||||||
pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_SMALL * PANGO_SCALE_SMALL));
|
pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_SMALL * PANGO_SCALE_SMALL));
|
||||||
|
|
||||||
priv->label = g_object_new (GTK_TYPE_LABEL,
|
priv->label = g_object_new (GTK_TYPE_LABEL,
|
||||||
|
|||||||
Reference in New Issue
Block a user