|
Size: 1722
Comment:
|
Size: 4711
Comment: update content (old wiki)
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 32: | Line 32: |
| * | |
| Line 33: | Line 34: |
| You can add your code example here | /* 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); } |
| Line 35: | Line 116: |
| * | |
| Line 46: | Line 128: |
| *<<BR>>Cursors created with this function must be freed with [[SDL_FreeCursor]](). 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. <<Color2(green,Should the above comment about color cursors be rephrased to be less conversational? Example below:)>><<BR>>* ^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.^ |
|
| Line 48: | Line 138: |
| .[[SDL_SetCursor]] * .[[SDL_ShowCursor]] * |
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).
Contents
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 first part of the cursor color information; see Remarks for details |
mask |
the second part of the cursor color information; see Remarks for details |
w |
the width of the cursor; see Remarks for details |
h |
the height of the cursor (same restrictions?) |
hot_x |
description |
hot_y |
description |
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 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.
green
*
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.
