diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
index 4a12bc6b9..5ff4fd0fe 100644
--- a/src/backends/meta-monitor-config-manager.c
+++ b/src/backends/meta-monitor-config-manager.c
@@ -950,16 +950,6 @@ meta_verify_logical_monitor_config (MetaLogicalMonitorConfig *logical_monitor
int expected_mode_width = 0;
int expected_mode_height = 0;
- if (!meta_monitor_manager_is_scale_supported (monitor_manager,
- layout_mode,
- logical_monitor_config->scale))
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid logical monitor config scale %g",
- logical_monitor_config->scale);
- return FALSE;
- }
-
if (logical_monitor_config->layout.x < 0 ||
logical_monitor_config->layout.y < 0)
{
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
index 00607265f..a8c2098aa 100644
--- a/src/backends/meta-monitor-manager-dummy.c
+++ b/src/backends/meta-monitor-manager-dummy.c
@@ -31,6 +31,7 @@
#include
#include "backends/meta-backend-private.h"
+#include "backends/meta-monitor.h"
#include "backends/meta-monitor-config-manager.h"
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
@@ -40,17 +41,6 @@
#define MAX_CRTCS (MAX_MONITORS * 2)
#define MAX_MODES (MAX_MONITORS * 4)
-static float supported_scales_dummy_logical[] = {
- 1.0,
- 1.5,
- 2.0
-};
-
-static float supported_scales_dummy_physical[] = {
- 1.0,
- 2.0
-};
-
struct _MetaMonitorManagerDummy
{
MetaMonitorManager parent_instance;
@@ -320,12 +310,8 @@ meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
for (i = 0; i < num_monitors && scales_str_list[i]; i++)
{
float scale = g_ascii_strtod (scales_str_list[i], NULL);
- if (meta_monitor_manager_is_scale_supported (manager,
- manager->layout_mode,
- scale))
- monitor_scales[i] = scale;
- else
- meta_warning ("Invalid dummy monitor scale\n");
+
+ monitor_scales[i] = scale;
}
g_strfreev (scales_str_list);
}
@@ -614,23 +600,28 @@ meta_monitor_manager_dummy_calculate_monitor_mode_scale (MetaMonitorManager *man
return output_dummy->scale;
}
-static void
-meta_monitor_manager_dummy_get_supported_scales (MetaMonitorManager *manager,
- MetaLogicalMonitorLayoutMode layout_mode,
- float **scales,
- int *n_scales)
+static float *
+meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
{
+ MetaMonitorScalesConstraint constraints =
+ META_MONITOR_SCALES_CONSTRAINT_NONE;
+
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- *scales = supported_scales_dummy_logical;
- *n_scales = G_N_ELEMENTS (supported_scales_dummy_logical);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
- *scales = supported_scales_dummy_physical;
- *n_scales = G_N_ELEMENTS (supported_scales_dummy_physical);
+ constraints |= META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
break;
}
+
+ return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
+ constraints,
+ n_supported_scales);
}
static gboolean
@@ -699,7 +690,7 @@ meta_monitor_manager_dummy_class_init (MetaMonitorManagerDummyClass *klass)
manager_class->apply_configuration = meta_monitor_manager_dummy_apply_config;
manager_class->is_transform_handled = meta_monitor_manager_dummy_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_dummy_calculate_monitor_mode_scale;
- manager_class->get_supported_scales = meta_monitor_manager_dummy_get_supported_scales;
+ manager_class->calculate_supported_scales = meta_monitor_manager_dummy_calculate_supported_scales;
manager_class->get_capabilities = meta_monitor_manager_dummy_get_capabilities;
manager_class->get_max_screen_size = meta_monitor_manager_dummy_get_max_screen_size;
manager_class->get_default_layout_mode = meta_monitor_manager_dummy_get_default_layout_mode;
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index 53ffc50a2..9972bf1c4 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -394,10 +394,11 @@ struct _MetaMonitorManagerClass
MetaMonitor *,
MetaMonitorMode *);
- void (*get_supported_scales) (MetaMonitorManager *,
- MetaLogicalMonitorLayoutMode ,
- float **,
- int *);
+ float * (*calculate_supported_scales) (MetaMonitorManager *,
+ MetaLogicalMonitorLayoutMode ,
+ MetaMonitor *,
+ MetaMonitorMode *,
+ int *);
MetaMonitorManagerCapability (*get_capabilities) (MetaMonitorManager *);
@@ -509,8 +510,16 @@ float meta_monitor_manager_calculate_monitor_mode_scale (MetaMonito
MetaMonitor *monitor,
MetaMonitorMode *monitor_mode);
+float * meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *,
+ MetaLogicalMonitorLayoutMode ,
+ MetaMonitor *,
+ MetaMonitorMode *,
+ int *);
+
gboolean meta_monitor_manager_is_scale_supported (MetaMonitorManager *manager,
MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
float scale);
MetaMonitorManagerCapability
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 43ef91b92..64c600a20 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -406,16 +406,21 @@ meta_monitor_manager_calculate_monitor_mode_scale (MetaMonitorManager *manager,
monitor_mode);
}
-static void
-meta_monitor_manager_get_supported_scales (MetaMonitorManager *manager,
- MetaLogicalMonitorLayoutMode layout_mode,
- float **scales,
- int *n_scales)
+float *
+meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
{
MetaMonitorManagerClass *manager_class =
META_MONITOR_MANAGER_GET_CLASS (manager);
- manager_class->get_supported_scales (manager, layout_mode, scales, n_scales);
+ return manager_class->calculate_supported_scales (manager,
+ layout_mode,
+ monitor,
+ monitor_mode,
+ n_supported_scales);
}
MetaMonitorManagerCapability
@@ -1487,7 +1492,7 @@ meta_monitor_manager_legacy_handle_apply_configuration (MetaDBusDisplayConfig *
#define META_DISPLAY_CONFIG_MODE_FLAGS_PREFERRED (1 << 0)
#define META_DISPLAY_CONFIG_MODE_FLAGS_CURRENT (1 << 1)
-#define MODE_FORMAT "(iiddu)"
+#define MODE_FORMAT "(iiddadu)"
#define MODES_FORMAT "a" MODE_FORMAT
#define MONITOR_SPEC_FORMAT "(ssss)"
#define MONITOR_FORMAT "(" MONITOR_SPEC_FORMAT MODES_FORMAT "a{sv})"
@@ -1504,11 +1509,8 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
MetaMonitorManager *manager = META_MONITOR_MANAGER (skeleton);
GVariantBuilder monitors_builder;
GVariantBuilder logical_monitors_builder;
- GVariantBuilder supported_scales_builder;
GVariantBuilder properties_builder;
GList *l;
- float *supported_scales;
- int n_supported_scales;
int i;
MetaMonitorManagerCapability capabilities;
int max_screen_width, max_screen_height;
@@ -1546,8 +1548,11 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
for (k = meta_monitor_get_modes (monitor); k; k = k->next)
{
MetaMonitorMode *monitor_mode = k->data;
+ GVariantBuilder supported_scales_builder;
MetaMonitorModeSpec *monitor_mode_spec;
- int preferred_scale;
+ float preferred_scale;
+ float *supported_scales;
+ int n_supported_scales;
uint32_t flags = 0;
monitor_mode_spec = meta_monitor_mode_get_spec (monitor_mode);
@@ -1555,6 +1560,20 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
meta_monitor_manager_calculate_monitor_mode_scale (manager,
monitor,
monitor_mode);
+
+ g_variant_builder_init (&supported_scales_builder,
+ G_VARIANT_TYPE ("ad"));
+ supported_scales =
+ meta_monitor_manager_calculate_supported_scales (manager,
+ manager->layout_mode,
+ monitor,
+ monitor_mode,
+ &n_supported_scales);
+ for (i = 0; i < n_supported_scales; i++)
+ g_variant_builder_add (&supported_scales_builder, "d",
+ (double) supported_scales[i]);
+ g_free (supported_scales);
+
if (monitor_mode == current_mode)
flags |= META_DISPLAY_CONFIG_MODE_FLAGS_CURRENT;
if (monitor_mode == preferred_mode)
@@ -1565,6 +1584,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
monitor_mode_spec->height,
monitor_mode_spec->refresh_rate,
(double) preferred_scale,
+ &supported_scales_builder,
flags);
}
@@ -1632,14 +1652,6 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
NULL);
}
- g_variant_builder_init (&supported_scales_builder, G_VARIANT_TYPE ("ad"));
- meta_monitor_manager_get_supported_scales (manager,
- manager->layout_mode,
- &supported_scales,
- &n_supported_scales);
- for (i = 0; i < n_supported_scales; i++)
- g_variant_builder_add (&supported_scales_builder, "d", supported_scales[i]);
-
g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
capabilities = meta_monitor_manager_get_capabilities (manager);
if ((capabilities & META_MONITOR_MANAGER_CAPABILITY_MIRRORING) == 0)
@@ -1690,7 +1702,6 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
manager->serial,
g_variant_builder_end (&monitors_builder),
g_variant_builder_end (&logical_monitors_builder),
- g_variant_builder_end (&supported_scales_builder),
g_variant_builder_end (&properties_builder));
return TRUE;
@@ -1708,16 +1719,20 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
gboolean
meta_monitor_manager_is_scale_supported (MetaMonitorManager *manager,
MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
float scale)
{
- float *supported_scales;
+ g_autofree float *supported_scales = NULL;
int n_supported_scales;
int i;
- meta_monitor_manager_get_supported_scales (manager,
- layout_mode,
- &supported_scales,
- &n_supported_scales);
+ supported_scales =
+ meta_monitor_manager_calculate_supported_scales (manager,
+ layout_mode,
+ monitor,
+ monitor_mode,
+ &n_supported_scales);
for (i = 0; i < n_supported_scales; i++)
{
if (supported_scales[i] == scale)
@@ -1740,15 +1755,6 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
float scale = logical_monitor_config->scale;
GList *k;
- if (!meta_monitor_manager_is_scale_supported (manager,
- config->layout_mode,
- scale))
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Scale not supported by backend");
- return FALSE;
- }
-
for (k = logical_monitor_config->monitor_configs; k; k = k->next)
{
MetaMonitorConfig *monitor_config = k->data;
@@ -1773,6 +1779,18 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
"Specified monitor mode not available");
return FALSE;
}
+
+ if (!meta_monitor_manager_is_scale_supported (manager,
+ config->layout_mode,
+ monitor,
+ monitor_mode,
+ scale))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Scale not supported by backend");
+ return FALSE;
+ }
+
}
}
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 24ef1fefa..c01daef35 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -1336,6 +1336,43 @@ meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
return calculate_scale (monitor, monitor_mode);
}
+float *
+meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ MetaMonitorScalesConstraint constraints,
+ int *n_supported_scales)
+{
+ unsigned int i;
+ int width, height;
+ GArray *supported_scales;
+ static const float all_scales[] = {
+ 1.0,
+ 1.5,
+ 2.0
+ };
+
+ meta_monitor_mode_get_resolution (monitor_mode, &width, &height);
+
+ supported_scales = g_array_new (FALSE, FALSE, sizeof (float));
+
+ for (i = 0; i < G_N_ELEMENTS (all_scales); i++)
+ {
+ float scale = all_scales[i];
+
+ if ((constraints & META_MONITOR_SCALES_CONSTRAINT_NO_FRAC) &&
+ fmodf (scale, 1.0) != 0.0)
+ continue;
+
+ if (fmodf (width, scale) != 0.0 || fmodf (height, scale) != 0.0)
+ continue;
+
+ g_array_append_val (supported_scales, scale);
+ }
+
+ *n_supported_scales = supported_scales->len;
+ return (float *) g_array_free (supported_scales, FALSE);
+}
+
MetaMonitorModeSpec *
meta_monitor_mode_get_spec (MetaMonitorMode *monitor_mode)
{
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index a2631d38b..3e40a9de7 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -53,6 +53,12 @@ typedef gboolean (* MetaMonitorModeFunc) (MetaMonitor *monitor,
gpointer user_data,
GError **error);
+typedef enum _MetaMonitorScalesConstraint
+{
+ META_MONITOR_SCALES_CONSTRAINT_NONE = 0,
+ META_MONITOR_SCALES_CONSTRAINT_NO_FRAC = (1 << 0),
+} MetaMonitorScalesConstraint;
+
#define META_TYPE_MONITOR (meta_monitor_get_type ())
G_DECLARE_DERIVABLE_TYPE (MetaMonitor, meta_monitor, META, MONITOR, GObject)
@@ -163,6 +169,11 @@ void meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
float meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode);
+float * meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ MetaMonitorScalesConstraint constraints,
+ int *n_supported_scales);
+
MetaMonitorModeSpec * meta_monitor_mode_get_spec (MetaMonitorMode *monitor_mode);
void meta_monitor_mode_get_resolution (MetaMonitorMode *monitor_mode,
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index bb4f2e0d1..d1cd46ee1 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -52,17 +52,6 @@
#define ALL_TRANSFORMS_MASK ((1 << ALL_TRANSFORMS) - 1)
#define SYNC_TOLERANCE 0.01 /* 1 percent */
-static float supported_scales_kms_logical[] = {
- 1.0,
- 1.5,
- 2.0
-};
-
-static float supported_scales_kms_physical[] = {
- 1.0,
- 2.0
-};
-
typedef struct
{
drmModeConnector *connector;
@@ -1852,23 +1841,28 @@ meta_monitor_manager_kms_calculate_monitor_mode_scale (MetaMonitorManager *manag
return meta_monitor_calculate_mode_scale (monitor, monitor_mode);
}
-static void
-meta_monitor_manager_kms_get_supported_scales (MetaMonitorManager *manager,
- MetaLogicalMonitorLayoutMode layout_mode,
- float **scales,
- int *n_scales)
+static float *
+meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
{
+ MetaMonitorScalesConstraint constraints =
+ META_MONITOR_SCALES_CONSTRAINT_NONE;
+
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- *scales = supported_scales_kms_logical;
- *n_scales = G_N_ELEMENTS (supported_scales_kms_logical);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
- *scales = supported_scales_kms_physical;
- *n_scales = G_N_ELEMENTS (supported_scales_kms_physical);
+ constraints |= META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
break;
}
+
+ return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
+ constraints,
+ n_supported_scales);
}
static MetaMonitorManagerCapability
@@ -1973,7 +1967,7 @@ meta_monitor_manager_kms_class_init (MetaMonitorManagerKmsClass *klass)
manager_class->set_crtc_gamma = meta_monitor_manager_kms_set_crtc_gamma;
manager_class->is_transform_handled = meta_monitor_manager_kms_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_kms_calculate_monitor_mode_scale;
- manager_class->get_supported_scales = meta_monitor_manager_kms_get_supported_scales;
+ manager_class->calculate_supported_scales = meta_monitor_manager_kms_calculate_supported_scales;
manager_class->get_capabilities = meta_monitor_manager_kms_get_capabilities;
manager_class->get_max_screen_size = meta_monitor_manager_kms_get_max_screen_size;
manager_class->get_default_layout_mode = meta_monitor_manager_kms_get_default_layout_mode;
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index e5d52162c..0c57fb5bc 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -54,10 +54,6 @@
* for the reasoning */
#define DPI_FALLBACK 96.0
-static float supported_scales_xrandr[] = {
- 1.0, 2.0
-};
-
struct _MetaMonitorManagerXrandr
{
MetaMonitorManager parent_instance;
@@ -1799,14 +1795,19 @@ meta_monitor_manager_xrandr_calculate_monitor_mode_scale (MetaMonitorManager *ma
return meta_monitor_calculate_mode_scale (monitor, monitor_mode);
}
-static void
-meta_monitor_manager_xrandr_get_supported_scales (MetaMonitorManager *manager,
- MetaLogicalMonitorLayoutMode layout_mode,
- float **scales,
- int *n_scales)
+static float *
+meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
{
- *scales = supported_scales_xrandr;
- *n_scales = G_N_ELEMENTS (supported_scales_xrandr);
+ MetaMonitorScalesConstraint constraints;
+
+ constraints = META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
+ return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
+ constraints,
+ n_supported_scales);
}
static MetaMonitorManagerCapability
@@ -1913,7 +1914,7 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
#endif
manager_class->is_transform_handled = meta_monitor_manager_xrandr_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_xrandr_calculate_monitor_mode_scale;
- manager_class->get_supported_scales = meta_monitor_manager_xrandr_get_supported_scales;
+ manager_class->calculate_supported_scales = meta_monitor_manager_xrandr_calculate_supported_scales;
manager_class->get_capabilities = meta_monitor_manager_xrandr_get_capabilities;
manager_class->get_max_screen_size = meta_monitor_manager_xrandr_get_max_screen_size;
manager_class->get_default_layout_mode = meta_monitor_manager_xrandr_get_default_layout_mode;
diff --git a/src/org.gnome.Mutter.DisplayConfig.xml b/src/org.gnome.Mutter.DisplayConfig.xml
index fb1c6c44c..62b82659c 100644
--- a/src/org.gnome.Mutter.DisplayConfig.xml
+++ b/src/org.gnome.Mutter.DisplayConfig.xml
@@ -307,7 +307,6 @@
@serial: configuration serial
@monitors: available monitors
@logical_monitors: current logical monitor configuration
- @supported_scales: scaling factors supported by the display server
@properties: display configuration properties
@monitors represent connected physical monitors
@@ -316,11 +315,12 @@
* s vendor: vendor name
* s product: product name
* s serial: product serial
- * a(iidu) modes: available modes
+ * a(iiddadu) modes: available modes
* i width: width in physical pixels
* i height: height in physical pixels
* d refresh rate: refresh rate
* d preferred scale: scale preferred as per calculations
+ * ad supported scales: scales supported by this mode
* u flags: mode flags (see below)
* a{sv} properties: optional properties, including:
- "width-mm" (i): physical width of monitor in millimeters
@@ -366,10 +366,6 @@
7: 270° flipped
- @supported_scales is an ordered list of floating point numbers representing
- scale factors of logical monitors supported by the display server.
-
-
@layout_mode current layout mode represents the way logical monitors
are layed out on the screen. Possible modes include:
@@ -408,9 +404,8 @@
-->
-
+
-
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
index cf33102d1..ba27bf5bf 100644
--- a/src/tests/meta-monitor-manager-test.c
+++ b/src/tests/meta-monitor-manager-test.c
@@ -24,17 +24,6 @@
#include "backends/meta-backend-private.h"
#include "backends/meta-monitor-config-manager.h"
-static float supported_scales_test_logical[] = {
- 1.0,
- 1.5,
- 2.0
-};
-
-static float supported_scales_test_physical[] = {
- 1.0,
- 2.0
-};
-
struct _MetaMonitorManagerTest
{
MetaMonitorManager parent;
@@ -420,23 +409,28 @@ meta_monitor_manager_test_calculate_monitor_mode_scale (MetaMonitorManager *mana
return output_test->scale;
}
-static void
-meta_monitor_manager_test_get_supported_scales (MetaMonitorManager *manager,
- MetaLogicalMonitorLayoutMode layout_mode,
- float **scales,
- int *n_scales)
+static float *
+meta_monitor_manager_test_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+ MetaMonitor *monitor,
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
{
+ MetaMonitorScalesConstraint constraints =
+ META_MONITOR_SCALES_CONSTRAINT_NONE;
+
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- *scales = supported_scales_test_logical;
- *n_scales = G_N_ELEMENTS (supported_scales_test_logical);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
- *scales = supported_scales_test_physical;
- *n_scales = G_N_ELEMENTS (supported_scales_test_physical);
+ constraints |= META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
break;
}
+
+ return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
+ constraints,
+ n_supported_scales);
}
static gboolean
@@ -525,7 +519,7 @@ meta_monitor_manager_test_class_init (MetaMonitorManagerTestClass *klass)
manager_class->tiled_monitor_removed = meta_monitor_manager_test_tiled_monitor_removed;
manager_class->is_transform_handled = meta_monitor_manager_test_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_test_calculate_monitor_mode_scale;
- manager_class->get_supported_scales = meta_monitor_manager_test_get_supported_scales;
+ manager_class->calculate_supported_scales = meta_monitor_manager_test_calculate_supported_scales;
manager_class->get_capabilities = meta_monitor_manager_test_get_capabilities;
manager_class->get_max_screen_size = meta_monitor_manager_test_get_max_screen_size;
manager_class->get_default_layout_mode = meta_monitor_manager_test_get_default_layout_mode;