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.
34 unsigned char ui_converted_mouse_pointer[PTR_W*PTR_H];
36 char ui_mouse_pointer[] = \
55 char ui_mouse_pointer[] = \
77 static grs_bitmap * default_pointer;
84 int ui_mouse_find_gadget(short n)
88 for (i=1; i<=Window[n].NumItems; i++ ) {
89 if ((Mouse.x >= (Window[n].Item[i].x1+Window[n].x)) &&
90 (Mouse.x <= (Window[n].Item[i].x2+Window[n].x)) &&
91 (Mouse.y >= (Window[n].Item[i].y1+Window[n].y)) &&
92 (Mouse.y <= (Window[n].Item[i].y2+Window[n].y)) )
101 if (Mouse.hidden==1 ) {
103 // Save the background under new pointer
105 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
106 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 );
107 // Draw the new pointer
108 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) );
114 if (Mouse.hidden==0 ) {
116 if (Mouse.bg_saved==1) {
117 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) );
123 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;
137 mouse_get_pos(&x, &y);
141 //Mouse.x += Mouse.dx;
142 //Mouse.y += Mouse.dy;
144 w = grd_curscreen->sc_w;
145 h = grd_curscreen->sc_h;
147 if (Mouse.x < 0 ) Mouse.x = 0;
148 if (Mouse.y < 0 ) Mouse.y = 0;
149 // if (Mouse.x > w-Mouse.pointer->bm_w ) Mouse.x = w - Mouse.pointer->bm_w;
150 // if (Mouse.y > h-Mouse.pointer->bm_h ) Mouse.y = h - Mouse.pointer->bm_h;
152 if (Mouse.x > w-3 ) Mouse.x = w - 3;
153 if (Mouse.y > h-3 ) Mouse.y = h - 3;
155 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) )
158 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
160 // Restore the background under old pointer
161 if (Mouse.bg_saved==1) {
162 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) );
168 // Save the background under new pointer
170 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
172 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 );
174 // Draw the new pointer
175 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) );
179 Mouse.b1_last_status = Mouse.b1_status;
180 Mouse.b2_last_status = Mouse.b2_status;
182 if ( Mouse.backwards== 0 )
184 if (buttons & MOUSE_LBTN )
185 Mouse.b1_status = BUTTON_PRESSED;
187 Mouse.b1_status = BUTTON_RELEASED;
188 if (buttons & MOUSE_RBTN )
189 Mouse.b2_status = BUTTON_PRESSED;
191 Mouse.b2_status = BUTTON_RELEASED;
193 if (buttons & MOUSE_LBTN )
194 Mouse.b2_status = BUTTON_PRESSED;
196 Mouse.b2_status = BUTTON_RELEASED;
197 if (buttons & MOUSE_RBTN )
198 Mouse.b1_status = BUTTON_PRESSED;
200 Mouse.b1_status = BUTTON_RELEASED;
203 if ((Mouse.b1_status & BUTTON_PRESSED) && (Mouse.b1_last_status & BUTTON_RELEASED) )
205 if ((timer_get_fixed_seconds() <= Mouse.time_lastpressed + F1_0/5)) //&& (Mouse.moved==0)
206 Mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
209 Mouse.time_lastpressed = timer_get_fixed_seconds();
210 Mouse.b1_status |= BUTTON_JUST_PRESSED;
213 else if ((Mouse.b1_status & BUTTON_RELEASED) && (Mouse.b1_last_status & BUTTON_PRESSED) )
214 Mouse.b1_status |= BUTTON_JUST_RELEASED;
216 if ((Mouse.b2_status & BUTTON_PRESSED) && (Mouse.b2_last_status & BUTTON_RELEASED) )
217 Mouse.b2_status |= BUTTON_JUST_PRESSED;
218 else if ((Mouse.b2_status & BUTTON_RELEASED) && (Mouse.b2_last_status & BUTTON_PRESSED) )
219 Mouse.b2_status |= BUTTON_JUST_RELEASED;
222 void ui_mouse_flip_buttons()
226 Mouse.b1_status = Mouse.b2_status;
229 x = Mouse.b1_last_status;
230 Mouse.b1_last_status = Mouse.b2_last_status;
231 Mouse.b2_last_status = x;
233 Mouse.backwards ^= 1;
244 w = grd_curscreen->sc_w;
245 h = grd_curscreen->sc_h;
247 //mouse_set_limits(0, 0, w - 1, h - 1);
252 //mouse_set_pos( w/2, h/2 );
254 for (i=0; i < PTR_W*PTR_H; i++ ) {
255 switch (ui_mouse_pointer[i]) {
257 ui_converted_mouse_pointer[i]=255;
260 ui_converted_mouse_pointer[i]=CBLACK;
263 ui_converted_mouse_pointer[i]=CGREY;
266 ui_converted_mouse_pointer[i]=CWHITE;
269 ui_converted_mouse_pointer[i]=CBRIGHT;
272 ui_converted_mouse_pointer[i]=CRED;
277 default_pointer = gr_create_bitmap_raw( PTR_W, PTR_H, ui_converted_mouse_pointer );
278 Mouse.x = Mouse.y = 0;
281 Mouse.b1_status = Mouse.b1_last_status = BUTTON_RELEASED;
282 Mouse.b2_status = Mouse.b2_last_status = BUTTON_RELEASED;
283 Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
284 Mouse.bg_x = Mouse.bg_y = 0;
286 Mouse.pointer = default_pointer;
287 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
288 Mouse.time_lastpressed = 0;
293 grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
295 grs_bitmap * temp = Mouse.pointer;
297 gr_free_bitmap( Mouse.background );
300 Mouse.pointer = default_pointer;
304 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
310 void ui_mouse_close()
312 gr_free_sub_bitmap(default_pointer);
314 gr_free_bitmap(Mouse.background);