[mutter] backend: Get the UI scaling factor from the logical monitors
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] backend: Get the UI scaling factor from the logical monitors
- Date: Fri, 7 Apr 2017 14:38:11 +0000 (UTC)
commit e6eac46629335ac341e3207df8b2aac15fb9ffa7
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Apr 7 21:54:08 2017 +0800
backend: Get the UI scaling factor from the logical monitors
Instead of looking at the GTK+ settings, check the logical monitor
state and determine the UI scaling factor given the maximum logical
monitor scale. This is only enabled when the monitor config manager
feature is enabled, as only then can a scale be explicitly configured.
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/backends/meta-backend.c | 59 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 57 insertions(+), 2 deletions(-)
---
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index 87de4e7..61604ef 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -97,6 +97,8 @@ struct _MetaBackendPrivate
MetaPointerConstraint *client_pointer_constraint;
MetaDnd *dnd;
+
+ int ui_scaling_factor;
};
typedef struct _MetaBackendPrivate MetaBackendPrivate;
@@ -151,6 +153,25 @@ center_pointer (MetaBackend *backend)
primary->rect.y + primary->rect.height / 2);
}
+static gboolean
+meta_backend_update_ui_scaling_factor (MetaBackend *backend)
+{
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
+ int ui_scaling_factor;
+
+ ui_scaling_factor = meta_backend_get_ui_scaling_factor (backend);
+
+ if (ui_scaling_factor != priv->ui_scaling_factor)
+ {
+ priv->ui_scaling_factor = ui_scaling_factor;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
void
meta_backend_monitors_changed (MetaBackend *backend)
{
@@ -170,6 +191,9 @@ meta_backend_monitors_changed (MetaBackend *backend)
!meta_monitor_manager_is_headless (monitor_manager))
center_pointer (backend);
}
+
+ if (meta_backend_update_ui_scaling_factor (backend))
+ meta_backend_notify_ui_scaling_factor_changed (backend);
}
void
@@ -339,6 +363,8 @@ meta_backend_real_post_init (MetaBackend *backend)
meta_backend_sync_screen_size (backend);
+ meta_backend_update_ui_scaling_factor (backend);
+
priv->cursor_renderer = META_BACKEND_GET_CLASS (backend)->create_cursor_renderer (backend);
priv->device_monitors =
@@ -983,6 +1009,7 @@ xft_dpi_changed (GtkSettings *settings,
GParamSpec *pspec,
MetaBackend *backend)
{
+ meta_backend_update_ui_scaling_factor (backend);
meta_backend_notify_ui_scaling_factor_changed (backend);
}
@@ -1070,13 +1097,41 @@ meta_backend_notify_keymap_layout_group_changed (MetaBackend *backend,
locked_group);
}
+static int
+calculate_ui_scaling_factor (MetaBackend *backend)
+{
+ MetaMonitorManager *monitor_manager =
+ meta_backend_get_monitor_manager (backend);
+ GList *logical_monitors;
+ GList *l;
+ int max_scale = 1;
+
+ logical_monitors =
+ meta_monitor_manager_get_logical_monitors (monitor_manager);
+ for (l = logical_monitors; l; l = l->next)
+ {
+ MetaLogicalMonitor *logical_monitor = l->data;
+
+ max_scale = MAX (logical_monitor->scale, max_scale);
+ }
+
+ return max_scale;
+}
+
int
meta_backend_get_ui_scaling_factor (MetaBackend *backend)
{
if (meta_is_stage_views_scaled ())
- return 1;
+ {
+ return 1;
+ }
else
- return meta_theme_get_window_scaling_factor ();
+ {
+ if (meta_is_monitor_config_manager_enabled ())
+ return calculate_ui_scaling_factor (backend);
+ else
+ return meta_theme_get_window_scaling_factor ();
+ }
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]