From 33c8e2fc267838ae5dc52864bebf2d7194046ce6 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Wed, 15 May 2019 14:31:54 -0700 Subject: [PATCH] libsysprof-ui: fit-to-zoom and tooltips --- src/libsysprof-ui/sysprof-capture-view.c | 35 +++++++++++++++++++- src/libsysprof-ui/sysprof-zoom-manager.c | 4 +-- src/libsysprof-ui/ui/sysprof-capture-view.ui | 14 +++++--- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/libsysprof-ui/sysprof-capture-view.c b/src/libsysprof-ui/sysprof-capture-view.c index cab04066..d1e84ec2 100644 --- a/src/libsysprof-ui/sysprof-capture-view.c +++ b/src/libsysprof-ui/sysprof-capture-view.c @@ -258,7 +258,7 @@ sysprof_capture_view_scan_worker (GTask *task, if (begin_time < features.begin_time) features.begin_time = begin_time; - if (end_time < features.end_time) + if (end_time > features.end_time) features.end_time = end_time; } @@ -506,6 +506,26 @@ sysprof_capture_view_selection_changed_cb (SysprofCaptureView *self, sysprof_capture_view_generate_callgraph_async (self, priv->reader, selection, NULL, NULL, NULL); } +static void +fit_zoom_cb (GSimpleAction *action, + GVariant *param, + gpointer user_data) +{ + SysprofCaptureView *self = user_data; + SysprofCaptureViewPrivate *priv = sysprof_capture_view_get_instance_private (self); + GtkAllocation alloc; + gdouble zoom; + gint64 duration; + + g_assert (G_IS_SIMPLE_ACTION (action)); + g_assert (SYSPROF_IS_CAPTURE_VIEW (self)); + + duration = priv->features.end_time - priv->features.begin_time; + gtk_widget_get_allocation (GTK_WIDGET (self), &alloc); + zoom = sysprof_zoom_manager_fit_zoom_for_duration (priv->zoom_manager, duration, alloc.width); + sysprof_zoom_manager_set_zoom (priv->zoom_manager, zoom); +} + static void sysprof_capture_view_finalize (GObject *object) { @@ -583,7 +603,11 @@ static void sysprof_capture_view_init (SysprofCaptureView *self) { SysprofCaptureViewPrivate *priv = sysprof_capture_view_get_instance_private (self); + g_autoptr(GSimpleActionGroup) group = NULL; SysprofSelection *selection; + static GActionEntry actions[] = { + { "fit-zoom", fit_zoom_cb }, + }; gtk_widget_init_template (GTK_WIDGET (self)); @@ -597,6 +621,15 @@ sysprof_capture_view_init (SysprofCaptureView *self) gtk_widget_insert_action_group (GTK_WIDGET (self), "zoom", G_ACTION_GROUP (priv->zoom_manager)); + + group = g_simple_action_group_new (); + g_action_map_add_action_entries (G_ACTION_MAP (group), + actions, + G_N_ELEMENTS (actions), + self); + gtk_widget_insert_action_group (GTK_WIDGET (self), + "capture-view", + G_ACTION_GROUP (group)); } /** diff --git a/src/libsysprof-ui/sysprof-zoom-manager.c b/src/libsysprof-ui/sysprof-zoom-manager.c index 41a74fe0..e8f97ef7 100644 --- a/src/libsysprof-ui/sysprof-zoom-manager.c +++ b/src/libsysprof-ui/sysprof-zoom-manager.c @@ -523,7 +523,7 @@ sysprof_zoom_manager_fit_zoom_for_duration (SysprofZoomManager *self, { g_return_val_if_fail (SYSPROF_IS_ZOOM_MANAGER (self), 1.0); g_return_val_if_fail (duration >= 0, 1.0); + g_return_val_if_fail (width >= 0, 1.0); - return ((gdouble)width / DEFAULT_PIXELS_PER_SEC) / - ((gdouble)duration / (gdouble)NSEC_PER_SEC); + return (width / DEFAULT_PIXELS_PER_SEC) / (duration / (gdouble)NSEC_PER_SEC); } diff --git a/src/libsysprof-ui/ui/sysprof-capture-view.ui b/src/libsysprof-ui/ui/sysprof-capture-view.ui index 06e23f08..8c1cc087 100644 --- a/src/libsysprof-ui/ui/sysprof-capture-view.ui +++ b/src/libsysprof-ui/ui/sysprof-capture-view.ui @@ -24,6 +24,7 @@ zoom.zoom-out false true + Zoom Out zoom-out-symbolic @@ -34,16 +35,18 @@ - zoom.zoom-one + capture-view.fit-zoom false + Resize to Fit true - - - 5 + + 12 + 12 + zoom-fit-best-symbolic true @@ -53,6 +56,7 @@ zoom.zoom-in false + Zoom In true