X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=51c2baf83e8ef9e4f5f5508c3ac9b34a158f8e36;hp=2406489587d0c74b67a7a1cd7d9d92c661d8e321;hb=de8b3ae622eae10f1caf96872fb1790f7bd9644b;hpb=27a283729bf1e7b956c5ceba87215a6d177b4bc7 diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 24064895..51c2baf8 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -1233,6 +1233,72 @@ Bitmap *SDLLoadImage(char *filename) } +/* ------------------------------------------------------------------------- */ +/* custom cursor fuctions */ +/* ------------------------------------------------------------------------- */ + +static SDL_Cursor *create_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); +} + +void SDLSetMouseCursor(const char **cursor_image) +{ + static const char **last_cursor_image = NULL; + static SDL_Cursor *cursor_default = NULL; + static SDL_Cursor *cursor_current = NULL; + + if (cursor_default == NULL) + cursor_default = SDL_GetCursor(); + + if (cursor_image != NULL && cursor_image != last_cursor_image) + { + cursor_current = create_cursor(cursor_image); + last_cursor_image = cursor_image; + } + + SDL_SetCursor(cursor_image ? cursor_current : cursor_default); +} + + /* ========================================================================= */ /* audio functions */ /* ========================================================================= */