Hlavní navigace

SVGAlib: funkce pro používání myší

Jakub Matys

V dnešním dílu seriálu o knihovně SVGAlib si doděláme funkce pro používání myší.

void mouse_setscale(int s);

Tato funkce nastavuje poměr mezi pohybem fyzické myši a pohybem kurzoru na obrazovce. Budete-li tedy zvyšovat hodnotu parametru, bude kurzor myši stále „línější“. Pokud parametr nastavíte na zápornou hodnotu, bude se kurzor pohybovat v opačném směru než myš. Ve stávající verzi knihovny není možné nastavit rychlost kurzoru v rozmezí 0 až 1, což by umožňovalo efekt zrychlení kurzoru. Defaultně je rychlost nastavena na 1.

void mouse_setwrap(int state);

Funkce nastavuje reakci na to, když kurzor dosáhne okraje plochy. state by mělo nabývat hodnoty MOUSE_WRAP, MOUSE_NOWRAP, nebo bitového součtu hodnot MOUSE_WRAPX, MOUSE_WRAPY, MOUSE_WRAPZ, MOUSE_WRAPRX, MOUSE_WRAPRY nebo MOUSE_WRAPRZ.

void mouse_setxrange(int x1, int x2);
void mouse_setyrange(int y1, int y2);

Dvě výše definované funkce nastavují hranice kurzoru myši. x1, x2, y1 a y2 jsou uspořádané od leva(x1) a spodu(y1) obrazovky. Hodnoty vracené funkcemi mouse_getxa mouse_gety budou vždy mezi těmito hodnotami.

int mouse_update(void);

Čte události myši z bufferu zařízení a aktualizuje interní proměnné knihovny (uchovávají pozici myši, stav tlačítek atd.). Funkce vrací 0, pokud se neudály žádné události od poslední aktualizace, nebo vrací nenulovou hodnotu.

void mouse_waitforupdate(void);

Čte události myši jako výše popsaná funkce. Funkce se však nevrací, dokud nevznikne nějaký podnět myši.

int mouse_getx(void);
int mouse_gety(void);
int mouse_getbutton(void);

Tyto tři rutiny vrací aktuální pozici kurzoru a stav tlačítek. mouse_getbutton vrací integer, jeho hodnota může být bitovým násobkem hodnot MOUSE_LEFTBUTTON, MOUSE_MIDDLEBUTTON, MOUSE_RIGHTBUTTON, MOUSE_FOURTHBUTTON, MOUSE_FIFTHBUTTON, MOUSE_SIXTBUTTON nebo MOUSE_RESETBUTTON. Pokud funkce vrátí 0, žádné tlačítko nebylo stisknuto. Před voláním funkce musíte zajistit aktualizaci informací, a to voláním funkce mouse_update nebo mouse_waitforup­date.

void mouse_getposition_6d(int *x, int *y, int *z, int *rx, int *ry, int *rz);
void mouse_setposition_6d(int x, int y, int z, int rx, int ry, int rz, int dim_mask);
void mouse_setrange_6d(int x1, int x2, int y1, int y2, int z1, int z2, int rx1, int rx2, int ry1, int ry2, int rz1, int rz2, int dim_mask); 

Tyto funkce dělají ty samé akce jako mouse_getx, mouse_gety, mouse_setxrange, mouse_setyrange a mouse_setposition, ale pracují ve všech šesti dimenzích (x, y, z) a v rotacích kolem nich.

Pokud mouse_getposi­tion_6d vrátí některé hodnoty jakoNULLové, znamená to, že tyto dimenze nejsou použity.

mouse_setposi­tion_6d a mouse_setrange_6d používají také další argument – din mask, který by měl být logickým součtem hodnot MOUSE_XDIM, MOUSE_YDIM, MOUSE_ZDIM, MOUSE_RXDIM, MOUSE_RYDIM a MOUSE_RZDIM. Pro dimenze XY, XYZ a XYZrXrYrZ mohou být také použity konstanty 2DIM, 3DIM a 6DIM. Pozice nebo hranice kurzoru budou nastaveny pouze tehdy, pokud jsou zaneseny v dim_mask. 6d funkce mohou být tedy použity i pro „klasické“ myši.

typedef void (*__mouse_handler) (int button, int dx, int dy, int dz, int drx, int dry, int drz); /* definováno v vgamouse.h */
void mouse_seteventhandler(__mouse_handler handler);
void mouse_setdefaulthandler(void); 

1) mouse_update a mouse_waitforupdate budou volat tuto funkci pro každou změnu stavu myši. 2) nastavuje defaultní handler.

To by bylo pro dnešek vše. Příště se podíváme na používání klávesnice v raw módu.

Našli jste v článku chybu?