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:
Jonas Ådahl
2017-01-20 15:07:12 +08:00
parent 753e9c65a1
commit a393a614a1
12 changed files with 242 additions and 110 deletions

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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
};
}