[sysprof/wip/visualizers] visualizers: wire zoom manager to visualizers
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof/wip/visualizers] visualizers: wire zoom manager to visualizers
- Date: Thu, 29 Sep 2016 02:57:20 +0000 (UTC)
commit b9b96184cde2d7034ffcfd8db744d482559887c4
Author: Christian Hergert <chergert redhat com>
Date: Wed Sep 28 19:56:39 2016 -0700
visualizers: wire zoom manager to visualizers
This gets the basic zoom control working. I anticipate we'll
need some additional changes once we land panning support.
lib/sp-line-visualizer-row.c | 22 ++++++--
lib/sp-visualizer-row.c | 2 +
lib/sp-visualizer-view.c | 116 ++++++++++++++++++++++++++++++++++-------
lib/sp-visualizer-view.h | 12 +++--
src/resources/ui/sp-window.ui | 1 +
5 files changed, 125 insertions(+), 28 deletions(-)
---
diff --git a/lib/sp-line-visualizer-row.c b/lib/sp-line-visualizer-row.c
index 45471e9..2e42955 100644
--- a/lib/sp-line-visualizer-row.c
+++ b/lib/sp-line-visualizer-row.c
@@ -336,10 +336,13 @@ sp_line_visualizer_row_do_reload (gpointer data)
priv->queued_load = 0;
- sp_line_visualizer_row_load_data_async (self,
- NULL,
- sp_line_visualizer_row_load_data_cb,
- NULL);
+ if (priv->reader != NULL)
+ {
+ sp_line_visualizer_row_load_data_async (self,
+ NULL,
+ sp_line_visualizer_row_load_data_cb,
+ NULL);
+ }
return G_SOURCE_REMOVE;
}
@@ -443,6 +446,16 @@ sp_line_visualizer_row_style_updated (GtkWidget *widget)
}
}
+static void
+sp_line_visualizer_row_set_time_range (SpVisualizerRow *row,
+ gint64 begin_time,
+ gint64 end_time)
+{
+ g_assert (SP_IS_LINE_VISUALIZER_ROW (row));
+ g_assert (begin_time <= end_time);
+
+ sp_line_visualizer_row_queue_reload (SP_LINE_VISUALIZER_ROW (row));
+}
static void
sp_line_visualizer_row_destroy (GtkWidget *widget)
@@ -532,6 +545,7 @@ sp_line_visualizer_row_class_init (SpLineVisualizerRowClass *klass)
widget_class->style_updated = sp_line_visualizer_row_style_updated;
visualizer_class->set_reader = sp_line_visualizer_row_set_reader;
+ visualizer_class->set_time_range = sp_line_visualizer_row_set_time_range;
properties [PROP_TITLE] =
g_param_spec_string ("title",
diff --git a/lib/sp-visualizer-row.c b/lib/sp-visualizer-row.c
index 155b0e5..6983409 100644
--- a/lib/sp-visualizer-row.c
+++ b/lib/sp-visualizer-row.c
@@ -67,6 +67,8 @@ sp_visualizer_row_set_time_range (SpVisualizerRow *self,
if (SP_VISUALIZER_ROW_GET_CLASS (self)->set_time_range)
SP_VISUALIZER_ROW_GET_CLASS (self)->set_time_range (self, begin_time, end_time);
+
+ gtk_widget_queue_draw (GTK_WIDGET (self));
}
void
diff --git a/lib/sp-visualizer-view.c b/lib/sp-visualizer-view.c
index ec53892..39f90f3 100644
--- a/lib/sp-visualizer-view.c
+++ b/lib/sp-visualizer-view.c
@@ -24,17 +24,21 @@
#include "sp-visualizer-ticks.h"
#include "sp-visualizer-view.h"
+#define NSEC_PER_SEC G_GINT64_CONSTANT(1000000000)
+
typedef struct
{
SpCaptureReader *reader;
SpVisualizerList *list;
SpVisualizerTicks *ticks;
+ SpZoomManager *zoom_manager;
} SpVisualizerViewPrivate;
enum {
PROP_0,
PROP_READER,
+ PROP_ZOOM_MANAGER,
N_PROPS
};
@@ -81,12 +85,37 @@ sp_visualizer_view_row_removed (SpVisualizerView *self,
}
static void
+sp_visualizer_view_notify_zoom (SpVisualizerView *self,
+ GParamSpec *pspec,
+ SpZoomManager *zoom_manager)
+{
+ SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
+ gint64 begin_time = 0.0;
+ gint64 end_time;
+ gdouble zoom;
+
+ g_assert (SP_IS_VISUALIZER_VIEW (self));
+ g_assert (SP_IS_ZOOM_MANAGER (zoom_manager));
+
+ zoom = sp_zoom_manager_get_zoom (zoom_manager);
+
+ if (priv->reader != NULL)
+ begin_time = sp_capture_reader_get_start_time (priv->reader);
+
+ end_time = begin_time + (NSEC_PER_SEC * 60.0 / zoom);
+
+ sp_visualizer_list_set_time_range (priv->list, begin_time, end_time);
+ sp_visualizer_ticks_set_time_range (priv->ticks, begin_time, end_time);
+}
+
+static void
sp_visualizer_view_finalize (GObject *object)
{
SpVisualizerView *self = (SpVisualizerView *)object;
SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
g_clear_pointer (&priv->reader, sp_capture_reader_unref);
+ g_clear_object (&priv->zoom_manager);
G_OBJECT_CLASS (sp_visualizer_view_parent_class)->finalize (object);
}
@@ -105,6 +134,10 @@ sp_visualizer_view_get_property (GObject *object,
g_value_set_boxed (value, sp_visualizer_view_get_reader (self));
break;
+ case PROP_ZOOM_MANAGER:
+ g_value_set_object (value, sp_visualizer_view_get_zoom_manager (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -124,6 +157,10 @@ sp_visualizer_view_set_property (GObject *object,
sp_visualizer_view_set_reader (self, g_value_get_boxed (value));
break;
+ case PROP_ZOOM_MANAGER:
+ sp_visualizer_view_set_zoom_manager (self, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -146,6 +183,13 @@ sp_visualizer_view_class_init (SpVisualizerViewClass *klass)
SP_TYPE_CAPTURE_READER,
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ properties [PROP_ZOOM_MANAGER] =
+ g_param_spec_object ("zoom-manager",
+ "Zoom Manager",
+ "The zoom manager for the view",
+ SP_TYPE_ZOOM_MANAGER,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_properties (object_class, N_PROPS, properties);
signals [VISUALIZER_ADDED] =
@@ -211,31 +255,18 @@ sp_visualizer_view_set_reader (SpVisualizerView *self,
SpCaptureReader *reader)
{
SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
- gint64 begin_time = 0;
- gint64 end_time = 0;
g_return_if_fail (SP_IS_VISUALIZER_VIEW (self));
- if (reader != NULL)
+ if (priv->reader != reader)
{
- gint64 real_end_time;
-
- begin_time = sp_capture_reader_get_start_time (reader);
- real_end_time = sp_capture_reader_get_end_time (reader);
-
- end_time = begin_time + (G_GINT64_CONSTANT (1000000000) * 60);
-
- /* If we were able to extract a proper end time and its less
- * than 60 seconds, we will use the whole width to show that.
- */
- if (real_end_time > 0 && real_end_time < end_time)
- end_time = real_end_time;
+ g_clear_pointer (&priv->reader, sp_capture_reader_unref);
+ priv->reader = sp_capture_reader_ref (reader);
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_READER]);
+ sp_visualizer_list_set_reader (priv->list, reader);
+ if (priv->zoom_manager != NULL)
+ sp_visualizer_view_notify_zoom (self, NULL, priv->zoom_manager);
}
-
- sp_visualizer_list_set_reader (priv->list, reader);
- sp_visualizer_list_set_time_range (priv->list, begin_time, end_time);
-
- sp_visualizer_ticks_set_time_range (priv->ticks, 0, end_time - begin_time);
}
static void
@@ -266,3 +297,48 @@ buildable_iface_init (GtkBuildableIface *iface)
parent_buildable = g_type_interface_peek_parent (iface);
iface->add_child = sp_visualizer_view_add_child;
}
+
+SpZoomManager *
+sp_visualizer_view_get_zoom_manager (SpVisualizerView *self)
+{
+ SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
+
+ g_return_val_if_fail (SP_IS_VISUALIZER_VIEW (self), NULL);
+
+ return priv->zoom_manager;
+}
+
+void
+sp_visualizer_view_set_zoom_manager (SpVisualizerView *self,
+ SpZoomManager *zoom_manager)
+{
+ SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
+
+ g_return_if_fail (SP_IS_VISUALIZER_VIEW (self));
+ g_return_if_fail (!zoom_manager || SP_IS_ZOOM_MANAGER (zoom_manager));
+
+ if (zoom_manager != priv->zoom_manager)
+ {
+ if (priv->zoom_manager != NULL)
+ {
+ g_signal_handlers_disconnect_by_func (priv->zoom_manager,
+ G_CALLBACK (sp_visualizer_view_notify_zoom),
+ self);
+ g_clear_object (&priv->zoom_manager);
+ }
+
+ if (zoom_manager != NULL)
+ {
+ priv->zoom_manager = g_object_ref (zoom_manager);
+ g_signal_connect_object (priv->zoom_manager,
+ "notify::zoom",
+ G_CALLBACK (sp_visualizer_view_notify_zoom),
+ self,
+ G_CONNECT_SWAPPED);
+ sp_visualizer_view_notify_zoom (self, NULL, priv->zoom_manager);
+ }
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ZOOM_MANAGER]);
+ gtk_widget_queue_draw (GTK_WIDGET (self));
+ }
+}
diff --git a/lib/sp-visualizer-view.h b/lib/sp-visualizer-view.h
index b1e00a7..ea49cb9 100644
--- a/lib/sp-visualizer-view.h
+++ b/lib/sp-visualizer-view.h
@@ -22,6 +22,7 @@
#include <gtk/gtk.h>
#include "sp-visualizer-row.h"
+#include "sp-zoom-manager.h"
G_BEGIN_DECLS
@@ -56,10 +57,13 @@ struct _SpVisualizerViewClass
gpointer _reserved16;
};
-GtkWidget *sp_visualizer_view_new (void);
-SpCaptureReader *sp_visualizer_view_get_reader (SpVisualizerView *self);
-void sp_visualizer_view_set_reader (SpVisualizerView *self,
- SpCaptureReader *reader);
+GtkWidget *sp_visualizer_view_new (void);
+SpCaptureReader *sp_visualizer_view_get_reader (SpVisualizerView *self);
+void sp_visualizer_view_set_reader (SpVisualizerView *self,
+ SpCaptureReader *reader);
+SpZoomManager *sp_visualizer_view_get_zoom_manager (SpVisualizerView *self);
+void sp_visualizer_view_set_zoom_manager (SpVisualizerView *self,
+ SpZoomManager *zoom_manager);
G_END_DECLS
diff --git a/src/resources/ui/sp-window.ui b/src/resources/ui/sp-window.ui
index 112335e..4324d9f 100644
--- a/src/resources/ui/sp-window.ui
+++ b/src/resources/ui/sp-window.ui
@@ -168,6 +168,7 @@
<child>
<object class="SpVisualizerView" id="visualizers">
<property name="visible">true</property>
+ <property name="zoom-manager">zoom_manager</property>
<child type="visualizer">
<object class="SpCpuVisualizerRow" id="cpu_row">
<property name="title" translatable="yes">CPU</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]