summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammed Sadiq <sadiqpkp@gmail.com>2019-07-20 02:22:03 +0000
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2019-07-20 02:22:03 +0000
commite1cd43cb4819fc2deb773593c1121bc469d2da66 (patch)
tree8a2e5383f4b1cb0dc372557bbd56ce48c267074b
parent197d261df3fd0ac4dc03a56b796cc53bccc511ca (diff)
downloadgnome-control-center-e1cd43cb4819fc2deb773593c1121bc469d2da66.tar.gz
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
-rw-r--r--panels/background/cc-background-panel.ui43
-rw-r--r--panels/background/cc-background-preview.c53
-rw-r--r--panels/background/cc-background-preview.ui6
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>