Rev 425 | Rev 465 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
425 | victor | 1 | $Revision: 431 $ |
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 |
175 | mov edi,[CURRENT_TASK] |
||
176 | shl edi,8 |
||
177 | rol eax,16 |
||
178 | add ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left] |
||
179 | rol eax,16 |
||
180 | rol ebx,16 |
||
181 | add bx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top] |
||
182 | rol ebx,16 |
||
183 | pop edi |
||
114 | mikedld | 184 | .forced: |
185 | |||
415 | heavyiron | 186 | test ecx,0x80000000 |
187 | jnz remove_button |
||
1 | ha | 188 | |
415 | heavyiron | 189 | push esi |
190 | push edi |
||
191 | push eax ; |
||
192 | push ebx ; |
||
193 | push ecx ; |
||
194 | push edx |
||
1 | ha | 195 | |
415 | heavyiron | 196 | or ax,ax |
197 | jle noaddbutt |
||
198 | or bx,bx |
||
199 | jle noaddbutt |
||
54 | mikedld | 200 | |
415 | heavyiron | 201 | test ecx,0x40000000 |
202 | jnz button_no_draw |
||
1 | ha | 203 | |
415 | heavyiron | 204 | pushad ; button body |
205 | push ebx |
||
206 | shr eax,16 |
||
207 | shr ebx,16 |
||
208 | mov edx,[TASK_BASE] |
||
209 | mov esi,[edx-twdw + WDATA.box.left] |
||
210 | mov edi,[edx-twdw + WDATA.box.top] |
||
211 | add eax,esi |
||
212 | add ebx,edi |
||
213 | mov cx,ax |
||
214 | mov dx,bx |
||
215 | shl eax,16 |
||
216 | shl ebx,16 |
||
217 | mov ax,cx |
||
218 | mov bx,dx |
||
219 | movzx ecx,word [4+32+esp+12] |
||
220 | add eax,ecx |
||
221 | mov ecx,[4+32+esp+0] |
||
222 | cmp [buttontype],dword 0 |
||
223 | je @f |
||
224 | call incecx2 |
||
1 | ha | 225 | @@: |
415 | heavyiron | 226 | movzx edi,word [esp] |
1 | ha | 227 | |
415 | heavyiron | 228 | pop edx |
229 | and edx, 0xFFFF |
||
102 | poddubny | 230 | |
1 | ha | 231 | .newline: |
415 | heavyiron | 232 | call button_dececx |
233 | push edi |
||
234 | xor edi, edi |
||
235 | call [draw_line] |
||
236 | pop edi |
||
237 | add ebx,1*65536+1 ; [ y start | y end ] |
||
238 | dec edx |
||
239 | jnz .newline |
||
240 | popad |
||
1 | ha | 241 | |
415 | heavyiron | 242 | call drawbuttonframes |
1 | ha | 243 | |
244 | button_no_draw: |
||
245 | |||
415 | heavyiron | 246 | and ecx,0xffff |
1 | ha | 247 | |
415 | heavyiron | 248 | mov edi,[BTN_ADDR] |
249 | movzx eax,word [edi] |
||
250 | cmp eax,max_buttons |
||
251 | jge noaddbutt |
||
252 | inc eax |
||
253 | mov [edi],ax |
||
1 | ha | 254 | |
415 | heavyiron | 255 | shl eax,4 |
256 | add eax,edi |
||
1 | ha | 257 | |
415 | heavyiron | 258 | mov bx,[CURRENT_TASK] |
259 | mov [eax],bx |
||
1 | ha | 260 | |
415 | heavyiron | 261 | add eax,2 ; save button id number |
262 | mov ebx,[esp+4] |
||
263 | mov [eax],bx ; bits 0-15 |
||
264 | shr ebx,16 |
||
265 | mov [eax-2+0xc],bx; bits 16-31 |
||
266 | add eax,2 ; x start |
||
267 | mov bx,[esp+12+2] |
||
268 | mov [eax],bx |
||
269 | add eax,2 ; x size |
||
270 | mov bx,[esp+12+0] |
||
271 | mov [eax],bx |
||
272 | add eax,2 ; y start |
||
273 | mov bx,[esp+8+2] |
||
274 | mov [eax],bx |
||
275 | add eax,2 ; y size |
||
276 | mov bx,[esp+8+0] |
||
277 | mov [eax],bx |
||
1 | ha | 278 | |
279 | noaddbutt: |
||
280 | |||
415 | heavyiron | 281 | pop edx |
282 | pop ecx |
||
283 | pop ebx |
||
284 | pop eax |
||
285 | pop edi |
||
286 | pop esi |
||
1 | ha | 287 | |
415 | heavyiron | 288 | ret |
1 | ha | 289 | |
290 | |||
291 | remove_button: |
||
292 | |||
293 | and ecx,0x7fffffff |
||
294 | |||
295 | rnewba2: |
||
296 | |||
381 | serge | 297 | mov edi,[BTN_ADDR] |
1 | ha | 298 | mov eax,edi |
299 | movzx ebx,word [edi] |
||
300 | inc bx |
||
301 | |||
302 | rnewba: |
||
303 | |||
304 | dec bx |
||
415 | heavyiron | 305 | jz rnmba |
1 | ha | 306 | |
307 | add eax,0x10 |
||
308 | |||
379 | serge | 309 | mov dx,[CURRENT_TASK] |
1 | ha | 310 | cmp dx,[eax] |
311 | jnz rnewba |
||
312 | |||
313 | cmp cx,[eax+2] |
||
314 | jnz rnewba |
||
315 | |||
316 | pushad |
||
317 | mov ecx,ebx |
||
318 | inc ecx |
||
319 | shl ecx,4 |
||
320 | mov ebx,eax |
||
321 | add eax,0x10 |
||
322 | call memmove |
||
323 | dec dword [edi] |
||
324 | popad |
||
325 | |||
326 | jmp rnewba2 |
||
327 | |||
328 | rnmba: |
||
329 | |||
330 | ret |
||
331 | |||
332 | find_pressed_button_frames: |
||
333 | |||
415 | heavyiron | 334 | pushad |
1 | ha | 335 | |
415 | heavyiron | 336 | movzx ebx,word [eax+0] |
337 | shl ebx,5 |
||
338 | add ebx,window_data |
||
115 | poddubny | 339 | mov ecx, [ebx+ WDATA.box.left] ; window x start |
415 | heavyiron | 340 | movzx edx,word [eax+4] ; button x start |
341 | add ecx,edx |
||
342 | push ecx |
||
1 | ha | 343 | |
415 | heavyiron | 344 | mov dx,[eax+6] ; button x size |
345 | add cx,dx |
||
346 | mov esi,ecx |
||
347 | inc esi |
||
348 | mov ecx, [ebx+WDATA.box.top] ; window y start |
||
349 | mov dx,[eax+8] ; button y start |
||
350 | add ecx,edx |
||
351 | mov ebx,ecx |
||
352 | mov dx,[eax+10] ; button y size |
||
353 | add dx,cx |
||
354 | inc dx |
||
1 | ha | 355 | |
415 | heavyiron | 356 | pop eax |
1 | ha | 357 | |
415 | heavyiron | 358 | ; eax x beginning |
359 | ; ebx y beginning |
||
360 | ; esi x end |
||
361 | ; edx y end |
||
362 | ; ecx color |
||
1 | ha | 363 | |
415 | heavyiron | 364 | mov [pressed_button_eax],eax |
365 | mov [pressed_button_ebx],ebx |
||
366 | mov [pressed_button_ecx],ecx |
||
367 | mov [pressed_button_edx],edx |
||
368 | mov [pressed_button_esi],esi |
||
1 | ha | 369 | |
415 | heavyiron | 370 | popad |
371 | ret |
||
1 | ha | 372 | |
373 | uglobal |
||
374 | pressed_button_eax dd 0 |
||
375 | pressed_button_ebx dd 0 |
||
376 | pressed_button_ecx dd 0 |
||
377 | pressed_button_edx dd 0 |
||
378 | pressed_button_esi dd 0 |
||
379 | endg |
||
380 | |||
381 | ; negative button image |
||
382 | |||
383 | negativebutton: |
||
415 | heavyiron | 384 | ; If requested, do not display button |
385 | ; boarder on press. |
||
386 | test ebx,0x20000000 |
||
387 | jz draw_negative_button |
||
388 | ret |
||
1 | ha | 389 | draw_negative_button: |
390 | |||
415 | heavyiron | 391 | pushad |
1 | ha | 392 | |
415 | heavyiron | 393 | mov eax,[pressed_button_eax] |
394 | mov ebx,[pressed_button_ebx] |
||
395 | mov ecx,[pressed_button_ecx] |
||
396 | mov edx,[pressed_button_edx] |
||
397 | mov esi,[pressed_button_esi] |
||
398 | mov ecx,0x01000000 |
||
1 | ha | 399 | |
415 | heavyiron | 400 | dec edx |
401 | push edx |
||
402 | inc edx |
||
403 | dec esi |
||
404 | push esi |
||
405 | inc esi |
||
1 | ha | 406 | |
415 | heavyiron | 407 | push eax |
408 | push ebx |
||
409 | push ecx |
||
410 | push edx |
||
411 | push edi |
||
1 | ha | 412 | |
415 | heavyiron | 413 | call [disable_mouse] |
1 | ha | 414 | |
415 | bdbnewline: |
||
415 | heavyiron | 416 | mov edi,1 ; force |
417 | cmp eax,[esp+16] |
||
418 | jz bneg |
||
419 | cmp eax,[esp+20] |
||
420 | jz bneg |
||
421 | cmp ebx,[esp+12] |
||
422 | jz bneg |
||
423 | cmp ebx,[esp+24] |
||
424 | jnz nbneg |
||
1 | ha | 425 | ; jz bneg |
426 | ; jmp nbneg |
||
427 | |||
428 | bneg: |
||
429 | |||
415 | heavyiron | 430 | ;;;call [disable_mouse] |
431 | call [putpixel] |
||
1 | ha | 432 | |
433 | nbneg: |
||
434 | |||
415 | heavyiron | 435 | inc eax |
436 | cmp eax,esi |
||
437 | jnz bdbnewline |
||
438 | mov eax,[esp+16] |
||
439 | inc ebx |
||
440 | cmp ebx,edx |
||
441 | jnz bdbnewline |
||
1 | ha | 442 | |
415 | heavyiron | 443 | add esp,28 |
1 | ha | 444 | |
415 | heavyiron | 445 | popad |
1 | ha | 446 | |
415 | heavyiron | 447 | ret |
1 | ha | 448 | |
449 | ; check buttons |
||
450 | |||
451 | |||
452 | ; 0000 word process number |
||
453 | ; 0002 word button id number : bits 0-15 |
||
454 | ; 0004 word x start |
||
455 | ; 0006 word x size |
||
456 | ; 0008 word y start |
||
457 | ; 000A word y size |
||
458 | ; 000C word button id number : bits 16-31 |
||
459 | ; |
||
460 | ; button table in 0x10 increments |
||
461 | ; |
||
462 | ; first at 0x10 |
||
463 | |||
464 | |||
465 | checkbuttons: |
||
466 | |||
381 | serge | 467 | cmp [BTN_DOWN],byte 0 ; mouse buttons pressed |
1 | ha | 468 | jnz @f |
415 | heavyiron | 469 | ;..................................... start 1/5 : modified by vhanla ............................. |
470 | mov [bPressedMouseXY_B],0 |
||
471 | ;..................................... end 1/5 : modified by vhanla ............................. |
||
1 | ha | 472 | ret |
473 | @@: |
||
474 | pushad |
||
475 | |||
476 | xor esi, esi |
||
381 | serge | 477 | mov edi, [BTN_ADDR] |
1 | ha | 478 | movzx edx, word [edi] |
479 | test edx, edx |
||
480 | jne @f |
||
481 | popad |
||
482 | ret |
||
483 | |||
484 | @@: |
||
415 | heavyiron | 485 | ;..................................... start 2/5 : modified by vhanla ............................. |
486 | ;here i catch the coordinates when the mouse's button is clicked |
||
487 | push ax |
||
488 | cmp [bPressedMouseXY_B],0;FALSE |
||
489 | jnz @f |
||
490 | mov [bPressedMouseXY_B],1;TRUE - it was already clicked |
||
491 | mov ax,[MOUSE_X] |
||
492 | mov [mx],ax |
||
493 | mov ax,[MOUSE_Y] |
||
494 | mov [my],ax |
||
495 | @@: |
||
496 | pop ax |
||
497 | ;and it is only refreshed after the mouse's button release |
||
498 | ;..................................... end 2/5 : modified by vhanla ............................. |
||
1 | ha | 499 | |
500 | push esi |
||
501 | inc edx |
||
502 | push edx |
||
503 | |||
504 | buttonnewcheck: |
||
505 | |||
506 | pop edx |
||
507 | pop esi |
||
508 | inc esi |
||
509 | cmp edx,esi |
||
510 | jge bch |
||
511 | |||
415 | heavyiron | 512 | popad ; no button pressed |
1 | ha | 513 | ret |
514 | |||
515 | bch: |
||
516 | |||
517 | push esi |
||
518 | push edx |
||
519 | mov eax,esi |
||
520 | shl eax,4 |
||
521 | add eax,edi |
||
522 | |||
523 | ; check that button is at top of windowing stack |
||
524 | |||
525 | movzx ebx,word [eax] |
||
380 | serge | 526 | movzx ecx,word [WIN_STACK + ebx * 2] |
379 | serge | 527 | cmp ecx,[TASK_COUNT] |
1 | ha | 528 | jne buttonnewcheck |
529 | |||
530 | ; check that button start is inside window x/y end |
||
531 | |||
532 | movzx ebx,word [eax+0] |
||
533 | shl ebx,5 |
||
41 | mikedld | 534 | |
415 | heavyiron | 535 | test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED |
536 | jnz buttonnewcheck |
||
41 | mikedld | 537 | |
1 | ha | 538 | ; add ebx,window_data |
539 | ; mov ecx,[window_data+ebx+8] ; window end X |
||
540 | movzx edx,word [eax+4] ; button start X |
||
115 | poddubny | 541 | cmp edx, [window_data+ebx+WDATA.box.width] ;ecx |
1 | ha | 542 | jge buttonnewcheck |
543 | |||
544 | ; mov ecx,[window_data+ebx+12] ; window end Y |
||
545 | movzx edx, word [eax+8] ; button start Y |
||
115 | poddubny | 546 | cmp edx, [window_data+ebx+WDATA.box.height] ;ecx |
1 | ha | 547 | jge buttonnewcheck |
548 | |||
549 | ; check coordinates |
||
415 | heavyiron | 550 | ; mouse x >= button x ? |
1 | ha | 551 | movzx ebx,word [eax+0] |
552 | shl ebx,5 |
||
553 | add ebx,window_data |
||
115 | poddubny | 554 | mov ecx, [ebx+WDATA.box.left] ; window x start |
1 | ha | 555 | movzx edx,word [eax+4] ; button x start |
556 | add edx,ecx |
||
415 | heavyiron | 557 | ;..................................... start 3/5 : modified by vhanla ............................. |
558 | mov cx,[mx] ;mov cx,[MOUSE_X] |
||
559 | ;..................................... end 3/5 : modified by vhanla ............................. |
||
1 | ha | 560 | cmp edx,ecx |
415 | heavyiron | 561 | jg buttonnewcheck |
1 | ha | 562 | |
563 | movzx ebx,word [eax+6] ; button x size |
||
564 | add edx,ebx |
||
565 | cmp ecx,edx |
||
415 | heavyiron | 566 | jg buttonnewcheck |
1 | ha | 567 | |
415 | heavyiron | 568 | ; mouse y >= button y ? |
1 | ha | 569 | movzx ebx,word [eax+0] |
570 | shl ebx,5 |
||
571 | add ebx,window_data |
||
415 | heavyiron | 572 | mov ecx, [ebx+WDATA.box.top] ; window y start |
1 | ha | 573 | movzx edx,word [eax+8] ; button y start |
574 | add edx,ecx |
||
415 | heavyiron | 575 | ;..................................... start 4/5 : modified by vhanla ............................. |
576 | mov cx,[my] ;mov cx,[MOUSE_Y] |
||
577 | ;..................................... start 4/5 : modified by vhanla ............................. |
||
1 | ha | 578 | cmp edx,ecx |
415 | heavyiron | 579 | jg buttonnewcheck |
1 | ha | 580 | |
581 | movzx ebx,word [eax+10] ; button y size |
||
582 | add edx,ebx |
||
583 | cmp ecx,edx |
||
415 | heavyiron | 584 | jg buttonnewcheck |
1 | ha | 585 | |
586 | ; mouse on button |
||
587 | |||
588 | pop edx |
||
589 | pop esi |
||
590 | |||
415 | heavyiron | 591 | mov bx,[eax+0xc] ; button id : bits 16-31 |
1 | ha | 592 | shl ebx,16 |
415 | heavyiron | 593 | mov bx,[eax+2] ; button id : bits 00-16 |
1 | ha | 594 | push ebx |
595 | |||
381 | serge | 596 | mov [MOUSE_DOWN],byte 1 ; no mouse down checks |
1 | ha | 597 | call find_pressed_button_frames |
598 | call negativebutton |
||
599 | |||
600 | pushad |
||
601 | cbwaitmouseup: |
||
602 | |||
603 | call checkidle |
||
604 | |||
605 | call [draw_pointer] |
||
606 | |||
607 | pushad |
||
608 | call stack_handler |
||
609 | popad |
||
610 | |||
381 | serge | 611 | cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ? |
1 | ha | 612 | jnz cbwaitmouseup |
613 | popad |
||
614 | |||
615 | call negativebutton |
||
381 | serge | 616 | mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
617 | mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
||
415 | heavyiron | 618 | ;..................................... start 5/5 : modified by vhanla ............................. |
28 | mario79 | 619 | ; check coordinates |
415 | heavyiron | 620 | jmp @f |
621 | mx dw 0x0 ; keeps the x mouse's position when it was clicked |
||
622 | my dw 0x0 ; keeps the y mouse's position when it was clicked |
||
623 | bPressedMouseXY_B db 0x0 |
||
624 | @@: |
||
28 | mario79 | 625 | |
33 | mario79 | 626 | pusha |
627 | ; mouse x >= button x ? |
||
628 | movzx ebx,word [eax+0] |
||
415 | heavyiron | 629 | shl ebx,5 |
630 | add ebx,window_data |
||
631 | mov ecx, [ebx+WDATA.box.left] ; window x start |
||
33 | mario79 | 632 | movzx edx,word [eax+4] ; button x start |
415 | heavyiron | 633 | add edx,ecx |
634 | mov cx,[MOUSE_X] |
||
635 | cmp edx,ecx |
||
636 | jg no_on_button ;if we release the pointer out of the button area |
||
28 | mario79 | 637 | |
33 | mario79 | 638 | movzx ebx,word [eax+6] ; button x size |
415 | heavyiron | 639 | add edx,ebx |
640 | cmp ecx,edx |
||
641 | jg no_on_button |
||
28 | mario79 | 642 | |
415 | heavyiron | 643 | ; mouse y >= button y ? |
33 | mario79 | 644 | movzx ebx,word [eax+0] |
415 | heavyiron | 645 | shl ebx,5 |
646 | add ebx,window_data |
||
647 | mov ecx, [ebx+WDATA.box.top] ; window y start |
||
33 | mario79 | 648 | movzx edx,word [eax+8] ; button y start |
415 | heavyiron | 649 | add edx,ecx |
650 | mov cx,[MOUSE_Y] |
||
651 | cmp edx,ecx |
||
652 | jg no_on_button |
||
28 | mario79 | 653 | |
33 | mario79 | 654 | movzx ebx,word [eax+10] ; button y size |
415 | heavyiron | 655 | add edx,ebx |
656 | cmp ecx,edx |
||
657 | jg no_on_button |
||
33 | mario79 | 658 | popa |
415 | heavyiron | 659 | mov [BTN_COUNT],byte 1 ; no of buttons in buffer |
660 | pop ebx |
||
661 | mov [BTN_BUFF],ebx ; lets put the button id in buffer |
||
33 | mario79 | 662 | push ebx |
663 | pusha |
||
664 | jmp yes_on_button |
||
28 | mario79 | 665 | no_on_button: |
415 | heavyiron | 666 | mov [BTN_COUNT],byte 0 ; no of buttons in buffer |
28 | mario79 | 667 | yes_on_button: |
415 | heavyiron | 668 | mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw |
33 | mario79 | 669 | popa |
670 | pop ebx |
||
671 | popa |
||
672 | ret |
||
673 | |||
415 | heavyiron | 674 | ;..................................... end 5/5 : modified by vhanla ................................ |