La souris
Modifier/cacher le curseur du pointeur de la souris
Il est possible de modifier/cacher le curseur de la souris de la fenêtre courante:
void glutSetCursor(int cursor);
où cursor est une valeur représentant l'une des formes disponibles:
GLUT_CURSOR_RIGHT_ARROW, GLUT_CURSOR_LEFT_ARROW, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, GLUT_CURSOR_HELP, GLUT_CURSOR_CYCLE, GLUT_CURSOR_SPRAY, GLUT_CURSOR_WAIT, GLUT_CURSOR_TEXT, GLUT_CURSOR_CROSSHAIR, GLUT_CURSOR_UP_DOWN, GLUT_CURSOR_LEFT_RIGHT, GLUT_CURSOR_TOP_SIDE, GLUT_CURSOR_BOTTOM_SIDE, GLUT_CURSOR_LEFT_SIDE, GLUT_CURSOR_RIGHT_SIDE, GLUT_CURSOR_TOP_LEFT_CORNER, GLUT_CURSOR_TOP_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_LEFT_CORNER, GLUT_CURSOR_FULL_CROSSHAIR (si cela marche, sinonutiliser GLUT_CURSOR_CROSSHAIR).
Les cas particuliers étant
GLUT_CURSOR_NONE pour cacher le curseur
GLUT_CURSOR_INHERIT pour hériter de la forme du curseur de celui du parent.
Positionner le pointeur de la souris
Il est possible de postionner le pointeur de la souris à l'écran. Il suffit d'utiliser la fonction glutWarpPointer()
void glutWarpPointer ( int x , int y );
En entrée:
x, y qui sont les nouvelles coordonnées de la souris par rapport à la fenêtre GLUT. Origine (donc le (0,0)) correspondant au coin supérieur gauche de la fenêtre.
En sortie: rien !
Cette fonction
ne marche pas sous VirtualBox !
La souris quitte ou rentre dans notre fenêtre
Nous pouvons être informé lorsque le pointeur de la souris quitte ou rentre dans notre fenêtre.
Nous allons une fois de plus définir notre fonction qui sera informée
de cet état par une fonction permattent d'indiquer à GLUT que
nous désirons connaître cette information via glutEntryFunc()
void glutEntryFunc ( void (*func) (int state ));
func Avec toujours la même chose, func qui est notre fonction
Notre fonction recevra en paramètre la valeur de state qui prend les valeurs GLUT_LEFT ou GLUT_ENTERED selon que le pointeur de la souris a quitté ou est entré dans la fenêtre courante.
La valeur NULLpassée
en paramètre de glutEntryFunc désactive l'appel à la fonction.
Etat des boutons de la souris
Il est possible d'être tenu informé de l'état des boutons de la souris en définissant notre fonction via glutMouseFunc()
void glutMouseFunc ( void (*func) ( int button, int state, int x, int y );
Où func est toujours notre fonction !
Notre fonction recevra donc des paramètres qui sont:
button pour le bouton pressé:
- Bouton gauche:GLUT_LEFT_BUTTON,
- Bouton du milieu (si votre souris en a): GLUT_MIDDLE_BUTTON,
- Bouton de droite: GLUT_RIGHT_BUTTON (si votre souris n'a pas qu'un bouton, mais cela existe encore ?)
state indique que le bouton est pressé (GLUT_DOWN) ou relaché
(GLUT_UP).
x et y étant les coordonnées de la souris au moment du déclenchement de notre fonction
Si votre fonction
reçoit GLUT_DOWN, alors elle recevra obligatoirement GLUT_UP. Et ceci
même si la souris n'est plus dans la fenêtre.
Vous pourrez connaître
l'état des boutons ALT, CTRL et Shifr via glutGetModifiers()
Vous ne recevrez
aucune information si un menu est attaché à un bouton de la souris
Là encore,
la valeur NULL passée en paramètre de glutMouseFunc désactive
l'appel à la fonction.
Position de la souris
Il y a deux manières d'être informées des positions de la souris
- glutMotionFunc: la fonction qui y sera associée sera déclenchée lorsque la souris se déplace avec un bouton pressé.
- glutPassiveMotionFunc: la fonction qui y sera associée sera déclenchée lorsque la souris se déplace avec un bouton non pressé.
void glutMotionFunc ( void (*func) (int x, int y ));
void glutPassiveMotionFunc ( void (*func) ( int x, int y ));
func qui est votre fonction qui sera déclenchée !
Ces fonctions attendent toutes deux les coordonées X et Y en pixels.de
la souris.
Les paramètres
x et y sont relativent au coin supérieur gauche de la fenêtre
Comme toujours, la
valeur NULL passée en paramètre de l'une des fonctions glut désactive
l'appel à la fonction correspondante.