mirror of
https://github.com/brl/mutter.git
synced 2025-02-05 08:04:10 +00:00
boxes: Swap 90 and 270 degree transforms in meta_rectangle_transform()
`meta_rectangle_transform()` is used in the stack to *compensate* for a `MetaMonitorTransform` applied to a output, not to apply it again. Change the function accordingly. Context: Experimenting with direct scanout on offscreen-rotated outputs revealed that the 90/270 degree cases were actually interchanged. Further digging revealed that we use `meta_rectangle_transform()` with those values swapped in every single case, papering over the issue. Either a unintuitive and unexplained `meta_monitor_transform_invert()` was added, in which case "flipped" values would be wrong, or, in case of Wayland buffer transforms, the values were swapped by interpreting the Wayland enums accordingly, see commit 8d9bbe10. Swapping the 90/270 degree values in `meta_rectangle_transform()`: 1. fixes hardware cursor positioning with flipped output transforms 2. fixes rendering issues with offscreen-rotated flipped output transforms 3. allows us to drop unexplained `meta_monitor_transform_invert()`s in follow-up commits 4. allows us to make `META_MONITOR_TRANSFORM` and `WL_OUTPUT_TRANSFORM` enums match again (reverting 8d9bbe10, as already done) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2459>
This commit is contained in:
parent
29cafe6f6c
commit
2ade26ebf8
@ -2068,6 +2068,19 @@ meta_rectangle_scale_double (const MetaRectangle *rect,
|
||||
meta_rectangle_from_graphene_rect (&tmp, rounding_strategy, dest);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_rectangle_transform:
|
||||
* @rect: the #MetaRectangle to be transformed
|
||||
* @transform: the #MetaMonitorTransform
|
||||
* @width: the width of the target space
|
||||
* @height: the height of the target space
|
||||
* @dest: the transformed #MetaRectangle
|
||||
*
|
||||
* This function transforms the values in @rect in order to compensate for
|
||||
* @transform applied to a #MetaMonitor, making them match the viewport. Note
|
||||
* that compensating implies that for a clockwise rotation of the #MetaMonitor
|
||||
* an anti-clockwise rotation has to be applied to @rect.
|
||||
*/
|
||||
void
|
||||
meta_rectangle_transform (const MetaRectangle *rect,
|
||||
MetaMonitorTransform transform,
|
||||
@ -2082,8 +2095,8 @@ meta_rectangle_transform (const MetaRectangle *rect,
|
||||
break;
|
||||
case META_MONITOR_TRANSFORM_90:
|
||||
*dest = (MetaRectangle) {
|
||||
.x = width - (rect->y + rect->height),
|
||||
.y = rect->x,
|
||||
.x = rect->y,
|
||||
.y = height - (rect->x + rect->width),
|
||||
.width = rect->height,
|
||||
.height = rect->width,
|
||||
};
|
||||
@ -2098,8 +2111,8 @@ meta_rectangle_transform (const MetaRectangle *rect,
|
||||
break;
|
||||
case META_MONITOR_TRANSFORM_270:
|
||||
*dest = (MetaRectangle) {
|
||||
.x = rect->y,
|
||||
.y = height - (rect->x + rect->width),
|
||||
.x = width - (rect->y + rect->height),
|
||||
.y = rect->x,
|
||||
.width = rect->height,
|
||||
.height = rect->width,
|
||||
};
|
||||
@ -2114,8 +2127,8 @@ meta_rectangle_transform (const MetaRectangle *rect,
|
||||
break;
|
||||
case META_MONITOR_TRANSFORM_FLIPPED_90:
|
||||
*dest = (MetaRectangle) {
|
||||
.x = width - (rect->y + rect->height),
|
||||
.y = height - (rect->x + rect->width),
|
||||
.x = rect->y,
|
||||
.y = rect->x,
|
||||
.width = rect->height,
|
||||
.height = rect->width,
|
||||
};
|
||||
@ -2130,8 +2143,8 @@ meta_rectangle_transform (const MetaRectangle *rect,
|
||||
break;
|
||||
case META_MONITOR_TRANSFORM_FLIPPED_270:
|
||||
*dest = (MetaRectangle) {
|
||||
.x = rect->y,
|
||||
.y = rect->x,
|
||||
.x = width - (rect->y + rect->height),
|
||||
.y = height - (rect->x + rect->width),
|
||||
.width = rect->height,
|
||||
.height = rect->width,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user