[mutter] logical-monitor: Track whether the logical monitor is transformed
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] logical-monitor: Track whether the logical monitor is transformed
- Date: Fri, 7 Apr 2017 14:35:25 +0000 (UTC)
commit d38c4c1f2d7b03d14811b8aab4cc148cfd22d0f8
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Mar 17 16:33:18 2017 +0800
logical-monitor: Track whether the logical monitor is transformed
Keep track of the logical monitor transform. When a logical monitor is
transformed, all of its monitors are also transformed in the same way.
A logical monitor can either be transformed on the CRTC level, or using
an offscreen intermediate buffer. In both cases will the logical
monitor be transformed, but only in the latter will the view be
transformed.
MetaCrtcs::transform currently does not represent whether the CRTC is
configured to be transformed or not; only when the backend can handle
it does it correctly correspond to the actual CRTC configuration. This
is intended to change with MetaMonitorConfigManager.
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/backends/meta-logical-monitor.c | 14 ++++++++++++++
src/backends/meta-logical-monitor.h | 1 +
src/backends/meta-monitor-manager.c | 6 +-----
src/backends/native/meta-renderer-native.c | 4 ++--
src/backends/x11/nested/meta-renderer-x11-nested.c | 4 ++--
5 files changed, 20 insertions(+), 9 deletions(-)
---
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
index f1e2a0f..9a271c7 100644
--- a/src/backends/meta-logical-monitor.c
+++ b/src/backends/meta-logical-monitor.c
@@ -92,6 +92,16 @@ meta_logical_monitor_new (MetaMonitorManager *monitor_manager,
return logical_monitor;
}
+static MetaMonitorTransform
+derive_monitor_transform (MetaMonitor *monitor)
+{
+ MetaOutput *main_output;
+
+ main_output = meta_monitor_get_main_output (monitor);
+
+ return main_output->crtc->transform;
+}
+
MetaLogicalMonitor *
meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
MetaMonitor *monitor,
@@ -102,6 +112,7 @@ meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
MetaOutput *main_output;
MetaMonitorMode *monitor_mode;
int scale;
+ MetaMonitorTransform transform;
logical_monitor = g_object_new (META_TYPE_LOGICAL_MONITOR, NULL);
@@ -110,10 +121,13 @@ meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
monitor,
monitor_mode);
+ transform = derive_monitor_transform (monitor);
+
main_output = meta_monitor_get_main_output (monitor);
logical_monitor->number = monitor_number;
logical_monitor->winsys_id = main_output->winsys_id;
logical_monitor->scale = scale;
+ logical_monitor->transform = transform;
logical_monitor->in_fullscreen = -1;
logical_monitor->rect = *layout;
diff --git a/src/backends/meta-logical-monitor.h b/src/backends/meta-logical-monitor.h
index f9f99cf..c1bd5be 100644
--- a/src/backends/meta-logical-monitor.h
+++ b/src/backends/meta-logical-monitor.h
@@ -41,6 +41,7 @@ struct _MetaLogicalMonitor
gboolean is_presentation; /* XXX: not yet used */
gboolean in_fullscreen;
int scale;
+ MetaMonitorTransform transform;
/* The primary or first output for this monitor, 0 if we can't figure out.
It can be matched to a winsys_id of a MetaOutput.
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 9fbe2d5..e412f37 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -2734,17 +2734,13 @@ meta_monitor_manager_get_monitor_matrix (MetaMonitorManager *manager,
MetaLogicalMonitor *logical_monitor,
gfloat matrix[6])
{
- MetaMonitor *main_monitor;
- MetaOutput *main_output;
MetaMonitorTransform transform;
gfloat viewport[9];
if (!calculate_viewport_matrix (manager, logical_monitor, viewport))
return FALSE;
- main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
- main_output = meta_monitor_get_main_output (main_monitor);
- transform = main_output->crtc->transform;
+ transform = logical_monitor->transform;
multiply_matrix (viewport, transform_matrices[transform],
matrix);
return TRUE;
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index ae3381b..6a58ae8 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -1686,10 +1686,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
if (meta_monitor_manager_is_transform_handled (monitor_manager,
main_output->crtc,
- main_output->crtc->transform))
+ logical_monitor->transform))
return META_MONITOR_TRANSFORM_NORMAL;
else
- return main_output->crtc->transform;
+ return logical_monitor->transform;
}
static MetaRendererView *
diff --git a/src/backends/x11/nested/meta-renderer-x11-nested.c
b/src/backends/x11/nested/meta-renderer-x11-nested.c
index abd6a53..124ceef 100644
--- a/src/backends/x11/nested/meta-renderer-x11-nested.c
+++ b/src/backends/x11/nested/meta-renderer-x11-nested.c
@@ -59,10 +59,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
if (meta_monitor_manager_is_transform_handled (monitor_manager,
main_output->crtc,
- main_output->crtc->transform))
+ logical_monitor->transform))
return META_MONITOR_TRANSFORM_NORMAL;
else
- return main_output->crtc->transform;
+ return logical_monitor->transform;
}
static MetaRendererView *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]