Hello, voici un petit guide pour ceux qui aimeraient savoir comment gérer des évènements autres que "KeyRelease", "ButtonPress" (souris), "Expose" et "Loop".
En effet, la minilibx ne dispose que des fonctions permettant de gérer ces évènements. Or ils ne sont pas suffisants pour faire des programmes évolués (cool un Wolf3D qui nécessite que j'appuie plusieurs fois sur la touche HAUT pour avancer!)
En fait, il faut pour cela regarder dans le code de la MinilibX et voir comment sont gérés les évènements envoyés par le serveur X.
Si vous voulez en savoir plus, regardez le fichier "mlx_int_param_events.c" ;)
Mais revenons au sujet principal: Comment gérer d'autres évènements?
La Minilibx dispose en fait d'une fonction nommée "mlx_hook" permettant d'ajouter une fonction de gestion d'évènement à son code (un int
) associé, dont le prototype est le suivant:
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
Les paramètres sont les suivants:
- win_ptr: Ca normalement vous savez ce que c'est si vous avez un peu utilisé la MinilibX :)
- x_event: Le code de l'évènement que l'on veut gérer, vous pouvez utiliser les constantes définies par Xlib.
- x_mask: Le "masque" de l'évènement que l'on veut gérer, je vous laisse lire le manuel de X pour en savoir plus. Vous pouvez utiliser les constantes définies par Xlib.
- funct: Un pointeur vers la fonction qui va gérer l'évènement. On verra plus bas pour les prototypes des différentes fonctions gérées par la MinilibX.
- param: Un paramètre divers que vous pouvez passer à la fonction qui gère l'évènement.
Pour les prototypes des fonctions qui gèrent les différents évènements, la MinilibX en supporte certaines pour quelques types d'évènements précis:
-
Evènement de type
KeyPress
:int funct(int keycode, void *param);
-
Evènement de type
KeyRelease
:int funct(int keycode, void *param);
-
Evènement de type
ButtonPress
(souris):int funct(int button, int x, int y, void *param);
-
Evènement de type
MotionNotify
(mouvement de la souris):int funct(int x, int y, void *param);
-
Tous les autres évènements:
int funct(void *param);
Après, si vous voulez gérer plus précisément les autres types d'évènements (pour, par exemple, avoir accès aux détails dudit évènement), je vous laisse fouiller un peu dans la doc de Xlib et dans le fichier de la MinilibX que j'ai cité plus haut. ;)
Merci, tres utile