[gtk+/parasite2] inspector: Add a visual tab



commit 063964f1685baf9a13d87010966575546eaad706
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat May 10 21:19:21 2014 -0400

    inspector: Add a visual tab
    
    Move the show updates and flip text direction controls here,
    and add controls for baseline and pixel cache debugging.

 modules/inspector/Makefile.am             |    5 +-
 modules/inspector/inspector.gresource.xml |   11 +-
 modules/inspector/module.c                |   18 ++--
 modules/inspector/visual.c                |  148 +++++++++++++++++++++++++++++
 modules/inspector/visual.h                |   53 ++++++++++
 modules/inspector/visual.ui               |   94 ++++++++++++++++++
 modules/inspector/window.c                |   45 ---------
 modules/inspector/window.ui               |   37 ++-----
 po/POTFILES.in                            |    1 +
 9 files changed, 327 insertions(+), 85 deletions(-)
---
diff --git a/modules/inspector/Makefile.am b/modules/inspector/Makefile.am
index bda97bd..30b7495 100644
--- a/modules/inspector/Makefile.am
+++ b/modules/inspector/Makefile.am
@@ -44,7 +44,9 @@ libgtkinspector_la_SOURCES = \
        signals-list.h \
        signals-list.c \
        data-list.h \
-       data-list.c
+       data-list.c \
+       visual.h \
+       visual.c
 
 libgtkinspector_la_CPPFLAGS = \
        -I$(top_srcdir)                 \
@@ -76,6 +78,7 @@ templates = \
        prop-list.ui            \
        signals-list.ui         \
        themes.ui               \
+       visual.ui               \
        widget-tree.ui          \
        window.ui
 
diff --git a/modules/inspector/inspector.gresource.xml b/modules/inspector/inspector.gresource.xml
index 752d2cd..fb65fad 100644
--- a/modules/inspector/inspector.gresource.xml
+++ b/modules/inspector/inspector.gresource.xml
@@ -2,14 +2,15 @@
 <gresources>
   <gresource prefix="/org/gtk/inspector">
     <file>button-path.ui</file>
-    <file>object-hierarchy.ui</file>
-    <file>css-editor.ui</file>
     <file>classes-list.ui</file>
-    <file>widget-tree.ui</file>
+    <file>css-editor.ui</file>
+    <file>data-list.ui</file>
+    <file>object-hierarchy.ui</file>
     <file>prop-list.ui</file>
+    <file>signals-list.ui</file>
     <file>themes.ui</file>
+    <file>visual.ui</file>
+    <file>widget-tree.ui</file>
     <file>window.ui</file>
-    <file>signals-list.ui</file>
-    <file>data-list.ui</file>
   </gresource>
 </gresources>
diff --git a/modules/inspector/module.c b/modules/inspector/module.c
index 0e7a25f..1082ded 100644
--- a/modules/inspector/module.c
+++ b/modules/inspector/module.c
@@ -34,6 +34,7 @@
 #include "resources.h"
 #include "signals-list.h"
 #include "themes.h"
+#include "visual.h"
 #include "widget-tree.h"
 #include "window.h"
 
@@ -46,18 +47,19 @@ gtk_module_init (gint *argc, gchar ***argv)
 
   gtk_inspector_register_resource ();
 
-  g_type_ensure (GTK_TYPE_INSPECTOR_THEMES);
-  g_type_ensure (GTK_TYPE_INSPECTOR_CSS_EDITOR);
   g_type_ensure (GTK_TYPE_INSPECTOR_BUTTON_PATH);
-  g_type_ensure (GTK_TYPE_INSPECTOR_WIDGET_TREE);
-  g_type_ensure (GTK_TYPE_INSPECTOR_PROP_LIST);
-  g_type_ensure (GTK_TYPE_INSPECTOR_OBJECT_HIERARCHY);
   g_type_ensure (GTK_TYPE_INSPECTOR_CLASSES_LIST);
-  g_type_ensure (GTK_TYPE_INSPECTOR_PYTHON_SHELL);
+  g_type_ensure (GTK_TYPE_INSPECTOR_CSS_EDITOR);
+  g_type_ensure (GTK_TYPE_INSPECTOR_DATA_LIST);
+  g_type_ensure (GTK_TYPE_INSPECTOR_OBJECT_HIERARCHY);
   g_type_ensure (GTK_TYPE_INSPECTOR_PROPERTY_CELL_RENDERER);
-  g_type_ensure (GTK_TYPE_INSPECTOR_WINDOW);
+  g_type_ensure (GTK_TYPE_INSPECTOR_PROP_LIST);
+  g_type_ensure (GTK_TYPE_INSPECTOR_PYTHON_SHELL);
   g_type_ensure (GTK_TYPE_INSPECTOR_SIGNALS_LIST);
-  g_type_ensure (GTK_TYPE_INSPECTOR_DATA_LIST);
+  g_type_ensure (GTK_TYPE_INSPECTOR_THEMES);
+  g_type_ensure (GTK_TYPE_INSPECTOR_VISUAL);
+  g_type_ensure (GTK_TYPE_INSPECTOR_WIDGET_TREE);
+  g_type_ensure (GTK_TYPE_INSPECTOR_WINDOW);
 }
 
 
diff --git a/modules/inspector/visual.c b/modules/inspector/visual.c
new file mode 100644
index 0000000..7b2fed7
--- /dev/null
+++ b/modules/inspector/visual.c
@@ -0,0 +1,148 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "visual.h"
+
+struct _GtkInspectorVisualPrivate
+{
+  GtkWidget *updates_switch;
+  GtkWidget *direction_combo;
+  GtkWidget *baselines_switch;
+  GtkWidget *pixelcache_switch;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_LIST_BOX)
+
+static void
+updates_activate (GtkSwitch *sw)
+{
+  gdk_window_set_debug_updates (gtk_switch_get_active (sw));
+}
+
+static void
+fix_direction_recurse (GtkWidget *widget, gpointer data)
+{
+  GtkTextDirection dir = GPOINTER_TO_INT (data);
+
+  g_object_ref (widget);
+
+  gtk_widget_set_direction (widget, dir);
+  if (GTK_IS_CONTAINER (widget))
+    gtk_container_forall (GTK_CONTAINER (widget), fix_direction_recurse, data);
+
+  g_object_unref (widget);
+}
+
+static GtkTextDirection initial_direction;
+
+static void
+fix_direction (GtkWidget *iw)
+{
+  fix_direction_recurse (iw, GINT_TO_POINTER (initial_direction));
+}
+
+static void
+direction_changed (GtkComboBox *combo)
+{
+  GtkWidget *iw;
+  const gchar *direction;
+
+  iw = gtk_widget_get_toplevel (GTK_WIDGET (combo));
+  fix_direction (iw);
+
+  direction = gtk_combo_box_get_active_id (combo);
+  if (g_strcmp0 (direction, "ltr") == 0)
+    gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR);
+  else
+    gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
+}
+
+static void
+init_direction (GtkInspectorVisual *vis)
+{
+  const gchar *direction;
+
+  initial_direction = gtk_widget_get_default_direction ();
+  if (initial_direction == GTK_TEXT_DIR_LTR)
+    direction = "ltr";
+  else
+    direction = "rtl";
+  gtk_combo_box_set_active_id (GTK_COMBO_BOX (vis->priv->direction_combo), direction);
+}
+
+static void
+baselines_activate (GtkSwitch *sw)
+{
+  guint flags;
+
+  flags = gtk_get_debug_flags ();
+
+  if (gtk_switch_get_active (sw))
+    flags |= GTK_DEBUG_BASELINES;
+  else
+    flags &= ~GTK_DEBUG_BASELINES;
+
+  gtk_set_debug_flags (flags);
+}
+
+static void
+pixelcache_activate (GtkSwitch *sw)
+{
+  guint flags;
+
+  flags = gtk_get_debug_flags ();
+
+  if (gtk_switch_get_active (sw))
+    flags |= GTK_DEBUG_PIXEL_CACHE;
+  else
+    flags &= ~GTK_DEBUG_PIXEL_CACHE;
+
+  gtk_set_debug_flags (flags);
+}
+
+static void
+gtk_inspector_visual_init (GtkInspectorVisual *pt)
+{
+  pt->priv = gtk_inspector_visual_get_instance_private (pt);
+  gtk_widget_init_template (GTK_WIDGET (pt));
+
+  init_direction (pt);
+}
+
+static void
+gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
+{
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/visual.ui");
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, updates_switch);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, direction_combo);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, baselines_switch);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, pixelcache_switch);
+  gtk_widget_class_bind_template_callback (widget_class, updates_activate);
+  gtk_widget_class_bind_template_callback (widget_class, direction_changed);
+  gtk_widget_class_bind_template_callback (widget_class, baselines_activate);
+  gtk_widget_class_bind_template_callback (widget_class, pixelcache_activate);
+}
+
+GtkWidget *
+gtk_inspector_visual_new (void)
+{
+  return GTK_WIDGET (g_object_new (GTK_TYPE_INSPECTOR_VISUAL, NULL));
+}
+
+// vim: set et sw=2 ts=2:
diff --git a/modules/inspector/visual.h b/modules/inspector/visual.h
new file mode 100644
index 0000000..2227d3f
--- /dev/null
+++ b/modules/inspector/visual.h
@@ -0,0 +1,53 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _GTK_INSPECTOR_VISUAL_H_
+#define _GTK_INSPECTOR_VISUAL_H_
+
+#include <gtk/gtk.h>
+
+#define GTK_TYPE_INSPECTOR_VISUAL            (gtk_inspector_visual_get_type())
+#define GTK_INSPECTOR_VISUAL(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_VISUAL, 
GtkInspectorVisual))
+#define GTK_INSPECTOR_VISUAL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_VISUAL, 
GtkInspectorVisualClass))
+#define GTK_INSPECTOR_IS_VISUAL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_VISUAL))
+#define GTK_INSPECTOR_IS_VISUAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_VISUAL))
+#define GTK_INSPECTOR_VISUAL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_VISUAL, 
GtkInspectorVisualClass))
+
+
+typedef struct _GtkInspectorVisualPrivate GtkInspectorVisualPrivate;
+
+typedef struct _GtkInspectorVisual
+{
+  GtkListBox parent;
+  GtkInspectorVisualPrivate *priv;
+} GtkInspectorVisual;
+
+typedef struct _GtkInspectorVisualClass
+{
+  GtkListBoxClass parent;
+} GtkInspectorVisualClass;
+
+G_BEGIN_DECLS
+
+GType      gtk_inspector_visual_get_type   (void);
+GtkWidget *gtk_inspector_visual_new        (void);
+
+G_END_DECLS
+
+#endif // _GTK_INSPECTOR_VISUAL_H_
+
+// vim: set et sw=2 ts=2:
diff --git a/modules/inspector/visual.ui b/modules/inspector/visual.ui
new file mode 100644
index 0000000..da2162a
--- /dev/null
+++ b/modules/inspector/visual.ui
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+  <template class="GtkInspectorVisual" parent="GtkListBox">
+    <property name="selection-mode">none</property>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="orientation">horizontal</property>
+        <property name="margin">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Text Direction</property>
+            <property name="hexpand">True</property>
+            <property name="xalign">0.0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkComboBoxText" id="direction_combo">
+            <property name="visible">True</property>
+            <signal name="changed" handler="direction_changed"/>
+            <items>
+              <item translatable="yes" id="ltr">Left-to-Right</item>
+              <item translatable="yes" id="rtl">Right-to-Left</item>
+            </items>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="orientation">horizontal</property>
+        <property name="margin">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Show Graphic Updates</property>
+            <property name="hexpand">True</property>
+            <property name="xalign">0.0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSwitch" id="updates_switch">
+            <property name="visible">True</property>
+            <signal name="notify::active" handler="updates_activate"/>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="orientation">horizontal</property>
+        <property name="margin">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Show Baselines</property>
+            <property name="hexpand">True</property>
+            <property name="xalign">0.0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSwitch" id="baselines_switch">
+            <property name="visible">True</property>
+            <signal name="notify::active" handler="baselines_activate"/>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="orientation">horizontal</property>
+        <property name="margin">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Show Pixel Cache</property>
+            <property name="hexpand">True</property>
+            <property name="xalign">0.0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSwitch" id="pixelcache_switch">
+            <property name="visible">True</property>
+            <signal name="notify::active" handler="pixelcache_activate"/>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/modules/inspector/window.c b/modules/inspector/window.c
index 9434580..f1928b6 100644
--- a/modules/inspector/window.c
+++ b/modules/inspector/window.c
@@ -43,47 +43,6 @@ G_DEFINE_TYPE (GtkInspectorWindow, gtk_inspector_window, GTK_TYPE_WINDOW)
 
 extern void on_inspect (GtkWidget *button, GtkInspectorWindow *iw);
 
-static void
-on_graphic_updates_toggled (GtkToggleButton    *button,
-                            GtkInspectorWindow *iw)
-{
-  gdk_window_set_debug_updates (gtk_toggle_button_get_active (button));
-}
-
-static void
-fix_direction_recurse (GtkWidget *widget, gpointer data)
-{
-  GtkTextDirection dir = GPOINTER_TO_INT (data);
-
-  g_object_ref (widget);
-
-  gtk_widget_set_direction (widget, dir);
-  if (GTK_IS_CONTAINER (widget))
-    gtk_container_forall (GTK_CONTAINER (widget), fix_direction_recurse, data);
-
-  g_object_unref (widget);
-}
-
-static GtkTextDirection initial_direction;
-
-static void
-fix_direction (GtkInspectorWindow *iw)
-{
-  fix_direction_recurse (GTK_WIDGET (iw), GINT_TO_POINTER (initial_direction));
-}
-
-static void
-on_flip (GtkButton          *button,
-         GtkInspectorWindow *iw)
-{
-  fix_direction (iw);
-
-  if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_LTR)
-    gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
-  else
-    gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR);
-}
-
 static gboolean
 on_widget_tree_button_press (GtkInspectorWidgetTree *wt,
                              GdkEventButton         *event,
@@ -156,8 +115,6 @@ gtk_inspector_window_init (GtkInspectorWindow *iw)
       g_signal_connect (G_OBJECT (iw->widget_tree), "button-press-event",
                         G_CALLBACK (on_widget_tree_button_press), iw);
     }
-
-  initial_direction = gtk_widget_get_default_direction ();
 }
 
 static void
@@ -213,8 +170,6 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, data_list);
 
   gtk_widget_class_bind_template_callback (widget_class, on_inspect);
-  gtk_widget_class_bind_template_callback (widget_class, on_graphic_updates_toggled);
-  gtk_widget_class_bind_template_callback (widget_class, on_flip);
   gtk_widget_class_bind_template_callback (widget_class, on_widget_tree_selection_changed);
   gtk_widget_class_bind_template_callback (widget_class, on_send_widget_to_shell_activate);
 }
diff --git a/modules/inspector/window.ui b/modules/inspector/window.ui
index 1e36598..f8007b2 100644
--- a/modules/inspector/window.ui
+++ b/modules/inspector/window.ui
@@ -5,16 +5,6 @@
     <property name="icon-name">edit-find</property>
     <property name="icon-size">4</property>
   </object>
-  <object class="GtkImage" id="update_image">
-    <property name="visible">True</property>
-    <property name="icon-name">view-refresh</property>
-    <property name="icon-size">4</property>
-  </object>
-  <object class="GtkImage" id="flip_image">
-    <property name="visible">True</property>
-    <property name="icon-name">object-flip-horizontal</property>
-    <property name="icon-size">4</property>
-  </object>
   <object class="GtkMenu" id="widget_popup">
     <property name="visible">True</property>
     <child>
@@ -46,22 +36,6 @@
                 <signal name="clicked" handler="on_inspect"/>
               </object>
             </child>
-            <child>
-              <object class="GtkToggleButton">
-                <property name="visible">True</property>
-                <property name="image">update_image</property>
-                <property name="tooltip-text" translatable="yes">Show Graphic Updates</property>
-                <signal name="toggled" handler="on_graphic_updates_toggled"/>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton">
-                <property name="visible">True</property>
-                <property name="image">flip_image</property>
-                <property name="tooltip-text" translatable="yes">Change Text Direction</property>
-                <signal name="clicked" handler="on_flip"/>
-              </object>
-            </child>
           </object>
           <packing>
             <property name="pack-type">start</property>
@@ -225,6 +199,17 @@
           </object>
         </child>
         <child>
+          <object class="GtkInspectorVisual">
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Visual</property>
+          </object>
+        </child>
+        <child>
           <object class="GtkInspectorThemes">
             <property name="visible">True</property>
           </object>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4ba727e..bb7a01b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -294,6 +294,7 @@ modules/inspector/object-hierarchy.ui.h
 modules/inspector/prop-list.ui.h
 modules/inspector/signals-list.ui.h
 modules/inspector/themes.ui.h
+modules/inspector/visual.ui.h
 modules/inspector/widget-tree.ui.h
 modules/inspector/window.ui.h
 modules/printbackends/cloudprint/gtkprintbackendcloudprint.c


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]