mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
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:
@ -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>
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user