kolibrios/programs/media/animage/trunk/menu_instruments.inc
IgorA 5f7bdd499c new fast algoritm for undo,
optimize code

git-svn-id: svn://kolibrios.org@6355 a494cfbc-eb01-0410-851d-a64ba20cac60
2016-03-17 19:03:33 +00:00

613 lines
12 KiB
PHP

;-----------------------------------------------------------
;-----------instruments of menu-----------------------------
;-----------------------------------------------------------
TakeInstruments:
;|||||||||||||||||||FILE||||||||||||||||||||||
cmp [number_panel],7
jne no_file
;<<<<<NEW>>>>>>>
cmp [number_menu],1
jne no_new
mov eax,80
mov ebx,100
mov ecx,150
mov edx,90
mov esi,1
call draw_volume_rectangle
mov eax,177
mov ebx,115
mov ecx,40
mov edx,14
mov esi,4
call draw_volume_rectangle
mov eax,177
mov ebx,115+24
mov ecx,40
mov edx,14
mov esi,4
call draw_volume_rectangle
mov eax,175
mov ebx,170
mov ecx,40
mov edx,15
mov esi,1
call draw_volume_rectangle
mov eax,90
mov ebx,118
mov ecx,0xffffff
mov edx,new_text1
mov esi,14
call print_text
mov eax,90
mov ebx,118+24
mov ecx,0xffffff
mov edx,new_text2
mov esi,14
call print_text
mov eax,185
mov ebx,175
mov ecx,0xffffff
mov edx,ok_text
mov esi,2
call print_text
mov edx,1000000000000000000000000000000b+1000
mcall SF_DEFINE_BUTTON,<177,40>,<115,14>,
mov edx,1000000000000000000000000000000b+1001
mcall ,,<139,14>,
mov edx,1000000000000000000000000000000b+1002
mcall ,<175,40>,<170,15>
no_activate_space:
mcall SF_WAIT_EVENT
cmp eax,1
je exit_new
cmp eax,3
jne no_activate_space
mcall SF_GET_BUTTON
shr eax,8
cmp eax,1000
jl no_activate_space
cmp eax,1000
jne no_picture_size_x
mov eax,180
mov ebx,119
mov ecx,5
call dialog_line
mov eax,string_
mov ebx,13
call find_symvol
dec eax
mov [length_number],eax
mov eax,string_
call value
mov [Picture_SizeX],eax
jmp no_activate_space
;---------------------------------------------------------------------
no_picture_size_x:
cmp eax,1001
jne no_picture_size_y
mov eax,180
mov ebx,119+24
mov ecx,5
call dialog_line
mov eax,string_
mov ebx,13
call find_symvol
dec eax
mov [length_number],eax
mov eax,string_
call value
mov [Picture_SizeY],eax
jmp no_activate_space
;---------------------------------------------------------------------
no_picture_size_y:
cmp eax,1002
jne no_activate_space
exit_new:
mov edx,11100000000000000000000000000000b+1002
mcall SF_DEFINE_BUTTON,<175,40>,<170,15>
mov edx,11100000000000000000000000000000b+1001
mcall ,<177,40>,<139,14>
mov edx,11100000000000000000000000000000b+1000
mcall ,,<115,14>
;get memory for new picture
call GetMemory
and [save_flag],0
and [number_panel],0
and [number_menu],0
call cleare_work_arrea
call drawwin
jmp still
;---------------------------------------------------------------------
no_new:
;<<<<<OPEN>>>>>>>
cmp [number_menu],2
jne no_open
;---------------------------------------------------------------------
mov [OpenDialog_data.type],0 ; open
push dword OpenDialog_data
call [OpenDialog_Start]
cmp [OpenDialog_data.status],1
jne still
;---------------------------------------------------------------------
mcall SF_SET_EVENTS_MASK,0x80000027 ;100111b
call load_picture
call drawwin
and [number_panel],0
and [number_menu],0
jmp still
;---------------------------------------------------------------------
no_open:
;<<<<<<<<<<<SAVE>>>>>>>>>>>>
cmp [number_menu],3
jne no_save_
mov al,[save_flag]
test al,al
jz no_save_file
jmp save_enter
;---------------------------------------------------------------------
no_save_file:
and [number_panel],0
and [number_menu],0
jmp still
;---------------------------------------------------------------------
no_save_:
;<<<<<<<<<SAVE AS>>>>>>>>>>>
cmp [number_menu],4
jne no_save
; savedialog drawwin,save1,save2,file_path
;---------------------------------------------------------------------
; replace extension to '.bmp'
push eax esi
mov esi,[OpenDialog_data.filename_area]
xor eax,eax
cld
@@:
lodsb
test eax,eax
jnz @r
sub esi,5
cmp [esi],byte '.'
jne @f
mov [esi],dword '.bmp'
@@:
pop esi eax
;---------------------------------------------------------------------
mov [OpenDialog_data.type],1 ; save
push dword OpenDialog_data
call [OpenDialog_Start]
cmp [OpenDialog_data.status],1
jne still
;---------------------------------------------------------------------
save1:
save_enter:
mcall SF_SET_EVENTS_MASK,0x80000027 ;100111b
call analizing_picture_to_palette
;eax => number of colors in picture
mov ebx,[PointerToPicture]
mov ecx,[PointerToEditBufer]
mov edx,[PointerToPalette]
mov esi,[Picture_SizeX]
mov edi,[Picture_SizeY]
call coding_bmp
mov eax,file_path
mov ecx,ebx
mov ebx,[PointerToEditBufer]
call save_file
mov [save_flag],1
and [number_panel],0
and [number_menu],0
call drawwin
jmp still
;---------------------------------------------------------------------
;save2:
; and [number_panel],0
; and [number_menu],0
; jmp still
;---------------------------------------------------------------------
no_save:
;<<<<<<EXIT>>>>>>>
cmp [number_menu],5
jne no_exit_program
mcall SF_TERMINATE_PROCESS
;---------------------------------------------------------------------
no_exit_program:
no_file:
;|||||||||||||||||||||||||||||EDIT|||||||||||||||||||||||||
;<<<<<<<<<<UNDO>>>>>>>>>>
cmp [number_panel],6
jne still ;no_edit
cmp [number_menu],1
jne no_undo
cmp [number_undo],2 ;2 - maximum undo count
jge no_undo
;rotate bufers -1
inc [number_undo]
mov eax,[PointerToPicture]
mov ebx,[PointerToCopyPicture]
mov ecx,[PointerToCopyPicture2]
mov [PointerToPicture],ebx
mov [PointerToCopyPicture],ecx
mov [PointerToCopyPicture2],eax
call MovePictureToWorkScreen
and [number_panel],0
and [number_menu],0
jmp still
;---------------------------------------------------------------------
no_undo:
;<<<<<<<<<<COPY>>>>>>>>>>
cmp [number_menu],2
jne no_copy
cmp [instrument_used],1
jne no_copy
cmp [Activate_instrument],0
jne no_copy
mov eax,[OldX]
mov ebx,[OldY]
cmp eax,[rectangular_shade_x]
jl no_remove_x_copy
mov ecx,[rectangular_shade_x]
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x
mov [rectangular_shade_x],eax
no_remove_x_copy:
cmp ebx,[rectangular_shade_y]
jl no_remove_y_copy
mov ecx,[rectangular_shade_y]
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y
mov [rectangular_shade_y],ebx
no_remove_y_copy:
mov eax,[OldX]
mov ebx,[OldY]
mov ecx,[rectangular_shade_x]
mov edx,[rectangular_shade_y]
inc eax
inc ebx
dec ecx
dec edx
mov [x],eax
mov [y],ebx
mov esi,eax
mov edi,ebx
mov [Dx_],1
mov [Dy_],1
sub ecx,eax
jnz no_signum_fill_r_x_copy
mov [Dx_],-1
no_signum_fill_r_x_copy:
sub edx,ebx
jnz no_signum_fill_r_y_copy
mov [Dy_],-1
no_signum_fill_r_y_copy:
mov ebx,[rectangular_shade_y]
sub ebx,edi
mov edx,[PointerToEditBufer]
mov [y],edi
loop_fill_rectangle_y_copy:
mov [x],esi
loop_fill_rectangle_x_copy:
push esi edi
mov eax,[PointerToPicture]
mov ebx,[Picture_SizeX]
mov esi,[x]
mov edi,[y]
call GetColorOfPixel
mov [edx],ax
shr eax,16
mov [edx+2],al
pop edi esi
add edx,3
mov eax,[x]
add eax,[Dx_]
mov [x],eax
cmp eax,[rectangular_shade_x]
jl loop_fill_rectangle_x_copy
mov eax,[y]
add eax,[Dy_]
mov [y],eax
cmp eax,[rectangular_shade_y]
jl loop_fill_rectangle_y_copy
call MovePictureToWorkScreen
and [number_panel],0
and [number_menu],0
mov [DrawSprite_flag],1
jmp still
;---------------------------------------------------------------------
no_copy:
;<<<<<<<<<<PASTE>>>>>>>>
cmp [number_menu],3
jne no_paste
cmp [instrument_used],1
jne no_paste
cmp [Activate_instrument],0
jne no_paste
mov eax,[OldX]
mov ebx,[OldY]
cmp eax,[rectangular_shade_x]
jl no_remove_x_paste
mov ecx,[rectangular_shade_x]
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x
mov [rectangular_shade_x],eax
no_remove_x_paste:
cmp ebx,[rectangular_shade_y]
jl no_remove_y_paste
mov ecx,[rectangular_shade_y]
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y
mov [rectangular_shade_y],ebx
no_remove_y_paste:
mov eax,[OldX]
mov ebx,[OldY]
mov ecx,[rectangular_shade_x]
mov edx,[rectangular_shade_y]
inc eax
inc ebx
dec ecx
dec edx
mov [x],eax
mov [y],ebx
mov esi,eax
mov edi,ebx
mov [Dx_],1
mov [Dy_],1
sub ecx,eax
jnz no_signum_fill_r_x_paste
mov [Dx_],-1
no_signum_fill_r_x_paste:
sub edx,ebx
jnz no_signum_fill_r_y_paste
mov [Dy_],-1
no_signum_fill_r_y_paste:
mov edx,[PointerToEditBufer]
mov [y],edi
loop_fill_rectangle_y_paste:
mov [x],esi
loop_fill_rectangle_x_paste:
push esi edi
mov ecx,[edx]
and ecx,0xffffff ;color
mov eax,[PointerToPicture]
mov ebx,[Picture_SizeX]
mov esi,[x]
mov edi,[y]
call PutPixel
pop edi esi
add edx,3
mov eax,[x]
add eax,[Dx_]
mov [x],eax
cmp eax,[rectangular_shade_x]
jl loop_fill_rectangle_x_paste
mov eax,[y]
add eax,[Dy_]
mov [y],eax
cmp eax,[rectangular_shade_y]
jl loop_fill_rectangle_y_paste
call MovePictureToWorkScreen
and [number_panel],0
and [number_menu],0
mov [Paste_flag],1
jmp still
;---------------------------------------------------------------------
no_paste:
;<<<<<<<<<<CUT>>>>>>>>>>
cmp [number_menu],4
jne no_cut
cmp [instrument_used],1
jne no_cut
cmp [Activate_instrument],0
jne no_cut
mov eax,[OldX]
mov ebx,[OldY]
cmp eax,[rectangular_shade_x]
jl no_remove_x_cut
mov ecx,[rectangular_shade_x]
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x
mov [rectangular_shade_x],eax
no_remove_x_cut:
cmp ebx,[rectangular_shade_y]
jl no_remove_y_cut
mov ecx,[rectangular_shade_y]
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y
mov [rectangular_shade_y],ebx
no_remove_y_cut:
mov eax,[OldX]
mov ebx,[OldY]
mov ecx,[rectangular_shade_x]
mov edx,[rectangular_shade_y]
inc eax
inc ebx
dec ecx
dec edx
mov [x],eax
mov [y],ebx
mov esi,eax
mov edi,ebx
mov [Dx_],1
mov [Dy_],1
sub ecx,eax
jnz no_signum_fill_r_x
mov [Dx_],-1
no_signum_fill_r_x:
sub edx,ebx
jnz no_signum_fill_r_y
mov [Dy_],-1
no_signum_fill_r_y:
mov [y],edi
loop_fill_rectangle_y:
mov [x],esi
loop_fill_rectangle_x:
push esi edi
mov eax,[PointerToPicture]
mov ebx,[Picture_SizeX]
mov ecx,dword 0xffffff
mov esi,[x]
mov edi,[y]
call PutPixel
pop edi esi
mov eax,[x]
add eax,[Dx_]
mov [x],eax
cmp eax,[rectangular_shade_x]
jl loop_fill_rectangle_x
mov eax,[y]
add eax,[Dy_]
mov [y],eax
cmp eax,[rectangular_shade_y]
jl loop_fill_rectangle_y
call MovePictureToWorkScreen
and [number_panel],0
and [number_menu],0
jmp still
;---------------------------------------------------------------------
no_cut:
;<<<<<<CLEARE ALL>>>>>>
cmp [number_menu],5
jne no_cleare_all
call cleare_work_arrea
call MovePictureToWorkScreen
and [number_panel],0
and [number_menu],0
jmp still
;---------------------------------------------------------------------
no_cleare_all:
;<<<<<<TO ALLOCATE ALL>>>>>>
cmp [number_menu],6
jne still ;no_to_allocate_all
mov [OldX],1
mov [OldY],1
mov eax,[Picture_SizeX]
mov ebx,[Picture_SizeY]
dec eax
dec ebx
mov [rectangular_shade_x],eax
mov [rectangular_shade_y],ebx
mov [instrument_used],1
mov [Activate_instrument],1
mov [Current_instrument],30
mov [crossing],0
and [number_panel],0
and [number_menu],0
; call TakeButtonInstruments
; call MovePictureToWorkScreen
jmp still
;---------------------------------------------------------------------
;no_to_allocate_all:
;no_edit:
; jmp still
;---------------------------------------------------------------------