;---------------------------------------------------------------------
mouse:
    mcall 18,7
    cmp  [active_process],eax
    jne  still
	
    mcall 37,7
    mov   [mouse_scroll_data],eax
	
	mov  eax,[mouse_position]
	mov  [mouse_position_old],eax
	mcall 37,1
    mov  [mouse_position],eax
	
	mov  eax,[mouse_keys]
	mov  [mouse_keys_old],eax
    mcall 37,2
    mov  [mouse_keys],eax
	
	cmp [soi],dword 0
	je  .menu_bar
	cmp [scaling_mode],dword 0
	je  .menu_bar
	
	cmp  [capture_image_area_flag],1
	je   capture_image_area
;-----------------------------------------------------
    cmp   [scroll_bar_data_vertical.delta2],0
	jne   .vertical
.horizontal:
    mov   eax,[scroll_bar_data_horizontal.max_area]
    cmp   eax,[scroll_bar_data_horizontal.cur_area]
    jbe   .vertical
	
	push    dword scroll_bar_data_horizontal
	call    [scrollbar_hor_mouse]
	
	;    mouse_scroll_bar_horizontal scroll_bar_data_horizontal
    cmp   [scroll_bar_data_horizontal.redraw],0	
    je    @f
	
    mov   [scroll_bar_data_horizontal.redraw],0
    jmp   .draw
@@:
    cmp   [scroll_bar_data_horizontal.delta2],0
	jne   still
;-----------------------------------------------------
.vertical:
    mov   eax,[scroll_bar_data_vertical.max_area]
    cmp   eax,[scroll_bar_data_vertical.cur_area]
    jbe   .menu_bar
	
	push    dword scroll_bar_data_vertical
	call    [scrollbar_ver_mouse]
	
;    mouse_scroll_bar_vertical scroll_bar_data_vertical
    cmp   [scroll_bar_data_vertical.redraw],0	
    je    .menu_bar   ;still
    mov   [scroll_bar_data_vertical.redraw],0
.draw:
    call  drawimage
    jmp   still
;---------------------------------------------------
.clear_mouse_keys_old:
	xor  eax,eax
    mov  [mouse_keys],eax
	mov  [mouse_keys_old],eax
	ret
;---------------------------------------------------
.menu_bar:
	cmp  [scroll_bar_data_vertical.delta2],0
	jne   still
	cmp  [scroll_bar_data_horizontal.delta2],0
	jne   still
;	xor   eax,eax
;	mov   [menu_data_1.get_mouse_flag],eax
;	mov   [menu_data_2.get_mouse_flag],eax
;	mov   [menu_data_3.get_mouse_flag],eax
;	mov   [menu_data_4.get_mouse_flag],eax
;	mov   [menu_data_5.get_mouse_flag],eax
;	mov   [menu_data_6.get_mouse_flag],eax
	
.menu_bar_1:
	call   .set_mouse_flag
@@:
	push    dword menu_data_1
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_1
    cmp   [menu_data_1.click],dword 1
	jne   .menu_bar_2
	call  .clear_mouse_keys_old
	cmp   [menu_data_1.cursor_out],dword 0
	jne    analyse_out_menu_1
	jmp    .menu_bar_1
;--------------------------------------------
.menu_bar_2:
; Edit
	push    dword menu_data_2
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_2
    cmp   [menu_data_2.click],dword 1
	jne   .menu_bar_3
	call  .clear_mouse_keys_old
	cmp   [menu_data_2.cursor_out],dword 0
	jne    analyse_out_menu_2
    jmp    .menu_bar_1
;--------------------------------------------
.menu_bar_3:
; View
	push    dword menu_data_3
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_3
    cmp   [menu_data_3.click],dword 1
	jne   .menu_bar_4
	call  .clear_mouse_keys_old
	cmp   [menu_data_3.cursor_out],dword 0
	jne    analyse_out_menu_3 ;still
    jmp    .menu_bar_1
;--------------------------------------------
.menu_bar_4:
; Zoom
	push    dword menu_data_4
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_4
    cmp   [menu_data_4.click],dword 1
	jne   .menu_bar_5
	call  .clear_mouse_keys_old
	cmp   [menu_data_4.cursor_out],dword 0
	jne    analyse_out_menu_4
    jmp    .menu_bar_1
;--------------------------------------------
.menu_bar_5:
; Tools
	push    dword menu_data_5
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_5
    cmp   [menu_data_5.click],dword 1
	jne   .menu_bar_6
	call  .clear_mouse_keys_old
	cmp   [menu_data_5.cursor_out],dword 0
	jne    analyse_out_menu_5
    jmp    .menu_bar_1
;--------------------------------------------
.menu_bar_6:
; Help
	push    dword menu_data_6
	call    [menu_bar_mouse]
;    mouse_menubar menu_data_6
    cmp   [menu_data_6.click],dword 1
	jne   .mouse_dinamic_button
	call  .clear_mouse_keys_old
	cmp   [menu_data_6.cursor_out],dword 0
	jne    analyse_out_menu_6
	jmp   .menu_bar_1
;---------------------------------------------------
.mouse_dinamic_button:
; open file
	push    dword dinamic_button_data_1
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_1
	mov   eax,dinamic_button_data_1.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   kfile
;-------------------------------------------------
@@:
; reload file
	push    dword dinamic_button_data_2
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_2
	mov   eax,dinamic_button_data_2.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   kopen
;-------------------------------------------------
@@:
; left limit
	push    dword dinamic_button_data_3
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_3
	mov   eax,dinamic_button_data_3.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   left_limit
;-------------------------------------------------
@@:
; left arrow
	push    dword dinamic_button_data_4
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_4
	mov   eax,dinamic_button_data_4.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   move_to_left
;-------------------------------------------------
@@:
; slide show
	push    dword dinamic_button_data_5
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_5
	mov   eax,dinamic_button_data_5.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   slide_show.3
;-------------------------------------------------
@@:
; right arrow
	push    dword dinamic_button_data_6
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_6
	mov   eax,dinamic_button_data_6.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   move_to_right
;-------------------------------------------------
@@:
; right limit
	push    dword dinamic_button_data_7
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_7
	mov   eax,dinamic_button_data_7.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   right_limit
;-------------------------------------------------
@@:
; zoom +
	push    dword dinamic_button_data_8
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_8
	mov   eax,dinamic_button_data_8.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   zoom_plus  ;still
;-------------------------------------------------
@@:
; zoom -
	push    dword dinamic_button_data_9
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_9
	mov   eax,dinamic_button_data_9.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   zoom_minus  ;still
;-------------------------------------------------
@@:
; zoom 100%
	push    dword dinamic_button_data_10
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_10
	mov   eax,dinamic_button_data_10.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   no_scaling  ;still
;-------------------------------------------------
@@:
; rotate clockwise
	push    dword dinamic_button_data_11
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_11
	mov   eax,dinamic_button_data_11.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   rotate_clockwise
;-------------------------------------------------
@@:
; rotate counter-clockwise
	push    dword dinamic_button_data_12
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_12
	mov   eax,dinamic_button_data_12.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   rotate_counter_clockwise
;-------------------------------------------------
@@:
; file information
	push    dword dinamic_button_data_13
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_13
	mov   eax,dinamic_button_data_13.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   kinfo
;-------------------------------------------------
@@:
; wallpaper
	push    dword dinamic_button_data_14
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_14
	mov   eax,dinamic_button_data_14.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   k_background
;-------------------------------------------------
@@:
; settings
	push    dword dinamic_button_data_15
	call    [dinamic_button_mouse]
;    mouse_dinamic_button dinamic_button_data_15
	mov   eax,dinamic_button_data_15.click
    cmp   [eax],dword 1
	jne   @f
    mov   [eax],dword 0
	jmp   k_option  ;still
;-------------------------------------------------
@@:
	jmp  check_scroll_event
;    jmp   still
;---------------------------------------------------------------------
.set_mouse_flag:
	xor   eax,eax
	inc   eax
	mov   [menu_data_1.get_mouse_flag],eax
	mov   [menu_data_2.get_mouse_flag],eax
	mov   [menu_data_3.get_mouse_flag],eax
	mov   [menu_data_4.get_mouse_flag],eax
	mov   [menu_data_5.get_mouse_flag],eax
	mov   [menu_data_6.get_mouse_flag],eax
	ret
;---------------------------------------------------------------------
analyse_out_menu_1:
; File
	mov eax,[menu_data_1.cursor_out]
	cmp eax,dword 1
	je   kfile
	cmp eax,dword 2
	je   kinfo	
	cmp eax,dword 3
	je   START.exit	 
    jmp   still
;---------------------------------------------------------------------
analyse_out_menu_2:
; Edit
	mov eax,[menu_data_2.cursor_out]
	cmp eax,dword 1
	je   rotate_clockwise
	cmp eax,dword 2
	je   rotate_counter_clockwise	
	cmp eax,dword 3
	je   invert_left_to_right
	cmp eax,dword 4
	je   invert_up_to_down	
    jmp   still
;---------------------------------------------------------------------
analyse_out_menu_3:
; View
	mov  eax,[menu_data_3.cursor_out]
	cmp eax,dword 1
	je   k_sort_directory
	cmp eax,dword 2
	je   full_screen
	cmp eax,dword 3
	je   kopen
    jmp   still
;---------------------------------------------------------------------
analyse_out_menu_4:
; Zoom
	mov eax,[menu_data_4.cursor_out]
	cmp eax,dword 1
	je   no_scaling
	cmp eax,dword 2
	je   zoom_plus
	cmp eax,dword 3
	je   zoom_minus
	cmp eax,dword 4
	je   scaling
    jmp   still
;---------------------------------------------------------------------
analyse_out_menu_5:
; Tools
	mov eax,[menu_data_5.cursor_out]
	cmp eax,dword 1
	je  image_editor
	cmp eax,dword 2
	je  k_background
	cmp eax,dword 3
	je   slide_show.3
	cmp eax,dword 4
	je  k_option
    jmp still
;---------------------------------------------------------------------
analyse_out_menu_6:
; Help
	cmp [menu_data_6.cursor_out],dword 1
	je   open_help
	cmp [menu_data_6.cursor_out],dword 2
	je   kabout
    jmp   still
;---------------------------------------------------------------------
check_scroll_event:
;	jmp  capture_image_area
	mov  eax,[mouse_scroll_data]
	test eax,eax
	jz   capture_image_area ;still
	test ax,0x8000
	jnz  .decr
	shr  eax,16
	test ax,0x8000
	jnz  .decr_1
	pusha
	mov  eax,[scaling_mode]
	test eax,eax	
	jnz  .continue_1
	call  calculation_next_value_minus
	mov  [calc_next_value_minus],1
.continue_1:
	popa
	mov  eax,zoom_factors
	cmp  [eax],dword zoom_factors.min
	jbe  still
	xor  ecx,ecx
	mov  cx,[mouse_scroll_data.vertical]
	test ecx,ecx
	jnz  @f
	mov  cx,[mouse_scroll_data.horizontal]
	test ecx,ecx
	jz   still
@@:
;----------------------------------------
	cmp  [calc_next_value_minus],1
	jne  @f
	mov  [calc_next_value_minus],0
	dec  ecx
	jz   zoom_plus.1
@@:
	mov  ebx,4
@@:
	cmp  [eax],dword zoom_factors.min
	jbe  @f
	sub  [eax],ebx
	dec  ecx
	jnz  @r
	jmp  zoom_plus.1
@@:
	mov  [eax],dword zoom_factors.min
	jmp  zoom_plus.1
;----------------------------------------
.decr:
	xor  ebx,ebx
	mov  bx,[mouse_scroll_data.vertical]
	jmp    @f
.decr_1:
	xor  ebx,ebx
	mov  bx,[mouse_scroll_data.horizontal]
@@:
	pusha
	mov  eax,[scaling_mode]
	test eax,eax	
	jnz  .continue_2
	call  calculation_next_value_plus
	mov  [calc_next_value_plus],1
.continue_2:
	popa
	mov  eax,zoom_factors
	cmp  [eax],dword zoom_factors.max
	jae  still
	mov  ecx,0xffff
	sub  ecx,ebx
	inc  ecx
;---------------------------------------
	cmp  [calc_next_value_plus],1
	jne  @f
	mov  [calc_next_value_plus],0
	dec  ecx
	jz   zoom_plus.1
@@:
	mov  ebx,4
@@:
	cmp  [eax],dword zoom_factors.max
	jae  @f
	add  [eax],ebx
	dec  ecx
	jnz  @r
	jmp  zoom_plus.1
@@:
	mov  [eax],dword zoom_factors.max
	jmp  zoom_plus.1
;---------------------------------------------------------------------
capture_image_area:
	cmp  [scroll_bar_data_vertical.delta2],0
	jne   .no_capture
	cmp  [scroll_bar_data_horizontal.delta2],0
	jne   .no_capture
	xor   eax,eax
	mov   [draw_scrollbar_counter],eax
    mov   eax,[scroll_bar_data_vertical.max_area]
    cmp   eax,[scroll_bar_data_vertical.cur_area]
    jbe   @f
	inc  [draw_scrollbar_counter]
@@:	
    mov   eax,[scroll_bar_data_horizontal.max_area]
    cmp   eax,[scroll_bar_data_horizontal.cur_area]
    jbe   @f
	inc  [draw_scrollbar_counter]
@@:
	cmp  [draw_scrollbar_counter],0
	je   still

	mov  eax,[mouse_position]
	xor  ebx,ebx
	mov  bx,ax  ; EBX mouse y
	shr  eax,16 ; EAX mouse x
	
	mov  ecx,[image_start_coordinates]
	xor  edx,edx
	mov  dx,cx  ; EDX start y
	shr  ecx,16 ; ECX start x
	
	cmp  ax,cx
	jb   still ; min x

	cmp  bx,dx
	jb   still ; min y

	add  cx,[wa_width_2]
	cmp  ax,cx	
	ja   still ; max x

	add  dx,[wa_high_2]
	cmp  bx,dx
	ja   still ; max y

	mov  ecx,[mouse_keys]
	test ecx,1b  ; left button 
	jz   .no_capture ;still

	mov  ecx,[mouse_keys_old]
	test ecx,1b  ; left button old
	jz   .no_capture ;still

	mov  [capture_image_area_flag],1
	
	mov  ecx,[mouse_position_old]
	xor  edx,edx
	mov  dx,cx  ; EDX mouse y old
	shr  ecx,16 ; ECX mouse x old
	
	cmp  eax,ecx
	je   .y
	ja   @f
	sub  ecx,eax
	add  [scroll_bar_data_horizontal.position],ecx
	jmp  .y
@@:
	sub  eax,ecx
	cmp  eax,[scroll_bar_data_horizontal.position]
	jb   @f
	xor  eax,eax
	mov  [scroll_bar_data_horizontal.position],eax
	jmp  .y
@@:
	sub  [scroll_bar_data_horizontal.position],eax
	
.y:
	cmp  ebx,edx
	je   .draw
	ja   @f
	sub  edx,ebx
	add  [scroll_bar_data_vertical.position],edx
	jmp  .draw
@@:
	sub  ebx,edx
	
	cmp  ebx,[scroll_bar_data_vertical.position]
	jb   @f
	xor  eax,eax
	mov  [scroll_bar_data_vertical.position],eax
	jmp  .draw
@@:
	sub  [scroll_bar_data_vertical.position],ebx
	
.draw:
	call  drawimage
	call  draw_scrollbars
	jmp   still
	
.no_capture:
	mov  [capture_image_area_flag],0
.end:
	jmp   still
;---------------------------------------------------------------------