Rev 431 | Rev 593 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
425 | victor | 1 | $Revision: 465 $ |
431 | serge | 2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
3 | ;; ;; |
||
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
||
5 | ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; |
||
6 | ;; Distributed under terms of the GNU General Public License ;; |
||
7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
8 | |||
1 | ha | 9 | max_buttons=4095 |
10 | dececx: |
||
11 | push edx |
||
12 | push ecx |
||
13 | |||
38 | halyavin | 14 | mov edx,2 |
15 | .loop: |
||
1 | ha | 16 | |
38 | halyavin | 17 | cmp byte [esp+edx],0x20 |
18 | jae @f |
||
1 | ha | 19 | mov [esp+edx],byte 0x20 |
20 | @@: |
||
21 | sub [esp+edx],byte 0x20 |
||
22 | |||
38 | halyavin | 23 | dec edx |
24 | jns .loop |
||
1 | ha | 25 | |
26 | pop ecx |
||
27 | pop edx |
||
28 | ret |
||
379 | serge | 29 | |
38 | halyavin | 30 | incecx: |
31 | push edx |
||
32 | push ecx |
||
379 | serge | 33 | |
38 | halyavin | 34 | mov edx,2 |
35 | .loop: |
||
379 | serge | 36 | |
38 | halyavin | 37 | cmp byte [esp+edx],0xdf |
38 | jbe @f |
||
39 | mov [esp+edx],byte 0xdf |
||
40 | @@: |
||
41 | add [esp+edx],byte 0x20 |
||
379 | serge | 42 | |
38 | halyavin | 43 | dec edx |
44 | jns .loop |
||
45 | pop ecx |
||
46 | pop edx |
||
47 | ret |
||
379 | serge | 48 | |
38 | halyavin | 49 | incecx2: |
50 | push edx |
||
51 | push ecx |
||
379 | serge | 52 | |
38 | halyavin | 53 | mov edx,2 |
54 | .loop: |
||
379 | serge | 55 | |
38 | halyavin | 56 | cmp byte [esp+edx],0xeb |
57 | jbe @f |
||
58 | mov [esp+edx],byte 0xeb |
||
59 | @@: |
||
60 | add [esp+edx],byte 0x14 |
||
379 | serge | 61 | |
38 | halyavin | 62 | dec edx |
63 | jns .loop |
||
64 | pop ecx |
||
65 | pop edx |
||
66 | ret |
||
1 | ha | 67 | |
68 | drawbuttonframes: |
||
69 | |||
415 | heavyiron | 70 | push esi |
71 | push edi |
||
72 | push eax |
||
73 | push ebx |
||
74 | push ecx |
||
75 | push edx |
||
1 | ha | 76 | |
415 | heavyiron | 77 | shr eax,16 |
78 | shr ebx,16 |
||
79 | mov edx,[TASK_BASE] |
||
1 | ha | 80 | |
115 | poddubny | 81 | add eax,[edx-twdw + WDATA.box.left] |
82 | add ebx,[edx-twdw + WDATA.box.top] |
||
415 | heavyiron | 83 | mov cx,ax |
84 | mov dx,bx |
||
85 | shl eax,16 |
||
86 | shl ebx,16 |
||
87 | mov ax,cx |
||
88 | mov bx,dx |
||
89 | add ax,word [esp+12] |
||
90 | mov esi,ebx |
||
91 | mov edi,0 |
||
92 | mov ecx,[esp+0] |
||
93 | call incecx |
||
94 | call [draw_line] |
||
1 | ha | 95 | |
415 | heavyiron | 96 | movzx edx,word [esp+8] |
97 | add ebx,edx |
||
98 | shl edx,16 |
||
99 | add ebx,edx |
||
100 | mov ecx,[esp+0] |
||
101 | call dececx |
||
102 | call [draw_line] |
||
1 | ha | 103 | |
415 | heavyiron | 104 | mov ebx,esi |
105 | push edx |
||
106 | mov edx,eax |
||
107 | shr edx,16 |
||
108 | mov ax,dx |
||
109 | mov edx,ebx |
||
110 | shr edx,16 |
||
111 | mov bx,dx |
||
112 | mov dx,[esp+8+4] |
||
113 | add bx,dx |
||
114 | pop edx |
||
115 | mov edi,0 |
||
116 | mov ecx,[esp+0] |
||
117 | call incecx |
||
118 | call [draw_line] |
||
1 | ha | 119 | |
415 | heavyiron | 120 | mov esi,edx |
121 | mov dx,[esp+12] |
||
122 | add ax,dx |
||
123 | shl edx,16 |
||
124 | add eax,edx |
||
125 | add ebx,1*65536 |
||
126 | mov edx,esi |
||
127 | mov ecx,[esp+0] |
||
128 | call dececx |
||
129 | call [draw_line] |
||
1 | ha | 130 | |
415 | heavyiron | 131 | pop edx |
132 | pop ecx |
||
133 | pop ebx |
||
134 | pop eax |
||
135 | pop edi |
||
136 | pop esi |
||
1 | ha | 137 | |
415 | heavyiron | 138 | ret |
1 | ha | 139 | |
140 | button_dececx: |
||
141 | |||
415 | heavyiron | 142 | cmp [buttontype],dword 1 |
143 | jne .finish |
||
1 | ha | 144 | ; je bdece |
145 | ; ret |
||
146 | ; bdece: |
||
415 | heavyiron | 147 | push eax |
148 | mov eax,0x01 |
||
149 | cmp edi,20 |
||
150 | jg @f |
||
151 | mov eax,0x02 |
||
1 | ha | 152 | @@: |
415 | heavyiron | 153 | test ecx,0xff |
154 | jz @f |
||
155 | sub ecx,eax |
||
1 | ha | 156 | @@: |
415 | heavyiron | 157 | shl eax,8 |
158 | test ecx,0xff00 |
||
159 | jz @f |
||
160 | sub ecx,eax |
||
1 | ha | 161 | @@: |
415 | heavyiron | 162 | shl eax,8 |
163 | test ecx,0xff0000 |
||
164 | jz @f |
||
165 | sub ecx,eax |
||
1 | ha | 166 | @@: |
415 | heavyiron | 167 | pop eax |
1 | ha | 168 | .finish: |
415 | heavyiron | 169 | ret |
1 | ha | 170 | |
171 | |||
172 | sys_button: |
||
173 | |||
415 | heavyiron | 174 | push edi |
465 | serge | 175 | mov edi,[current_slot] |
415 | heavyiron | 176 | rol eax,16 |
465 | serge | 177 | add ax,word[edi+APPDATA.wnd_clientbox.left] |
415 | heavyiron | 178 | rol eax,16 |
179 | rol ebx,16 |
||
465 | serge | 180 | add bx,word[edi+APPDATA.wnd_clientbox.top] |
415 | heavyiron | 181 | rol ebx,16 |
182 | pop edi |
||
465 | serge | 183 | .forced: |
114 | mikedld | 184 | |
415 | heavyiron | 185 | test ecx,0x80000000 |
186 | jnz remove_button |
||
1 | ha | 187 | |
415 | heavyiron | 188 | push esi |
189 | push edi |
||
190 | push eax ; |
||
191 | push ebx ; |
||
192 | push ecx ; |
||
193 | push edx |
||
1 | ha | 194 | |
415 | heavyiron | 195 | or ax,ax |
196 | jle noaddbutt |
||
197 | or bx,bx |
||
198 | jle noaddbutt |
||
54 | mikedld | 199 | |
415 | heavyiron | 200 | test ecx,0x40000000 |
201 | jnz button_no_draw |
||
1 | ha | 202 | |
415 | heavyiron | 203 | pushad ; button body |
204 | push ebx |
||
205 | shr eax,16 |
||
206 | shr ebx,16 |
||
207 | mov edx,[TASK_BASE] |
||
208 | mov esi,[edx-twdw + WDATA.box.left] |
||
209 | mov edi,[edx-twdw + WDATA.box.top] |
||
210 | add eax,esi |
||
211 | add ebx,edi |
||
212 | mov cx,ax |
||
213 | mov dx,bx |
||
214 | shl eax,16 |
||
215 | shl ebx,16 |
||
216 | mov ax,cx |
||
217 | mov bx,dx |
||
218 | movzx ecx,word [4+32+esp+12] |
||
219 | add eax,ecx |
||
220 | mov ecx,[4+32+esp+0] |
||
221 | cmp [buttontype],dword 0 |
||
222 | je @f |
||
223 | call incecx2 |
||
1 | ha | 224 | @@: |
415 | heavyiron | 225 | movzx edi,word [esp] |
1 | ha | 226 | |
415 | heavyiron | 227 | pop edx |
228 | and edx, 0xFFFF |
||
102 | poddubny | 229 | |
465 | serge | 230 | .newline: |
415 | heavyiron | 231 | call button_dececx |
232 | push edi |
||
233 | xor edi, edi |
||
234 | call [draw_line] |
||
235 | pop edi |
||
236 | add ebx,1*65536+1 ; [ y start | y end ] |
||
237 | dec edx |
||
238 | jnz .newline |
||
239 | popad |
||
1 | ha | 240 | |
415 | heavyiron | 241 | call drawbuttonframes |
1 | ha | 242 | |
465 | serge | 243 | button_no_draw: |
1 | ha | 244 | |
415 | heavyiron | 245 | and ecx,0xffff |
1 | ha | 246 | |
415 | heavyiron | 247 | mov edi,[BTN_ADDR] |
248 | movzx eax,word [edi] |
||
249 | cmp eax,max_buttons |
||
250 | jge noaddbutt |
||
251 | inc eax |
||
252 | mov [edi],ax |
||
1 | ha | 253 | |
415 | heavyiron | 254 | shl eax,4 |
255 | add eax,edi |
||
1 | ha | 256 | |
415 | heavyiron | 257 | mov bx,[CURRENT_TASK] |
258 | mov [eax],bx |
||
1 | ha | 259 | |
415 | heavyiron | 260 | add eax,2 ; save button id number |
261 | mov ebx,[esp+4] |
||
262 | mov [eax],bx ; bits 0-15 |
||
263 | shr ebx,16 |
||
264 | mov [eax-2+0xc],bx; bits 16-31 |
||
265 | add eax,2 ; x start |
||
266 | mov bx,[esp+12+2] |
||
267 | mov [eax],bx |
||
268 | add eax,2 ; x size |
||
269 | mov bx,[esp+12+0] |
||
270 | mov [eax],bx |
||
271 | add eax,2 ; y start |
||
272 | mov bx,[esp+8+2] |
||
273 | mov [eax],bx |
||
274 | add eax,2 ; y size |
||
275 | mov bx,[esp+8+0] |
||
276 | mov [eax],bx |
||
1 | ha | 277 | |
465 | serge | 278 | noaddbutt: |
1 | ha | 279 | |
415 | heavyiron | 280 | pop edx |
281 | pop ecx |
||
282 | pop ebx |
||
283 | pop eax |
||
284 | pop edi |
||
285 | pop esi |
||
1 | ha | 286 | |
415 | heavyiron | 287 | ret |
1 | ha | 288 | |
289 | |||
290 | remove_button: |
||
291 | |||
292 | and ecx,0x7fffffff |
||
293 | |||
465 | serge | 294 | rnewba2: |
1 | ha | 295 | |
381 | serge | 296 | mov edi,[BTN_ADDR] |
1 | ha | 297 | mov eax,edi |
298 | movzx ebx,word [edi] |
||
299 | inc bx |
||
300 | |||
465 | serge | 301 | rnewba: |
1 | ha | 302 | |
303 | dec bx |
||
415 | heavyiron | 304 | jz rnmba |
1 | ha | 305 | |
306 | add eax,0x10 |
||
307 | |||
379 | serge | 308 | mov dx,[CURRENT_TASK] |
1 | ha | 309 | cmp dx,[eax] |
310 | jnz rnewba |
||
311 | |||
312 | cmp cx,[eax+2] |
||
313 | jnz rnewba |
||
314 | |||
315 | pushad |
||
316 | mov ecx,ebx |
||
317 | inc ecx |
||
318 | shl ecx,4 |
||
319 | mov ebx,eax |
||
320 | add eax,0x10 |
||
321 | call memmove |
||
322 | dec dword [edi] |
||
323 | popad |
||
324 | |||
325 | jmp rnewba2 |
||
326 | |||
465 | serge | 327 | rnmba: |
1 | ha | 328 | |
329 | ret |
||
330 | |||
331 | find_pressed_button_frames: |
||
332 | |||
415 | heavyiron | 333 | pushad |
1 | ha | 334 | |
415 | heavyiron | 335 | movzx ebx,word [eax+0] |
336 | shl ebx,5 |
||
337 | add ebx,window_data |
||
465 | serge | 338 | mov ecx, [ebx+ WDATA.box.left] ; window x start |
415 | heavyiron | 339 | movzx edx,word [eax+4] ; button x start |
340 | add ecx,edx |
||
341 | push ecx |
||
1 | ha | 342 | |
465 | serge | 343 | mov dx,[eax+6] ; button x size |
415 | heavyiron | 344 | add cx,dx |
345 | mov esi,ecx |
||
346 | inc esi |
||
465 | serge | 347 | mov ecx, [ebx+WDATA.box.top] ; window y start |
348 | mov dx,[eax+8] ; button y start |
||
415 | heavyiron | 349 | add ecx,edx |
350 | mov ebx,ecx |
||
351 | mov dx,[eax+10] ; button y size |
||
352 | add dx,cx |
||
353 | inc dx |
||
1 | ha | 354 | |
415 | heavyiron | 355 | pop eax |
1 | ha | 356 | |
415 | heavyiron | 357 | ; eax x beginning |
358 | ; ebx y beginning |
||
359 | ; esi x end |
||
360 | ; edx y end |
||
361 | ; ecx color |
||
1 | ha | 362 | |
415 | heavyiron | 363 | mov [pressed_button_eax],eax |
364 | mov [pressed_button_ebx],ebx |
||
365 | mov [pressed_button_ecx],ecx |
||
366 | mov [pressed_button_edx],edx |
||
367 | mov [pressed_button_esi],esi |
||
1 | ha | 368 | |
415 | heavyiron | 369 | popad |
370 | ret |
||
1 | ha | 371 | |
372 | uglobal |
||
373 | pressed_button_eax dd 0 |
||
374 | pressed_button_ebx dd 0 |
||
375 | pressed_button_ecx dd 0 |
||
376 | pressed_button_edx dd 0 |
||
377 | pressed_button_esi dd 0 |
||
378 | endg |
||
379 | |||
380 | ; negative button image |
||
381 | |||
382 | negativebutton: |
||
415 | heavyiron | 383 | ; If requested, do not display button |
384 | ; boarder on press. |
||
385 | test ebx,0x20000000 |
||
386 | jz draw_negative_button |
||
387 | ret |
||
1 | ha | 388 | draw_negative_button: |
389 | |||
415 | heavyiron | 390 | pushad |
1 | ha | 391 | |
415 | heavyiron | 392 | mov eax,[pressed_button_eax] |
393 | mov ebx,[pressed_button_ebx] |
||
394 | mov ecx,[pressed_button_ecx] |
||
395 | mov edx,[pressed_button_edx] |
||
396 | mov esi,[pressed_button_esi] |
||
397 | mov ecx,0x01000000 |
||
1 | ha | 398 | |
415 | heavyiron | 399 | dec edx |
400 | push edx |
||
401 | inc edx |
||
402 | dec esi |
||
403 | push esi |
||
404 | inc esi |
||
1 | ha | 405 | |
415 | heavyiron | 406 | push eax |
407 | push ebx |
||
408 | push ecx |
||
409 | push edx |
||
410 | push edi |
||
1 | ha | 411 | |
415 | heavyiron | 412 | call [disable_mouse] |
1 | ha | 413 | |
414 | bdbnewline: |
||
415 | heavyiron | 415 | mov edi,1 ; force |
416 | cmp eax,[esp+16] |
||
417 | jz bneg |
||
418 | cmp eax,[esp+20] |
||
419 | jz bneg |
||
420 | cmp ebx,[esp+12] |
||
421 | jz bneg |
||
422 | cmp ebx,[esp+24] |
||
423 | jnz nbneg |
||
1 | ha | 424 | ; jz bneg |
425 | ; jmp nbneg |
||
426 | |||
427 | bneg: |
||
428 | |||
415 | heavyiron | 429 | ;;;call [disable_mouse] |
430 | call [putpixel] |
||
1 | ha | 431 | |
432 | nbneg: |
||
433 | |||
415 | heavyiron | 434 | inc eax |
435 | cmp eax,esi |
||
436 | jnz bdbnewline |
||
437 | mov eax,[esp+16] |
||
438 | inc ebx |
||
439 | cmp ebx,edx |
||
440 | jnz bdbnewline |
||
1 | ha | 441 | |
415 | heavyiron | 442 | add esp,28 |
1 | ha | 443 | |
415 | heavyiron | 444 | popad |
1 | ha | 445 | |
415 | heavyiron | 446 | ret |
1 | ha | 447 | |
448 | ; check buttons |
||
449 | |||
450 | |||
451 | ; 0000 word process number |
||
452 | ; 0002 word button id number : bits 0-15 |
||
453 | ; 0004 word x start |
||
454 | ; 0006 word x size |
||
455 | ; 0008 word y start |
||
456 | ; 000A word y size |
||
457 | ; 000C word button id number : bits 16-31 |
||
458 | ; |
||
459 | ; button table in 0x10 increments |
||
460 | ; |
||
461 | ; first at 0x10 |
||
462 | |||
463 | |||
464 | checkbuttons: |
||
465 | |||
381 | serge | 466 | cmp [BTN_DOWN],byte 0 ; mouse buttons pressed |
1 | ha | 467 | jnz @f |
415 | heavyiron | 468 | ;..................................... start 1/5 : modified by vhanla ............................. |
469 | mov [bPressedMouseXY_B],0 |
||
470 | ;..................................... end 1/5 : modified by vhanla ............................. |
||
1 | ha | 471 | ret |
472 | @@: |
||
473 | pushad |
||
474 | |||
475 | xor esi, esi |
||
381 | serge | 476 | mov edi, [BTN_ADDR] |
1 | ha | 477 | movzx edx, word [edi] |
478 | test edx, edx |
||
479 | jne @f |
||
480 | popad |
||
481 | ret |
||
482 | |||
483 | @@: |
||
415 | heavyiron | 484 | ;..................................... start 2/5 : modified by vhanla ............................. |
485 | ;here i catch the coordinates when the mouse's button is clicked |
||
486 | push ax |
||
487 | cmp [bPressedMouseXY_B],0;FALSE |
||
488 | jnz @f |
||
489 | mov [bPressedMouseXY_B],1;TRUE - it was already clicked |
||
490 | mov ax,[MOUSE_X] |
||
491 | mov [mx],ax |
||
492 | mov ax,[MOUSE_Y] |
||
493 | mov [my],ax |
||
494 | @@: |
||
495 | pop ax |
||
496 | ;and it is only refreshed after the mouse's button release |
||
497 | ;..................................... end 2/5 : modified by vhanla ............................. |
||
1 | ha | 498 | |
499 | push esi |
||
500 | inc edx |
||
501 | push edx |
||
502 | |||
503 | buttonnewcheck: |
||
504 | |||
505 | pop edx |
||
506 | pop esi |
||
507 | inc esi |
||
508 | cmp edx,esi |
||
509 | jge bch |
||
510 | |||
415 | heavyiron | 511 | popad ; no button pressed |
1 | ha | 512 | ret |
513 | |||
514 | bch: |
||
515 | |||
516 | push esi |
||
517 | push edx |
||
518 | mov eax,esi |
||
519 | shl eax,4 |
||
520 | add eax,edi |
||
521 | |||
522 | ; check that button is at top of windowing stack |
||
523 | |||
524 | movzx ebx,word [eax] |
||
380 | serge | 525 | movzx ecx,word [WIN_STACK + ebx * 2] |
379 | serge | 526 | cmp ecx,[TASK_COUNT] |
1 | ha | 527 | jne buttonnewcheck |
528 | |||
529 | ; check that button start is inside window x/y end |
||
530 | |||
531 | movzx ebx,word [eax+0] |
||
532 | shl ebx,5 |
||
41 | mikedld | 533 | |
415 | heavyiron | 534 | test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED |
535 | jnz buttonnewcheck |
||
41 | mikedld | 536 | |
1 | ha | 537 | ; add ebx,window_data |
538 | ; mov ecx,[window_data+ebx+8] ; window end X |
||
539 | movzx edx,word [eax+4] ; button start X |
||
115 | poddubny | 540 | cmp edx, [window_data+ebx+WDATA.box.width] ;ecx |
1 | ha | 541 | jge buttonnewcheck |
542 | |||
543 | ; mov ecx,[window_data+ebx+12] ; window end Y |
||
544 | movzx edx, word [eax+8] ; button start Y |
||
115 | poddubny | 545 | cmp edx, [window_data+ebx+WDATA.box.height] ;ecx |
1 | ha | 546 | jge buttonnewcheck |
547 | |||
548 | ; check coordinates |
||
415 | heavyiron | 549 | ; mouse x >= button x ? |
1 | ha | 550 | movzx ebx,word [eax+0] |
551 | shl ebx,5 |
||
552 | add ebx,window_data |
||
115 | poddubny | 553 | mov ecx, [ebx+WDATA.box.left] ; window x start |
1 | ha | 554 | movzx edx,word [eax+4] ; button x start |
555 | add edx,ecx |
||
415 | heavyiron | 556 | ;..................................... start 3/5 : modified by vhanla ............................. |
557 | mov cx,[mx] ;mov cx,[MOUSE_X] |
||
558 | ;..................................... end 3/5 : modified by vhanla ............................. |
||
1 | ha | 559 | cmp edx,ecx |
415 | heavyiron | 560 | jg buttonnewcheck |
1 | ha | 561 | |
562 | movzx ebx,word [eax+6] ; button x size |
||
563 | add edx,ebx |
||
564 | cmp ecx,edx |
||
415 | heavyiron | 565 | jg buttonnewcheck |
1 | ha | 566 | |
415 | heavyiron | 567 | ; mouse y >= button y ? |
1 | ha | 568 | movzx ebx,word [eax+0] |
569 | shl ebx,5 |
||
570 | add ebx,window_data |
||
415 | heavyiron | 571 | mov ecx, [ebx+WDATA.box.top] ; window y start |
1 | ha | 572 | movzx edx,word [eax+8] ; button y start |
573 | add edx,ecx |
||
415 | heavyiron | 574 | ;..................................... start 4/5 : modified by vhanla ............................. |
575 | mov cx,[my] ;mov cx,[MOUSE_Y] |
||
576 | ;..................................... start 4/5 : modified by vhanla ............................. |
||
1 | ha | 577 | cmp edx,ecx |
415 | heavyiron | 578 | jg buttonnewcheck |
1 | ha | 579 | |
580 | movzx ebx,word [eax+10] ; button y size |
||
581 | add edx,ebx |
||
582 | cmp ecx,edx |
||
415 | heavyiron | 583 | jg buttonnewcheck |
1 | ha | 584 | |
585 | ; mouse on button |
||
586 | |||
587 | pop edx |
||
588 | pop esi |
||
589 | |||
415 | heavyiron | 590 | mov bx,[eax+0xc] ; button id : bits 16-31 |
1 | ha | 591 | shl ebx,16 |
415 | heavyiron | 592 | mov bx,[eax+2] ; button id : bits 00-16 |
1 | ha | 593 | push ebx |
594 | |||
381 | serge | 595 | mov [MOUSE_DOWN],byte 1 ; no mouse down checks |
1 | ha | 596 | call find_pressed_button_frames |
597 | call negativebutton |
||
598 | |||
599 | pushad |
||
600 | cbwaitmouseup: |
||
601 | |||
602 | call checkidle |
||
603 | |||
604 | call [draw_pointer] |
||
605 | |||
606 | pushad |
||
607 | call stack_handler |
||
608 | popad |
||
609 | |||
381 | serge | 610 | cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ? |
1 | ha | 611 | jnz cbwaitmouseup |
612 | popad |
||
613 | |||
614 | call negativebutton |
||
381 | serge | 615 | mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
616 | mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
||
415 | heavyiron | 617 | ;..................................... start 5/5 : modified by vhanla ............................. |
28 | mario79 | 618 | ; check coordinates |
415 | heavyiron | 619 | jmp @f |
620 | mx dw 0x0 ; keeps the x mouse's position when it was clicked |
||
621 | my dw 0x0 ; keeps the y mouse's position when it was clicked |
||
622 | bPressedMouseXY_B db 0x0 |
||
623 | @@: |
||
28 | mario79 | 624 | |
33 | mario79 | 625 | pusha |
626 | ; mouse x >= button x ? |
||
627 | movzx ebx,word [eax+0] |
||
415 | heavyiron | 628 | shl ebx,5 |
629 | add ebx,window_data |
||
630 | mov ecx, [ebx+WDATA.box.left] ; window x start |
||
33 | mario79 | 631 | movzx edx,word [eax+4] ; button x start |
415 | heavyiron | 632 | add edx,ecx |
633 | mov cx,[MOUSE_X] |
||
634 | cmp edx,ecx |
||
635 | jg no_on_button ;if we release the pointer out of the button area |
||
28 | mario79 | 636 | |
33 | mario79 | 637 | movzx ebx,word [eax+6] ; button x size |
415 | heavyiron | 638 | add edx,ebx |
639 | cmp ecx,edx |
||
640 | jg no_on_button |
||
28 | mario79 | 641 | |
415 | heavyiron | 642 | ; mouse y >= button y ? |
33 | mario79 | 643 | movzx ebx,word [eax+0] |
415 | heavyiron | 644 | shl ebx,5 |
645 | add ebx,window_data |
||
646 | mov ecx, [ebx+WDATA.box.top] ; window y start |
||
33 | mario79 | 647 | movzx edx,word [eax+8] ; button y start |
415 | heavyiron | 648 | add edx,ecx |
649 | mov cx,[MOUSE_Y] |
||
650 | cmp edx,ecx |
||
651 | jg no_on_button |
||
28 | mario79 | 652 | |
33 | mario79 | 653 | movzx ebx,word [eax+10] ; button y size |
415 | heavyiron | 654 | add edx,ebx |
655 | cmp ecx,edx |
||
656 | jg no_on_button |
||
33 | mario79 | 657 | popa |
415 | heavyiron | 658 | mov [BTN_COUNT],byte 1 ; no of buttons in buffer |
659 | pop ebx |
||
660 | mov [BTN_BUFF],ebx ; lets put the button id in buffer |
||
33 | mario79 | 661 | push ebx |
662 | pusha |
||
663 | jmp yes_on_button |
||
28 | mario79 | 664 | no_on_button: |
415 | heavyiron | 665 | mov [BTN_COUNT],byte 0 ; no of buttons in buffer |
28 | mario79 | 666 | yes_on_button: |
415 | heavyiron | 667 | mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw |
33 | mario79 | 668 | popa |
669 | pop ebx |
||
670 | popa |
||
671 | ret |
||
672 | |||
415 | heavyiron | 673 | ;..................................... end 5/5 : modified by vhanla ................................ |