xcursor: sync with libwayland

xcursor.c was copied over from libwayland-cursor. A lot of
cosmetic imporvements have been merged upstream. Copy-paste the
new version.
This commit is contained in:
Simon Ser 2023-04-14 16:13:33 +02:00 committed by Alexander Orzechowski
parent 00489b11a0
commit 25d9055281
3 changed files with 515 additions and 668 deletions

View File

@ -28,37 +28,31 @@
#include <stdint.h>
typedef int XcursorBool;
typedef uint32_t XcursorUInt;
typedef XcursorUInt XcursorDim;
typedef XcursorUInt XcursorPixel;
typedef struct _XcursorImage {
XcursorUInt version; /* version of the image data */
XcursorDim size; /* nominal size for matching */
XcursorDim width; /* actual width */
XcursorDim height; /* actual height */
XcursorDim xhot; /* hot spot x (must be inside image) */
XcursorDim yhot; /* hot spot y (must be inside image) */
XcursorUInt delay; /* animation delay to next frame (ms) */
XcursorPixel *pixels; /* pointer to pixels */
} XcursorImage;
struct xcursor_image {
uint32_t version; /* version of the image data */
uint32_t size; /* nominal size for matching */
uint32_t width; /* actual width */
uint32_t height; /* actual height */
uint32_t xhot; /* hot spot x (must be inside image) */
uint32_t yhot; /* hot spot y (must be inside image) */
uint32_t delay; /* animation delay to next frame (ms) */
uint32_t *pixels; /* pointer to pixels */
};
/*
* Other data structures exposed by the library API
*/
typedef struct _XcursorImages {
struct xcursor_images {
int nimage; /* number of images */
XcursorImage **images; /* array of XcursorImage pointers */
struct xcursor_image **images; /* array of XcursorImage pointers */
char *name; /* name used to load images */
} XcursorImages;
};
void
XcursorImagesDestroy (XcursorImages *images);
xcursor_images_destroy(struct xcursor_images *images);
void
xcursor_load_theme(const char *theme, int size,
void (*load_callback)(XcursorImages *, void *),
void (*load_callback)(struct xcursor_images *, void *),
void *user_data);
#endif

View File

@ -117,7 +117,7 @@ static void load_default_theme(struct wlr_xcursor_theme *theme) {
}
static struct wlr_xcursor *xcursor_create_from_xcursor_images(
XcursorImages *images, struct wlr_xcursor_theme *theme) {
struct xcursor_images *images, struct wlr_xcursor_theme *theme) {
struct wlr_xcursor *cursor = calloc(1, sizeof(*cursor));
if (!cursor) {
return NULL;
@ -170,11 +170,11 @@ static struct wlr_xcursor *xcursor_create_from_xcursor_images(
return cursor;
}
static void load_callback(XcursorImages *images, void *data) {
static void load_callback(struct xcursor_images *images, void *data) {
struct wlr_xcursor_theme *theme = data;
if (wlr_xcursor_theme_get_cursor(theme, images->name)) {
XcursorImagesDestroy(images);
xcursor_images_destroy(images);
return;
}
@ -192,7 +192,7 @@ static void load_callback(XcursorImages *images, void *data) {
}
}
XcursorImagesDestroy(images);
xcursor_images_destroy(images);
}
struct wlr_xcursor_theme *wlr_xcursor_theme_load(const char *name, int size) {

File diff suppressed because it is too large Load Diff