;------------------------------------------------- ;-----interraction panel with user---------------- ;------------------------------------------------- panel_interraction: ;>>>>>>>>>>>>>>>>>>>>>>>>>> ; mcall 18,14 and [Panel_flag],0 ;collision with text on panel next_columnus_text: mov eax,[edi] mov ebx,[edi+4] sub eax,10 sub ebx,3 mov [Icon_text_x],eax mov [Icon_text_y],ebx mov esi,[edi+8] imul esi,10 mov [button_menu_size_x],esi mov [button_menu_size_y],dword 13 mov esi,[edi+8] add edi,4*3 add edi,esi mov ecx,[MouseX] mov edx,[MouseY] push edi mov edi,[button_menu_size_y] mov esi,[button_menu_size_x] call columnus pop edi mov esi,7 test eax,eax jz no_columnus_text mov esi,1 mov [Panel_flag],1 call GetMouseClick test eax,eax jz no_mouse_pressed ; mcall 18,14 jmp print_panel_menu no_mouse_pressed: no_columnus_text: mov eax,[Icon_text_x] mov ebx,[Icon_text_y] mov ecx,[button_menu_size_x] mov edx,[button_menu_size_y] call draw_volume_rectangle push [counter] push edi mov [counter],7 mov edi,panel_text call print_panel_text pop edi pop [counter] dec [counter] jnz next_columnus_text jmp still ;--------------------------------------------------------- ;-----draw panel menu(main engin of panel)---------------- ;--------------------------------------------------------- print_panel_menu: push [counter] ;delit main buttons(some time) mov [counter],10 next_icon_delit1: mov edx,[counter] add edx,11100000000000000000000000000000b mcall 8 inc [counter] cmp [counter],30 jl next_icon_delit1 ;delit buttons of brushes mov [counter],40 next_icon_delit2: mov edx,[counter] add edx,11100000000000000000000000000000b mcall 8 inc [counter] cmp [counter],45 jl next_icon_delit2 ;delit buttons of zoom mov [counter],45 next_icon_delit3: mov edx,[counter] add edx,11100000000000000000000000000000b mcall 8 inc [counter] cmp [counter],50 jl next_icon_delit3 ;delit buttons of palette mov edx,51 add edx,11100000000000000000000000000000b mcall 8 ;delit buttons of color mov edx,52 add edx,11100000000000000000000000000000b mcall 8 pop [counter] push esi mov esi,[counter] dec esi shl esi,4 mov eax,[menu_rectangles+esi] mov ebx,[menu_rectangles+esi+4] mov ecx,[menu_rectangles+esi+8] mov edx,[menu_rectangles+esi+12] mov esi,1 mov [menu_coordinat_x],eax mov [menu_size_x],ecx call draw_volume_rectangle pop esi calculate_counter_menu: ;calculate menu counter mov eax,[counter] dec eax shl eax,2 mov ebx,[menu_counters+eax] mov [counter_menu],ebx call GetMouseCoordinats and [menu_counter],0 push esi edi ;сглаживание анимации >>>>>>>>>>>>>>>>>> ; mcall 18,4 menu_loop: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[MouseX] mov edx,[MouseY] mov esi,[menu_size_x] mov edi,18 add ebx,[menu_counter] add eax,2 sub esi,3 inc ebx call columnus mov esi,7 test eax,eax jz no_columnus_menu_text mov esi,1 no_columnus_menu_text: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[menu_size_x] mov edx,18 add ebx,[menu_counter] add eax,2 sub ecx,3 inc ebx call draw_volume_rectangle add [menu_counter],20 dec [counter_menu] jnz menu_loop ;print menu text push [counter] mov esi,[counter] dec esi shl esi,2 mov edi,[menu_text_en+esi] mov eax,[menu_counters+esi] mov [counter],eax call print_panel_text pop [counter] pop edi esi menu_still: mcall 10 mcall 2 mcall 17 call GetMouseClick test eax,eax jz calculate_counter_menu call GetMouseCoordinats ;calculate menu counter mov eax,[counter] dec eax shl eax,2 mov ebx,[menu_counters+eax] mov [counter_menu],ebx and [menu_counter],0 and [counter_11],0 push esi edi menu_loop2: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[MouseX] mov edx,[MouseY] mov esi,[menu_size_x] mov edi,18 add ebx,[menu_counter] add eax,2 sub esi,3 inc ebx call columnus inc [counter_11] test eax,eax jz no_columnus_menu_text2 mov esi,[counter_11] mov [number_menu],esi no_columnus_menu_text2: add [menu_counter],20 dec [counter_menu] jnz menu_loop2 pop edi esi mcall 5,15 push [counter] pusha call drawwin popa pop [counter] mov eax,[counter] mov [number_panel],eax jmp TakeInstruments ;--------------------------------------------------------- ;------print mouse position on panel---------------------- ;--------------------------------------------------------- PrintMousePos: pushad mov eax,[Window_SizeX] sub eax,75 mov ebx,20+15+6 mov ecx,52 mov edx,18 mov esi,4 call draw_volume_rectangle ; border for mouse x pos mov eax,[Window_SizeX] sub eax,75 mov ebx,20+15+6+18+2 mov ecx,52 mov edx,18 mov esi,4 call draw_volume_rectangle ; border for mouse y pos mov eax,[Window_SizeX] sub eax,70 mov ebx,20+15+6+6 and ecx,0 mov edx,mouse_pos_x mov esi,2 call print_text mov eax,[Window_SizeX] sub eax,70 mov ebx,20+15+6+6+18+1 and ecx,0 mov edx,mouse_pos_y mov esi,2 call print_text mov ecx,[ScreenX] add ecx,[PosX] mov edx,[Window_SizeX] sub edx,55 shl edx,16 add edx,20+15+6+6 and esi,0 mcall 47,<4,0> mov ecx,[ScreenY] add ecx,[PosY] mov edx,[Window_SizeX] sub edx,55 shl edx,16 add edx,20+15+6+18+1+6 mcall popad ret ;---------------------------------------------------------- ;----------print text on the panel and menu---------------- ;---------------------------------------------------------- print_panel_text: next_panel_text: mov eax,[edi] mov ebx,[edi+4] ; xor ecx,ecx mov ecx,0x10000000 mov edx,edi add edx,12 mov esi,[edi+8] add edi,esi add edi,3*4 push edi call print_text pop edi dec [counter] jnz next_panel_text ret ;---------------------------------------------------------- ;------------draw lines of scoll--------------------------- ;---------------------------------------------------------- draw_scrollers: mov edi,[CounterX] mov eax,[Scroll1CoordinatX] mov ebx,[Window_SizeY] sub ebx,22+10 mov ecx,[Window_SizeX] sub ecx,39+ci_scrollh_coord_x_min mov edx,14+10 mov esi,1 mov [Scroll1CoordinatY],ebx mov [Scroll1MaxSizeY],edx mov [Scroll1MaxSizeX],ecx imul ecx,edi push eax ebx edx mov eax,ecx mov ebx,[Picture_SizeX] cdq idiv ebx mov ecx,eax pop edx ebx eax mov [Scroll1SizeX],ecx mov edi,[Scroll1MaxSizeX] sub edi,ecx mov [Scroll1FreeX],edi call draw_volume_rectangle ; horizontal scrollbar polzunok mov eax,[Window_SizeX] sub eax,22+10 mov ebx,[Scroll2CoordinatY] mov ecx,14+10 mov edx,[Window_SizeY] sub edx,39+ci_scrollv_coord_y_min mov esi,1 mov [Scroll2CoordinatX],eax mov [Scroll2MaxSizeX],ecx mov [Scroll2MaxSizeY],edx imul edx,[CounterY] push eax ebx mov eax,edx mov ebx,[Picture_SizeY] cdq idiv ebx mov edx,eax pop ebx eax mov [Scroll2SizeY],edx mov edi,[Scroll2MaxSizeY] sub edi,edx mov [Scroll2FreeY],edi call draw_volume_rectangle ; vertical scrollbar polzunok ret button_menu_size_x dd 0 button_menu_size_y dd 0