Les intéractions avec le Window Manager





Passons à quelque chose de plus simple histoire de digérer le cours précédent...





La souris





En mode fenêtré c'est le Window Manager WM qui prend en charge le curseur de la souris, par contre en mode plein écran, SDL prend le relais.

Il existe donc une structure dédiée à la souris : SDL_Cursor !

La création d'un curseur se fait par un appel à :

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

Les paramètres w et h correspondant aux largeurs et hauteurs deu curseur. Il s'aagit obligatoirement d'un multiple de 8 bits. Les deux derniers argument correspondent quant à eux aux coordonnées du hot-spot. C'est le point considéré comme le centre du curseur. Enfin les paramètres data et mask concernent les données liées au curseur que l'on désire créer. Il s'agit d'une combiansaison binaire des valeurs suivantes :

Data           Mask
0                 1   Blanc
1                 1   Noir
0                 0   Transparent
1                 0   Couleur inversée sous le curseur si possible

Une fois un curseur crée de cette manière on utilise pour SDL_SetCursor(SDL_Cursor *cursor)  pour rendre un curseur actif. Puis la fonction SDL_ShowCursor(int toggle)  pour l'afficher ou l'enlever de l'écran. De plus il est possible de placer un curseur ainsi crée à un endroit voulu par un appel à SDL_WarpMouse(int x, int y). Enfin on libère un curseur par l'appel à SDL_FreeCursor(SDL_Cursor *cursor).





La gestion des fenêtres





Cette partie est réellement très simple et ne vous posera aucun problème. Je ne vais que lister les fonctions :

  • void SDL_WM_SetCaption(const char *title, const char *icon);

Cette fonction vous permet de spécifier le titre et l'icone de la fenêtre.

  • void SDL_WM_GetCaption(char **title, char **icon);

La même chose mais dans le sens inverse !

  • void SDL_WM_SetIcon(SDL_Surface *icon_surface, Uint8 *mask);

Cette fonction charge une image comme icone d'une fenêtre. Cette fonction doit être appelée AVANT l'appel à SDL_SetVideoMode(). Le mask, est géré d'une manière analogue à celui du curseur et traite de la transparence de l'icone.

  • int SDL_WM_IconifyWindow(void);

Permet d'iconifier une fenêtre si le WM le permet.

  • int SDL_WM_ToggleFullScreen(SDL_Surface *surface);

Cette fonction permet un passage entre le mode fenêtré et le mode plein écran. Pour l'instant (SDL version 1.1.4) seule Linux supporte cette fonction. BeOS est en cours.

  • SDL_GrabMode SDL_WM_GrabInput(SDL_GrabMode mode);

Cete fonction permet à l'application de garder la main mise sur la souris. D'autre part les messages provenant du clavier seront traités directement par SDL et ne passeront plus par le WM. Le mode correspond à une des valeurs suivantes :

typedef enum {
  SDL_GRAB_QUERY,
  SDL_GRAB_OFF,
  SDL_GRAB_ON
} SDL_GrabMode;

Voilà les fonctions liées aux WM.

Au prochain cours j'aborderais une des partie les plus importante que représente les évènements. Il s'agira d'une longue partie mais qui reste primordiale si vous désirez développez plus avant avec SDL.






Précédent  |  Index  |  Suivant  ]



by Sylvain Hellegouarch
Last update: 10/06/2000