;---------------------------------------------
;-------------interraction MOUSE--------------
;---------------------------------------------
mouse:
	stdcall [kmainmenu_dispatch_cursorevent], [main_menu]

	or ecx,-1
	mcall SF_THREAD_INFO,procinfo
	
	mov	eax,[procinfo+70] ;staus of window
	test eax,100b
	jne	still
	
	call GetMouseClick

	call GetMouseCoordinats
	mov	eax,[MouseX]
	mov	ebx,[MouseY]
	mov	ecx,[WorkScreen_SizeX]
	mov	edx,[WorkScreen_SizeY]
	add	ecx,ci_scrollh_coord_x_min
	add	edx,ci_scrollv_coord_y_min

	cmp	eax,ecx
	jae	mouse_scroll

	cmp	ebx,edx
	jae	mouse_scroll
	jmp	no_scrollers

mouse_scroll:
	mov	[exit_from_work_arrea],1 ;mouse situated after work arrea
;scrollers
	cmp [MouseBut],0
	je still

	;call GetMouseCoordinats
;interraction with horizontal scroller
	mov	eax,[Scroll1CoordinatX]
	mov	ebx,[Scroll1CoordinatY]
	mov	ecx,[MouseX]
	mov	edx,[MouseY]
	mov	esi,[Scroll1MaxSizeX]
	mov	edi,[Scroll1MaxSizeY]
	call	columnus
	test	eax,eax
	jz	no_horizontal

	mov	eax,ci_scrollh_coord_x_min
	mov	ebx,[Scroll1CoordinatY]
	mov	ecx,[Scroll1MaxSizeX]
	inc ecx
	mov	edx,ci_scroll_dim-6
	mov	esi,7
	call draw_volume_rectangle ; horizontal scrollbar clear

	mov	eax,[MouseX]
	mov	ebx,[Scroll1SizeX]
	shr	ebx,1
	sub	eax,ebx
	mov	ecx,[MouseX]
	add	ecx,ebx
	mov	edx,ci_scrollh_coord_x_min
	add	edx,[Scroll1MaxSizeX]
	mov	[Scroll1CoordinatX],eax
	sub	eax,ci_scrollh_coord_x_min
	jns	no_min_scroll

	mov	[Scroll1CoordinatX],ci_scrollh_coord_x_min

no_min_scroll:
	cmp	ecx,edx
	jl	no_max_scroll

	sub	edx,ebx
	sub	edx,ebx
	mov	[Scroll1CoordinatX],edx

no_max_scroll:
	mov	eax,[Scroll1CoordinatX]
	sub	eax,ci_scrollh_coord_x_min
	mov	ebx,[Picture_SizeX]
	imul	eax,ebx
	mov	ebx,[Scroll1MaxSizeX]
	cdq
	idiv	ebx
	mov	[PosX],eax
	jmp	no_vertical

no_horizontal:
	mov	eax,[Scroll2CoordinatX]
	mov	ebx,[Scroll2CoordinatY]
	mov	ecx,[MouseX]
	mov	edx,[MouseY]
	mov	esi,[Scroll2MaxSizeX]
	mov	edi,[Scroll2MaxSizeY]
	call	columnus
	test	eax,eax
	jz	no_vertical

	mov	eax,[Scroll2CoordinatX]
	mov	ebx,ci_scrollv_coord_y_min
	mov	ecx,ci_scroll_dim-6
	mov	edx,[Scroll2MaxSizeY]
	inc edx
	mov	esi,7
	call draw_volume_rectangle ; vertical scrollbar clear

	mov	eax,[MouseY]
	mov	ebx,[Scroll2SizeY]
	shr	ebx,1
	sub	eax,ebx
	mov	ecx,[MouseY]
	add	ecx,ebx
	mov	edx,ci_scrollv_coord_y_min
	add	edx,[Scroll2MaxSizeY]
	mov	[Scroll2CoordinatY],eax

	sub	eax,ci_scrollv_coord_y_min
	jns	no_min_scroll2

	mov	[Scroll2CoordinatY],ci_scrollv_coord_y_min

no_min_scroll2:
	cmp	ecx,edx
	jl	no_max_scroll2

	sub	edx,ebx
	sub	edx,ebx
	mov	[Scroll2CoordinatY],edx

no_max_scroll2:
	mov	eax,[Scroll2CoordinatY]
	sub	eax,ci_scrollv_coord_y_min
	mov	ebx,[Picture_SizeY]
	imul	eax,ebx
	mov	ebx,[Scroll2MaxSizeY]
	cdq
	idiv	ebx
	mov	[PosY],eax

no_vertical:
	call	CalculatePositionScreen
	call	draw_scrollers
	call	MovePictureToWorkScreen
	jmp	still

no_scrollers:
	mov	eax,[MouseX]
	mov	ebx,[MouseY]
	mov	ecx,[Window_SizeX]
	mov	edx,[Window_SizeY]
	sub	ecx,ci_scroll_dim+ci_edit_wnd_border+5+ci_offs_skin_w
	sub	edx,ci_scroll_dim+ci_edit_wnd_border+5+ci_offs_skin_h

	cmp	eax,ci_scrollh_coord_x_min
	jle	not_work_arrea

	cmp	eax,ecx
	jae	not_work_arrea

	cmp	ebx,ci_scrollv_coord_y_min
	jle	not_work_arrea

	cmp	ebx,edx
	jae	not_work_arrea
	jmp	mouse_in_work_arrea

not_work_arrea:
	mov	[exit_from_work_arrea],1
	mcall SF_MOUSE_GET, SSF_SET_CURSOR, 0 ;set standart cursor
	jmp	still

mouse_in_work_arrea:
	call	GetScreenCordinats
	call	PrintMousePos

	;set cursor for current instrument
	mov eax,CursorsID
	mov ebx,[Current_instrument]
	call set_cursor

	cmp [MouseBut],0
	je no_use_instruments

	cmp	[Activate_instrument],0
	jne	no_undo___
;------------begin copy for undo-------------
;copy bufer_0 -> bufer_2
	mov edi,[PointerToCopyPicture2]
	mov esi,[PointerToPicture]
	mov ecx,[Picture_SizeX]
	imul ecx,[Picture_SizeY]
	lea ecx,[ecx+ecx*2]
	mov ebx,ecx
	shr ecx,2
	cld
	rep movsd
	mov ecx,ebx
	and ecx,3
	rep movsb
;rotate bufers +1
	and	[number_undo],0 ;erase all undo
	mov eax,[PointerToPicture]
	mov ebx,[PointerToCopyPicture]
	mov ecx,[PointerToCopyPicture2]
	mov [PointerToPicture],ecx
	mov [PointerToCopyPicture],eax
	mov [PointerToCopyPicture2],ebx
;--------------end copy for undo-------------
no_undo___:
	call TakeButtonInstruments
	jmp still

no_use_instruments:
	and	[Activate_instrument],0
	jmp	still
;-----------------------------------------------
;---------get mouse cordinats-------------------
;-----------------------------------------------
GetMouseCoordinats:
	mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
	mov	ebx,eax
	shr	eax,16
	and	ebx,0xffff
	mov	[MouseX],eax
	mov	[MouseY],ebx
	ret
;------------------------------------------------
;-------get mouse attributs----------------------
;------------------------------------------------
GetMouseClick:
	mcall SF_MOUSE_GET,SSF_BUTTON_EXT
	mov [MouseBut],eax
	ret