Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Uaktualniono: 31.07.2022

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

Interfejs SDL2:

SDL_CreateCursor

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.

SDL_CreateCursor

Użyj tej funkcji, aby utworzyć kursor używając określonej mapy bitowej oraz maski (w formacie MSB).

Składnia

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

Parametry funkcji

data wartość koloru dla każdego piksela kursora; zobacz do Uwag.
mask wartość maski dla każdego piksela kursora; zobacz do Uwag.
w szerokość kursora; zobacz do Uwag.
h wysokość kursora (takie same ograniczenia jak dla w?).
hot_x współrzędna x lewego górnego narożnika kursora względem bieżącej pozycji myszki.
hot_y współrzędna y lewego górnego narożnika kursora względem bieżącej pozycji myszki.

Wartość zwracana

Zwraca nowy kursor lub NULL przy błędzie; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

/* Skradzione z listy mailingowej */
/* Tworzy nowy kursor z XPM */


/* XPM */
static const char *arrow[] = {
  /* szerokość wysokość kolory znaki_na_piksel */
  "  32        32       3      1",
  /* kolory */
  "X c #000000",
  ". c #ffffff",
  "  c None",
  /* piksele */
  "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);
}

Uwagi

Tablica mask musi być w formacie MSB (ang. Most Significant Bit – Najbardziej Znaczący Bit jako pierwszy).

Szerokość kursora (w) musi być wielokrotnością 8 bitów.

Kursor jest tworzony w kolorach czarnym i białym zgodnie z poniższą tabelą:

dane maska Wynikowy piksel na ekranie
0 1 Biały
1 1 Czarny
0 0 Przezroczysty
1 0 Odwrócony kolor, jeśli możliwe, czarny jeśli nie

Kursory utworzone za pomocą tej funkcji muszą być zwalniane z wykorzystaniem SDL_FreeCursor().

Jeśli potrzebujesz kolorowego kursora, to ta funkcja ci się nie przyda, zamiast tego ukryj zwykły kursor systemowy za pomocą SDL_ShowCursor() i w swojej pętli głównej, gdy rysujesz grafikę, narysuj również obrazek kursora z SDL_Surface na pozycji kursora myszki.

Alternatywnie użyj SDL_CreateColorCursor().

Zwróć uwagę, że od SDL 2.0.0, dostępna jest funkcja SDL_CreateSystemCursor(), która udostępnia do wyboru dwanaście gotowych kursorów systemowych.

Powiązane funkcje

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.