BasicC/Okno

SDLOpen(flags)Edytuj

Komenda inicjuje SDL i otwiera okno graficzne, wykonuje następujące czynności:

  • Inicjuje SDL i wszystkie jego komponenty komendą SDL_Init, w razie niepowodzenia przerywa program z błędem 1.
  • Komendą SDL_CreateWindowAndRenderer otwiera okno i tworzy tzw. renderer, zwany dalej projektorem. Okno ma wymiary zdefiniowane stałymi WINDOWW i WINDOWH, domyślnie 640x400 pikseli. Parametr flags zawiera właściwości okna opisane poniżej. Wskaźnik na obiekt okna zawiera zmienna SDLWindow. Wskaźnik na obiekt projektora zawiera zmienna SDLRenderer. Projektor jest obiektem związanym z oknem, na którym wyświetlana jest akcelerowana sprzętowo grafika. Domyślnie włączona jest synchronizacja projektora z odświeżaniem monitora.
  • Czyści projektor, czyli wypełnia go domyślnym kolorem - czarnym, komendą SDL_RenderClear.
  • Zatrzymuje tryb wprowadzania tekstu.
  • W zmiennej strukturalnej Display zapisuje parametry wyświetlacza.
  • Inicjuje dostępne joysticki komendą SDL_JoystickOpen. Maksymalna ich ilość zapisana jest w stałej MAXJOYS, domyślnie 4.
  • Zmiennej SDLTouchID przypisuje wskaźnik pierwszego urządzenia dotykowego.
  • Inicjuje mikser dźwiękowy z domyślnymi parametrami komendą Mix_OpenAudio, jeśli załączona jest biblioteka SDL_mixer.
  • Komendą SDL_LoadBMP ładowany jest obraz BASFont.bmp zawierający czcionki bitmapowe i ustawiana jest jego przeźroczystość. Obraz ten jest konwertowany na tzw. teksturę i przypisany do zmiennej BASFont.
  • Inicjuje obsługę czcionek TTF, jeśli załączona jest biblioteka SDL_ttf.


Parametr flags może być jedną z wartości połączonych alternatywą bitową (|):

SDL_WINDOW_FULLSCREEN okno pełnoekranowe.
SDL_WINDOW_FULLSCREEN_DESKTOP okno pełnoekranowe w bieżącej rozdzielczości pulpitu.
SDL_WINDOW_OPENGL okno do użytku z kontekstem OpenGL.
SDL_WINDOW_HIDDEN okno ukryte.
SDL_WINDOW_BORDERLESS okno bez dodatków.
SDL_WINDOW_RESIZABLE możliwa zmiana wielkości okna.
SDL_WINDOW_MINIMIZED okno zminimalizowane.
SDL_WINDOW_MAXIMIZED okno zmaksymalizowanie.
SDL_WINDOW_INPUT_GRABBED okno z przechwyconym skupieniem wejścia.
SDL_WINDOW_ALLOW_HIGHDPI okno powinno być utworzone w trybie high-DPI, jeśli jest wspierany.

BasicC obsługuje tylko 1 okno. Więcej okien można obsługiwać standardowymi komendami SDL.
W systemach nie obsługujących typowych okien, np. Android, okno ma wymiary całego pulpitu bez względu na wartości WINDOWW i WINDOWH.
Przed wyjściem z programu należy usunąć stworzone obiekty SDL, takie jak obrazy (tekstury), i zakończyć SDL komendą SDLQuit.

GetDisplayModeEdytuj

Wywołuje komendę SDL_GetCurrentDisplayMode(0,&Display);
W zmiennej Display zapisane zostają parmetry wyświetlacza (monitora):
Display.w - rozdzielczość pozioma
Display.h - rozdzielczość pionowa
Display.refresh_rate - częstotliwość odświeżania
Display.driverdata - dane sterownika grafiki

CenterWindowEdytuj

Ustawia okno na środku ekranu komendą SDL_SetWindowPosition(SDLWindow,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED);

CloseWindowEdytuj

Usuwa okno komendą SDL_DestroyWindow(SDL_Window);

FullscreenWindowEdytuj

Powiększa okno bez ramek do rozmiarów pulpitu komendą SDL_SetWindowFullscreen(SDLWindow,SDL_WINDOW_FULLSCREEN_DESKTOP);

GetWindowSize(w,h)Edytuj

Zapisuje w zmiennych w i h wymiary okna głównego komendą SDL_GetWindowSize(SDLWindow,&w,&h);

MaximizeWindowEdytuj

Powiększa okno do rozmiarów pulpitu (z ramkami) komendą SDL_MaximizeWindow(SDLWindow);

MinimizeWindowEdytuj

Minimalizuje okno komendą SDL_MinimizeWindow(SDLWindow);

RestoreWindowEdytuj

Przywraca poprzednią wielkośc okna komendą SDL_RestoreWindow(SDLWindow);

WindowPos(x,y)Edytuj

Ustawia okno w pozycji x,y komendą SDL_SetWindowPosition(SDLWindow,x,y);

WindowSize(w,h)Edytuj

Ustawia szerokość w i wysokość h okna komendą SDL_SetWindowSize(SDLWindow,w,h);

WindowVirtualSize(w,h)Edytuj

Ustawia wirtualną szerokość w i wysokość h okna komendą SDL_RenderSetLogicalSize(SDLRenderer,w,h);
Okno dowolnej wielkości traktowane jest tak, jak by miało rozmiar w,h. Powoduje odpowiednie skalowanie współrzędnych graficznych.

Przykład:

#include "BasicSDL.h"

MAIN
  SDLOpen(0)
  GetDisplayMode
  WindowSize(Display.w/2,Display.h/2)
  CenterWindow
  GPrintAt(300,300,"BasicC")
  ShowPage
  WaitInKey
  SDLQuit
ENDMAIN