From c72e129eb216d3f6b2a71f480ff960e7780a4f21 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Tue, 20 Feb 2024 13:02:54 +0100 Subject: [PATCH] cursor-renderer: Move x11 specific bits to CursorRendererX11 Part-of: --- src/backends/meta-cursor-sprite-xcursor.c | 37 ------------------- src/backends/meta-cursor-sprite-xcursor.h | 3 -- src/backends/x11/meta-cursor-renderer-x11.c | 40 ++++++++++++++++++++- 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/backends/meta-cursor-sprite-xcursor.c b/src/backends/meta-cursor-sprite-xcursor.c index 018e7df49..99fcab10b 100644 --- a/src/backends/meta-cursor-sprite-xcursor.c +++ b/src/backends/meta-cursor-sprite-xcursor.c @@ -95,33 +95,6 @@ meta_cursor_get_name (MetaCursor cursor) return NULL; } -static Cursor -create_blank_cursor (Display *xdisplay) -{ - Pixmap pixmap; - XColor color; - Cursor cursor; - XGCValues gc_values; - GC gc; - - pixmap = XCreatePixmap (xdisplay, DefaultRootWindow (xdisplay), 1, 1, 1); - - gc_values.foreground = BlackPixel (xdisplay, DefaultScreen (xdisplay)); - gc = XCreateGC (xdisplay, pixmap, GCForeground, &gc_values); - - XFillRectangle (xdisplay, pixmap, gc, 0, 0, 1, 1); - - color.pixel = 0; - color.red = color.blue = color.green = 0; - - cursor = XCreatePixmapCursor (xdisplay, pixmap, pixmap, &color, &color, 1, 1); - - XFreeGC (xdisplay, gc); - XFreePixmap (xdisplay, pixmap); - - return cursor; -} - static XcursorImages * create_blank_cursor_images (void) { @@ -143,16 +116,6 @@ meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprite_xcursor) return sprite_xcursor->cursor; } -Cursor -meta_create_x_cursor (Display *xdisplay, - MetaCursor cursor) -{ - if (cursor == META_CURSOR_BLANK) - return create_blank_cursor (xdisplay); - - return XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_name (cursor)); -} - static XcursorImages * load_cursor_on_client (MetaCursor cursor, int scale) { diff --git a/src/backends/meta-cursor-sprite-xcursor.h b/src/backends/meta-cursor-sprite-xcursor.h index 2fb3d0eba..dfaccab1e 100644 --- a/src/backends/meta-cursor-sprite-xcursor.h +++ b/src/backends/meta-cursor-sprite-xcursor.h @@ -38,7 +38,4 @@ MetaCursor meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprit XcursorImage * meta_cursor_sprite_xcursor_get_current_image (MetaCursorSpriteXcursor *sprite_xcursor); -Cursor meta_create_x_cursor (Display *xdisplay, - MetaCursor cursor); - const char * meta_cursor_get_name (MetaCursor cursor); diff --git a/src/backends/x11/meta-cursor-renderer-x11.c b/src/backends/x11/meta-cursor-renderer-x11.c index e454be8e4..974abf017 100644 --- a/src/backends/x11/meta-cursor-renderer-x11.c +++ b/src/backends/x11/meta-cursor-renderer-x11.c @@ -39,6 +39,44 @@ struct _MetaCursorRendererX11 G_DEFINE_FINAL_TYPE (MetaCursorRendererX11, meta_cursor_renderer_x11, META_TYPE_CURSOR_RENDERER); + +static Cursor +create_blank_cursor (Display *xdisplay) +{ + Pixmap pixmap; + XColor color; + Cursor cursor; + XGCValues gc_values; + GC gc; + + pixmap = XCreatePixmap (xdisplay, DefaultRootWindow (xdisplay), 1, 1, 1); + + gc_values.foreground = BlackPixel (xdisplay, DefaultScreen (xdisplay)); + gc = XCreateGC (xdisplay, pixmap, GCForeground, &gc_values); + + XFillRectangle (xdisplay, pixmap, gc, 0, 0, 1, 1); + + color.pixel = 0; + color.red = color.blue = color.green = 0; + + cursor = XCreatePixmapCursor (xdisplay, pixmap, pixmap, &color, &color, 1, 1); + + XFreeGC (xdisplay, gc); + XFreePixmap (xdisplay, pixmap); + + return cursor; +} + +static Cursor +create_x_cursor (Display *xdisplay, + MetaCursor cursor) +{ + if (cursor == META_CURSOR_BLANK) + return create_blank_cursor (xdisplay); + + return XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_name (cursor)); +} + static gboolean meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer, MetaCursorSprite *cursor_sprite) @@ -69,7 +107,7 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer, { Cursor xcursor; - xcursor = meta_create_x_cursor (xdisplay, cursor); + xcursor = create_x_cursor (xdisplay, cursor); XDefineCursor (xdisplay, xwindow, xcursor); XFlush (xdisplay); XFreeCursor (xdisplay, xcursor);