[gtk+] inspector: Show widget allocation



commit a4d9eccbc6d9258d680b4d299c260dea5854ce33
Author: Timm Bäder <mail baedert org>
Date:   Sat Sep 6 16:36:05 2014 +0200

    inspector: Show widget allocation
    
    https://bugzilla.gnome.org/show_bug.cgi?id=736191

 gtk/inspector/misc-info.c    |   25 ++++-
 gtk/inspector/misc-info.h    |    6 +-
 gtk/inspector/misc-info.ui   |  288 ++++++++++++++++++++++++------------------
 gtk/inspector/misc-info.ui.h |    1 +
 4 files changed, 192 insertions(+), 128 deletions(-)
---
diff --git a/gtk/inspector/misc-info.c b/gtk/inspector/misc-info.c
index 8ef5314..4b615e5 100644
--- a/gtk/inspector/misc-info.c
+++ b/gtk/inspector/misc-info.c
@@ -43,6 +43,8 @@ struct _GtkInspectorMiscInfoPrivate {
   GtkWidget *focus_widget_row;
   GtkWidget *focus_widget;
   GtkWidget *focus_widget_button;
+  GtkWidget *allocated_size_row;
+  GtkWidget *allocated_size;
 };
 
 enum
@@ -50,8 +52,8 @@ enum
   PROP_0,
   PROP_WIDGET_TREE
 };
- 
-G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_BOX)
+
+G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_SCROLLED_WINDOW)
 
 static gchar *
 format_state_flags (GtkStateFlags state)
@@ -93,6 +95,17 @@ state_flags_changed (GtkWidget *w, GtkStateFlags old_flags, GtkInspectorMiscInfo
 }
 
 static void
+allocation_changed (GtkWidget *w, GdkRectangle *allocation, GtkInspectorMiscInfo *sl)
+{
+  gchar *size_label = g_strdup_printf ("%d × %d",
+                                       gtk_widget_get_allocated_width (w),
+                                       gtk_widget_get_allocated_height (w));
+
+  gtk_label_set_label (GTK_LABEL (sl->priv->allocated_size), size_label);
+  g_free (size_label);
+}
+
+static void
 disconnect_each_other (gpointer  still_alive,
                        GObject  *for_science)
 {
@@ -209,6 +222,7 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
     {
       g_signal_handlers_disconnect_by_func (sl->priv->object, state_flags_changed, sl);
       g_signal_handlers_disconnect_by_func (sl->priv->object, set_focus_cb, sl);
+      g_signal_handlers_disconnect_by_func (sl->priv->object, allocation_changed, sl);
       disconnect_each_other (sl->priv->object, G_OBJECT (sl));
       disconnect_each_other (sl, sl->priv->object);
       sl->priv->object = NULL;
@@ -231,10 +245,15 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
       gtk_widget_show (sl->priv->state_row);
       g_signal_connect_object (object, "state-flags-changed", G_CALLBACK (state_flags_changed), sl, 0);
       state_flags_changed (GTK_WIDGET (sl->priv->object), 0, sl);
+
+      allocation_changed (GTK_WIDGET (sl->priv->object), NULL, sl);
+      gtk_widget_show (sl->priv->allocated_size_row);
+      g_signal_connect_object (object, "size-allocate", G_CALLBACK (allocation_changed), sl, 0);
     }
   else
     {
       gtk_widget_hide (sl->priv->state_row);
+      gtk_widget_hide (sl->priv->allocated_size_row);
     }
 
   if (GTK_IS_BUILDABLE (object))
@@ -336,6 +355,8 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
    gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget_row);
    gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget);
    gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget_button);
+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size_row);
+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size);
 
   gtk_widget_class_bind_template_callback (widget_class, show_default_widget);
   gtk_widget_class_bind_template_callback (widget_class, show_focus_widget);
diff --git a/gtk/inspector/misc-info.h b/gtk/inspector/misc-info.h
index 537e946..c3bf793 100644
--- a/gtk/inspector/misc-info.h
+++ b/gtk/inspector/misc-info.h
@@ -18,7 +18,7 @@
 #ifndef _GTK_INSPECTOR_MISC_INFO_H_
 #define _GTK_INSPECTOR_MISC_INFO_H_
 
-#include <gtk/gtkbox.h>
+#include "gtkscrolledwindow.h"
 
 #define GTK_TYPE_INSPECTOR_MISC_INFO            (gtk_inspector_misc_info_get_type())
 #define GTK_INSPECTOR_MISC_INFO(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), 
GTK_TYPE_INSPECTOR_MISC_INFO, GtkInspectorMiscInfo))
@@ -32,13 +32,13 @@ typedef struct _GtkInspectorMiscInfoPrivate GtkInspectorMiscInfoPrivate;
 
 typedef struct _GtkInspectorMiscInfo
 {
-  GtkBox parent;
+  GtkScrolledWindow parent;
   GtkInspectorMiscInfoPrivate *priv;
 } GtkInspectorMiscInfo;
 
 typedef struct _GtkInspectorMiscInfoClass
 {
-  GtkBoxClass parent;
+  GtkScrolledWindowClass parent;
 } GtkInspectorMiscInfoClass;
 
 G_BEGIN_DECLS
diff --git a/gtk/inspector/misc-info.ui b/gtk/inspector/misc-info.ui
index c91e7ee..bb03b90 100644
--- a/gtk/inspector/misc-info.ui
+++ b/gtk/inspector/misc-info.ui
@@ -1,168 +1,210 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface domain="gtk30">
-  <template class="GtkInspectorMiscInfo" parent="GtkBox">
-    <property name="orientation">vertical</property>
-    <property name="margin">60</property>
-    <property name="spacing">10</property>
+  <template class="GtkInspectorMiscInfo" parent="GtkScrolledWindow">
+
     <child>
-      <object class="GtkFrame">
-        <property name="visible">True</property>
-        <property name="halign">center</property>
+      <object class="GtkBox">
+        <property name="visible">true</property>
+        <property name="orientation">vertical</property>
+        <property name="margin">60</property>
+        <property name="spacing">10</property>
+
         <child>
-          <object class="GtkListBox">
+          <object class="GtkFrame">
             <property name="visible">True</property>
-            <property name="selection-mode">none</property>
+            <property name="halign">center</property>
             <child>
-              <object class="GtkListBoxRow" id="state_row">
+              <object class="GtkListBox">
                 <property name="visible">True</property>
-                <property name="activatable">False</property>
+                <property name="selection-mode">none</property>
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkListBoxRow" id="state_row">
                     <property name="visible">True</property>
-                    <property name="orientation">horizontal</property>
-                    <property name="margin">10</property>
-                    <property name="spacing">40</property>
+                    <property name="activatable">False</property>
                     <child>
-                      <object class="GtkLabel" id="state_label">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">State</property>
-                        <property name="halign">start</property>
-                        <property name="valign">baseline</property>
-                        <property name="xalign">0.0</property>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="state">
-                        <property name="visible">True</property>
-                        <property name="selectable">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="margin">10</property>
+                        <property name="spacing">40</property>
+                        <child>
+                          <object class="GtkLabel" id="state_label">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">State</property>
+                            <property name="halign">start</property>
+                            <property name="valign">baseline</property>
+                            <property name="xalign">0.0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="state">
+                            <property name="visible">True</property>
+                            <property name="selectable">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
                 </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkListBoxRow" id="buildable_id_row">
-                <property name="visible">True</property>
-                <property name="activatable">False</property>
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkListBoxRow" id="buildable_id_row">
                     <property name="visible">True</property>
-                    <property name="orientation">horizontal</property>
-                    <property name="margin">10</property>
-                    <property name="spacing">40</property>
-                    <child>
-                      <object class="GtkLabel" id="buildable_id_label">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">Buildable ID</property>
-                        <property name="halign">start</property>
-                        <property name="valign">baseline</property>
-                        <property name="xalign">0.0</property>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                      </packing>
-                    </child>
+                    <property name="activatable">False</property>
                     <child>
-                      <object class="GtkLabel" id="buildable_id">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="selectable">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="margin">10</property>
+                        <property name="spacing">40</property>
+                        <child>
+                          <object class="GtkLabel" id="buildable_id_label">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Buildable ID</property>
+                            <property name="halign">start</property>
+                            <property name="valign">baseline</property>
+                            <property name="xalign">0.0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="buildable_id">
+                            <property name="visible">True</property>
+                            <property name="selectable">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
                 </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkListBoxRow" id="default_widget_row">
-                <property name="visible">True</property>
-                <property name="activatable">False</property>
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkListBoxRow" id="default_widget_row">
                     <property name="visible">True</property>
-                    <property name="orientation">horizontal</property>
-                    <property name="margin">10</property>
-                    <property name="spacing">40</property>
-                    <child>
-                      <object class="GtkLabel" id="default_widget_label">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">Default Widget</property>
-                        <property name="halign">start</property>
-                        <property name="valign">baseline</property>
-                        <property name="xalign">0.0</property>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                      </packing>
-                    </child>
+                    <property name="activatable">False</property>
                     <child>
-                      <object class="GtkLabel" id="default_widget">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="default_widget_button">
-                        <property name="visible">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
-                        <property name="label" translatable="yes">Properties</property>
-                        <signal name="clicked" handler="show_default_widget"/>
+                        <property name="orientation">horizontal</property>
+                        <property name="margin">10</property>
+                        <property name="spacing">40</property>
+                        <child>
+                          <object class="GtkLabel" id="default_widget_label">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Default Widget</property>
+                            <property name="halign">start</property>
+                            <property name="valign">baseline</property>
+                            <property name="xalign">0.0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="default_widget">
+                            <property name="visible">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkButton" id="default_widget_button">
+                            <property name="visible">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                            <property name="label" translatable="yes">Properties</property>
+                            <signal name="clicked" handler="show_default_widget"/>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
                 </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkListBoxRow" id="focus_widget_row">
-                <property name="visible">True</property>
-                <property name="activatable">False</property>
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkListBoxRow" id="focus_widget_row">
                     <property name="visible">True</property>
-                    <property name="orientation">horizontal</property>
-                    <property name="margin">10</property>
-                    <property name="spacing">40</property>
-                    <child>
-                      <object class="GtkLabel" id="focus_widget_label">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">Focus Widget</property>
-                        <property name="halign">start</property>
-                        <property name="valign">baseline</property>
-                        <property name="xalign">0.0</property>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                      </packing>
-                    </child>
+                    <property name="activatable">False</property>
                     <child>
-                      <object class="GtkLabel" id="focus_widget">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
-                        <property name="ellipsize">end</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="margin">10</property>
+                        <property name="spacing">40</property>
+                        <child>
+                          <object class="GtkLabel" id="focus_widget_label">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Focus Widget</property>
+                            <property name="halign">start</property>
+                            <property name="valign">baseline</property>
+                            <property name="xalign">0.0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="focus_widget">
+                            <property name="visible">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                            <property name="ellipsize">end</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkButton" id="focus_widget_button">
+                            <property name="visible">True</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                            <property name="label" translatable="yes">Properties</property>
+                            <signal name="clicked" handler="show_focus_widget"/>
+                          </object>
+                        </child>
                       </object>
                     </child>
+                  </object>
+                </child>
+
+                <child>
+                  <object class="GtkListBoxRow" id="allocated_size_row">
+                    <property name="visible">true</property>
+                    <property name="activatable">false</property>
                     <child>
-                      <object class="GtkButton" id="focus_widget_button">
-                        <property name="visible">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">baseline</property>
-                        <property name="label" translatable="yes">Properties</property>
-                        <signal name="clicked" handler="show_focus_widget"/>
+                      <object class="GtkBox">
+                        <property name="visible">true</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="margin">10</property>
+                        <property name="spacing">40</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="visible">true</property>
+                            <property name="label" translatable="yes">Allocated size</property>
+                            <property name="halign">start</property>
+                            <property name="valign">baseline</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">true</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="allocated_size">
+                            <property name="visible">true</property>
+                            <property name="halign">end</property>
+                            <property name="valign">baseline</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
                 </child>
+
               </object>
             </child>
           </object>
diff --git a/gtk/inspector/misc-info.ui.h b/gtk/inspector/misc-info.ui.h
index b318720..b78feec 100644
--- a/gtk/inspector/misc-info.ui.h
+++ b/gtk/inspector/misc-info.ui.h
@@ -4,3 +4,4 @@ N_("Default Widget");
 N_("Properties");
 N_("Focus Widget");
 N_("Properties");
+N_("Allocated size");


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