[docs] Replace cyrillic 'с' with latin 'c' in register names
[kolibrios.git] / programs / media / zsea / mouse.inc
blob3d6fbc255d4f0fce870bdc6e0dee0c9b14fe1175
1 ;---------------------------------------------------------------------\r
2 mouse:\r
3     mcall 18,7\r
4     cmp  [active_process],eax\r
5     jne  still\r
6         \r
7     mcall 37,7\r
8     mov   [mouse_scroll_data],eax\r
9         \r
10         mov  eax,[mouse_position]\r
11         mov  [mouse_position_old],eax\r
12         mcall 37,1\r
13     mov  [mouse_position],eax\r
14         \r
15         mov  eax,[mouse_keys]\r
16         mov  [mouse_keys_old],eax\r
17     mcall 37,2\r
18     mov  [mouse_keys],eax\r
19         \r
20         cmp [soi],dword 0\r
21         je  .menu_bar\r
22         cmp [scaling_mode],dword 0\r
23         je  .menu_bar\r
24         \r
25         cmp  [capture_image_area_flag],1\r
26         je   capture_image_area\r
27 ;-----------------------------------------------------\r
28     cmp   [scroll_bar_data_vertical.delta2],0\r
29         jne   .vertical\r
30 .horizontal:\r
31     mov   eax,[scroll_bar_data_horizontal.max_area]\r
32     cmp   eax,[scroll_bar_data_horizontal.cur_area]\r
33     jbe   .vertical\r
34         \r
35         push    dword scroll_bar_data_horizontal\r
36         call    [scrollbar_hor_mouse]\r
37         \r
38         ;    mouse_scroll_bar_horizontal scroll_bar_data_horizontal\r
39     cmp   [scroll_bar_data_horizontal.redraw],0 \r
40     je    @f\r
41         \r
42     mov   [scroll_bar_data_horizontal.redraw],0\r
43     jmp   .draw\r
44 @@:\r
45     cmp   [scroll_bar_data_horizontal.delta2],0\r
46         jne   still\r
47 ;-----------------------------------------------------\r
48 .vertical:\r
49     mov   eax,[scroll_bar_data_vertical.max_area]\r
50     cmp   eax,[scroll_bar_data_vertical.cur_area]\r
51     jbe   .menu_bar\r
52         \r
53         push    dword scroll_bar_data_vertical\r
54         call    [scrollbar_ver_mouse]\r
55         \r
56 ;    mouse_scroll_bar_vertical scroll_bar_data_vertical\r
57     cmp   [scroll_bar_data_vertical.redraw],0   \r
58     je    .menu_bar   ;still\r
59     mov   [scroll_bar_data_vertical.redraw],0\r
60 .draw:\r
61     call  drawimage\r
62     jmp   still\r
63 ;---------------------------------------------------\r
64 .clear_mouse_keys_old:\r
65         xor  eax,eax\r
66     mov  [mouse_keys],eax\r
67         mov  [mouse_keys_old],eax\r
68         ret\r
69 ;---------------------------------------------------\r
70 .menu_bar:\r
71         cmp  [scroll_bar_data_vertical.delta2],0\r
72         jne   still\r
73         cmp  [scroll_bar_data_horizontal.delta2],0\r
74         jne   still\r
75 ;       xor   eax,eax\r
76 ;       mov   [menu_data_1.get_mouse_flag],eax\r
77 ;       mov   [menu_data_2.get_mouse_flag],eax\r
78 ;       mov   [menu_data_3.get_mouse_flag],eax\r
79 ;       mov   [menu_data_4.get_mouse_flag],eax\r
80 ;       mov   [menu_data_5.get_mouse_flag],eax\r
81 ;       mov   [menu_data_6.get_mouse_flag],eax\r
82         \r
83 .menu_bar_1:\r
84         call   .set_mouse_flag\r
85 @@:\r
86         push    dword menu_data_1\r
87         call    [menu_bar_mouse]\r
88 ;    mouse_menubar menu_data_1\r
89     cmp   [menu_data_1.click],dword 1\r
90         jne   .menu_bar_2\r
91         call  .clear_mouse_keys_old\r
92         cmp   [menu_data_1.cursor_out],dword 0\r
93         jne    analyse_out_menu_1\r
94         jmp    .menu_bar_1\r
95 ;--------------------------------------------\r
96 .menu_bar_2:\r
97 ; Edit\r
98         push    dword menu_data_2\r
99         call    [menu_bar_mouse]\r
100 ;    mouse_menubar menu_data_2\r
101     cmp   [menu_data_2.click],dword 1\r
102         jne   .menu_bar_3\r
103         call  .clear_mouse_keys_old\r
104         cmp   [menu_data_2.cursor_out],dword 0\r
105         jne    analyse_out_menu_2\r
106     jmp    .menu_bar_1\r
107 ;--------------------------------------------\r
108 .menu_bar_3:\r
109 ; View\r
110         push    dword menu_data_3\r
111         call    [menu_bar_mouse]\r
112 ;    mouse_menubar menu_data_3\r
113     cmp   [menu_data_3.click],dword 1\r
114         jne   .menu_bar_4\r
115         call  .clear_mouse_keys_old\r
116         cmp   [menu_data_3.cursor_out],dword 0\r
117         jne    analyse_out_menu_3 ;still\r
118     jmp    .menu_bar_1\r
119 ;--------------------------------------------\r
120 .menu_bar_4:\r
121 ; Zoom\r
122         push    dword menu_data_4\r
123         call    [menu_bar_mouse]\r
124 ;    mouse_menubar menu_data_4\r
125     cmp   [menu_data_4.click],dword 1\r
126         jne   .menu_bar_5\r
127         call  .clear_mouse_keys_old\r
128         cmp   [menu_data_4.cursor_out],dword 0\r
129         jne    analyse_out_menu_4\r
130     jmp    .menu_bar_1\r
131 ;--------------------------------------------\r
132 .menu_bar_5:\r
133 ; Tools\r
134         push    dword menu_data_5\r
135         call    [menu_bar_mouse]\r
136 ;    mouse_menubar menu_data_5\r
137     cmp   [menu_data_5.click],dword 1\r
138         jne   .menu_bar_6\r
139         call  .clear_mouse_keys_old\r
140         cmp   [menu_data_5.cursor_out],dword 0\r
141         jne    analyse_out_menu_5\r
142     jmp    .menu_bar_1\r
143 ;--------------------------------------------\r
144 .menu_bar_6:\r
145 ; Help\r
146         push    dword menu_data_6\r
147         call    [menu_bar_mouse]\r
148 ;    mouse_menubar menu_data_6\r
149     cmp   [menu_data_6.click],dword 1\r
150         jne   .mouse_dinamic_button\r
151         call  .clear_mouse_keys_old\r
152         cmp   [menu_data_6.cursor_out],dword 0\r
153         jne    analyse_out_menu_6\r
154         jmp   .menu_bar_1\r
155 ;---------------------------------------------------\r
156 .mouse_dinamic_button:\r
157 ; open file\r
158         push    dword dinamic_button_data_1\r
159         call    [dinamic_button_mouse]\r
160 ;    mouse_dinamic_button dinamic_button_data_1\r
161         mov   eax,dinamic_button_data_1.click\r
162     cmp   [eax],dword 1\r
163         jne   @f\r
164     mov   [eax],dword 0\r
165         jmp   kfile\r
166 ;-------------------------------------------------\r
167 @@:\r
168 ; reload file\r
169         push    dword dinamic_button_data_2\r
170         call    [dinamic_button_mouse]\r
171 ;    mouse_dinamic_button dinamic_button_data_2\r
172         mov   eax,dinamic_button_data_2.click\r
173     cmp   [eax],dword 1\r
174         jne   @f\r
175     mov   [eax],dword 0\r
176         jmp   kopen\r
177 ;-------------------------------------------------\r
178 @@:\r
179 ; left limit\r
180         push    dword dinamic_button_data_3\r
181         call    [dinamic_button_mouse]\r
182 ;    mouse_dinamic_button dinamic_button_data_3\r
183         mov   eax,dinamic_button_data_3.click\r
184     cmp   [eax],dword 1\r
185         jne   @f\r
186     mov   [eax],dword 0\r
187         jmp   left_limit\r
188 ;-------------------------------------------------\r
189 @@:\r
190 ; left arrow\r
191         push    dword dinamic_button_data_4\r
192         call    [dinamic_button_mouse]\r
193 ;    mouse_dinamic_button dinamic_button_data_4\r
194         mov   eax,dinamic_button_data_4.click\r
195     cmp   [eax],dword 1\r
196         jne   @f\r
197     mov   [eax],dword 0\r
198         jmp   move_to_left\r
199 ;-------------------------------------------------\r
200 @@:\r
201 ; slide show\r
202         push    dword dinamic_button_data_5\r
203         call    [dinamic_button_mouse]\r
204 ;    mouse_dinamic_button dinamic_button_data_5\r
205         mov   eax,dinamic_button_data_5.click\r
206     cmp   [eax],dword 1\r
207         jne   @f\r
208     mov   [eax],dword 0\r
209         jmp   slide_show.3\r
210 ;-------------------------------------------------\r
211 @@:\r
212 ; right arrow\r
213         push    dword dinamic_button_data_6\r
214         call    [dinamic_button_mouse]\r
215 ;    mouse_dinamic_button dinamic_button_data_6\r
216         mov   eax,dinamic_button_data_6.click\r
217     cmp   [eax],dword 1\r
218         jne   @f\r
219     mov   [eax],dword 0\r
220         jmp   move_to_right\r
221 ;-------------------------------------------------\r
222 @@:\r
223 ; right limit\r
224         push    dword dinamic_button_data_7\r
225         call    [dinamic_button_mouse]\r
226 ;    mouse_dinamic_button dinamic_button_data_7\r
227         mov   eax,dinamic_button_data_7.click\r
228     cmp   [eax],dword 1\r
229         jne   @f\r
230     mov   [eax],dword 0\r
231         jmp   right_limit\r
232 ;-------------------------------------------------\r
233 @@:\r
234 ; zoom +\r
235         push    dword dinamic_button_data_8\r
236         call    [dinamic_button_mouse]\r
237 ;    mouse_dinamic_button dinamic_button_data_8\r
238         mov   eax,dinamic_button_data_8.click\r
239     cmp   [eax],dword 1\r
240         jne   @f\r
241     mov   [eax],dword 0\r
242         jmp   zoom_plus  ;still\r
243 ;-------------------------------------------------\r
244 @@:\r
245 ; zoom -\r
246         push    dword dinamic_button_data_9\r
247         call    [dinamic_button_mouse]\r
248 ;    mouse_dinamic_button dinamic_button_data_9\r
249         mov   eax,dinamic_button_data_9.click\r
250     cmp   [eax],dword 1\r
251         jne   @f\r
252     mov   [eax],dword 0\r
253         jmp   zoom_minus  ;still\r
254 ;-------------------------------------------------\r
255 @@:\r
256 ; zoom 100%\r
257         push    dword dinamic_button_data_10\r
258         call    [dinamic_button_mouse]\r
259 ;    mouse_dinamic_button dinamic_button_data_10\r
260         mov   eax,dinamic_button_data_10.click\r
261     cmp   [eax],dword 1\r
262         jne   @f\r
263     mov   [eax],dword 0\r
264         jmp   no_scaling  ;still\r
265 ;-------------------------------------------------\r
266 @@:\r
267 ; rotate clockwise\r
268         push    dword dinamic_button_data_11\r
269         call    [dinamic_button_mouse]\r
270 ;    mouse_dinamic_button dinamic_button_data_11\r
271         mov   eax,dinamic_button_data_11.click\r
272     cmp   [eax],dword 1\r
273         jne   @f\r
274     mov   [eax],dword 0\r
275         jmp   rotate_clockwise\r
276 ;-------------------------------------------------\r
277 @@:\r
278 ; rotate counter-clockwise\r
279         push    dword dinamic_button_data_12\r
280         call    [dinamic_button_mouse]\r
281 ;    mouse_dinamic_button dinamic_button_data_12\r
282         mov   eax,dinamic_button_data_12.click\r
283     cmp   [eax],dword 1\r
284         jne   @f\r
285     mov   [eax],dword 0\r
286         jmp   rotate_counter_clockwise\r
287 ;-------------------------------------------------\r
288 @@:\r
289 ; file information\r
290         push    dword dinamic_button_data_13\r
291         call    [dinamic_button_mouse]\r
292 ;    mouse_dinamic_button dinamic_button_data_13\r
293         mov   eax,dinamic_button_data_13.click\r
294     cmp   [eax],dword 1\r
295         jne   @f\r
296     mov   [eax],dword 0\r
297         jmp   kinfo\r
298 ;-------------------------------------------------\r
299 @@:\r
300 ; wallpaper\r
301         push    dword dinamic_button_data_14\r
302         call    [dinamic_button_mouse]\r
303 ;    mouse_dinamic_button dinamic_button_data_14\r
304         mov   eax,dinamic_button_data_14.click\r
305     cmp   [eax],dword 1\r
306         jne   @f\r
307     mov   [eax],dword 0\r
308         jmp   k_background\r
309 ;-------------------------------------------------\r
310 @@:\r
311 ; settings\r
312         push    dword dinamic_button_data_15\r
313         call    [dinamic_button_mouse]\r
314 ;    mouse_dinamic_button dinamic_button_data_15\r
315         mov   eax,dinamic_button_data_15.click\r
316     cmp   [eax],dword 1\r
317         jne   @f\r
318     mov   [eax],dword 0\r
319         jmp   k_option  ;still\r
320 ;-------------------------------------------------\r
321 @@:\r
322         jmp  check_scroll_event\r
323 ;    jmp   still\r
324 ;---------------------------------------------------------------------\r
325 .set_mouse_flag:\r
326         xor   eax,eax\r
327         inc   eax\r
328         mov   [menu_data_1.get_mouse_flag],eax\r
329         mov   [menu_data_2.get_mouse_flag],eax\r
330         mov   [menu_data_3.get_mouse_flag],eax\r
331         mov   [menu_data_4.get_mouse_flag],eax\r
332         mov   [menu_data_5.get_mouse_flag],eax\r
333         mov   [menu_data_6.get_mouse_flag],eax\r
334         ret\r
335 ;---------------------------------------------------------------------\r
336 analyse_out_menu_1:\r
337 ; File\r
338         mov eax,[menu_data_1.cursor_out]\r
339         cmp eax,dword 1\r
340         je   kfile\r
341         cmp eax,dword 2\r
342         je   kinfo      \r
343         cmp eax,dword 3\r
344         je   START.exit  \r
345     jmp   still\r
346 ;---------------------------------------------------------------------\r
347 analyse_out_menu_2:\r
348 ; Edit\r
349         mov eax,[menu_data_2.cursor_out]\r
350         cmp eax,dword 1\r
351         je   rotate_clockwise\r
352         cmp eax,dword 2\r
353         je   rotate_counter_clockwise   \r
354         cmp eax,dword 3\r
355         je   invert_left_to_right\r
356         cmp eax,dword 4\r
357         je   invert_up_to_down  \r
358     jmp   still\r
359 ;---------------------------------------------------------------------\r
360 analyse_out_menu_3:\r
361 ; View\r
362         mov  eax,[menu_data_3.cursor_out]\r
363         cmp eax,dword 1\r
364         je   k_sort_directory\r
365         cmp eax,dword 2\r
366         je   full_screen\r
367         cmp eax,dword 3\r
368         je   kopen\r
369     jmp   still\r
370 ;---------------------------------------------------------------------\r
371 analyse_out_menu_4:\r
372 ; Zoom\r
373         mov eax,[menu_data_4.cursor_out]\r
374         cmp eax,dword 1\r
375         je   no_scaling\r
376         cmp eax,dword 2\r
377         je   zoom_plus\r
378         cmp eax,dword 3\r
379         je   zoom_minus\r
380         cmp eax,dword 4\r
381         je   scaling\r
382     jmp   still\r
383 ;---------------------------------------------------------------------\r
384 analyse_out_menu_5:\r
385 ; Tools\r
386         mov eax,[menu_data_5.cursor_out]\r
387         cmp eax,dword 1\r
388         je  image_editor\r
389         cmp eax,dword 2\r
390         je  k_background\r
391         cmp eax,dword 3\r
392         je   slide_show.3\r
393         cmp eax,dword 4\r
394         je  k_option\r
395     jmp still\r
396 ;---------------------------------------------------------------------\r
397 analyse_out_menu_6:\r
398 ; Help\r
399         cmp [menu_data_6.cursor_out],dword 1\r
400         je   open_help\r
401         cmp [menu_data_6.cursor_out],dword 2\r
402         je   kabout\r
403     jmp   still\r
404 ;---------------------------------------------------------------------\r
405 check_scroll_event:\r
406 ;       jmp  capture_image_area\r
407         mov  eax,[mouse_scroll_data]\r
408         test eax,eax\r
409         jz   capture_image_area ;still\r
410         test ax,0x8000\r
411         jnz  .decr\r
412         shr  eax,16\r
413         test ax,0x8000\r
414         jnz  .decr_1\r
415         pusha\r
416         mov  eax,[scaling_mode]\r
417         test eax,eax    \r
418         jnz  .continue_1\r
419         call  calculation_next_value_minus\r
420         mov  [calc_next_value_minus],1\r
421 .continue_1:\r
422         popa\r
423         mov  eax,zoom_factors\r
424         cmp  [eax],dword zoom_factors.min\r
425         jbe  still\r
426         xor  ecx,ecx\r
427         mov  cx,[mouse_scroll_data.vertical]\r
428         test ecx,ecx\r
429         jnz  @f\r
430         mov  cx,[mouse_scroll_data.horizontal]\r
431         test ecx,ecx\r
432         jz   still\r
433 @@:\r
434 ;----------------------------------------\r
435         cmp  [calc_next_value_minus],1\r
436         jne  @f\r
437         mov  [calc_next_value_minus],0\r
438         dec  ecx\r
439         jz   zoom_plus.1\r
440 @@:\r
441         mov  ebx,4\r
442 @@:\r
443         cmp  [eax],dword zoom_factors.min\r
444         jbe  @f\r
445         sub  [eax],ebx\r
446         dec  ecx\r
447         jnz  @r\r
448         jmp  zoom_plus.1\r
449 @@:\r
450         mov  [eax],dword zoom_factors.min\r
451         jmp  zoom_plus.1\r
452 ;----------------------------------------\r
453 .decr:\r
454         xor  ebx,ebx\r
455         mov  bx,[mouse_scroll_data.vertical]\r
456         jmp    @f\r
457 .decr_1:\r
458         xor  ebx,ebx\r
459         mov  bx,[mouse_scroll_data.horizontal]\r
460 @@:\r
461         pusha\r
462         mov  eax,[scaling_mode]\r
463         test eax,eax    \r
464         jnz  .continue_2\r
465         call  calculation_next_value_plus\r
466         mov  [calc_next_value_plus],1\r
467 .continue_2:\r
468         popa\r
469         mov  eax,zoom_factors\r
470         cmp  [eax],dword zoom_factors.max\r
471         jae  still\r
472         mov  ecx,0xffff\r
473         sub  ecx,ebx\r
474         inc  ecx\r
475 ;---------------------------------------\r
476         cmp  [calc_next_value_plus],1\r
477         jne  @f\r
478         mov  [calc_next_value_plus],0\r
479         dec  ecx\r
480         jz   zoom_plus.1\r
481 @@:\r
482         mov  ebx,4\r
483 @@:\r
484         cmp  [eax],dword zoom_factors.max\r
485         jae  @f\r
486         add  [eax],ebx\r
487         dec  ecx\r
488         jnz  @r\r
489         jmp  zoom_plus.1\r
490 @@:\r
491         mov  [eax],dword zoom_factors.max\r
492         jmp  zoom_plus.1\r
493 ;---------------------------------------------------------------------\r
494 capture_image_area:\r
495         cmp  [scroll_bar_data_vertical.delta2],0\r
496         jne   .no_capture\r
497         cmp  [scroll_bar_data_horizontal.delta2],0\r
498         jne   .no_capture\r
499         xor   eax,eax\r
500         mov   [draw_scrollbar_counter],eax\r
501     mov   eax,[scroll_bar_data_vertical.max_area]\r
502     cmp   eax,[scroll_bar_data_vertical.cur_area]\r
503     jbe   @f\r
504         inc  [draw_scrollbar_counter]\r
505 @@:     \r
506     mov   eax,[scroll_bar_data_horizontal.max_area]\r
507     cmp   eax,[scroll_bar_data_horizontal.cur_area]\r
508     jbe   @f\r
509         inc  [draw_scrollbar_counter]\r
510 @@:\r
511         cmp  [draw_scrollbar_counter],0\r
512         je   still\r
514         mov  eax,[mouse_position]\r
515         xor  ebx,ebx\r
516         mov  bx,ax  ; EBX mouse y\r
517         shr  eax,16 ; EAX mouse x\r
518         \r
519         mov  ecx,[image_start_coordinates]\r
520         xor  edx,edx\r
521         mov  dx,cx  ; EDX start y\r
522         shr  ecx,16 ; ECX start x\r
523         \r
524         cmp  ax,cx\r
525         jb   still ; min x\r
527         cmp  bx,dx\r
528         jb   still ; min y\r
530         add  cx,[wa_width_2]\r
531         cmp  ax,cx      \r
532         ja   still ; max x\r
534         add  dx,[wa_high_2]\r
535         cmp  bx,dx\r
536         ja   still ; max y\r
538         mov  ecx,[mouse_keys]\r
539         test ecx,1b  ; left button \r
540         jz   .no_capture ;still\r
542         mov  ecx,[mouse_keys_old]\r
543         test ecx,1b  ; left button old\r
544         jz   .no_capture ;still\r
546         mov  [capture_image_area_flag],1\r
547         \r
548         mov  ecx,[mouse_position_old]\r
549         xor  edx,edx\r
550         mov  dx,cx  ; EDX mouse y old\r
551         shr  ecx,16 ; ECX mouse x old\r
552         \r
553         cmp  eax,ecx\r
554         je   .y\r
555         ja   @f\r
556         sub  ecx,eax\r
557         add  [scroll_bar_data_horizontal.position],ecx\r
558         jmp  .y\r
559 @@:\r
560         sub  eax,ecx\r
561         cmp  eax,[scroll_bar_data_horizontal.position]\r
562         jb   @f\r
563         xor  eax,eax\r
564         mov  [scroll_bar_data_horizontal.position],eax\r
565         jmp  .y\r
566 @@:\r
567         sub  [scroll_bar_data_horizontal.position],eax\r
568         \r
569 .y:\r
570         cmp  ebx,edx\r
571         je   .draw\r
572         ja   @f\r
573         sub  edx,ebx\r
574         add  [scroll_bar_data_vertical.position],edx\r
575         jmp  .draw\r
576 @@:\r
577         sub  ebx,edx\r
578         \r
579         cmp  ebx,[scroll_bar_data_vertical.position]\r
580         jb   @f\r
581         xor  eax,eax\r
582         mov  [scroll_bar_data_vertical.position],eax\r
583         jmp  .draw\r
584 @@:\r
585         sub  [scroll_bar_data_vertical.position],ebx\r
586         \r
587 .draw:\r
588         call  drawimage\r
589         call  draw_scrollbars\r
590         jmp   still\r
591         \r
592 .no_capture:\r
593         mov  [capture_image_area_flag],0\r
594 .end:\r
595         jmp   still\r
596 ;---------------------------------------------------------------------