mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +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:
@ -11,8 +11,13 @@
|
|||||||
<property name="visible">true</property>
|
<property name="visible">true</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="visible">true</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="hscrollbar-policy">external</property>
|
||||||
<property name="visible">true</property>
|
<property name="visible">true</property>
|
||||||
<property name="propagate-natural-height">true</property>
|
<property name="propagate-natural-height">true</property>
|
||||||
<child>
|
<child>
|
||||||
@ -22,7 +27,21 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</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>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</template>
|
</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>
|
</interface>
|
||||||
|
|||||||
@ -29,10 +29,11 @@
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SpCaptureReader *reader;
|
SpCaptureReader *reader;
|
||||||
|
SpZoomManager *zoom_manager;
|
||||||
|
|
||||||
SpVisualizerList *list;
|
SpVisualizerList *list;
|
||||||
|
GtkAdjustment *scroll_adjustment;
|
||||||
SpVisualizerTicks *ticks;
|
SpVisualizerTicks *ticks;
|
||||||
SpZoomManager *zoom_manager;
|
|
||||||
} SpVisualizerViewPrivate;
|
} SpVisualizerViewPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -84,6 +85,41 @@ sp_visualizer_view_row_removed (SpVisualizerView *self,
|
|||||||
g_signal_emit (self, signals [VISUALIZER_REMOVED], 0, widget);
|
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
|
static void
|
||||||
sp_visualizer_view_notify_zoom (SpVisualizerView *self,
|
sp_visualizer_view_notify_zoom (SpVisualizerView *self,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
@ -104,8 +140,8 @@ sp_visualizer_view_notify_zoom (SpVisualizerView *self,
|
|||||||
|
|
||||||
end_time = begin_time + (NSEC_PER_SEC * 60.0 / zoom);
|
end_time = begin_time + (NSEC_PER_SEC * 60.0 / zoom);
|
||||||
|
|
||||||
sp_visualizer_list_set_time_range (priv->list, begin_time, end_time);
|
sp_visualizer_view_set_time_range (self, begin_time, end_time);
|
||||||
sp_visualizer_ticks_set_time_range (priv->ticks, begin_time, end_time);
|
gtk_adjustment_set_page_size (priv->scroll_adjustment, end_time - begin_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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_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, 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_bind_template_child_private (widget_class, SpVisualizerView, ticks);
|
||||||
|
|
||||||
gtk_widget_class_set_css_name (widget_class, "visualizers");
|
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),
|
G_CALLBACK (sp_visualizer_view_row_removed),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
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)
|
if (priv->reader != reader)
|
||||||
{
|
{
|
||||||
g_clear_pointer (&priv->reader, sp_capture_reader_unref);
|
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]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_READER]);
|
||||||
sp_visualizer_list_set_reader (priv->list, 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)
|
if (priv->zoom_manager != NULL)
|
||||||
sp_visualizer_view_notify_zoom (self, NULL, priv->zoom_manager);
|
sp_visualizer_view_notify_zoom (self, NULL, priv->zoom_manager);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user