Wiki Page Content

Differences between revisions 3 and 4
Revision 3 as of 2010-08-10 00:35:07
Size: 4711
Editor: SheenaSmith
Comment: update content (old wiki)
Revision 4 as of 2010-08-10 00:55:22
Size: 4908
Editor: SheenaSmith
Comment: update content (old wiki)
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
Use this function to create a cursor for the currently selected mouse, using the specified bitmap data and mask (in MSB format). Use this function to create a cursor ^?for the currently selected mouse,?^ using the specified bitmap data and mask (in MSB format).
Line 21: Line 21:
||'''data'''||the first part of the cursor color information; see [[#Remarks|Remarks]] for details||
||'''mask'''||the second part of the cursor color information; see [[#Remarks|Remarks]] for details||
||'''w'''||the width of the cursor; see [[#Remarks|Remarks]] for details||
||'''h'''||the height of the cursor ''(same restrictions?)''||
||'''hot_x'''||''description''||
||'''hot_y'''||''description''||
||'''data'''||^the color value for each pixel of the cursor^; see [[#Remarks|Remarks]] for details||
||'''mask'''||^the mask value for each pixel of the cursor^; see [[#Remarks|Remarks]] for details||
||'''w'''||^the width of the cursor^; see [[#Remarks|Remarks]] for details||
||'''h'''||^the height of the cursor^ ''(same restrictions as w?)''||
||'''hot_x'''||^the X-axis location of the upper left corner of the cursor relative to the actual mouse position^???||
||'''hot_y'''||^the Y-axis location of the upper left corner of the cursor relative to the actual mouse position^???||
Line 119: Line 119:
The cursor width ''('''w''')'' must be a multiple of 8 bits. The cursor width ^('''w''')^ must be a multiple of 8 bits.
Line 130: Line 130:
If you want to have a color cursor then this function is not for you; instead, you must hide the normal system cursor ([[SDL_ShowCursor]]) and in your main loop, when you draw graphics, also draw an [[SDL_Surface]] at the location of the mouse cursor. If you want to have color cursor, then this function is not for you; instead, you must hide the normal system cursor ([[SDL_ShowCursor]]) and in your main loop, when you draw graphics, also draw a [[SDL_Surface]] at the location of the mouse cursor.
Line 134: Line 134:
^To create a color cursor hide the normal system cursor ([[SDL_ShowCursor]]) and, along with your other graphics, draw an [[SDL_Surface]] at the location of the mouse cursor in your main loop.^ ^To create a color cursor hide the normal system cursor (use [[SDL_ShowCursor]] to find it???) and, along with your other graphics, draw an [[SDL_Surface]] at the location of the mouse cursor in your main loop.^

DRAFT

SDL_CreateCursor

Use this function to create a cursor ?for the currently selected mouse,? using the specified bitmap data and mask (in MSB format).

Syntax

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

Function Parameters

data

the color value for each pixel of the cursor; see Remarks for details

mask

the mask value for each pixel of the cursor; see Remarks for details

w

the width of the cursor; see Remarks for details

h

the height of the cursor (same restrictions as w?)

hot_x

the X-axis location of the upper left corner of the cursor relative to the actual mouse position???

hot_y

the Y-axis location of the upper left corner of the cursor relative to the actual mouse position???

Return Value

A pointer to an SDL_Cursor structure filled with the cursor information. ???

Code Examples

*

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

*

Remarks

The cursor width ('''w''') 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().

If you want to have color cursor, then this function is not for you; instead, you must hide the normal system cursor (SDL_ShowCursor) and in your main loop, when you draw graphics, also draw a SDL_Surface at the location of the mouse cursor.

green


*

To create a color cursor hide the normal system cursor (use [[SDL_ShowCursor]] to find it???) and, along with your other graphics, draw an [[SDL_Surface]] at the location of the mouse cursor in your main loop.


CategoryAPI, CategoryMouse

None: SDL_CreateCursor (last edited 2017-07-14 21:57:48 by PhilippWiesemann)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit