[gtk+] inspector: Allow setting hidpi scale



commit 425d785de55c64fe1adf3001e706c848e538c7bd
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jul 10 18:36:16 2014 -0400

    inspector: Allow setting hidpi scale

 gtk/inspector/general.c  |   43 +++++++++++++++++++++++++++++++++++++++++--
 gtk/inspector/general.ui |   39 +++++++++++++++++++++++++++++++++++++--
 2 files changed, 78 insertions(+), 4 deletions(-)
---
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index 697273f..2493c1f 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -55,7 +55,9 @@ struct _GtkInspectorGeneralPrivate
   GtkWidget *gtk_exe_prefix;
   GtkWidget *gtk_data_prefix;
   GtkWidget *gsettings_schema_dir;
+  GtkWidget *hidpi_spin;
   GtkWidget *touchscreen_switch;
+  GtkAdjustment *scale_adjustment;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorGeneral, gtk_inspector_general, GTK_TYPE_BOX)
@@ -156,9 +158,44 @@ update_touchscreen (GtkSwitch *sw, GParamSpec *pspec, GtkInspectorGeneral *gen)
   gtk_set_debug_flags (flags);
 }
 
+#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
 static void
-init_touch (GtkInspectorGeneral *gen)
+scale_changed (GtkAdjustment *adjustment, GtkInspectorGeneral *gen)
 {
+  GdkDisplay *display;
+  gint scale;
+
+  scale = gtk_adjustment_get_value (adjustment);
+  display = gtk_widget_get_display (GTK_WIDGET (gen));
+  gdk_x11_display_set_window_scale (display, scale);
+}
+#endif
+
+static void
+init_settings (GtkInspectorGeneral *gen)
+{
+#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
+  GdkScreen *screen;
+
+  screen = gtk_widget_get_screen (GTK_WIDGET (gen));
+  if (GDK_IS_X11_SCREEN (screen))
+    {
+      gdouble scale;
+
+      scale = gdk_screen_get_monitor_scale_factor (screen, 0);
+      gtk_adjustment_set_value (gen->priv->scale_adjustment, scale);
+      g_signal_connect (gen->priv->scale_adjustment, "value-changed",
+                        G_CALLBACK (scale_changed), gen);
+    }
+  else
+#endif
+    {
+      gtk_adjustment_set_value (gen->priv->scale_adjustment, 1);
+      gtk_widget_set_sensitive (gen->priv->hidpi_spin, FALSE);
+      gtk_widget_set_tooltip_text (gen->priv->hidpi_spin,
+                                   _("Backend does not support window scaling"));
+    }
+
   gtk_switch_set_active (GTK_SWITCH (gen->priv->touchscreen_switch), (gtk_get_debug_flags () & 
GTK_DEBUG_TOUCHSCREEN) != 0);
   g_signal_connect (gen->priv->touchscreen_switch, "notify::active",
                     G_CALLBACK (update_touchscreen), gen);
@@ -179,7 +216,7 @@ gtk_inspector_general_init (GtkInspectorGeneral *gen)
   gtk_widget_init_template (GTK_WIDGET (gen));
   init_version (gen);
   init_env (gen);
-  init_touch (gen);
+  init_settings (gen);
 }
 
 static void
@@ -197,6 +234,8 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_exe_prefix);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_data_prefix);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gsettings_schema_dir);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, hidpi_spin);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, scale_adjustment);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, touchscreen_switch);
 }
 
diff --git a/gtk/inspector/general.ui b/gtk/inspector/general.ui
index 2ee6bcc..12e8e98 100644
--- a/gtk/inspector/general.ui
+++ b/gtk/inspector/general.ui
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface domain="gtk30">
+  <object class="GtkAdjustment" id="scale_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">2</property>
+    <property name="step-increment">1</property>
+    <property name="page-increment">1</property>
+  </object>
   <template class="GtkInspectorGeneral" parent="GtkBox">
     <property name="orientation">vertical</property>
     <property name="margin">60</property>
@@ -279,7 +285,7 @@
       </object>
     </child>
     <child>
-      <object class="GtkFrame" id="touch_frame">
+      <object class="GtkFrame" id="settings_frame">
         <property name="visible">True</property>
         <property name="halign">center</property>
         <child>
@@ -293,6 +299,35 @@
                 <property name="margin">10</property>
                 <property name="spacing">40</property>
                 <child>
+                  <object class="GtkLabel" id="hidpi_label">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">Window scaling</property>
+                    <property name="halign">start</property>
+                    <property name="valign">baseline</property>
+                    <property name="xalign">0.0</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkSpinButton" id="hidpi_spin">
+                    <property name="visible">True</property>
+                    <property name="halign">end</property>
+                    <property name="valign">baseline</property>
+                    <property name="adjustment">scale_adjustment</property>
+                    <property name="snap-to-ticks">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child>
+              <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" id="touchscreen_label">
                     <property name="visible">True</property>
                     <property name="label" translatable="yes">Simulate touchscreen</property>
@@ -338,7 +373,7 @@
     <widgets>
       <widget name="version_frame"/>
       <widget name="env_frame"/>
-      <widget name="touch_frame"/>
+      <widget name="settings_frame"/>
     </widgets>
   </object>
 </interface>


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