-
Notifications
You must be signed in to change notification settings - Fork 0
/
Mouse.cpp
145 lines (128 loc) · 4.32 KB
/
Mouse.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*******************************************************
Mouse.cpp
Created by: Juan Manuel Amador Olivares
********************************************************/
#include "StdAfx.h"
#include "Mouse.h"
#include <SDL.h>
/*** Construtor ***/
// Inicializa las variables
Mouse::Mouse(void)
{
x = 0; // Se inicializan las coordenadas x e y del raton
y = 0;
buttonEvent.x = 0; // Se inicilizan los atributos del ultimo evento de raton
buttonEvent.y = 0;
buttonEvent.button = 0;
buttonEvent.type = 0;
}
/*** Deconstructor ***/
// Destruye la memoria del objeto
Mouse::~Mouse(void){}
/*** getX ***/
// Devuelve la posicion x actual del raton
int Mouse::getX(){
SDL_GetMouseState(&x, &y);
return x;
}
/*** getX ***/
// Devuelve la posicion x actual del raton
int Mouse::getY(){
SDL_GetMouseState(&x, &y);
return y;
}
/*** over ***/
// Este metodo comprueba si el raton se encuentra sobre el rectangulo pasado como argumento
/*bool Mouse::over(SDL_Rect originalRect){
// Primero actualiza las coordenadas x e y del raton
x = getX();
y = getY();
}*/
/*** getMouseEvent ***/
// Este metodo comprueba si el evento pasado por argumento es un evento de las teclas del raton
// En el caso de serlo, rellena la estructura tipo MouseEvent y la devuelve
/*MouseEvent Mouse::getMouseEvent(SDL_Event event){
if (event.type == SDL_MOUSEBUTTONDOWN){ // Si el evento es de la pulsacion de una tecla del raton
buttonEvent.type = PRESSED; // Se llena la estructura MouseEvent convenientemente
buttonEvent.x = event.motion.x;
buttonEvent.y = event.motion.y;
switch (event.button.button){
case SDL_BUTTON_LEFT:
buttonEvent.button = LEFTBUTTON;
break;
case SDL_BUTTON_MIDDLE:
buttonEvent.button = MIDDLEBUTTON;
break;
case SDL_BUTTON_RIGHT:
buttonEvent.button = RIGHTBUTTON;
break;
}
}else if (event.type == SDL_MOUSEBUTTONUP){ // Si el evento es de soltar una tecla del raton
buttonEvent.type = RELEASED; // Se llena la estructura MouseEvent convenientemente
buttonEvent.x = event.motion.x;
buttonEvent.y = event.motion.y;
switch (event.button.button){
case SDL_BUTTON_LEFT:
buttonEvent.button = LEFTBUTTON;
break;
case SDL_BUTTON_MIDDLE:
buttonEvent.button = MIDDLEBUTTON;
break;
case SDL_BUTTON_RIGHT:
buttonEvent.button = RIGHTBUTTON;
break;
}
}
return buttonEvent;
}
/*** overPressed ***/
// Comprueba si el ultimo evento de pulsado del raton se ha producido en el rectangulo pasado como argumento
// Primero actualiza las coordenadas x e y del raton y comprueba si estas estan dentro del rectangulo
/*bool Mouse::overPressed(SDL_Rect rect, SDL_Event event){
getMouseEvent(event); // Primero actualizo la estrutura que guarda el ultimo evento del raton
if (buttonEvent.type == PRESSED){ // Si se ha presinado una tecla del raton
if ( (buttonEvent.x < (rect.x + rect.w) && x > rect.x) && // Se comprueba si el evento se ha producido en el rectnagulo
(buttonEvent.y < (rect.y + rect.h) && y > rect.y) ){ // pasado como argumento
return true;
}else{
return false;
}
}else{
return false;
}
}*/
/*** overReleased ***/
// Este metodo comprueba si el raton se encuentra sobre el rectangulo pasado como argumento
// Comprueba si el ultimo evento de soltado del raton se ha producido en el rectangulo pasado como argumento
/*bool Mouse::overReleased(SDL_Rect rect, SDL_Event event){
getMouseEvent(event); // Primero actualizo la estrutura que guarda el ultimo evento del raton
if (buttonEvent.type == RELEASED){ // Si se ha presinado una tecla del raton
if ( (buttonEvent.x < (rect.x + rect.w) && x > rect.x) && // Se comprueba si el evento se ha producido en el rectnagulo
(buttonEvent.y < (rect.y + rect.h) && y > rect.y) ){ // pasado como argumento
return true;
}else{
return false;
}
}else{
return false;
}
}*/
/*** disableCursor ***/
// Desactiva la visibilidad del raton
void Mouse::disableCursor(){
SDL_ShowCursor(SDL_DISABLE);
}
/*** enableCursor ***/
// Activa la visibilidad del raton
void Mouse::enableCursor(){
SDL_ShowCursor(SDL_ENABLE);
}
/*** getCursorState ***/
// Devuelve true si el raton es visible y false en caso contrario
bool Mouse::getCursorState(){
if (SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE){ // Si la visibilidad del raton esta activada
return true; // devuelve true
}else{ // sino
return false; // devuelve false
}
}