mirror of
https://github.com/brl/mutter.git
synced 2025-08-04 15:45:54 +00:00
monitor-manager: Remove 'scale' from MetaOutput
Replace the 'scale' of an output with a vfunc on the MetaMonitorManager class that takes a monitor and a monitor mode which calculates the scale. On X11 this always returns 1, on KMS, the old formula is used. On the dummy and test backends, the already configured values are returned. https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
@@ -335,6 +335,20 @@ meta_monitor_manager_test_is_transform_handled (MetaMonitorManager *manager,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int
|
||||
meta_monitor_manager_test_calculate_monitor_mode_scale (MetaMonitorManager *manager,
|
||||
MetaMonitor *monitor,
|
||||
MetaMonitorMode *monitor_mode)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaOutputTest *output_test;
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
output_test = output->driver_private;
|
||||
|
||||
return output_test->scale;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_monitor_manager_test_dispose (GObject *object)
|
||||
{
|
||||
@@ -367,4 +381,5 @@ meta_monitor_manager_test_class_init (MetaMonitorManagerTestClass *klass)
|
||||
manager_class->tiled_monitor_added = meta_monitor_manager_test_tiled_monitor_added;
|
||||
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;
|
||||
}
|
||||
|
@@ -32,6 +32,11 @@ typedef struct _MetaMonitorTestSetup
|
||||
int n_crtcs;
|
||||
} MetaMonitorTestSetup;
|
||||
|
||||
typedef struct _MetaOutputTest
|
||||
{
|
||||
int scale;
|
||||
} MetaOutputTest;
|
||||
|
||||
#define META_TYPE_MONITOR_MANAGER_TEST (meta_monitor_manager_test_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaMonitorManagerTest, meta_monitor_manager_test,
|
||||
META, MONITOR_MANAGER_TEST, MetaMonitorManager)
|
||||
|
@@ -658,6 +658,12 @@ check_monitor_configuration (MonitorTestCase *test_case)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_output_test_destroy_notify (MetaOutput *output)
|
||||
{
|
||||
g_clear_pointer (&output->driver_private, g_free);
|
||||
}
|
||||
|
||||
static MetaMonitorTestSetup *
|
||||
create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
MonitorTestFlag flags)
|
||||
@@ -712,6 +718,7 @@ create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
test_setup->outputs = g_new0 (MetaOutput, test_setup->n_outputs);
|
||||
for (i = 0; i < test_setup->n_outputs; i++)
|
||||
{
|
||||
MetaOutputTest *output_test;
|
||||
int crtc_index;
|
||||
MetaCrtc *crtc;
|
||||
int preferred_mode_index;
|
||||
@@ -756,10 +763,16 @@ create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
possible_crtcs[j] = &test_setup->crtcs[possible_crtc_index];
|
||||
}
|
||||
|
||||
output_test = g_new0 (MetaOutputTest, 1);
|
||||
|
||||
scale = test_case->setup.outputs[i].scale;
|
||||
if (scale < 1)
|
||||
scale = 1;
|
||||
|
||||
*output_test = (MetaOutputTest) {
|
||||
.scale = scale
|
||||
};
|
||||
|
||||
is_laptop_panel = test_case->setup.outputs[i].is_laptop_panel;
|
||||
|
||||
test_setup->outputs[i] = (MetaOutput) {
|
||||
@@ -789,8 +802,9 @@ create_monitor_test_setup (MonitorTestCase *test_case,
|
||||
.connector_type = (is_laptop_panel ? META_CONNECTOR_TYPE_eDP
|
||||
: META_CONNECTOR_TYPE_DisplayPort),
|
||||
.tile_info = test_case->setup.outputs[i].tile_info,
|
||||
.scale = scale,
|
||||
.is_underscanning = test_case->setup.outputs[i].is_underscanning
|
||||
.is_underscanning = test_case->setup.outputs[i].is_underscanning,
|
||||
.driver_private = output_test,
|
||||
.driver_notify = (GDestroyNotify) meta_output_test_destroy_notify
|
||||
};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user