visualizer-view: implement basic panning

There are lots of little things that need fixing, such as the
ticks positioning, and reusing surfaces as much as possible, but
this gets our "MVP" panning in place.
This commit is contained in:
Christian Hergert
2016-09-29 14:37:00 -07:00
parent 342ee71119
commit caa95fcca7
2 changed files with 84 additions and 7 deletions

View File

@ -12,11 +12,25 @@
</object>
</child>
<child>
<object class="GtkScrolledWindow">
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="visible">true</property>
<property name="propagate-natural-height">true</property>
<child>
<object class="SpVisualizerList" id="list">
<object class="GtkScrolledWindow">
<property name="hscrollbar-policy">external</property>
<property name="visible">true</property>
<property name="propagate-natural-height">true</property>
<child>
<object class="SpVisualizerList" id="list">
<property name="visible">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkScrollbar" id="scrollbar">
<property name="adjustment">scroll_adjustment</property>
<property name="orientation">horizontal</property>
<property name="visible">true</property>
</object>
</child>
@ -25,4 +39,9 @@
</object>
</child>
</template>
<object class="GtkAdjustment" id="scroll_adjustment">
<property name="lower">0.0</property>
<property name="upper">0.0</property>
<property name="value">0.0</property>
</object>
</interface>

View File

@ -29,10 +29,11 @@
typedef struct
{
SpCaptureReader *reader;
SpZoomManager *zoom_manager;
SpVisualizerList *list;
GtkAdjustment *scroll_adjustment;
SpVisualizerTicks *ticks;
SpZoomManager *zoom_manager;
} SpVisualizerViewPrivate;
enum {
@ -84,6 +85,41 @@ sp_visualizer_view_row_removed (SpVisualizerView *self,
g_signal_emit (self, signals [VISUALIZER_REMOVED], 0, widget);
}
static void
sp_visualizer_view_set_time_range (SpVisualizerView *self,
gint64 begin_time,
gint64 end_time)
{
SpVisualizerViewPrivate *priv = sp_visualizer_view_get_instance_private (self);
g_assert (SP_IS_VISUALIZER_VIEW (self));
if (begin_time < end_time)
{
gint64 tmp = begin_time;
begin_time = end_time;
end_time = tmp;
}
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_adjustment_value_changed (SpVisualizerView *self,
GtkAdjustment *adjustment)
{
gint64 begin_time;
gint64 end_time;
g_assert (SP_IS_VISUALIZER_VIEW (self));
g_assert (GTK_IS_ADJUSTMENT (adjustment));
begin_time = gtk_adjustment_get_value (adjustment);
end_time = begin_time + gtk_adjustment_get_page_size (adjustment);
sp_visualizer_view_set_time_range (self, begin_time, end_time);
}
static void
sp_visualizer_view_notify_zoom (SpVisualizerView *self,
GParamSpec *pspec,
@ -104,8 +140,8 @@ sp_visualizer_view_notify_zoom (SpVisualizerView *self,
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);
sp_visualizer_view_set_time_range (self, begin_time, end_time);
gtk_adjustment_set_page_size (priv->scroll_adjustment, end_time - begin_time);
}
static void
@ -210,6 +246,7 @@ sp_visualizer_view_class_init (SpVisualizerViewClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/ui/sp-visualizer-view.ui");
gtk_widget_class_bind_template_child_private (widget_class, SpVisualizerView, list);
gtk_widget_class_bind_template_child_private (widget_class, SpVisualizerView, scroll_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, SpVisualizerView, ticks);
gtk_widget_class_set_css_name (widget_class, "visualizers");
@ -233,6 +270,12 @@ sp_visualizer_view_init (SpVisualizerView *self)
G_CALLBACK (sp_visualizer_view_row_removed),
self,
G_CONNECT_SWAPPED);
g_signal_connect_object (priv->scroll_adjustment,
"value-changed",
G_CALLBACK (sp_visualizer_view_adjustment_value_changed),
self,
G_CONNECT_SWAPPED);
}
/**
@ -261,9 +304,24 @@ sp_visualizer_view_set_reader (SpVisualizerView *self,
if (priv->reader != reader)
{
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 (reader != NULL)
{
gint64 begin_time = 0;
gint64 end_time = 0;
priv->reader = sp_capture_reader_ref (reader);
begin_time = sp_capture_reader_get_start_time (reader);
end_time = sp_capture_reader_get_end_time (reader);
g_object_set (priv->scroll_adjustment,
"lower", (gdouble)begin_time,
"upper", (gdouble)end_time,
"value", (gdouble)begin_time,
NULL);
}
if (priv->zoom_manager != NULL)
sp_visualizer_view_notify_zoom (self, NULL, priv->zoom_manager);
}