2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
14 #pragma off (unreferenced)
15 static char rcsid[] = "$Id: mouse.c,v 1.1.1.1 2001-01-19 03:30:14 bradleyb Exp $";
16 #pragma on (unreferenced)
32 char ui_converted_mouse_pointer[PTR_W*PTR_H];
33 char ui_mouse_pointer[] = \
71 static grs_bitmap * default_pointer;
77 #define TICKER (*(volatile int *)0x46C)
80 int ui_mouse_find_gadget(short n)
84 for (i=1; i<=Window[n].NumItems; i++ ) {
85 if ((Mouse.x >= (Window[n].Item[i].x1+Window[n].x)) &&
86 (Mouse.x <= (Window[n].Item[i].x2+Window[n].x)) &&
87 (Mouse.y >= (Window[n].Item[i].y1+Window[n].y)) &&
88 (Mouse.y <= (Window[n].Item[i].y2+Window[n].y)) )
97 if (Mouse.hidden==1 ) {
99 // Save the background under new pointer
101 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
102 gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, 0, 0, Mouse.bg_x, Mouse.bg_y, &(grd_curscreen->sc_canvas.cv_bitmap),Mouse.background );
103 // Draw the new pointer
104 gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap) );
110 if (Mouse.hidden==0 ) {
112 if (Mouse.bg_saved==1) {
113 gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, Mouse.bg_x, Mouse.bg_y, 0, 0, Mouse.background,&(grd_curscreen->sc_canvas.cv_bitmap) );
119 void ui_mouse_process()
122 //if (Mouse.hidden==0)
123 // mouse_get_pos( &Mouse.x, &Mouse.y );
125 // mouse_set_pos( Mouse.x, Mouse.y );
128 Mouse.dx = Mouse.new_dx;
129 Mouse.dy = Mouse.new_dy;
130 buttons = Mouse.new_buttons;
135 w = grd_curscreen->sc_w;
136 h = grd_curscreen->sc_h;
138 if (Mouse.x < 0 ) Mouse.x = 0;
139 if (Mouse.y < 0 ) Mouse.y = 0;
140 // if (Mouse.x > w-Mouse.pointer->bm_w ) Mouse.x = w - Mouse.pointer->bm_w;
141 // if (Mouse.y > h-Mouse.pointer->bm_h ) Mouse.y = h - Mouse.pointer->bm_h;
143 if (Mouse.x > w-3 ) Mouse.x = w - 3;
144 if (Mouse.y > h-3 ) Mouse.y = h - 3;
146 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) )
149 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
151 // Restore the background under old pointer
152 if (Mouse.bg_saved==1) {
153 gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, Mouse.bg_x, Mouse.bg_y, 0, 0, Mouse.background, &(grd_curscreen->sc_canvas.cv_bitmap) );
159 // Save the background under new pointer
161 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
163 gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, 0, 0, Mouse.bg_x, Mouse.bg_y, &(grd_curscreen->sc_canvas.cv_bitmap),Mouse.background );
165 // Draw the new pointer
166 gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap) );
170 Mouse.b1_last_status = Mouse.b1_status;
171 Mouse.b2_last_status = Mouse.b2_status;
173 if ( Mouse.backwards== 0 )
175 if (buttons & MOUSE_LBTN )
176 Mouse.b1_status = BUTTON_PRESSED;
178 Mouse.b1_status = BUTTON_RELEASED;
179 if (buttons & MOUSE_RBTN )
180 Mouse.b2_status = BUTTON_PRESSED;
182 Mouse.b2_status = BUTTON_RELEASED;
184 if (buttons & MOUSE_LBTN )
185 Mouse.b2_status = BUTTON_PRESSED;
187 Mouse.b2_status = BUTTON_RELEASED;
188 if (buttons & MOUSE_RBTN )
189 Mouse.b1_status = BUTTON_PRESSED;
191 Mouse.b1_status = BUTTON_RELEASED;
194 if ((Mouse.b1_status & BUTTON_PRESSED) && (Mouse.b1_last_status & BUTTON_RELEASED) )
196 if ( (TICKER <= Mouse.time_lastpressed+5) ) //&& (Mouse.moved==0)
197 Mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
200 Mouse.time_lastpressed = TICKER;
201 Mouse.b1_status |= BUTTON_JUST_PRESSED;
204 else if ((Mouse.b1_status & BUTTON_RELEASED) && (Mouse.b1_last_status & BUTTON_PRESSED) )
205 Mouse.b1_status |= BUTTON_JUST_RELEASED;
207 if ((Mouse.b2_status & BUTTON_PRESSED) && (Mouse.b2_last_status & BUTTON_RELEASED) )
208 Mouse.b2_status |= BUTTON_JUST_PRESSED;
209 else if ((Mouse.b2_status & BUTTON_RELEASED) && (Mouse.b2_last_status & BUTTON_PRESSED) )
210 Mouse.b2_status |= BUTTON_JUST_RELEASED;
213 void ui_mouse_flip_buttons()
217 Mouse.b1_status = Mouse.b2_status;
220 x = Mouse.b1_last_status;
221 Mouse.b1_last_status = Mouse.b2_last_status;
222 Mouse.b2_last_status = x;
224 Mouse.backwards ^= 1;
235 w = grd_curscreen->sc_w;
236 h = grd_curscreen->sc_h;
238 mouse_set_limits( 0,0, w-1, h-1 );
243 //mouse_set_pos( w/2, h/2 );
245 for (i=0; i < PTR_W*PTR_H; i++ ) {
246 switch (ui_mouse_pointer[i]) {
248 ui_converted_mouse_pointer[i]=255;
251 ui_converted_mouse_pointer[i]=CBLACK;
254 ui_converted_mouse_pointer[i]=CGREY;
257 ui_converted_mouse_pointer[i]=CWHITE;
260 ui_converted_mouse_pointer[i]=CBRIGHT;
263 ui_converted_mouse_pointer[i]=CRED;
268 default_pointer = gr_create_bitmap_raw( PTR_W, PTR_H, ui_converted_mouse_pointer );
269 Mouse.x = Mouse.y = 0;
272 Mouse.b1_status = Mouse.b1_last_status = BUTTON_RELEASED;
273 Mouse.b2_status = Mouse.b2_last_status = BUTTON_RELEASED;
274 Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
275 Mouse.bg_x = Mouse.bg_y = 0;
277 Mouse.pointer = default_pointer;
278 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
279 Mouse.time_lastpressed = 0;
284 grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
286 grs_bitmap * temp = Mouse.pointer;
288 gr_free_bitmap( Mouse.background );
291 Mouse.pointer = default_pointer;
295 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
301 void ui_mouse_close()
303 gr_free_sub_bitmap(default_pointer);
305 gr_free_bitmap(Mouse.background);