mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-gtk: draw motion indicator for selection
This commit is contained in:
@ -27,9 +27,12 @@
|
|||||||
struct _SysprofTimeRuler
|
struct _SysprofTimeRuler
|
||||||
{
|
{
|
||||||
GtkWidget parent_instance;
|
GtkWidget parent_instance;
|
||||||
|
|
||||||
SysprofSession *session;
|
SysprofSession *session;
|
||||||
GSignalGroup *session_signals;
|
GSignalGroup *session_signals;
|
||||||
gint64 tick_interval;
|
|
||||||
|
double motion_x;
|
||||||
|
double motion_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -42,55 +45,6 @@ G_DEFINE_FINAL_TYPE (SysprofTimeRuler, sysprof_time_ruler, GTK_TYPE_WIDGET)
|
|||||||
|
|
||||||
static GParamSpec *properties [N_PROPS];
|
static GParamSpec *properties [N_PROPS];
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_time_ruler_update (SysprofTimeRuler *self)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
g_assert (SYSPROF_IS_TIME_RULER (self));
|
|
||||||
g_assert (!self->session || SYSPROF_IS_SESSION (self->session));
|
|
||||||
|
|
||||||
if (self->session == NULL)
|
|
||||||
{
|
|
||||||
self->tick_interval = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_time_ruler_notify_selected_time_cb (SysprofTimeRuler *self,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
SysprofSession *session)
|
|
||||||
{
|
|
||||||
g_assert (SYSPROF_IS_TIME_RULER (self));
|
|
||||||
g_assert (SYSPROF_IS_SESSION (session));
|
|
||||||
|
|
||||||
sysprof_time_ruler_update (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_time_ruler_notify_visible_time_cb (SysprofTimeRuler *self,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
SysprofSession *session)
|
|
||||||
{
|
|
||||||
g_assert (SYSPROF_IS_TIME_RULER (self));
|
|
||||||
g_assert (SYSPROF_IS_SESSION (session));
|
|
||||||
|
|
||||||
sysprof_time_ruler_update (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_time_ruler_bind_session_cb (SysprofTimeRuler *self,
|
|
||||||
SysprofSession *session,
|
|
||||||
GSignalGroup *signals)
|
|
||||||
{
|
|
||||||
g_assert (SYSPROF_IS_TIME_RULER (self));
|
|
||||||
g_assert (SYSPROF_IS_SESSION (session));
|
|
||||||
g_assert (G_IS_SIGNAL_GROUP (signals));
|
|
||||||
|
|
||||||
sysprof_time_ruler_update (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_time_ruler_snapshot (GtkWidget *widget,
|
sysprof_time_ruler_snapshot (GtkWidget *widget,
|
||||||
GtkSnapshot *snapshot)
|
GtkSnapshot *snapshot)
|
||||||
@ -163,6 +117,13 @@ sysprof_time_ruler_snapshot (GtkWidget *widget,
|
|||||||
&GRAPHENE_RECT_INIT (x, 0, 1, height));
|
&GRAPHENE_RECT_INIT (x, 0, 1, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self->motion_x >= 0 && self->motion_y >= 0)
|
||||||
|
{
|
||||||
|
gtk_snapshot_append_color (snapshot,
|
||||||
|
&color,
|
||||||
|
&GRAPHENE_RECT_INIT (self->motion_x, 0, 1, height));
|
||||||
|
}
|
||||||
|
|
||||||
g_object_unref (layout);
|
g_object_unref (layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,6 +151,47 @@ sysprof_time_ruler_measure (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_time_ruler_motion_enter_cb (SysprofTimeRuler *self,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
GtkEventControllerMotion *motion)
|
||||||
|
{
|
||||||
|
g_assert (SYSPROF_IS_TIME_RULER (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_time_ruler_motion_cb (SysprofTimeRuler *self,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
GtkEventControllerMotion *motion)
|
||||||
|
{
|
||||||
|
g_assert (SYSPROF_IS_TIME_RULER (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_time_ruler_motion_leave_cb (SysprofTimeRuler *self,
|
||||||
|
GtkEventControllerMotion *motion)
|
||||||
|
{
|
||||||
|
g_assert (SYSPROF_IS_TIME_RULER (self));
|
||||||
|
g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (motion));
|
||||||
|
|
||||||
|
self->motion_x = -1;
|
||||||
|
self->motion_y = -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_time_ruler_dispose (GObject *object)
|
sysprof_time_ruler_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
@ -276,22 +278,42 @@ sysprof_time_ruler_class_init (SysprofTimeRulerClass *klass)
|
|||||||
static void
|
static void
|
||||||
sysprof_time_ruler_init (SysprofTimeRuler *self)
|
sysprof_time_ruler_init (SysprofTimeRuler *self)
|
||||||
{
|
{
|
||||||
|
GtkEventController *motion;
|
||||||
|
|
||||||
self->session_signals = g_signal_group_new (SYSPROF_TYPE_SESSION);
|
self->session_signals = g_signal_group_new (SYSPROF_TYPE_SESSION);
|
||||||
g_signal_group_connect_object (self->session_signals,
|
g_signal_group_connect_object (self->session_signals,
|
||||||
"notify::selected-time",
|
"notify::selected-time",
|
||||||
G_CALLBACK (sysprof_time_ruler_notify_selected_time_cb),
|
G_CALLBACK (gtk_widget_queue_draw),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
g_signal_group_connect_object (self->session_signals,
|
g_signal_group_connect_object (self->session_signals,
|
||||||
"notify::visible-time",
|
"notify::visible-time",
|
||||||
G_CALLBACK (sysprof_time_ruler_notify_visible_time_cb),
|
G_CALLBACK (gtk_widget_queue_draw),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
g_signal_connect_object (self->session_signals,
|
g_signal_connect_object (self->session_signals,
|
||||||
"bind",
|
"bind",
|
||||||
G_CALLBACK (sysprof_time_ruler_bind_session_cb),
|
G_CALLBACK (gtk_widget_queue_draw),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
|
|
||||||
|
motion = gtk_event_controller_motion_new ();
|
||||||
|
g_signal_connect_object (motion,
|
||||||
|
"enter",
|
||||||
|
G_CALLBACK (sysprof_time_ruler_motion_enter_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
g_signal_connect_object (motion,
|
||||||
|
"leave",
|
||||||
|
G_CALLBACK (sysprof_time_ruler_motion_leave_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
g_signal_connect_object (motion,
|
||||||
|
"motion",
|
||||||
|
G_CALLBACK (sysprof_time_ruler_motion_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
gtk_widget_add_controller (GTK_WIDGET (self), motion);
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
|
|||||||
Reference in New Issue
Block a user