17 #include "../include/tscope5/mouse.h"
18 #include "../include/tscope5/timer.h"
19 #include "../include/tscope5/graphics.h"
20 #include "../include/tscope5/bitmaps.h"
21 #include "../include/tscope5/display.h"
22 #include "../include/tscope5/primitives.h"
23 #include "../include/tscope5/mouse_internal.h"
24 #include "../include/tscope5/system_internal.h"
25 #include "../include/tscope5/graphics_internal.h"
49 ts5_log(TS5_LOGLEVEL_3,
"ts5_define_mouse_button(%d)\n", button);
52 ts5_fatal(
"%s: %s\n",
"ts5_define_mouse_button",
53 "button argument is 0, response buttons are numbered from 1");
56 if (abs(button)>_ts5_status.timer.mouse.num_buttons) {
57 ts5_fatal(
"%s: %s %d, %s is %d\n",
"ts5_define_mouse_button",
58 "button argument is", button,
59 "number of mouse buttons",
60 _ts5_status.timer.mouse.num_buttons);
63 if (button>0 && _ts5_status.timer.mouse
64 .button_press_defined[button-1]!=0) {
65 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_mouse_button",
66 "button press", button,
"is already defined");
69 if (button<0 && _ts5_status.timer.mouse
70 .button_release_defined[-button-1]!=0) {
71 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_mouse_button",
72 "button release", button,
"is already defined");
75 _ts5_status.timer.mouse_is_response_device = 1;
76 _ts5_status.timer.num_defined_buttons++;
77 _ts5_status.timer.num_active_buttons++;
78 _ts5_status.timer.mouse.num_defined_buttons++;
79 _ts5_status.timer.mouse.num_active_buttons++;
82 _ts5_status.timer.mouse.button_press_defined[button-1] =
83 _ts5_status.timer.num_defined_buttons;
85 _ts5_status.timer.mouse.button_press_active[button-1] =
86 _ts5_status.timer.num_defined_buttons;
89 _ts5_status.timer.mouse.button_release_defined[-button-1] =
90 _ts5_status.timer.num_defined_buttons;
92 _ts5_status.timer.mouse.button_release_active[-button-1] =
93 _ts5_status.timer.num_defined_buttons;
96 return _ts5_status.timer.num_defined_buttons;
108 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_num_mouse_buttons()\n");
110 return _ts5_status.timer.mouse.num_buttons;
131 ts5_log(TS5_LOGLEVEL_5,
"ts5_show_mouse()\n");
133 al_show_mouse_cursor(_ts5_data.display[_ts5_status.active_display]);
143 ts5_log(TS5_LOGLEVEL_5,
"ts5_hide_mouse()\n");
145 al_hide_mouse_cursor(_ts5_data.display[_ts5_status.active_display]);
158 ts5_log(TS5_LOGLEVEL_5,
"ts5_set_mouse_position(%f,%f)\n", x, y);
160 if (_ts5_status.graphics.coordinate_scale
161 == TS5_RELATIVE_COORDINATES) {
166 if (_ts5_status.graphics.coordinate_system
167 == TS5_CARTESIAN_COORDINATES) {
172 al_set_mouse_xy(_ts5_data.display[_ts5_status.active_display],
187 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_position(%p,%p)\n", x, y);
189 ALLEGRO_MOUSE_STATE status;
190 al_get_mouse_state(&status);
194 xx = al_get_mouse_state_axis(&status, 0);
195 yy = al_get_mouse_state_axis(&status, 1);
197 if (_ts5_status.graphics.coordinate_system
198 == TS5_CARTESIAN_COORDINATES) {
203 if (_ts5_status.graphics.coordinate_scale
204 == TS5_RELATIVE_COORDINATES) {
227 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_x()\n");
244 ts5_log(TS5_LOGLEVEL_6,
"ts5_get_mouse_y()\n");
265 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_mouse_button(%f,%f)\n", x, y);
271 _ts5_data.display_buffer
272 [_ts5_status.active_display]);
280 double w_abs_disp = 40, h_abs_disp = 40;
281 double x1_abs_disp, x2_abs_disp, y1_abs_disp, y2_abs_disp;
284 if (_ts5_status.graphics.coordinate_scale
285 == TS5_RELATIVE_COORDINATES) {
297 if (_ts5_status.graphics.coordinate_system
298 == TS5_CARTESIAN_COORDINATES) {
302 x1_abs_disp -= w_abs_disp/2;
303 y1_abs_disp -= h_abs_disp/2;
306 x2_abs_disp = x1_abs_disp + w_abs_disp;
307 y2_abs_disp = y1_abs_disp + h_abs_disp;
313 double dispw = _ts5_status.display[_ts5_status.active_display].w;
314 double disph = _ts5_status.display[_ts5_status.active_display].h;
316 if (x1_abs_disp < 0.0 || x2_abs_disp > dispw
317 || y1_abs_disp < 0.0 || y2_abs_disp > disph) {
318 ts5_fatal(
"%s: %s (%f,%f)\n",
"ts5_draw_mouse_button",
319 "button will be off screen", x1_abs_disp, y1_abs_disp);
323 x2_abs_disp, y2_abs_disp, 3.0, 3.0);
327 x1_abs_disp+5.0, y1_abs_disp+5.0, x1_abs_disp+5.0, y2_abs_disp-5.0);
331 ALLEGRO_MOUSE_STATE status;
338 al_get_mouse_state(&status);
339 down = al_mouse_button_down(&status, 1);
340 if (down && xp > x1_abs_disp && xp < x2_abs_disp
341 && yp > y1_abs_disp && yp < y2_abs_disp) {
348 x1_abs_disp+5, y1_abs_disp+5, x1_abs_disp+5, y2_abs_disp-5);
354 al_get_mouse_state(&status);
355 down = al_mouse_button_down(&status, 1);
363 x1_abs_disp+5, y1_abs_disp+5, x1_abs_disp+5, y2_abs_disp-5);