Create a cursor using the specified bitmap data and mask (in MSB format).
Defined in <SDL3/SDL_mouse.h>
const Uint8 * data,
SDL_Cursor * SDL_CreateCursor(const Uint8 * mask,
int w, int h, int hot_x,
int hot_y);
const Uint8 * | data | the color value for each pixel of the cursor. |
const Uint8 * | mask | the mask value for each pixel of the cursor. |
int | w | the width of the cursor. |
int | h | the height of the cursor. |
int | hot_x | the x-axis offset from the left of the cursor image to the mouse x position, in the range of 0 to w - 1. |
int | hot_y | the y-axis offset from the top of the cursor image to the mouse y position, in the range of 0 to h - 1. |
(SDL_Cursor *) Returns a new cursor with the specified parameters on success or NULL on failure; call SDL_GetError() for more information.
mask
has to be in MSB (Most Significant Bit) format.
The cursor width (w
) must be a multiple of 8 bits.
The cursor is created in black and white according to the following:
Cursors created with this function must be freed with SDL_DestroyCursor().
If you want to have a color cursor, or create your cursor from an SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can hide the cursor and draw your own as part of your game's rendering, but it will be bound to the framerate.
Also, SDL_CreateSystemCursor() is available, which provides several readily-available system cursors to pick from.
This function should only be called on the main thread.
This function is available since SDL 3.1.3.
/* Stolen from the mailing list */
/* Creates a new mouse cursor from an XPM */
/* XPM */
static const char *arrow[] = {
/* width height num_colors chars_per_pixel */
" 32 32 3 1",
/* colors */
"X c #000000",
". c #ffffff",
" c None",
/* pixels */
"X ",
"XX ",
"X.X ",
"X..X ",
"X...X ",
"X....X ",
"X.....X ",
"X......X ",
"X.......X ",
"X........X ",
"X.....XXXXX ",
"X..X..X ",
"X.X X..X ",
"XX X..X ",
"X X..X ",
" X..X ",
" X..X ",
" X..X ",
" XX ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"0,0"
};
const char *image[])
SDL_Cursor *init_system_cursor(
{int i, row, col;
4*32];
Uint8 data[4*32];
Uint8 mask[int hot_x, hot_y;
1;
i = -for (row=0; row<32; ++row) {
for (col=0; col<32; ++col) {
if (col % 8) {
1;
data[i] <<= 1;
mask[i] <<= else {
}
++i;0;
data[i] = mask[i] =
}switch (image[4+row][col]) {
case 'X':
0x01;
data[i] |= 0x01;
mask[i] |= break;
case '.':
0x01;
mask[i] |= break;
case ' ':
break;
}
}
}4+row], "%d,%d", &hot_x, &hot_y);
sscanf(image[return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
}