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
01White
11Black
00Transparent
10Inverted 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,