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()
126 //if (Mouse.hidden==0)
127 // mouse_get_pos( &Mouse.x, &Mouse.y );
129 // mouse_set_pos( Mouse.x, Mouse.y );
132 Mouse.dx = Mouse.new_dx;
133 Mouse.dy = Mouse.new_dy;
134 buttons = Mouse.new_buttons;
139 w = grd_curscreen->sc_w;
140 h = grd_curscreen->sc_h;
142 if (Mouse.x < 0 ) Mouse.x = 0;
143 if (Mouse.y < 0 ) Mouse.y = 0;
144 // if (Mouse.x > w-Mouse.pointer->bm_w ) Mouse.x = w - Mouse.pointer->bm_w;
145 // if (Mouse.y > h-Mouse.pointer->bm_h ) Mouse.y = h - Mouse.pointer->bm_h;
147 if (Mouse.x > w-3 ) Mouse.x = w - 3;
148 if (Mouse.y > h-3 ) Mouse.y = h - 3;
150 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) )
153 if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
155 // Restore the background under old pointer
156 if (Mouse.bg_saved==1) {
157 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) );
163 // Save the background under new pointer
165 Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
167 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 );
169 // Draw the new pointer
170 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) );
174 Mouse.b1_last_status = Mouse.b1_status;
175 Mouse.b2_last_status = Mouse.b2_status;
177 if ( Mouse.backwards== 0 )
179 if (buttons & MOUSE_LBTN )
180 Mouse.b1_status = BUTTON_PRESSED;
182 Mouse.b1_status = BUTTON_RELEASED;
183 if (buttons & MOUSE_RBTN )
184 Mouse.b2_status = BUTTON_PRESSED;
186 Mouse.b2_status = BUTTON_RELEASED;
188 if (buttons & MOUSE_LBTN )
189 Mouse.b2_status = BUTTON_PRESSED;
191 Mouse.b2_status = BUTTON_RELEASED;
192 if (buttons & MOUSE_RBTN )
193 Mouse.b1_status = BUTTON_PRESSED;
195 Mouse.b1_status = BUTTON_RELEASED;
198 if ((Mouse.b1_status & BUTTON_PRESSED) && (Mouse.b1_last_status & BUTTON_RELEASED) )
200 if ((timer_get_fixed_seconds() <= Mouse.time_lastpressed + F1_0/5)) //&& (Mouse.moved==0)
201 Mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
204 Mouse.time_lastpressed = timer_get_fixed_seconds();
205 Mouse.b1_status |= BUTTON_JUST_PRESSED;
208 else if ((Mouse.b1_status & BUTTON_RELEASED) && (Mouse.b1_last_status & BUTTON_PRESSED) )
209 Mouse.b1_status |= BUTTON_JUST_RELEASED;
211 if ((Mouse.b2_status & BUTTON_PRESSED) && (Mouse.b2_last_status & BUTTON_RELEASED) )
212 Mouse.b2_status |= BUTTON_JUST_PRESSED;
213 else if ((Mouse.b2_status & BUTTON_RELEASED) && (Mouse.b2_last_status & BUTTON_PRESSED) )
214 Mouse.b2_status |= BUTTON_JUST_RELEASED;
217 void ui_mouse_flip_buttons()
221 Mouse.b1_status = Mouse.b2_status;
224 x = Mouse.b1_last_status;
225 Mouse.b1_last_status = Mouse.b2_last_status;
226 Mouse.b2_last_status = x;
228 Mouse.backwards ^= 1;
239 w = grd_curscreen->sc_w;
240 h = grd_curscreen->sc_h;
242 //mouse_set_limits(0, 0, w - 1, h - 1);
247 //mouse_set_pos( w/2, h/2 );
249 for (i=0; i < PTR_W*PTR_H; i++ ) {
250 switch (ui_mouse_pointer[i]) {
252 ui_converted_mouse_pointer[i]=255;
255 ui_converted_mouse_pointer[i]=CBLACK;
258 ui_converted_mouse_pointer[i]=CGREY;
261 ui_converted_mouse_pointer[i]=CWHITE;
264 ui_converted_mouse_pointer[i]=CBRIGHT;
267 ui_converted_mouse_pointer[i]=CRED;
272 default_pointer = gr_create_bitmap_raw( PTR_W, PTR_H, ui_converted_mouse_pointer );
273 Mouse.x = Mouse.y = 0;
276 Mouse.b1_status = Mouse.b1_last_status = BUTTON_RELEASED;
277 Mouse.b2_status = Mouse.b2_last_status = BUTTON_RELEASED;
278 Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
279 Mouse.bg_x = Mouse.bg_y = 0;
281 Mouse.pointer = default_pointer;
282 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
283 Mouse.time_lastpressed = 0;
288 grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
290 grs_bitmap * temp = Mouse.pointer;
292 gr_free_bitmap( Mouse.background );
295 Mouse.pointer = default_pointer;
299 Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
305 void ui_mouse_close()
307 gr_free_sub_bitmap(default_pointer);
309 gr_free_bitmap(Mouse.background);