mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-gtk: add example for drawing position line
This commit is contained in:
@ -32,6 +32,9 @@ struct _SysprofTracksView
|
||||
SysprofSession *session;
|
||||
|
||||
GtkListView *list_view;
|
||||
|
||||
double motion_x;
|
||||
double motion_y;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -44,6 +47,77 @@ G_DEFINE_FINAL_TYPE (SysprofTracksView, sysprof_tracks_view, GTK_TYPE_WIDGET)
|
||||
|
||||
static GParamSpec *properties [N_PROPS];
|
||||
|
||||
static void
|
||||
sysprof_tracks_view_motion_enter_cb (SysprofTracksView *self,
|
||||
double x,
|
||||
double y,
|
||||
GtkEventControllerMotion *motion)
|
||||
{
|
||||
g_assert (SYSPROF_IS_TRACKS_VIEW (self));
|
||||
g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (motion));
|
||||
|
||||
self->motion_x = x;
|
||||
self->motion_y = y;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_tracks_view_motion_leave_cb (SysprofTracksView *self,
|
||||
GtkEventControllerMotion *motion)
|
||||
{
|
||||
g_assert (SYSPROF_IS_TRACKS_VIEW (self));
|
||||
g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (motion));
|
||||
|
||||
self->motion_x = -1;
|
||||
self->motion_y = -1;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_tracks_view_motion_cb (SysprofTracksView *self,
|
||||
double x,
|
||||
double y,
|
||||
GtkEventControllerMotion *motion)
|
||||
{
|
||||
g_assert (SYSPROF_IS_TRACKS_VIEW (self));
|
||||
g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (motion));
|
||||
|
||||
self->motion_x = x;
|
||||
self->motion_y = y;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_tracks_view_snapshot (GtkWidget *widget,
|
||||
GtkSnapshot *snapshot)
|
||||
{
|
||||
SysprofTracksView *self = (SysprofTracksView *)widget;
|
||||
double x, y;
|
||||
|
||||
|
||||
g_assert (SYSPROF_IS_TRACKS_VIEW (self));
|
||||
g_assert (GTK_IS_SNAPSHOT (snapshot));
|
||||
|
||||
GTK_WIDGET_CLASS (sysprof_tracks_view_parent_class)->snapshot (widget, snapshot);
|
||||
|
||||
if (self->motion_x == -1 && self->motion_y == -1)
|
||||
return;
|
||||
|
||||
gtk_widget_translate_coordinates (GTK_WIDGET (self->list_view),
|
||||
GTK_WIDGET (self),
|
||||
self->motion_x, 0,
|
||||
&x, &y);
|
||||
|
||||
gtk_snapshot_append_color (snapshot,
|
||||
&(GdkRGBA) {0,0,0,.3},
|
||||
&GRAPHENE_RECT_INIT (x, y, 1,
|
||||
gtk_widget_get_height (GTK_WIDGET (self->list_view))));
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_tracks_view_dispose (GObject *object)
|
||||
{
|
||||
@ -108,6 +182,8 @@ sysprof_tracks_view_class_init (SysprofTracksViewClass *klass)
|
||||
object_class->get_property = sysprof_tracks_view_get_property;
|
||||
object_class->set_property = sysprof_tracks_view_set_property;
|
||||
|
||||
widget_class->snapshot = sysprof_tracks_view_snapshot;
|
||||
|
||||
properties[PROP_SESSION] =
|
||||
g_param_spec_object ("session", NULL, NULL,
|
||||
SYSPROF_TYPE_SESSION,
|
||||
@ -118,8 +194,13 @@ sysprof_tracks_view_class_init (SysprofTracksViewClass *klass)
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/libsysprof-gtk/sysprof-tracks-view.ui");
|
||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||
gtk_widget_class_set_css_name (widget_class, "tracks");
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, SysprofTracksView, list_view);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, sysprof_tracks_view_motion_enter_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, sysprof_tracks_view_motion_leave_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, sysprof_tracks_view_motion_cb);
|
||||
|
||||
g_type_ensure (SYSPROF_TYPE_TIME_RULER);
|
||||
g_type_ensure (SYSPROF_TYPE_TRACK_VIEW);
|
||||
}
|
||||
|
||||
@ -28,6 +28,13 @@
|
||||
<property name="vexpand">true</property>
|
||||
<child>
|
||||
<object class="GtkListView" id="list_view">
|
||||
<child>
|
||||
<object class="GtkEventControllerMotion" id="motion">
|
||||
<signal name="enter" handler="sysprof_tracks_view_motion_enter_cb" swapped="true"/>
|
||||
<signal name="leave" handler="sysprof_tracks_view_motion_leave_cb" swapped="true"/>
|
||||
<signal name="motion" handler="sysprof_tracks_view_motion_cb" swapped="true"/>
|
||||
</object>
|
||||
</child>
|
||||
<property name="factory">
|
||||
<object class="GtkBuilderListItemFactory">
|
||||
<property name="bytes"><![CDATA[
|
||||
|
||||
Reference in New Issue
Block a user