7 #include "../include/tscope5/mouse.h"
8 #include "../include/tscope5/timer.h"
9 #include "../include/tscope5/graphics.h"
10 #include "../include/tscope5/display.h"
11 #include "../include/tscope5/primitives.h"
12 #include "../include/tscope5/mouse_internal.h"
13 #include "../include/tscope5/system_internal.h"
14 #include "../include/tscope5/graphics_internal.h"
28 ts5_check_mouse(
"ts5_show_mouse");
29 ts5_log(TS5_LOGLEVEL_5,
"ts5_show_mouse()\n");
31 al_show_mouse_cursor(_ts5_status.display[_ts5_status.active_display]);
40 ts5_check_mouse(
"ts5_hide_mouse");
41 ts5_log(TS5_LOGLEVEL_5,
"ts5_hide_mouse()\n");
43 al_hide_mouse_cursor(_ts5_status.display[_ts5_status.active_display]);
55 ts5_check_mouse(
"ts5_set_mouse_position");
56 ts5_log(TS5_LOGLEVEL_5,
"ts5_set_mouse_position(%f,%f)\n", x, y);
58 if (_ts5_status.graphics_status.coordinate_scale == TS5_RELATIVE_COORDINATES) {
63 if (_ts5_status.graphics_status.coordinate_system == TS5_CARTESIAN_COORDINATES) {
68 al_set_mouse_xy(_ts5_status.display[_ts5_status.active_display], (
int)x, (
int)y);
81 ts5_check_mouse(
"ts5_get_mouse_position");
82 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_position(%p,%p)\n", x, y);
84 ALLEGRO_MOUSE_STATE status;
85 al_get_mouse_state(&status);
89 xx = al_get_mouse_state_axis(&status, 0);
90 yy = al_get_mouse_state_axis(&status, 1);
92 if (_ts5_status.graphics_status.coordinate_system == TS5_CARTESIAN_COORDINATES) {
97 if (_ts5_status.graphics_status.coordinate_scale == TS5_RELATIVE_COORDINATES) {
119 ts5_check_mouse(
"ts5_get_mouse_x");
120 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_x()\n");
136 ts5_check_mouse(
"ts5_get_mouse_y");
137 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_y()\n");
157 ts5_check_mouse(
"ts5_draw_mouse_button");
158 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_mouse_button(%f,%f)\n", x, y);
168 double w_abs_disp = 40, h_abs_disp = 40;
169 double x1_abs_disp, x2_abs_disp, y1_abs_disp, y2_abs_disp;
172 if (_ts5_status.graphics_status.coordinate_scale == TS5_RELATIVE_COORDINATES) {
184 if (_ts5_status.graphics_status.coordinate_system == TS5_CARTESIAN_COORDINATES) {
188 x1_abs_disp -= w_abs_disp/2;
189 y1_abs_disp -= h_abs_disp/2;
192 x2_abs_disp = x1_abs_disp + w_abs_disp;
193 y2_abs_disp = y1_abs_disp + h_abs_disp;
199 double dispw = _ts5_status.display_status[_ts5_status.active_display].w;
200 double disph = _ts5_status.display_status[_ts5_status.active_display].h;
202 if (x1_abs_disp < 0.0 || x2_abs_disp > dispw || y1_abs_disp < 0.0 || y2_abs_disp > disph) {
203 ts5_fatal(
"ts5_draw_mouse_button: button will be off screen (%f,%f)\n", x1_abs_disp, y1_abs_disp);
209 x1_abs_disp+5.0, y1_abs_disp+5.0, x1_abs_disp+5.0, y2_abs_disp-5.0);
213 ALLEGRO_MOUSE_STATE status;
220 al_get_mouse_state(&status);
221 down = al_mouse_button_down(&status, 1);
222 if (down && xp > x1_abs_disp && xp < x2_abs_disp && yp > y1_abs_disp && yp < y2_abs_disp) {
229 x1_abs_disp+5, y1_abs_disp+5, x1_abs_disp+5, y2_abs_disp-5);
235 al_get_mouse_state(&status);
236 down = al_mouse_button_down(&status, 1);
244 x1_abs_disp+5, y1_abs_disp+5, x1_abs_disp+5, y2_abs_disp-5);
281 ts5_check_mouse(
"ts5_define_mouse_key");
282 ts5_log(TS5_LOGLEVEL_3,
"ts5_define_mouse_key(%d)\n", key);
285 ts5_fatal(
"ts5_define_mouse_key: key argument is 0, response keys are numbered from 1\n");
288 if (abs(key)>_ts5_status.timer_status.mouse.num_buttons) {
289 ts5_fatal(
"ts5_define_mouse_key: key argument is %d, number of mouse buttons is %d\n",
290 key, _ts5_status.timer_status.mouse.num_buttons);
293 if (key>0 && _ts5_status.timer_status.mouse.button_press_defined[key-1]!=0) {
294 ts5_fatal(
"ts5_define_mouse_key: key press %d is already defined\n", key);
297 if (key<0 && _ts5_status.timer_status.mouse.button_release_defined[-key-1]!=0) {
298 ts5_fatal(
"ts5_define_mouse_key: key release %d is already defined\n", key);
301 _ts5_status.timer_status.mouse_is_response_device = 1;
302 _ts5_status.timer_status.num_defined_buttons++;
303 _ts5_status.timer_status.num_active_buttons++;
304 _ts5_status.timer_status.mouse.num_defined_buttons++;
305 _ts5_status.timer_status.mouse.num_active_buttons++;
308 _ts5_status.timer_status.mouse.button_press_defined[key-1] =
309 _ts5_status.timer_status.num_defined_buttons;
311 _ts5_status.timer_status.mouse.button_press_active[key-1] =
312 _ts5_status.timer_status.num_defined_buttons;
315 _ts5_status.timer_status.mouse.button_release_defined[-key-1] =
316 _ts5_status.timer_status.num_defined_buttons;
318 _ts5_status.timer_status.mouse.button_release_active[-key-1] =
319 _ts5_status.timer_status.num_defined_buttons;
322 return _ts5_status.timer_status.num_defined_buttons;