SDL Library Documentation
Prev |  | Next

# SDL_CreateCursor

## 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;
              mask[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`

Prev | Home | Next
SDL_WarpMouse | Up | SDL_FreeCursor