Skip to content

Instantly share code, notes, and snippets.

@dpilarsk
Forked from KokaKiwi/events.md
Created May 26, 2017 12:16
Show Gist options
  • Select an option

  • Save dpilarsk/d375ec4152ad2e03ff1ee137a3c1625b to your computer and use it in GitHub Desktop.

Select an option

Save dpilarsk/d375ec4152ad2e03ff1ee137a3c1625b to your computer and use it in GitHub Desktop.
[HOWTO] Gerer d'autres evenements avec la MinilibX

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 à un code d'évènement précis, 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. ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment