[gnome-control-center] background: Get Preview aspect ratio from primary monitor



commit e1cd43cb4819fc2deb773593c1121bc469d2da66
Author: Mohammed Sadiq <sadiqpkp gmail com>
Date:   Sat Jul 20 02:22:03 2019 +0000

    background: Get Preview aspect ratio from primary monitor
    
    Get the aspect ratio from Primary monitor, and allow the preview
    to have smaller size, so that it works well on smaller screens

 panels/background/cc-background-panel.ui   | 43 ++++++++++++++----------
 panels/background/cc-background-preview.c  | 53 ++++++++++++++++++++++++++++++
 panels/background/cc-background-preview.ui |  6 ++--
 3 files changed, 82 insertions(+), 20 deletions(-)
---
diff --git a/panels/background/cc-background-panel.ui b/panels/background/cc-background-panel.ui
index 25cc62ea5..3cde1aa78 100644
--- a/panels/background/cc-background-panel.ui
+++ b/panels/background/cc-background-panel.ui
@@ -11,26 +11,35 @@
         <property name="orientation">vertical</property>
 
         <child>
-          <object class="GtkBox">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="spacing">24</property>
-            <property name="margin">32</property>
-            <property name="halign">center</property>
-            <child>
-              <object class="CcBackgroundPreview" id="desktop_preview">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="halign">end</property>
-                <property name="valign">center</property>
-              </object>
-            </child>
+          <object class="HdyColumn">
+            <property name="visible">1</property>
+            <property name="maximum_width">600</property>
+            <property name="linear_growth_width">400</property>
             <child>
-              <object class="CcBackgroundPreview" id="lock_screen_preview">
+              <object class="GtkBox">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="is-lock-screen">True</property>
-                <property name="valign">center</property>
+                <property name="spacing">24</property>
+                <property name="margin-start">12</property>
+                <property name="margin-end">12</property>
+                <property name="margin-top">18</property>
+                <property name="margin-bottom">18</property>
+                <property name="hexpand">True</property>
+                <child>
+                  <object class="CcBackgroundPreview" id="desktop_preview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="valign">center</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="CcBackgroundPreview" id="lock_screen_preview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="is-lock-screen">True</property>
+                    <property name="valign">center</property>
+                  </object>
+                </child>
               </object>
             </child>
           </object>
diff --git a/panels/background/cc-background-preview.c b/panels/background/cc-background-preview.c
index 14717377d..a4fa31233 100644
--- a/panels/background/cc-background-preview.c
+++ b/panels/background/cc-background-preview.c
@@ -247,6 +247,55 @@ cc_background_preview_set_property (GObject      *object,
     }
 }
 
+static GtkSizeRequestMode
+cc_background_preview_get_request_mode (GtkWidget *widget)
+{
+  return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
+}
+
+static gfloat
+get_primary_monitor_aspect_ratio (void)
+{
+  GdkDisplay *display;
+  GdkMonitor *primary_monitor;
+  gfloat aspect_ratio;
+
+  display = gdk_display_get_default ();
+  primary_monitor = gdk_display_get_primary_monitor (display);
+  aspect_ratio = 16.0 / 9.0;
+
+  if (primary_monitor)
+    {
+      GdkRectangle monitor_layout;
+      gdk_monitor_get_geometry (primary_monitor, &monitor_layout);
+      aspect_ratio = monitor_layout.width / (gfloat) monitor_layout.height;
+    }
+
+  return aspect_ratio;
+}
+
+static void
+cc_background_preview_get_preferred_height_for_width (GtkWidget *widget,
+                                                      gint       width,
+                                                      gint      *minimum,
+                                                      gint      *natural)
+{
+  gfloat aspect_ratio = get_primary_monitor_aspect_ratio ();
+
+  *minimum = *natural = MAX (2, width / aspect_ratio);
+}
+
+static void
+cc_background_preview_get_preferred_width_for_height (GtkWidget *widget,
+                                                      gint       height,
+                                                      gint      *minimum,
+                                                      gint      *natural)
+{
+  gfloat aspect_ratio = get_primary_monitor_aspect_ratio ();
+
+  *minimum = *natural = MAX (2, height * aspect_ratio);
+}
+
 static void
 cc_background_preview_class_init (CcBackgroundPreviewClass *klass)
 {
@@ -257,6 +306,10 @@ cc_background_preview_class_init (CcBackgroundPreviewClass *klass)
   object_class->get_property = cc_background_preview_get_property;
   object_class->set_property = cc_background_preview_set_property;
 
+  widget_class->get_request_mode = cc_background_preview_get_request_mode;
+  widget_class->get_preferred_height_for_width = cc_background_preview_get_preferred_height_for_width;
+  widget_class->get_preferred_width_for_height = cc_background_preview_get_preferred_width_for_height;
+
   properties[PROP_IS_LOCK_SCREEN] = g_param_spec_boolean ("is-lock-screen",
                                                           "Lock screen",
                                                           "Whether the preview is of the lock screen",
diff --git a/panels/background/cc-background-preview.ui b/panels/background/cc-background-preview.ui
index c9a8d61f9..da1f23943 100644
--- a/panels/background/cc-background-preview.ui
+++ b/panels/background/cc-background-preview.ui
@@ -4,9 +4,8 @@
   <template class="CcBackgroundPreview" parent="GtkBox">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
-    <property name="expand">False</property>
-    <property name="width-request">384</property>
-    <property name="height-request">208</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">False</property>
     <style>
       <class name="frame" />
     </style>
@@ -15,6 +14,7 @@
       <object class="GtkOverlay">
         <property name="visible">True</property>
         <property name="can-focus">False</property>
+        <property name="hexpand">True</property>
 
         <!-- Wallpaper -->
         <child>


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