diff --git a/programs/media/animage/animage.asm b/programs/media/animage/animage.asm index b9ebbdaca..43ad578c2 100644 --- a/programs/media/animage/animage.asm +++ b/programs/media/animage/animage.asm @@ -51,6 +51,7 @@ include '../../load_lib.mac' include '../../dll.inc' include '../../develop/libraries/libs-dev/libio/libio.inc' include '../../develop/libraries/libs-dev/libimg/libimg.inc' +include '../../develop/libraries/box_lib/box_lib.mac' ;include '../../debug.inc' @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @@ -63,15 +64,16 @@ ci_offs_skin_w equ 5 ;adjustment to the width of the skin frame ci_offs_skin_h equ 24 ;skin height adjustment ; main window -ci_wnd_min_siz_x equ 585 ;minimum size x -ci_wnd_min_siz_y equ 400 ;minimum size y +ci_wnd_start_siz_x equ 585 +ci_wnd_start_siz_y equ 400 +ci_wnd_min_siz_x equ 510 ;minimum size x +ci_wnd_min_siz_y equ 180 ;minimum size y ; toolbar ci_panel_x_pos equ 0 ;coord. x for panel ci_panel_y_pos equ 20 ;coord. y for panel ci_panel_but_y1 equ ci_panel_y_pos +5 ;y coordinate for 1st row of buttons ci_panel_but_y2 equ ci_panel_y_pos+30 ;y coordinate for 2nd row of buttons -ci_palete_y_pos equ ci_panel_y_pos+51 ;y coordinate for color palette ci_panel_zoom_x equ 178 ;x coordinate for zoom bar buttons ; editor window @@ -80,7 +82,7 @@ ci_edit_wnd_y_pos equ 71 ;y coordinate for editor window ci_edit_wnd_border equ 3 ;frame around the editor window ; scrolling -ci_scroll_dim equ 22 ;scroll sizes +ci_scroll_dim equ 16 ;scroll sizes ci_scrollh_coord_x_min equ (ci_edit_wnd_x_pos+3) ;x minimum slider position ;horizontal scrolling ci_scrollv_coord_y_min equ (ci_edit_wnd_y_pos+3) ;y minimum slider position @@ -149,6 +151,12 @@ include 'init_data.inc' ;OpenDialog initialisation stdcall [OpenDialog_Init], OpenDialog_data stdcall [ColorDialog_Init], ColorDialog_data + + mcall SF_REDRAW,SSF_BEGIN_DRAW + mov ebx,50 shl 16 + ci_wnd_start_siz_x + mov ecx,50 shl 16 + ci_wnd_start_siz_y + mcall SF_CREATE_WINDOW,,,0x73aabbcc,,name_of_program + mcall SF_REDRAW,SSF_END_DRAW ;--------------------------------------------------------------------- align 4 @@ -161,16 +169,16 @@ align 4 still: mcall SF_WAIT_EVENT - cmp eax,1 + cmp eax,EV_REDRAW je red - cmp eax,2 + cmp eax,EV_KEY je keys - cmp eax,3 + cmp eax,EV_BUTTON je buttons - cmp eax,6 + cmp eax,EV_MOUSE je mouse jmp still @@ -186,7 +194,16 @@ copy_str_1: jnz @b ret ;--------------------------------------------------------------------- -include 'events.inc' +;description: +; move both scrollbars back to the top left corner (0,0) +align 4 +scrollbar_move_00: + and [PosX],0 + and [PosY],0 + mov [sb_horizont.position],0 + mov [sb_vertical.position],0 + ret +;--------------------------------------------------------------------- include 'events_of_window.inc' include 'events_of_keys.inc' include 'events_of_buttons.inc' @@ -205,7 +222,6 @@ include 'menu.inc' ;----------------------------------------------------------- ;------------variables and data of program------------------ ;----------------------------------------------------------- -;sound_havent_memory db 150,64,0 include 'lib_data.inc' include 'panel_data.inc' @@ -240,6 +256,13 @@ spray_cursor: file 'cursors/spray.cur' zoom_cursor: file 'cursors/zoom.cur' + +align 4 +scroll_drag dd 0 +sb_horizont scrollbar ci_wnd_start_siz_x-ci_scroll_dim-2*ci_offs_skin_w,0,\ + ci_scroll_dim,ci_edit_wnd_y_pos+284, 15, 100,30,0, 0xaaaaaa, 0xcccccc,0, 1 +sb_vertical scrollbar ci_scroll_dim,ci_wnd_start_siz_x-ci_scroll_dim-2*ci_offs_skin_w,\ + 284,ci_edit_wnd_y_pos, 15, 100,30,0, 0xaaaaaa, 0xcccccc,0, 1 ;---------------------------------------------------------- align 4 IM_END: @@ -305,20 +328,6 @@ counter2 rd 1 number_panel rd 1 number_menu rd 1 -Scroll1CoordinatX rd 1 ;scroll x screen position -Scroll1CoordinatY rd 1 ;scroll y screen position -Scroll1MaxSizeX rd 1 -Scroll1MaxSizeY rd 1 -Scroll1SizeX rd 1 ;scroll polzunok size -Scroll1FreeX rd 1 - -Scroll2CoordinatX rd 1 -Scroll2CoordinatY rd 1 -Scroll2MaxSizeX rd 1 -Scroll2MaxSizeY rd 1 -Scroll2SizeY rd 1 -Scroll2FreeY rd 1 - x rd 1 y rd 1 @@ -366,7 +375,7 @@ filename_area rb 256 temp_dir_pach rb 4096 library_path rb 4096 cur_dir_path rb 4096 -procinfo: rb 1024 +procinfo process_information align 4 syscolors rb 192 syscolors_end: diff --git a/programs/media/animage/events.inc b/programs/media/animage/events.inc deleted file mode 100644 index 0344113fd..000000000 --- a/programs/media/animage/events.inc +++ /dev/null @@ -1,21 +0,0 @@ -;---------------------------------------------------------- -;---------------------sound of events---------------------- -;---------------------------------------------------------- -align 4 -sound: - mcall SF_SPEAKER_PLAY,55 - ret - -;---------------------------------------------------------- -;---------------------user events-------------------------- -;---------------------------------------------------------- - -;description: -; перемещение скроллингов в левый верхний угол (0,0) -align 4 -scrollbar_move_00: - and [PosX],0 - and [PosY],0 - mov [Scroll1CoordinatX],ci_scrollh_coord_x_min - mov [Scroll2CoordinatY],ci_scrollv_coord_y_min - ret \ No newline at end of file diff --git a/programs/media/animage/events_of_mouse.inc b/programs/media/animage/events_of_mouse.inc index 4ca74f754..dc029b6dd 100644 --- a/programs/media/animage/events_of_mouse.inc +++ b/programs/media/animage/events_of_mouse.inc @@ -1,17 +1,22 @@ ;--------------------------------------------- ;-------------interraction MOUSE-------------- ;--------------------------------------------- +align 4 mouse: stdcall [kmainmenu_dispatch_cursorevent], [main_menu] or ecx,-1 mcall SF_THREAD_INFO,procinfo - mov eax,[procinfo+70] ;staus of window + movzx eax,byte [procinfo.wnd_state] test eax,100b jne still call GetMouseClick + bt [MouseBut],16 + jnc @f + mov [scroll_drag],0 +@@: call GetMouseCoordinats mov eax,[MouseX] @@ -21,6 +26,11 @@ mouse: add ecx,ci_scrollh_coord_x_min add edx,ci_scrollv_coord_y_min + cmp [scroll_drag],1 + je sb_hor_mouse + cmp [scroll_drag],2 + je sb_ver_mouse + cmp eax,ecx jae mouse_scroll @@ -36,105 +46,50 @@ mouse_scroll: ;call GetMouseCoordinats ;interraction with horizontal scroller - mov eax,[Scroll1CoordinatX] - mov ebx,[Scroll1CoordinatY] + movzx eax,[sb_horizont.x_pos] + movzx ebx,[sb_horizont.y_pos] mov ecx,[MouseX] mov edx,[MouseY] - mov esi,[Scroll1MaxSizeX] - mov edi,[Scroll1MaxSizeY] + movzx esi,[sb_horizont.x_size] + movzx edi,[sb_horizont.y_size] 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 + bt [MouseBut],8 + jnc sb_hor_mouse + mov [scroll_drag],1 +sb_hor_mouse: + stdcall [scrollbar_h_mouse],sb_horizont + mov eax,[sb_horizont.position] mov ebx,[Picture_SizeX] imul eax,ebx - mov ebx,[Scroll1MaxSizeX] + mov ebx,[sb_horizont.max_area] cdq idiv ebx mov [PosX],eax jmp no_vertical no_horizontal: - mov eax,[Scroll2CoordinatX] - mov ebx,[Scroll2CoordinatY] + movzx eax,[sb_vertical.x_pos] + movzx ebx,[sb_vertical.y_pos] mov ecx,[MouseX] mov edx,[MouseY] - mov esi,[Scroll2MaxSizeX] - mov edi,[Scroll2MaxSizeY] + movzx esi,[sb_vertical.x_size] + movzx edi,[sb_vertical.y_size] 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 + bt [MouseBut],8 + jnc sb_ver_mouse + mov [scroll_drag],2 +sb_ver_mouse: + stdcall [scrollbar_v_mouse],sb_vertical + mov eax,[sb_vertical.position] mov ebx,[Picture_SizeY] imul eax,ebx - mov ebx,[Scroll2MaxSizeY] + mov ebx,[sb_vertical.max_area] cdq idiv ebx mov [PosY],eax diff --git a/programs/media/animage/events_of_window.inc b/programs/media/animage/events_of_window.inc index 8ab123b1d..c46f5989c 100644 --- a/programs/media/animage/events_of_window.inc +++ b/programs/media/animage/events_of_window.inc @@ -4,12 +4,11 @@ drawwin: or ecx,-1 mcall SF_THREAD_INFO,procinfo - mov esi,procinfo - mov eax,[esi+process_information.box.left] - mov ebx,[esi+process_information.box.top] - mov ecx,[esi+process_information.box.width] - mov edx,[esi+process_information.box.height] + mov eax,[procinfo.box.left] + mov ebx,[procinfo.box.top] + mov ecx,[procinfo.box.width] + mov edx,[procinfo.box.height] mov [Window_CordinatX],eax mov [Window_CordinatY],ebx @@ -23,6 +22,20 @@ drawwin: @@: mov [Window_SizeX],ecx mov [Window_SizeY],edx + ; keep the size alone for a rolled up window + test [procinfo.wnd_state],byte 100b + jnz .no_change + cmp ecx,[procinfo.box.width] + jne @f + cmp edx,[procinfo.box.height] + jz .no_change + @@: + push ecx edx esi + mov esi,edx + mov edx,ecx + mcall SF_CHANGE_WINDOW, -1, -1 + pop esi edx ecx +.no_change: mov [MaxWorkScreen_SizeX],ecx mov [MaxWorkScreen_SizeY],edx sub [MaxWorkScreen_SizeX],ci_edit_wnd_x_pos+2*ci_edit_wnd_border\ @@ -51,7 +64,7 @@ no_znak2: add ecx, [Window_SizeY] mcall SF_CREATE_WINDOW,,,0x73aabbcc,,name_of_program - mov eax,[procinfo+70] ;staus of window + movzx eax,byte [procinfo.wnd_state] test eax,100b jne .end @@ -81,7 +94,7 @@ no_znak2: add ebx,ci_edit_wnd_x_pos+ci_edit_wnd_border mov edx,[Window_SizeX] sub edx,ebx - sub edx,ci_scroll_dim+5-ci_edit_wnd_border + sub edx,ci_scroll_dim+5+ci_edit_wnd_border shl ebx,16 mov bx,dx ;ширина бордюра @@ -113,23 +126,6 @@ no_znak2: ;------------------------------------------------ mcall ,, ;бордюр под панелью и над окном ;------------------------------------------------ - mov eax,ci_edit_wnd_x_pos - mov ebx,[Window_SizeY] - mov ecx,[Window_SizeX] - mov edx,ci_scroll_dim - mov esi,3 - sub ecx,ci_scroll_dim+5+ci_edit_wnd_x_pos+ci_offs_skin_w - sub ebx,ci_scroll_dim+5+ci_offs_skin_h - call draw_volume_rectangle ; horizontal scrollbar border -;------------------------------------------------ - mov eax,[Window_SizeX] - mov ebx,ci_edit_wnd_y_pos - mov ecx,ci_scroll_dim - mov edx,[Window_SizeY] - mov esi,3 - sub eax,ci_scroll_dim+5+ci_offs_skin_w - sub edx,ci_scroll_dim+5+ci_edit_wnd_y_pos+ci_offs_skin_h - call draw_volume_rectangle ; vertical scrollbar border call draw_scrollers ;------------------------------------------------ mov eax,[Window_SizeX] diff --git a/programs/media/animage/lib_data.inc b/programs/media/animage/lib_data.inc index b676f22aa..77523d65f 100644 --- a/programs/media/animage/lib_data.inc +++ b/programs/media/animage/lib_data.inc @@ -2,12 +2,14 @@ system_dir_1: db '/sys/lib/libimg.obj',0 system_dir_2 db '/sys/lib/proc_lib.obj',0 system_dir_3: db '/sys/lib/kmenu.obj',0 +system_dir_4: db '/sys/lib/box_lib.obj',0 ;--------------------------------------------------------------------- align 4 l_libs_start: lib1 l_libs system_dir_1+9, library_path, system_dir_1, import_libimg lib2 l_libs system_dir_2+9, library_path, system_dir_2, ProcLib_import lib3 l_libs system_dir_3+9, library_path, system_dir_3, import_libkmenu + lib4 l_libs system_dir_4+9, library_path, system_dir_4, import_box_lib end_l_libs: ;--------------------------------------------------------------------- align 4 @@ -79,51 +81,7 @@ colordialog_path: path4 db '/sys/noname.bmp',0 ;--------------------------------------------------------------------- -align 4 -import_libimg: - dd alib_init1 - img_is_img dd aimg_is_img - img_info dd aimg_info - img_from_file dd aimg_from_file - img_to_file dd aimg_to_file - img_from_rgb dd aimg_from_rgb - img_to_rgb dd aimg_to_rgb - img_to_rgb2 dd aimg_to_rgb2 - img_decode dd aimg_decode - img_encode dd aimg_encode - img_create dd aimg_create - img_destroy dd aimg_destroy - img_destroy_layer dd aimg_destroy_layer - img_count dd aimg_count - img_lock_bits dd aimg_lock_bits - img_unlock_bits dd aimg_unlock_bits - img_flip dd aimg_flip - img_flip_layer dd aimg_flip_layer - img_rotate dd aimg_rotate - img_rotate_layer dd aimg_rotate_layer - img_draw dd aimg_draw -dd 0,0 - alib_init1 db 'lib_init',0 - aimg_is_img db 'img_is_img',0 - aimg_info db 'img_info',0 - aimg_from_file db 'img_from_file',0 - aimg_to_file db 'img_to_file',0 - aimg_from_rgb db 'img_from_rgb',0 - aimg_to_rgb db 'img_to_rgb',0 - aimg_to_rgb2 db 'img_to_rgb2',0 - aimg_decode db 'img_decode',0 - aimg_encode db 'img_encode',0 - aimg_create db 'img_create',0 - aimg_destroy db 'img_destroy',0 - aimg_destroy_layer db 'img_destroy_layer',0 - aimg_count db 'img_count',0 - aimg_lock_bits db 'img_lock_bits',0 - aimg_unlock_bits db 'img_unlock_bits',0 - aimg_flip db 'img_flip',0 - aimg_flip_layer db 'img_flip_layer',0 - aimg_rotate db 'img_rotate',0 - aimg_rotate_layer db 'img_rotate_layer',0 - aimg_draw db 'img_draw',0 +include '../../develop/libraries/libs-dev/libimg/import.inc' align 4 ProcLib_import: @@ -163,4 +121,6 @@ dd 0,0 akmenuitem_new db 'kmenuitem_new',0 akmenuitem_delete db 'kmenuitem_delete',0 akmenuitem_draw db 'kmenuitem_draw',0 + +include '../../develop/libraries/box_lib/import.inc' ;--------------------------------------------------------------------- \ No newline at end of file diff --git a/programs/media/animage/panel_data.inc b/programs/media/animage/panel_data.inc index 1fbde3a0b..f7295e246 100644 --- a/programs/media/animage/panel_data.inc +++ b/programs/media/animage/panel_data.inc @@ -1,7 +1,7 @@ ;********************************************************** ;------------------TEXT DATA------------------------------- ;********************************************************** -name_of_program db 'ANIMAGE graphics editor v1.52',0 +name_of_program db 'ANIMAGE graphics editor v1.53',0 mouse_pos_x db 'X=' mouse_pos_y db 'Y=' new_text1 db 'PICTURE SIZE X' diff --git a/programs/media/animage/panel_engen.inc b/programs/media/animage/panel_engen.inc index 3845f5747..3240b7e5c 100644 --- a/programs/media/animage/panel_engen.inc +++ b/programs/media/animage/panel_engen.inc @@ -58,18 +58,16 @@ PrintMousePos: ;---------------------------------------------------------- ;------------draw lines of scoll--------------------------- ;---------------------------------------------------------- +align 4 draw_scrollers: mov edi,[CounterX] - mov eax,[Scroll1CoordinatX] mov ebx,[Window_SizeY] - sub ebx,(ci_scroll_dim-3)+5+ci_offs_skin_h + sub ebx,ci_scroll_dim+5+ci_offs_skin_h mov ecx,[Window_SizeX] - sub ecx,ci_scroll_dim+5+4+ci_scrollh_coord_x_min+ci_offs_skin_w - mov edx,ci_scroll_dim-6 - mov esi,1 - mov [Scroll1CoordinatY],ebx - mov [Scroll1MaxSizeY],edx - mov [Scroll1MaxSizeX],ecx + sub ecx,ci_scroll_dim+2+ci_scrollh_coord_x_min+ci_offs_skin_w + mov [sb_horizont.y_pos],bx + mov [sb_horizont.max_area],ecx + mov [sb_horizont.x_size],cx imul ecx,edi push eax ebx edx mov eax,ecx @@ -78,22 +76,15 @@ draw_scrollers: 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 [sb_horizont.cur_area],ecx mov eax,[Window_SizeX] - sub eax,(ci_scroll_dim-3)+5+ci_offs_skin_w - mov ebx,[Scroll2CoordinatY] - mov ecx,ci_scroll_dim-6 + sub eax,ci_scroll_dim+5+ci_offs_skin_w mov edx,[Window_SizeY] - sub edx,ci_scroll_dim+5+4+ci_scrollv_coord_y_min+ci_offs_skin_h - mov esi,1 - mov [Scroll2CoordinatX],eax - mov [Scroll2MaxSizeX],ecx - mov [Scroll2MaxSizeY],edx + sub edx,ci_scroll_dim+2+ci_scrollv_coord_y_min+ci_offs_skin_h + mov [sb_vertical.x_pos],ax + mov [sb_vertical.max_area],edx + mov [sb_vertical.y_size],dx imul edx,[CounterY] push eax ebx @@ -103,12 +94,12 @@ draw_scrollers: 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 + mov [sb_vertical.cur_area],edx + mov [sb_vertical.all_redraw],1 + stdcall [scrollbar_v_draw],sb_vertical + mov [sb_horizont.all_redraw],1 + stdcall [scrollbar_h_draw],sb_horizont ret button_menu_size_x dd 0