[gnome-control-center] background: Get Preview aspect ratio from primary monitor
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] background: Get Preview aspect ratio from primary monitor
- Date: Sat, 20 Jul 2019 02:22:17 +0000 (UTC)
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]