monitor-config-manager: Computer monitor scale in caller

Compute the monitor scaling in a separated function using the primary
monitor (not its config) and pass it to the creation function instead.

This will allow removing the special logic for the primary monitor.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/522>
This commit is contained in:
Marco Trevisan (Treviño) 2019-04-03 16:11:21 +02:00 committed by Marge Bot
parent aeea2882e5
commit e8b84441a4

View File

@ -726,12 +726,11 @@ create_preferred_logical_monitor_config (MetaMonitorManager *monitor_ma
MetaMonitor *monitor, MetaMonitor *monitor,
int x, int x,
int y, int y,
MetaLogicalMonitorConfig *primary_logical_monitor_config, float scale,
MetaLogicalMonitorLayoutMode layout_mode) MetaLogicalMonitorLayoutMode layout_mode)
{ {
MetaMonitorMode *mode; MetaMonitorMode *mode;
int width, height; int width, height;
float scale;
MetaMonitorTransform transform; MetaMonitorTransform transform;
MetaMonitorConfig *monitor_config; MetaMonitorConfig *monitor_config;
MetaLogicalMonitorConfig *logical_monitor_config; MetaLogicalMonitorConfig *logical_monitor_config;
@ -739,16 +738,6 @@ create_preferred_logical_monitor_config (MetaMonitorManager *monitor_ma
mode = meta_monitor_get_preferred_mode (monitor); mode = meta_monitor_get_preferred_mode (monitor);
meta_monitor_mode_get_resolution (mode, &width, &height); meta_monitor_mode_get_resolution (mode, &width, &height);
if ((meta_monitor_manager_get_capabilities (monitor_manager) &
META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED) &&
primary_logical_monitor_config)
scale = primary_logical_monitor_config->scale;
else
scale = meta_monitor_manager_calculate_monitor_mode_scale (monitor_manager,
layout_mode,
monitor,
mode);
switch (layout_mode) switch (layout_mode)
{ {
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL: case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
@ -785,6 +774,29 @@ create_preferred_logical_monitor_config (MetaMonitorManager *monitor_ma
return logical_monitor_config; return logical_monitor_config;
} }
static float
compute_scale_for_monitor (MetaMonitorManager *monitor_manager,
MetaMonitor *monitor,
MetaMonitor *primary_monitor)
{
MetaMonitor *target_monitor = monitor;
MetaLogicalMonitorLayoutMode layout_mode;
MetaMonitorMode *monitor_mode;
if ((meta_monitor_manager_get_capabilities (monitor_manager) &
META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED) &&
primary_monitor)
target_monitor = primary_monitor;
layout_mode = meta_monitor_manager_get_default_layout_mode (monitor_manager);
monitor_mode = meta_monitor_get_preferred_mode (target_monitor);
return meta_monitor_manager_calculate_monitor_mode_scale (monitor_manager,
layout_mode,
target_monitor,
monitor_mode);
}
typedef enum _MonitorPositioningMode typedef enum _MonitorPositioningMode
{ {
MONITOR_POSITIONING_LINEAR, MONITOR_POSITIONING_LINEAR,
@ -840,6 +852,7 @@ create_monitors_config (MetaMonitorConfigManager *config_manager,
MetaLogicalMonitorLayoutMode layout_mode; MetaLogicalMonitorLayoutMode layout_mode;
MetaLogicalMonitorConfig *primary_logical_monitor_config; MetaLogicalMonitorConfig *primary_logical_monitor_config;
gboolean has_suggested_position; gboolean has_suggested_position;
float scale;
GList *l; GList *l;
int x, y; int x, y;
@ -862,11 +875,11 @@ create_monitors_config (MetaMonitorConfigManager *config_manager,
break; break;
} }
scale = compute_scale_for_monitor (monitor_manager, primary_monitor, NULL);
primary_logical_monitor_config = primary_logical_monitor_config =
create_preferred_logical_monitor_config (monitor_manager, create_preferred_logical_monitor_config (monitor_manager,
primary_monitor, primary_monitor,
x, y, x, y, scale,
NULL,
layout_mode); layout_mode);
primary_logical_monitor_config->is_primary = TRUE; primary_logical_monitor_config->is_primary = TRUE;
logical_monitor_configs = g_list_append (NULL, logical_monitor_configs = g_list_append (NULL,
@ -895,11 +908,12 @@ create_monitors_config (MetaMonitorConfigManager *config_manager,
break; break;
} }
scale = compute_scale_for_monitor (monitor_manager, monitor,
primary_monitor);
logical_monitor_config = logical_monitor_config =
create_preferred_logical_monitor_config (monitor_manager, create_preferred_logical_monitor_config (monitor_manager,
monitor, monitor,
x, y, x, y, scale,
primary_logical_monitor_config,
layout_mode); layout_mode);
logical_monitor_configs = g_list_append (logical_monitor_configs, logical_monitor_configs = g_list_append (logical_monitor_configs,
logical_monitor_config); logical_monitor_config);