From 2b07b6c069297abdeed1b41c91fde1d47058ce97 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 20 Dec 2014 19:24:08 -0500 Subject: [PATCH] inspector: Add a magnifier Add a magnifier that shows the selected widget up to 5 times enlarged. --- gtk/inspector/Makefile.inc | 3 ++ gtk/inspector/init.c | 5 +++ gtk/inspector/magnifier.c | 80 ++++++++++++++++++++++++++++++++++++ gtk/inspector/magnifier.h | 54 ++++++++++++++++++++++++ gtk/inspector/magnifier.ui.h | 0 gtk/inspector/window.c | 3 ++ gtk/inspector/window.h | 2 +- gtk/inspector/window.ui | 8 ++++ gtk/inspector/window.ui.h | 1 + po/POTFILES.in | 1 + 10 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 gtk/inspector/magnifier.c create mode 100644 gtk/inspector/magnifier.h create mode 100644 gtk/inspector/magnifier.ui.h diff --git a/gtk/inspector/Makefile.inc b/gtk/inspector/Makefile.inc index 5c966df04b..464e809497 100644 --- a/gtk/inspector/Makefile.inc +++ b/gtk/inspector/Makefile.inc @@ -10,6 +10,7 @@ inspector_c_sources = \ inspector/graphdata.c \ inspector/init.c \ inspector/inspect-button.c \ + inspector/magnifier.c \ inspector/menu.c \ inspector/misc-info.c \ inspector/object-hierarchy.c \ @@ -37,6 +38,7 @@ inspector_h_sources = \ inspector/gestures.h \ inspector/graphdata.h \ inspector/init.h \ + inspector/magnifier.h \ inspector/menu.h \ inspector/misc-info.h \ inspector/object-hierarchy.h \ @@ -59,6 +61,7 @@ inspector_templates = \ inspector/css-editor.ui \ inspector/data-list.ui \ inspector/general.ui \ + inspector/magnifier.ui \ inspector/menu.ui \ inspector/misc-info.ui \ inspector/object-hierarchy.ui \ diff --git a/gtk/inspector/init.c b/gtk/inspector/init.c index c930948a11..14acd8e66e 100644 --- a/gtk/inspector/init.c +++ b/gtk/inspector/init.c @@ -32,6 +32,7 @@ #include "general.h" #include "gestures.h" #include "graphdata.h" +#include "magnifier.h" #include "menu.h" #include "misc-info.h" #include "object-hierarchy.h" @@ -46,6 +47,8 @@ #include "visual.h" #include "window.h" +#include "gtkmagnifierprivate.h" + #include "gtkmodulesprivate.h" void @@ -61,6 +64,8 @@ gtk_inspector_init (void) g_type_ensure (GTK_TYPE_INSPECTOR_DATA_LIST); g_type_ensure (GTK_TYPE_INSPECTOR_GENERAL); g_type_ensure (GTK_TYPE_INSPECTOR_GESTURES); + g_type_ensure (GTK_TYPE_MAGNIFIER); + g_type_ensure (GTK_TYPE_INSPECTOR_MAGNIFIER); g_type_ensure (GTK_TYPE_INSPECTOR_MENU); g_type_ensure (GTK_TYPE_INSPECTOR_MISC_INFO); g_type_ensure (GTK_TYPE_INSPECTOR_OBJECT_HIERARCHY); diff --git a/gtk/inspector/magnifier.c b/gtk/inspector/magnifier.c new file mode 100644 index 0000000000..c7b4a5b01e --- /dev/null +++ b/gtk/inspector/magnifier.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +#include "config.h" +#include + +#include "magnifier.h" + +#include "gtkmagnifierprivate.h" + +#include "gtklabel.h" + + +struct _GtkInspectorMagnifierPrivate +{ + GtkWidget *object; + GtkWidget *magnifier; + GtkWidget *object_title; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMagnifier, gtk_inspector_magnifier, GTK_TYPE_BOX) + +static void +gtk_inspector_magnifier_init (GtkInspectorMagnifier *sl) +{ + sl->priv = gtk_inspector_magnifier_get_instance_private (sl); + gtk_widget_init_template (GTK_WIDGET (sl)); +} + +void +gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl, + GObject *object) +{ + const gchar *title; + + sl->priv->object = NULL; + + if (!GTK_IS_WIDGET (object)) + { + gtk_widget_hide (GTK_WIDGET (sl)); + _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), NULL); + return; + } + + title = (const gchar *)g_object_get_data (object, "gtk-inspector-object-title"); + gtk_label_set_label (GTK_LABEL (sl->priv->object_title), title); + + gtk_widget_show (GTK_WIDGET (sl)); + + sl->priv->object = GTK_WIDGET (object); + + _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), GTK_WIDGET (object)); + _gtk_magnifier_set_coords (GTK_MAGNIFIER (sl->priv->magnifier), 0, 0); +} + +static void +gtk_inspector_magnifier_class_init (GtkInspectorMagnifierClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/magnifier.ui"); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMagnifier, magnifier); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMagnifier, object_title); +} + +// vim: set et sw=2 ts=2: diff --git a/gtk/inspector/magnifier.h b/gtk/inspector/magnifier.h new file mode 100644 index 0000000000..2dcac6fa91 --- /dev/null +++ b/gtk/inspector/magnifier.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +#ifndef _GTK_INSPECTOR_MAGNIFIER_H_ +#define _GTK_INSPECTOR_MAGNIFIER_H_ + +#include + +#define GTK_TYPE_INSPECTOR_MAGNIFIER (gtk_inspector_magnifier_get_type()) +#define GTK_INSPECTOR_MAGNIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_MAGNIFIER, GtkInspectorMagnifier)) +#define GTK_INSPECTOR_MAGNIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_MAGNIFIER, GtkInspectorMagnifierClass)) +#define GTK_INSPECTOR_IS_MAGNIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_MAGNIFIER)) +#define GTK_INSPECTOR_IS_MAGNIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_MAGNIFIER)) +#define GTK_INSPECTOR_MAGNIFIER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_MAGNIFIER, GtkInspectorMagnifierClass)) + + +typedef struct _GtkInspectorMagnifierPrivate GtkInspectorMagnifierPrivate; + +typedef struct _GtkInspectorMagnifier +{ + GtkBox parent; + GtkInspectorMagnifierPrivate *priv; +} GtkInspectorMagnifier; + +typedef struct _GtkInspectorMagnifierClass +{ + GtkBoxClass parent; +} GtkInspectorMagnifierClass; + +G_BEGIN_DECLS + +GType gtk_inspector_magnifier_get_type (void); +void gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl, + GObject *object); + +G_END_DECLS + +#endif // _GTK_INSPECTOR_MAGNIFIER_H_ + +// vim: set et sw=2 ts=2: diff --git a/gtk/inspector/magnifier.ui.h b/gtk/inspector/magnifier.ui.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c index 1e7223b89e..3846ecdcdd 100644 --- a/gtk/inspector/window.c +++ b/gtk/inspector/window.c @@ -42,6 +42,7 @@ #include "menu.h" #include "misc-info.h" #include "gestures.h" +#include "magnifier.h" #include "gtklabel.h" #include "gtkbutton.h" @@ -75,6 +76,7 @@ set_selected_object (GtkInspectorWindow *iw, gtk_inspector_actions_set_object (GTK_INSPECTOR_ACTIONS (iw->actions), selected); gtk_inspector_menu_set_object (GTK_INSPECTOR_MENU (iw->menu), selected); gtk_inspector_gestures_set_object (GTK_INSPECTOR_GESTURES (iw->gestures), selected); + gtk_inspector_magnifier_set_object (GTK_INSPECTOR_MAGNIFIER (iw->magnifier), selected); for (l = iw->extra_pages; l != NULL; l = l->next) g_object_set (l->data, "object", selected, NULL); @@ -234,6 +236,7 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, menu); gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, misc_info); gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, gestures); + gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, magnifier); gtk_widget_class_bind_template_callback (widget_class, gtk_inspector_on_inspect); gtk_widget_class_bind_template_callback (widget_class, on_object_activated); diff --git a/gtk/inspector/window.h b/gtk/inspector/window.h index 8560e0c710..07a469d8eb 100644 --- a/gtk/inspector/window.h +++ b/gtk/inspector/window.h @@ -64,6 +64,7 @@ typedef struct GtkWidget *menu; GtkWidget *misc_info; GtkWidget *gestures; + GtkWidget *magnifier; GtkWidget *invisible; GtkWidget *selected_widget; @@ -99,7 +100,6 @@ void gtk_inspector_on_inspect (GtkWidget *widget, void gtk_inspector_window_select_widget_under_pointer (GtkInspectorWindow *iw); - G_END_DECLS diff --git a/gtk/inspector/window.ui b/gtk/inspector/window.ui index 366d1791a5..6046618ceb 100644 --- a/gtk/inspector/window.ui +++ b/gtk/inspector/window.ui @@ -365,6 +365,14 @@ Gestures + + + + + magnifier + Magnifier + + diff --git a/gtk/inspector/window.ui.h b/gtk/inspector/window.ui.h index 498011ce27..05c6b2126c 100644 --- a/gtk/inspector/window.ui.h +++ b/gtk/inspector/window.ui.h @@ -18,6 +18,7 @@ N_("Data"); N_("Actions"); N_("Menu"); N_("Gestures"); +N_("Magnifier"); N_("Objects"); N_("Statistics"); N_("Resources"); diff --git a/po/POTFILES.in b/po/POTFILES.in index 2bac9c0f69..62aef23204 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -292,6 +292,7 @@ gtk/inspector/general.ui.h gtk/inspector/gestures.c gtk/inspector/inspect-button.c gtk/inspector/menu.c +gtk/inspector/magnifier.ui.h gtk/inspector/menu.ui.h gtk/inspector/misc-info.c gtk/inspector/misc-info.ui.h