diff --git a/lib/Makefile.am b/lib/Makefile.am index ef981b84..23b64a4d 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -173,6 +173,8 @@ libsysprof_ui_@API_VERSION@_la_SOURCES = \ sp-process-model-row.c \ sp-profiler-menu-button.c \ sp-recording-state-view.c \ + sp-viewport.c \ + sp-viewport.h \ sp-visualizer-list.c \ sp-visualizer-list.h \ sp-visualizer-row.c \ diff --git a/lib/resources/ui/sp-visualizer-view.ui b/lib/resources/ui/sp-visualizer-view.ui index c183ec3f..9970393e 100644 --- a/lib/resources/ui/sp-visualizer-view.ui +++ b/lib/resources/ui/sp-visualizer-view.ui @@ -17,24 +17,23 @@ true - - never - true + scroll_adjustment true true + true - + true + scroll_adjustment + + + true + + - - - scroll_adjustment - horizontal - - diff --git a/lib/sp-viewport.c b/lib/sp-viewport.c new file mode 100644 index 00000000..7efa2975 --- /dev/null +++ b/lib/sp-viewport.c @@ -0,0 +1,126 @@ +/* sp-viewport.c + * + * Copyright (C) 2016 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This is meant to act like GtkViewport but allow us to override the + * GtkAdjustment without having viewport change our values. + */ + +#define G_LOG_DOMAIN "sp-viewport" + +#include "sp-viewport.h" + +struct _SpViewport +{ + GtkViewport parent_instance; + + GtkAdjustment *hadjustment; + GtkAdjustment *vadjustment; +}; + +G_DEFINE_TYPE (SpViewport, sp_viewport, GTK_TYPE_VIEWPORT) + +enum { + PROP_0, + N_PROPS, + + /* Overridden properties */ + PROP_HADJUSTMENT, + PROP_VADJUSTMENT, +}; + +static void +sp_viewport_finalize (GObject *object) +{ + SpViewport *self = (SpViewport *)object; + + g_clear_object (&self->hadjustment); + g_clear_object (&self->vadjustment); + + G_OBJECT_CLASS (sp_viewport_parent_class)->finalize (object); +} + +static void +sp_viewport_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + SpViewport *self = SP_VIEWPORT (object); + + switch (prop_id) + { + case PROP_HADJUSTMENT: + g_value_set_object (value, self->hadjustment); + break; + + case PROP_VADJUSTMENT: + g_value_set_object (value, self->vadjustment); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +sp_viewport_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + SpViewport *self = SP_VIEWPORT (object); + + switch (prop_id) + { + case PROP_HADJUSTMENT: + g_clear_object (&self->hadjustment); + self->hadjustment = g_value_dup_object (value); + g_object_notify_by_pspec (object, pspec); + break; + + case PROP_VADJUSTMENT: + g_clear_object (&self->vadjustment); + self->vadjustment = g_value_dup_object (value); + g_object_notify_by_pspec (object, pspec); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +sp_viewport_class_init (SpViewportClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->set_property = sp_viewport_set_property; + object_class->get_property = sp_viewport_get_property; + object_class->finalize = sp_viewport_finalize; + + g_object_class_override_property (object_class, PROP_HADJUSTMENT, "hadjustment"); + g_object_class_override_property (object_class, PROP_VADJUSTMENT, "vadjustment"); +} + +static void +sp_viewport_init (SpViewport *self) +{ + self->hadjustment = gtk_adjustment_new (0, 0, 0, 0, 0, 0); + self->vadjustment = gtk_adjustment_new (0, 0, 0, 0, 0, 0); +} diff --git a/lib/sp-viewport.h b/lib/sp-viewport.h new file mode 100644 index 00000000..dff59aac --- /dev/null +++ b/lib/sp-viewport.h @@ -0,0 +1,34 @@ +/* sp-viewport.h + * + * Copyright (C) 2016 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SP_VIEWPORT_H +#define SP_VIEWPORT_H + +#include + +G_BEGIN_DECLS + +#define SP_TYPE_VIEWPORT (sp_viewport_get_type()) + +G_DECLARE_FINAL_TYPE (SpViewport, sp_viewport, SP, VIEWPORT, GtkViewport) + +GtkWidget *sp_viewport_new (void); + +G_END_DECLS + +#endif /* SP_VIEWPORT_H */ diff --git a/lib/sp-visualizer-view.c b/lib/sp-visualizer-view.c index 96763b2c..ed2bd9f5 100644 --- a/lib/sp-visualizer-view.c +++ b/lib/sp-visualizer-view.c @@ -33,7 +33,6 @@ typedef struct SpVisualizerList *list; GtkAdjustment *scroll_adjustment; - GtkScrollbar *scrollbar; SpVisualizerTicks *ticks; } SpVisualizerViewPrivate; @@ -155,17 +154,6 @@ sp_visualizer_view_notify_zoom (SpVisualizerView *self, if (value + page_size > upper) gtk_adjustment_set_value (priv->scroll_adjustment, upper - page_size); - - if (priv->reader != NULL) - { - gint64 real_range; - gboolean visible; - - real_range = sp_capture_reader_get_end_time (priv->reader) - - sp_capture_reader_get_start_time (priv->reader); - visible = (gtk_adjustment_get_page_size (priv->scroll_adjustment) < real_range); - gtk_widget_set_visible (GTK_WIDGET (priv->scrollbar), visible); - } } static void @@ -271,7 +259,6 @@ 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, scrollbar); gtk_widget_class_bind_template_child_private (widget_class, SpVisualizerView, ticks); gtk_widget_class_set_css_name (widget_class, "visualizers");