Di seguito il codice in linguaggio C per creare mediante le risorse del API di SDL2 una semplice finestra colorata e modificare l'aspetto del cursore del mouse quando entra nella predetta finestra.
#include "SDL2/SDL.h"
#include "SDL2/SDL_mouse.h"
#include "SDL2/SDL_timer.h"
/* Formato immagine XPM */
static const char *cursore[] = {
/* width height num_colori caratt_per_pixel */
" 32 32 3 1",
/* colori */
"X c #000000",
". c #FFFFFF",
" c None",
/* pixel */
"X ",
"XX ",
"X.X ",
"XXXX ",
"X...X ",
"XXXXXX ",
"X.....X ",
"XXXXXXXX ",
"X.......X ",
"XXXXXXXXXX ",
"X.....XXXXX ",
"XXXXXXX ",
"X.X X..X ",
"XX XXXX ",
"X X..X ",
" XXXX ",
" X..X ",
" XXXX ",
" X..X ",
" XXXX ",
" X..X ",
" XXXX ",
" XX ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"0,0"
};
static SDL_Cursor *Crea_cursore()
{
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 (cursore[4+row][col]) {
case 'X':
data[i] |= 0x01;
mask[i] |= 0x01;
break;
case '.':
mask[i] |= 0x01;
break;
case ' ':
break;
}
}
}
sscanf(cursore[4+row], "%d,%d", &hot_x, &hot_y);
return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
}
int main() {
SDL_Window *window;
SDL_Renderer *rend;
SDL_Cursor *cursor;
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow(
"Una finestra SDL2", // titolo della finestra
SDL_WINDOWPOS_CENTERED, // posizione iniziale x
SDL_WINDOWPOS_CENTERED, // posizione iniziale y
640, // larghezza, in pixel
480, // altezza, in pixel
SDL_WINDOW_RESIZABLE // flag
);
if (window == NULL) {
printf("Impossibile creare una finestra: %s\n", SDL_GetError());
return 1;
}
rend = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED);
if (rend == NULL) {
printf("Impossibile creare un contesto rendering 2D per una finestra: %s\n", SDL_GetError());
return 1;
}
SDL_SetRenderDrawColor(rend, 255, 255, 0, 255);
SDL_RenderClear(rend);
SDL_RenderPresent(rend);
cursor = Crea_cursore();
if (cursor == NULL) {
printf("Impossibile creare un cursore !");
}
SDL_SetCursor(cursor);
/* La finestra resta attiva per 10 secondi */
SDL_Delay(10000);
SDL_DestroyWindow(window);
SDL_Quit();
return (0);
}