stage: Implement buffer-transform support in MetaOverlay

This allows the GL fallback path to correctly paint the cursor
if clients pre-rotated the buffer using
`wl_surface::set_buffer_transform`, visually matching the
hardware cursor path.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/344>
This commit is contained in:
Robert Mader
2022-06-22 14:08:24 +02:00
parent df27017ba3
commit f804fe3a82
3 changed files with 37 additions and 17 deletions

View File

@ -135,8 +135,9 @@ meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
{
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
ClutterActor *stage = meta_backend_get_stage (priv->backend);
CoglTexture *texture;
CoglTexture *texture = NULL;
graphene_rect_t rect = GRAPHENE_RECT_INIT_ZERO;
MetaMonitorTransform buffer_transform = META_MONITOR_TRANSFORM_NORMAL;
g_set_object (&priv->overlay_cursor, cursor_sprite);
@ -150,13 +151,15 @@ meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
priv->stage_overlay = meta_stage_create_cursor_overlay (META_STAGE (stage));
if (cursor_sprite)
texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
else
texture = NULL;
{
texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
buffer_transform =
meta_cursor_sprite_get_texture_transform (cursor_sprite);
}
meta_overlay_set_visible (priv->stage_overlay, !priv->handled_by_backend);
meta_stage_update_cursor_overlay (META_STAGE (stage), priv->stage_overlay,
texture, &rect);
texture, &rect, buffer_transform);
}
static void