El controlador de ratón de Allegro usa el controlador de ratón del DOS int33, por lo que sólo funcionará cuando el controlador de DOS (normalmente mouse.com o mouse.exe) esté activo. Esto es útil a modo de traducción de las funciones int33, y porque puede enseñar punteros de ratón en modos SVGA, algo que muchas implementaciones del controlador estándar no pueden.
int install_mouse();
Instala el controlador del ratón de Allegro. Debe hacer esto antes de
usar cualquier otra función del ratón. Devuelve -1 si hubo error (ej. si
el controlador int33 no está cargado), o el número de botones del ratón.
void remove_mouse();
Quita el controlador de ratón. Normalmente no necesita llamar esta
función, porque allegro_exit() lo hará por usted.
extern volatile int mouse_x;
extern volatile int mouse_y;
extern volatile int mouse_b;
extern volatile int mouse_pos;
Variables globales que contienen la posición actual del ratón y el estado
de los botones. Las posiciones mouse_x y mouse_y son enteros que van de
cero a la esquina inferior derecha de la pantalla. La variable mouse_b es
un campo de bits indicando el estado de cada botón: bit 0 es el botón
izquierdo, bit 1 es del derecho, y bit 2 el botón central. Por ejemplo:
if (mouse_b & 1) printf("El botón izquierdo está pulsado\n");La variable pouse_pos contiene la coordenada X actual en la palabra alta y la coordenada Y en la palabra baja. Esto es útil en bucles rápidos de lectura donde una interrupción del ratón podría ocurrir mientras lee las dos variables por separado, ya que puede copiar este valor a una variable local con una instrucción, y entonces separarlo con tranquilidad.if (!(mouse_b & 2)) printf("El botón derecho no está pulsado\n");
void show_mouse(BITMAP *bmp);
Le dice a Allegro que muestre el puntero del ratón en la pantalla. Esto
sólo funcionará si el módulo de temporización está instalado. El puntero
del ratón será dibujado sobre el bitmap especificado, que será
normalmente 'screen' (lee más abajo información sobre bitmaps). Para
ocultar el puntero del ratón, llame show_mouse(NULL). Aviso: si dibuja
algo en la pantalla mientras el puntero está visible, podría ocurrir una
interrupción de movimiento en medio de su operación de dibujo. Si esto
ocurre, el buffer del ratón y el código de cambio de banco SVGA se
confundirán, y dejarán 'rastros de ratón' por toda la pantalla. Para
evitar esto, debe asegurarse que oculta el puntero del ratón siempre que
vaya a dibujar la pantalla.
void scare_mouse();
Función de ayuda para ocultar el puntero del ratón antes de una operación
de dibujado. Esto se deshará temporalmente del puntero del ratón, pero
sólo si es realmente necesario (ej. el ratón es visible, y está siendo
visualizado en la pantalla física, y no se trata de un cursor por
hardware). El estado previo del ratón es almacenado para las llamadas
siguientes a unscare_mouse().
void unscare_mouse();
Deshace el efecto de una llamada previa a scare_mouse(), recuperando el
estado original del puntero.
extern int freeze_mouse_flag;
Si este biestable está activo, el puntero del ratón no será redibujado
cuando mueva el ratón. Esto le puede evitar tener que ocultar el puntero
cada vez que dibuje en la pantalla, siempre que no dibuje sobre la
posición actual del puntero.
void position_mouse(int x, int y);
Mueve el ratón a la posición de pantalla especificada. Puede llamar esta
función incluso mientras el puntero esté visible.
void set_mouse_range(int x1, int y1, int x2, int y2);
Crea un área de pantalla sobre la que el ratón se podrá desplazar. Pase
los parámetros de las esquinas del recuadro (coordenadas inclusivas). Si
no llama esta función, el área por defecto se activará a (0, 0,
SCREEN_W-1, SCREEN_H-1).
void set_mouse_speed(int xspeed, int yspeed);
Ajusta la velocidad del ratón. Valores grandes de xspeed e yspeed
significan un movimiento más lento: por defecto ambos son 2.
void set_mouse_sprite(BITMAP *sprite);
¿No le gusta mi puntero de ratón? No problemo. Use esta función para usar
uno propio alternativo. Si cambia el puntero y luego quiere volver a
ver mi querida flecha otra vez, llame set_mouse_sprite(NULL).
void set_mouse_sprite_focus(int x, int y);
El foco del ratón es la parte del puntero que representa la posición
actual del ratón, vamos, la posición (mouse_x, mouse_y). Por defecto el
foco está arriba a la izquierda de la flecha, pero si va a usar un
puntero de ratón diferente, quizás deba alterar esto.
void get_mouse_mickeys(int *mickeyx, int *mickeyy);
Mide cómo de lejos se ha movido el ratón desde la última llamada a esta
función. El ratón seguirá generando unidades de movimiento incluso cuando
llegue al borde de la pantalla, por lo que esta forma de control puede
ser útil en juegos que requieran un rango de movimiento del ratón
infinito.
extern void (*mouse_callback)(int flags);
Llamado por el controlador de interrupciones siempre cuando el ratón se
mueva o el valor de los botones cambie. Esta función debe ser fijada en
memoria (locked), y debe ejecutarse ¡muy rápido! Se le pasan los
biestables de evento que activaron la llamada, que son una máscara de bits
que puede contener cualquiera de los siguientes valores MOUSE_FLAG_MOVE,
MOUSE_FLAG_LEFT_DOWN, MOUSE_FLAG_LEFT_UP, MOUSE_FLAG_RIGHT_DOWN,
MOUSE_FLAG_RIGHT_UP, MOUSE_FLAG_MIDDLE_DOWN, y MOUSE_FLAG_MIDDLE_UP.