[gnome-control-center/gbsneto/gtk4: 52/53] background-preview: Fix a measure() infloop
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/gbsneto/gtk4: 52/53] background-preview: Fix a measure() infloop
- Date: Wed, 15 Dec 2021 01:34:35 +0000 (UTC)
commit 04e3497fa6c40331ce1225f644049cee04e36cf9
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date: Sun Dec 12 19:40:58 2021 +0500
background-preview: Fix a measure() infloop
panels/background/cc-background-preview.c | 44 ++++++++++++++++--------------
panels/background/cc-background-preview.ui | 2 ++
2 files changed, 26 insertions(+), 20 deletions(-)
---
diff --git a/panels/background/cc-background-preview.c b/panels/background/cc-background-preview.c
index f87634612..6e5052c0e 100644
--- a/panels/background/cc-background-preview.c
+++ b/panels/background/cc-background-preview.c
@@ -263,15 +263,13 @@ cc_background_preview_get_request_mode (GtkWidget *widget)
return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
}
-static gfloat
-get_primary_monitor_aspect_ratio (void)
+static void
+get_primary_monitor_geometry (int *width, int *height)
{
GdkDisplay *display;
GListModel *monitors;
- gfloat aspect_ratio;
display = gdk_display_get_default ();
- aspect_ratio = 16.0 / 9.0;
monitors = gdk_display_get_monitors (display);
if (monitors)
@@ -281,10 +279,18 @@ get_primary_monitor_aspect_ratio (void)
primary_monitor = g_list_model_get_item (monitors, 0);
gdk_monitor_get_geometry (primary_monitor, &monitor_layout);
- aspect_ratio = monitor_layout.width / (gfloat) monitor_layout.height;
+ if (width)
+ *width = monitor_layout.width;
+ if (height)
+ *height = monitor_layout.height;
+
+ return;
}
- return aspect_ratio;
+ if (width)
+ *width = 1920;
+ if (height)
+ *height = 1080;
}
static void
@@ -297,10 +303,10 @@ cc_background_preview_measure (GtkWidget *widget,
gint *natural_baseline)
{
CcBackgroundPreview *self = (CcBackgroundPreview *)widget;
- gint child_min, child_nat;
- gfloat aspect_ratio;
+ int child_min, child_nat;
+ int width, height;
- aspect_ratio = get_primary_monitor_aspect_ratio ();
+ get_primary_monitor_geometry (&width, &height);
gtk_widget_measure (self->overlay,
orientation,
@@ -309,18 +315,16 @@ cc_background_preview_measure (GtkWidget *widget,
&child_nat,
NULL, NULL);
- switch (orientation)
- {
- case GTK_ORIENTATION_HORIZONTAL:
- *minimum = MAX (2, child_min * aspect_ratio);
- *natural = MAX (2, child_nat * aspect_ratio);
- break;
+ *minimum = child_min;
- case GTK_ORIENTATION_VERTICAL:
- *minimum = MAX (2, for_size / aspect_ratio);
- *natural = MAX (2, for_size / aspect_ratio);
- break;
- }
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *natural = width;
+ else if (for_size < 0)
+ *natural = height;
+ else
+ *natural = floor ((double) MIN (for_size, width) / width * height);
+
+ *natural = MAX (*natural, child_nat);
}
static void
diff --git a/panels/background/cc-background-preview.ui b/panels/background/cc-background-preview.ui
index e747bf516..f2bc9f97b 100644
--- a/panels/background/cc-background-preview.ui
+++ b/panels/background/cc-background-preview.ui
@@ -17,6 +17,8 @@
<object class="GtkDrawingArea" id="drawing_area">
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ <property name="width-request">2</property>
+ <property name="height-request">2</property>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]