1
0
Fork 0

wayland: Mark sprite as invalid after cursor changes

This will be used to hint the backend that the cursor surface
might need uploading again.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1915>
This commit is contained in:
Carlos Garnacho 2021-07-05 15:50:06 +02:00 committed by Marge Bot
parent 508c08fa09
commit 5e93708d86
2 changed files with 28 additions and 1 deletions

View file

@ -25,6 +25,7 @@ struct _MetaCursorSpriteWayland
MetaCursorSprite parent; MetaCursorSprite parent;
MetaWaylandSurface *surface; MetaWaylandSurface *surface;
gboolean invalidated;
}; };
G_DEFINE_TYPE (MetaCursorSpriteWayland, G_DEFINE_TYPE (MetaCursorSpriteWayland,
@ -34,7 +35,17 @@ G_DEFINE_TYPE (MetaCursorSpriteWayland,
static gboolean static gboolean
meta_cursor_sprite_wayland_realize_texture (MetaCursorSprite *sprite) meta_cursor_sprite_wayland_realize_texture (MetaCursorSprite *sprite)
{ {
MetaCursorSpriteWayland *sprite_wayland;
sprite_wayland = META_CURSOR_SPRITE_WAYLAND (sprite);
if (sprite_wayland->invalidated)
{
sprite_wayland->invalidated = FALSE;
return TRUE; return TRUE;
}
return FALSE;
} }
static gboolean static gboolean
@ -43,6 +54,15 @@ meta_cursor_sprite_wayland_is_animated (MetaCursorSprite *sprite)
return FALSE; return FALSE;
} }
static void
meta_cursor_sprite_wayland_invalidate (MetaCursorSprite *sprite)
{
MetaCursorSpriteWayland *sprite_wayland;
sprite_wayland = META_CURSOR_SPRITE_WAYLAND (sprite);
sprite_wayland->invalidated = TRUE;
}
MetaCursorSpriteWayland * MetaCursorSpriteWayland *
meta_cursor_sprite_wayland_new (MetaWaylandSurface *surface) meta_cursor_sprite_wayland_new (MetaWaylandSurface *surface)
{ {
@ -72,5 +92,7 @@ meta_cursor_sprite_wayland_class_init (MetaCursorSpriteWaylandClass *klass)
cursor_sprite_class->realize_texture = cursor_sprite_class->realize_texture =
meta_cursor_sprite_wayland_realize_texture; meta_cursor_sprite_wayland_realize_texture;
cursor_sprite_class->invalidate =
meta_cursor_sprite_wayland_invalidate;
cursor_sprite_class->is_animated = meta_cursor_sprite_wayland_is_animated; cursor_sprite_class->is_animated = meta_cursor_sprite_wayland_is_animated;
} }

View file

@ -55,6 +55,7 @@
#include "cogl/cogl.h" #include "cogl/cogl.h"
#include "compositor/meta-surface-actor-wayland.h" #include "compositor/meta-surface-actor-wayland.h"
#include "meta/meta-cursor-tracker.h" #include "meta/meta-cursor-tracker.h"
#include "wayland/meta-cursor-sprite-wayland.h"
#include "wayland/meta-wayland-buffer.h" #include "wayland/meta-wayland-buffer.h"
#include "wayland/meta-wayland-cursor-surface.h" #include "wayland/meta-wayland-cursor-surface.h"
#include "wayland/meta-wayland-pointer.h" #include "wayland/meta-wayland-pointer.h"
@ -1223,12 +1224,16 @@ pointer_set_cursor (struct wl_client *client,
meta_backend_get_cursor_renderer_for_device (meta_get_backend (), meta_backend_get_cursor_renderer_for_device (meta_get_backend (),
device); device);
MetaWaylandCursorSurface *cursor_surface; MetaWaylandCursorSurface *cursor_surface;
MetaCursorSprite *cursor_sprite;
cursor_surface = META_WAYLAND_CURSOR_SURFACE (surface->role); cursor_surface = META_WAYLAND_CURSOR_SURFACE (surface->role);
meta_wayland_cursor_surface_set_renderer (cursor_surface, meta_wayland_cursor_surface_set_renderer (cursor_surface,
cursor_renderer); cursor_renderer);
meta_wayland_cursor_surface_set_hotspot (cursor_surface, meta_wayland_cursor_surface_set_hotspot (cursor_surface,
hot_x, hot_y); hot_x, hot_y);
cursor_sprite = meta_wayland_cursor_surface_get_sprite (cursor_surface);
meta_cursor_sprite_invalidate (cursor_sprite);
} }
meta_wayland_pointer_set_cursor_surface (pointer, surface); meta_wayland_pointer_set_cursor_surface (pointer, surface);