[mutter] monitor-manager: Let the MetaMonitor derive the whole layout
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-manager: Let the MetaMonitor derive the whole layout
- Date: Wed, 19 Jul 2017 09:07:14 +0000 (UTC)
commit 32fd1e8c08055345d681525576699f61d351c807
Author: Jonas Ådahl <jadahl gmail com>
Date: Wed Jul 12 15:42:20 2017 +0800
monitor-manager: Let the MetaMonitor derive the whole layout
Instead of letting MetaMonitor derive the logical monitor size, then
using the main monitor for the position, just let MetaMonitor derive
the whole layout including the position. This means it can deal with
tiled monitors better, for example when the main output (the output
always active when the monitor is active) is not the origin output (the
output with tile position (0, 0)).
https://bugzilla.gnome.org/show_bug.cgi?id=781723
src/backends/meta-monitor-manager.c | 29 +--------------------------
src/backends/meta-monitor.c | 37 +++++++++++++++++++---------------
src/backends/meta-monitor.h | 10 +++-----
3 files changed, 26 insertions(+), 50 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index f83f391..8112f29 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -158,33 +158,6 @@ meta_monitor_manager_rebuild_logical_monitors (MetaMonitorManager *manager,
primary_logical_monitor);
}
-static void
-derive_monitor_layout (MetaMonitor *monitor,
- MetaRectangle *layout)
-{
- GList *outputs;
- GList *l;
- int x = INT_MAX;
- int y = INT_MAX;
-
- outputs = meta_monitor_get_outputs (monitor);
- for (l = outputs; l; l = l->next)
- {
- MetaOutput *output = l->data;
-
- if (!output->crtc)
- continue;
-
- x = MIN (x, output->crtc->rect.x);
- y = MIN (y, output->crtc->rect.y);
- }
-
- layout->x = x;
- layout->y = y;
-
- meta_monitor_derive_dimensions (monitor, &layout->width, &layout->height);
-}
-
static float
derive_configured_global_scale (MetaMonitorManager *manager)
{
@@ -283,7 +256,7 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager
if (!meta_monitor_is_active (monitor))
continue;
- derive_monitor_layout (monitor, &layout);
+ meta_monitor_derive_layout (monitor, &layout);
logical_monitor = logical_monitor_from_layout (manager, logical_monitors,
&layout);
if (logical_monitor)
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 7c2ba11..c2477e6 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -258,11 +258,10 @@ meta_monitor_get_current_resolution (MetaMonitor *monitor,
}
void
-meta_monitor_derive_dimensions (MetaMonitor *monitor,
- int *width,
- int *height)
+meta_monitor_derive_layout (MetaMonitor *monitor,
+ MetaRectangle *layout)
{
- META_MONITOR_GET_CLASS (monitor)->derive_dimensions (monitor, width, height);
+ META_MONITOR_GET_CLASS (monitor)->derive_layout (monitor, layout);
}
void
@@ -464,15 +463,18 @@ meta_monitor_normal_get_main_output (MetaMonitor *monitor)
}
static void
-meta_monitor_normal_derive_dimensions (MetaMonitor *monitor,
- int *width,
- int *height)
+meta_monitor_normal_derive_layout (MetaMonitor *monitor,
+ MetaRectangle *layout)
{
MetaOutput *output;
output = meta_monitor_get_main_output (monitor);
- *width = output->crtc->rect.width;
- *height = output->crtc->rect.height;
+ *layout = (MetaRectangle) {
+ .x = output->crtc->rect.x,
+ .y = output->crtc->rect.y,
+ .width = output->crtc->rect.width,
+ .height = output->crtc->rect.height
+ };
}
static gboolean
@@ -515,7 +517,7 @@ meta_monitor_normal_class_init (MetaMonitorNormalClass *klass)
MetaMonitorClass *monitor_class = META_MONITOR_CLASS (klass);
monitor_class->get_main_output = meta_monitor_normal_get_main_output;
- monitor_class->derive_dimensions = meta_monitor_normal_derive_dimensions;
+ monitor_class->derive_layout = meta_monitor_normal_derive_layout;
monitor_class->calculate_crtc_pos = meta_monitor_normal_calculate_crtc_pos;
monitor_class->get_suggested_position = meta_monitor_normal_get_suggested_position;
}
@@ -1101,9 +1103,8 @@ meta_monitor_tiled_get_main_output (MetaMonitor *monitor)
}
static void
-meta_monitor_tiled_derive_dimensions (MetaMonitor *monitor,
- int *out_width,
- int *out_height)
+meta_monitor_derived_derive_layout (MetaMonitor *monitor,
+ MetaRectangle *layout)
{
MetaMonitorPrivate *monitor_priv =
meta_monitor_get_instance_private (monitor);
@@ -1127,8 +1128,12 @@ meta_monitor_tiled_derive_dimensions (MetaMonitor *monitor,
max_y = MAX (output->crtc->rect.y + output->crtc->rect.height, max_y);
}
- *out_width = max_x - min_x;
- *out_height = max_y - min_y;
+ *layout = (MetaRectangle) {
+ .x = min_x,
+ .y = min_y,
+ .width = max_x - min_x,
+ .height = max_y - min_y
+ };
}
static gboolean
@@ -1186,7 +1191,7 @@ meta_monitor_tiled_class_init (MetaMonitorTiledClass *klass)
object_class->finalize = meta_monitor_tiled_finalize;
monitor_class->get_main_output = meta_monitor_tiled_get_main_output;
- monitor_class->derive_dimensions = meta_monitor_tiled_derive_dimensions;
+ monitor_class->derive_layout = meta_monitor_derived_derive_layout;
monitor_class->calculate_crtc_pos = meta_monitor_tiled_calculate_crtc_pos;
monitor_class->get_suggested_position = meta_monitor_tiled_get_suggested_position;
}
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index fa9654b..3a6307c 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -68,9 +68,8 @@ struct _MetaMonitorClass
GObjectClass parent_class;
MetaOutput * (* get_main_output) (MetaMonitor *monitor);
- void (* derive_dimensions) (MetaMonitor *monitor,
- int *width,
- int *height);
+ void (* derive_layout) (MetaMonitor *monitor,
+ MetaRectangle *layout);
void (* calculate_crtc_pos) (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode,
MetaOutput *output,
@@ -118,9 +117,8 @@ void meta_monitor_get_current_resolution (MetaMonitor *monitor,
int *width,
int *height);
-void meta_monitor_derive_dimensions (MetaMonitor *monitor,
- int *width,
- int *height);
+void meta_monitor_derive_layout (MetaMonitor *monitor,
+ MetaRectangle *layout);
void meta_monitor_get_physical_dimensions (MetaMonitor *monitor,
int *width_mm,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]