1 /*
2 * $Source: /cvs/cvsroot/d2x/arch/ggi/mouse.c,v $
3 * $Revision: 1.1 $
4 * $Author: bradleyb $
5 * $Date: 2001/10/24 09:25:05 $
6 *
7 * GGI mouse support
8 *
9 * $Log: mouse.c,v $
10 * Revision 1.1 2001/10/24 09:25:05 bradleyb
11 * Moved input stuff to arch subdirs, as in d1x.
12 *
13 * Revision 1.4 2001/01/29 14:03:57 bradleyb
14 * Fixed build, minor fixes
15 *
16 */
17
18 #ifdef HAVE_CONFIG_H
19 #include <conf.h>
20 #endif
21
22 #include <stdio.h>
23 #include <string.h>
24 #include <ggi/gii.h>
25 #include "fix.h"
26 #include "timer.h"
27 #include "event.h"
28 #include "mouse.h"
29
30 struct mousebutton {
31 ubyte pressed;
32 fix time_went_down;
33 fix time_held_down;
34 uint num_downs;
35 uint num_ups;
36 };
37
38 #define MOUSE_MAX_BUTTONS 3
39
40 static struct mouseinfo {
41 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
42 //added on 10/17/98 by Hans de Goede for mouse functionality
43 int min_x, min_y;
44 int max_x, max_y;
45 int delta_x, delta_y;
46 int x,y;
47 } Mouse;
48
mouse_correct()49 void mouse_correct()
50 {
51 if (Mouse.x < Mouse.min_x)
52 Mouse.x = Mouse.min_x;
53 else if (Mouse.x > Mouse.max_x)
54 Mouse.x = Mouse.max_x;
55 if (Mouse.y < Mouse.min_y)
56 Mouse.y = Mouse.min_y;
57 else if (Mouse.y > Mouse.max_y)
58 Mouse.y = Mouse.max_y;
59 }
60
mouse_handler_absolute(int x,int y)61 void mouse_handler_absolute(int x, int y)
62 {
63 Mouse.delta_x += (x - Mouse.x);
64 Mouse.delta_y += (y - Mouse.y);
65 Mouse.x = x;
66 Mouse.y = y;
67 // mouse_correct();
68 }
69
mouse_handler_relative(int x,int y)70 void mouse_handler_relative(int x, int y)
71 {
72 Mouse.delta_x += x;
73 Mouse.delta_y += y;
74 Mouse.x += x;
75 Mouse.y += y;
76 // mouse_correct();
77 }
78
mouse_handler_button(int button,ubyte state)79 void mouse_handler_button(int button, ubyte state)
80 {
81 if (!Mouse.buttons[button].pressed && state)
82 {
83 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
84 Mouse.buttons[button].num_downs++;
85 }
86 else if (Mouse.buttons[button].pressed && !state)
87 {
88 Mouse.buttons[button].num_ups++;
89 }
90
91 Mouse.buttons[button].pressed = state;
92 }
93
Mouse_close(void)94 void Mouse_close(void)
95 {
96 }
97
Mouse_init(void)98 void Mouse_init(void)
99 {
100 memset(&Mouse, 0, sizeof(Mouse));
101 }
102
103 void
mouse_set_limits(int x1,int y1,int x2,int y2)104 mouse_set_limits( int x1, int y1, int x2, int y2 )
105 {
106 Mouse.min_x = x1;
107 Mouse.max_x = x2;
108 Mouse.min_y = y1;
109 Mouse.max_y = y2;
110 }
111
mouse_flush()112 void mouse_flush() // clears all mice events...
113 {
114 Mouse.x = 0;
115 Mouse.y = 0;
116 Mouse.delta_x = 0;
117 Mouse.delta_y = 0;
118 }
119
120 //========================================================================
mouse_get_pos(int * x,int * y)121 void mouse_get_pos( int *x, int *y)
122 {
123 event_poll();
124 *x = Mouse.x;
125 *y = Mouse.y;
126 }
127
mouse_get_delta(int * dx,int * dy)128 void mouse_get_delta( int *dx, int *dy )
129 {
130 event_poll();
131 *dx = Mouse.delta_x;
132 *dy = Mouse.delta_y;
133 Mouse.delta_x = 0;
134 Mouse.delta_y = 0;
135 }
136
mouse_get_btns()137 int mouse_get_btns()
138 {
139 ubyte buttons = 0;
140 int i;
141 event_poll();
142 for (i = 0; i < MOUSE_MAX_BUTTONS; i++)
143 buttons |= (Mouse.buttons[i].pressed << i);
144 return buttons;
145 }
146
mouse_set_pos(int x,int y)147 void mouse_set_pos( int x, int y)
148 {
149 Mouse.x = x;
150 Mouse.y = y;
151 }
152
mouse_get_cyberman_pos(int * x,int * y)153 void mouse_get_cyberman_pos( int *x, int *y )
154 {
155 }
156
157 // Returns how long this button has been down since last call.
mouse_button_down_time(int button)158 fix mouse_button_down_time(int button)
159 {
160 if (Mouse.buttons[button].pressed)
161 return (timer_get_fixed_seconds() - Mouse.buttons[button].time_went_down);
162 else
163 return 0;
164 }
165
166 // Returns how many times this button has went down since last call
mouse_button_down_count(int button)167 int mouse_button_down_count(int button)
168 {
169 int count = Mouse.buttons[button].num_downs;
170 Mouse.buttons[button].num_downs = 0;
171 return count;
172 }
173
174 // Returns 1 if this button is currently down
mouse_button_state(int button)175 int mouse_button_state(int button)
176 {
177 return Mouse.buttons[button].pressed;
178 }
179