1 /* $Id: mouse.c,v 1.6 2005-01-25 21:31:45 schaffner Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 static char rcsid[] = "$Id: mouse.c,v 1.6 2005-01-25 21:31:45 schaffner Exp $";
39 char ui_converted_mouse_pointer[PTR_W*PTR_H];
40 char ui_mouse_pointer[] = \
78 static grs_bitmap * default_pointer;
85 int ui_mouse_find_gadget(short n)
89 for (i=1; i<=Window[n].NumItems; i++ ) {
90 if ((Mouse.x >= (Window[n].Item[i].x1+Window[n].x)) &&
91 (Mouse.x <= (Window[n].Item[i].x2+Window[n].x)) &&
92 (Mouse.y >= (Window[n].Item[i].y1+Window[n].y)) &&
93 (Mouse.y <= (Window[n].Item[i].y2+Window[n].y)) )
102 if (Mouse.hidden==1 ) {
104 // Save the background under new pointer
106 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
107 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 );
108 // Draw the new pointer
109 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) );
115 if (Mouse.hidden==0 ) {
117 if (Mouse.bg_saved==1) {
118 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) );
124 void ui_mouse_process()
127 //if (Mouse.hidden==0)
128 // mouse_get_pos( &Mouse.x, &Mouse.y );
130 // mouse_set_pos( Mouse.x, Mouse.y );
133 Mouse.dx = Mouse.new_dx;
134 Mouse.dy = Mouse.new_dy;
135 buttons = Mouse.new_buttons;
140 w = grd_curscreen->sc_w;
141 h = grd_curscreen->sc_h;
143 if (Mouse.x < 0 ) Mouse.x = 0;
144 if (Mouse.y < 0 ) Mouse.y = 0;
145 // if (Mouse.x > w-Mouse.pointer->bm_w ) Mouse.x = w - Mouse.pointer->bm_w;
146 // if (Mouse.y > h-Mouse.pointer->bm_h ) Mouse.y = h - Mouse.pointer->bm_h;
148 if (Mouse.x > w-3 ) Mouse.x = w - 3;
149 if (Mouse.y > h-3 ) Mouse.y = h - 3;
151 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) )
154 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
156 // Restore the background under old pointer
157 if (Mouse.bg_saved==1) {
158 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) );
164 // Save the background under new pointer
166 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
168 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 );
170 // Draw the new pointer
171 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) );
175 Mouse.b1_last_status = Mouse.b1_status;
176 Mouse.b2_last_status = Mouse.b2_status;
178 if ( Mouse.backwards== 0 )
180 if (buttons & MOUSE_LBTN )
181 Mouse.b1_status = BUTTON_PRESSED;
183 Mouse.b1_status = BUTTON_RELEASED;
184 if (buttons & MOUSE_RBTN )
185 Mouse.b2_status = BUTTON_PRESSED;
187 Mouse.b2_status = BUTTON_RELEASED;
189 if (buttons & MOUSE_LBTN )
190 Mouse.b2_status = BUTTON_PRESSED;
192 Mouse.b2_status = BUTTON_RELEASED;
193 if (buttons & MOUSE_RBTN )
194 Mouse.b1_status = BUTTON_PRESSED;
196 Mouse.b1_status = BUTTON_RELEASED;
199 if ((Mouse.b1_status & BUTTON_PRESSED) && (Mouse.b1_last_status & BUTTON_RELEASED) )
201 if ((timer_get_fixed_seconds() <= Mouse.time_lastpressed + F1_0/5)) //&& (Mouse.moved==0)
202 Mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
205 Mouse.time_lastpressed = timer_get_fixed_seconds();
206 Mouse.b1_status |= BUTTON_JUST_PRESSED;
209 else if ((Mouse.b1_status & BUTTON_RELEASED) && (Mouse.b1_last_status & BUTTON_PRESSED) )
210 Mouse.b1_status |= BUTTON_JUST_RELEASED;
212 if ((Mouse.b2_status & BUTTON_PRESSED) && (Mouse.b2_last_status & BUTTON_RELEASED) )
213 Mouse.b2_status |= BUTTON_JUST_PRESSED;
214 else if ((Mouse.b2_status & BUTTON_RELEASED) && (Mouse.b2_last_status & BUTTON_PRESSED) )
215 Mouse.b2_status |= BUTTON_JUST_RELEASED;
218 void ui_mouse_flip_buttons()
222 Mouse.b1_status = Mouse.b2_status;
225 x = Mouse.b1_last_status;
226 Mouse.b1_last_status = Mouse.b2_last_status;
227 Mouse.b2_last_status = x;
229 Mouse.backwards ^= 1;
240 w = grd_curscreen->sc_w;
241 h = grd_curscreen->sc_h;
243 //mouse_set_limits(0, 0, w - 1, h - 1);
248 //mouse_set_pos( w/2, h/2 );
250 for (i=0; i < PTR_W*PTR_H; i++ ) {
251 switch (ui_mouse_pointer[i]) {
253 ui_converted_mouse_pointer[i]=255;
256 ui_converted_mouse_pointer[i]=CBLACK;
259 ui_converted_mouse_pointer[i]=CGREY;
262 ui_converted_mouse_pointer[i]=CWHITE;
265 ui_converted_mouse_pointer[i]=CBRIGHT;
268 ui_converted_mouse_pointer[i]=CRED;
273 default_pointer = gr_create_bitmap_raw( PTR_W, PTR_H, ui_converted_mouse_pointer );
274 Mouse.x = Mouse.y = 0;
277 Mouse.b1_status = Mouse.b1_last_status = BUTTON_RELEASED;
278 Mouse.b2_status = Mouse.b2_last_status = BUTTON_RELEASED;
279 Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
280 Mouse.bg_x = Mouse.bg_y = 0;
282 Mouse.pointer = default_pointer;
283 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
284 Mouse.time_lastpressed = 0;
289 grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
291 grs_bitmap * temp = Mouse.pointer;
293 gr_free_bitmap( Mouse.background );
296 Mouse.pointer = default_pointer;
300 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
306 void ui_mouse_close()
308 gr_free_sub_bitmap(default_pointer);
310 gr_free_bitmap(Mouse.background);