Manpages - SDL_CreateCursor.3

Table of Contents

NAME

SDL_CreateCursor - Creates a new mouse cursor.

SYNOPSIS

#include “SDL.h”

SDL_Cursor *SDL_CreateCursor*(*Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y);

DESCRIPTION

Create a cursor using the specified data and mask (in MSB format). The cursor width must be a multiple of 8 bits.

The cursor is created in black and white according to the following:

Data / Mask
Resulting pixel on screen
0 / 1
White
1 / 1
Black
0 / 0
Transparent
1 / 0
Inverted color if possible, black if not.

Cursors created with this function must be freed with SDL_FreeCursor.

EXAMPLE

  /* 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"
  };

  static SDL_Cursor *init_system_cursor(const char *image[])
  {
    int i, row, col;
    Uint8 data[4*32];
    Uint8 mask[4*32];
    int hot_x, hot_y;

    i = -1;
    for ( row=0; row<32; ++row ) {
      for ( col=0; col<32; ++col ) {
        if ( col % 8 ) {
          data[i] <<= 1;
          mask[i] <<= 1;
        } else {
          ++i;
          data[i] = mask[i] = 0;
        }
        switch (image[4+row][col]) {
          case 'X':
            data[i] |= 0x01;
            k[i] |= 0x01;
            break;
          case '.':
            mask[i] |= 0x01;
            break;
          case ' ':
            break;
        }
      }
    }
    sscanf(image[4+row], "%d,%d", &hot_x, &hot_y);
    return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
  }

SEE ALSO

SDL_FreeCursor, SDL_SetCursor, SDL_ShowCursor

Author: dt

Created: 2022-02-20 Sun 20:14