mirror of
https://github.com/brl/mutter.git
synced 2025-04-14 06:09:39 +00:00
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
This commit is contained in:
parent
2091df3856
commit
d38c4c1f2d
@ -92,6 +92,16 @@ meta_logical_monitor_new (MetaMonitorManager *monitor_manager,
|
|||||||
return logical_monitor;
|
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 *
|
MetaLogicalMonitor *
|
||||||
meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
|
meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
|
||||||
MetaMonitor *monitor,
|
MetaMonitor *monitor,
|
||||||
@ -102,6 +112,7 @@ meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
|
|||||||
MetaOutput *main_output;
|
MetaOutput *main_output;
|
||||||
MetaMonitorMode *monitor_mode;
|
MetaMonitorMode *monitor_mode;
|
||||||
int scale;
|
int scale;
|
||||||
|
MetaMonitorTransform transform;
|
||||||
|
|
||||||
logical_monitor = g_object_new (META_TYPE_LOGICAL_MONITOR, NULL);
|
logical_monitor = g_object_new (META_TYPE_LOGICAL_MONITOR, NULL);
|
||||||
|
|
||||||
@ -110,10 +121,13 @@ meta_logical_monitor_new_derived (MetaMonitorManager *monitor_manager,
|
|||||||
monitor,
|
monitor,
|
||||||
monitor_mode);
|
monitor_mode);
|
||||||
|
|
||||||
|
transform = derive_monitor_transform (monitor);
|
||||||
|
|
||||||
main_output = meta_monitor_get_main_output (monitor);
|
main_output = meta_monitor_get_main_output (monitor);
|
||||||
logical_monitor->number = monitor_number;
|
logical_monitor->number = monitor_number;
|
||||||
logical_monitor->winsys_id = main_output->winsys_id;
|
logical_monitor->winsys_id = main_output->winsys_id;
|
||||||
logical_monitor->scale = scale;
|
logical_monitor->scale = scale;
|
||||||
|
logical_monitor->transform = transform;
|
||||||
logical_monitor->in_fullscreen = -1;
|
logical_monitor->in_fullscreen = -1;
|
||||||
logical_monitor->rect = *layout;
|
logical_monitor->rect = *layout;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ struct _MetaLogicalMonitor
|
|||||||
gboolean is_presentation; /* XXX: not yet used */
|
gboolean is_presentation; /* XXX: not yet used */
|
||||||
gboolean in_fullscreen;
|
gboolean in_fullscreen;
|
||||||
int scale;
|
int scale;
|
||||||
|
MetaMonitorTransform transform;
|
||||||
|
|
||||||
/* The primary or first output for this monitor, 0 if we can't figure out.
|
/* 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.
|
It can be matched to a winsys_id of a MetaOutput.
|
||||||
|
@ -2734,17 +2734,13 @@ meta_monitor_manager_get_monitor_matrix (MetaMonitorManager *manager,
|
|||||||
MetaLogicalMonitor *logical_monitor,
|
MetaLogicalMonitor *logical_monitor,
|
||||||
gfloat matrix[6])
|
gfloat matrix[6])
|
||||||
{
|
{
|
||||||
MetaMonitor *main_monitor;
|
|
||||||
MetaOutput *main_output;
|
|
||||||
MetaMonitorTransform transform;
|
MetaMonitorTransform transform;
|
||||||
gfloat viewport[9];
|
gfloat viewport[9];
|
||||||
|
|
||||||
if (!calculate_viewport_matrix (manager, logical_monitor, viewport))
|
if (!calculate_viewport_matrix (manager, logical_monitor, viewport))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
transform = logical_monitor->transform;
|
||||||
main_output = meta_monitor_get_main_output (main_monitor);
|
|
||||||
transform = main_output->crtc->transform;
|
|
||||||
multiply_matrix (viewport, transform_matrices[transform],
|
multiply_matrix (viewport, transform_matrices[transform],
|
||||||
matrix);
|
matrix);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1686,10 +1686,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
|||||||
|
|
||||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||||
main_output->crtc,
|
main_output->crtc,
|
||||||
main_output->crtc->transform))
|
logical_monitor->transform))
|
||||||
return META_MONITOR_TRANSFORM_NORMAL;
|
return META_MONITOR_TRANSFORM_NORMAL;
|
||||||
else
|
else
|
||||||
return main_output->crtc->transform;
|
return logical_monitor->transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MetaRendererView *
|
static MetaRendererView *
|
||||||
|
@ -59,10 +59,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
|||||||
|
|
||||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||||
main_output->crtc,
|
main_output->crtc,
|
||||||
main_output->crtc->transform))
|
logical_monitor->transform))
|
||||||
return META_MONITOR_TRANSFORM_NORMAL;
|
return META_MONITOR_TRANSFORM_NORMAL;
|
||||||
else
|
else
|
||||||
return main_output->crtc->transform;
|
return logical_monitor->transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MetaRendererView *
|
static MetaRendererView *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user