apps/animage: attempt to fix the scrollbar #715

Merged
Burer merged 2 commits from animage-scroll into main 2026-09-24 08:27:27 +00:00
7 changed files with 110 additions and 220 deletions

No files matched your search

+34 -25
View File
@@ -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:
-21
View File
@@ -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
+33 -78
View File
@@ -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
+20 -24
View File
@@ -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 ,,<ci_edit_wnd_y_pos,ci_edit_wnd_border> ;бордюр под панелью и над окном
;------------------------------------------------
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]
+5 -45
View File
@@ -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'
;---------------------------------------------------------------------
+1 -1
View File
@@ -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'
+17 -26
View File
@@ -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