[sysprof] rectangles: add basic tooltip support
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] rectangles: add basic tooltip support
- Date: Wed, 16 May 2018 15:34:23 +0000 (UTC)
commit 9381ae3070ef8d1173dbb0b55ebc57d97412d8d0
Author: Christian Hergert <chergert redhat com>
Date: Wed May 16 16:33:46 2018 +0100
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.
lib/util/rectangles.c | 30 +++++++++++++++++++++++++++++
lib/util/rectangles.h | 31 +++++++++++++++++------------
lib/visualizers/sp-mark-visualizer-row.c | 21 ++++++++++++++++++++
3 files changed, 69 insertions(+), 13 deletions(-)
---
diff --git a/lib/util/rectangles.c b/lib/util/rectangles.c
index 14ff26b..653cc98 100644
--- a/lib/util/rectangles.c
+++ b/lib/util/rectangles.c
@@ -200,3 +200,33 @@ rectangles_set_end_time (Rectangles *self,
/* We might not know the real end time until we've exhausted the stream */
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;
+}
diff --git a/lib/util/rectangles.h b/lib/util/rectangles.h
index 944b7a1..e733392 100644
--- a/lib/util/rectangles.h
+++ b/lib/util/rectangles.h
@@ -26,18 +26,23 @@ G_BEGIN_DECLS
typedef struct _Rectangles Rectangles;
-Rectangles *rectangles_new (gint64 begin_time,
- gint64 end_time);
-void rectangles_free (Rectangles *self);
-void rectangles_draw (Rectangles *self,
- GtkWidget *widget,
- cairo_t *cr);
-void rectangles_add (Rectangles *self,
- gint64 begin_time,
- gint64 end_time,
- const gchar *name,
- const gchar *message);
-void rectangles_set_end_time (Rectangles *self,
- gint64 end_time);
+Rectangles *rectangles_new (gint64 begin_time,
+ gint64 end_time);
+void rectangles_free (Rectangles *self);
+void rectangles_draw (Rectangles *self,
+ GtkWidget *widget,
+ cairo_t *cr);
+void rectangles_add (Rectangles *self,
+ gint64 begin_time,
+ gint64 end_time,
+ const gchar *name,
+ const gchar *message);
+void rectangles_set_end_time (Rectangles *self,
+ gint64 end_time);
+gboolean rectangles_query_tooltip (Rectangles *self,
+ GtkTooltip *tooltip,
+ const gchar *group,
+ gint x,
+ gint y);
G_END_DECLS
diff --git a/lib/visualizers/sp-mark-visualizer-row.c b/lib/visualizers/sp-mark-visualizer-row.c
index 413e715..16e0581 100644
--- a/lib/visualizers/sp-mark-visualizer-row.c
+++ b/lib/visualizers/sp-mark-visualizer-row.c
@@ -118,6 +118,24 @@ sp_mark_visualizer_row_worker (GTask *task,
}
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
sp_mark_visualizer_row_draw (GtkWidget *widget,
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;
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;
@@ -308,6 +327,8 @@ sp_mark_visualizer_row_init (SpMarkVisualizerRow *self)
SpMarkVisualizerRowPrivate *priv = sp_mark_visualizer_row_get_instance_private (self);
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));
priv->label = g_object_new (GTK_TYPE_LABEL,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]