6,12 → 6,11 |
|
;----------------------------------------------------------------------------- |
|
FALSE = 0 |
TRUE = 1 |
include '../../../config.inc' ;for nightbuild |
include '../../../config.inc' |
include '../../../proc32.inc' |
include '../../../macros.inc' |
include 'dll.inc' |
include '../../../dll.inc' |
;include '../../../debug.inc' |
|
include '../../../develop/libraries/libs-dev/libio/libio.inc' |
include '../../../develop/libraries/libs-dev/libimg/libimg.inc' |
53,6 → 52,10 |
mov [next_key], eax |
invoke ini_get_shortcut, inifilename, aShortcuts, aPrev, -1, prev_mod |
mov [prev_key], eax |
invoke ini_get_shortcut, inifilename, aShortcuts, aSlide, -1, slide_mod |
mov [slide_key], eax |
invoke ini_get_shortcut, inifilename, aShortcuts, aTglbar, -1, tglbar_mod |
mov [tglbar_key], eax |
mcall 66, 1, 1 ; set kbd mode to scancodes |
|
cmp byte [@PARAMS], 0 |
140,7 → 143,30 |
jz .next |
add edx, prev_mod - next_mod |
call check_shortcut |
jnz keyloop |
jz .prev |
add edx, slide_mod - prev_mod |
call check_shortcut |
jz .slide |
add edx, tglbar_mod - slide_mod |
call check_shortcut |
jz .tglbar |
cmp cl, 1 ; Esc |
jz .esc |
jmp keyloop |
.esc: |
test byte [bSlideShow], 1 |
jnz .slide |
jmp keyloop |
.tglbar: |
mov byte [bTglbar], 1 |
test byte[bSlideShow], 1 |
jnz @f |
xor [toolbar_height], 31 |
@@: |
jmp keyloop |
.slide: |
call slide_show |
jmp keyloop |
.prev: |
dec esi |
jmp keyloop |
149,7 → 175,12 |
jmp keyloop |
keyloopdone: |
test esi, esi |
jz still |
jnz next_or_prev_handler |
test byte [bSlideShow], 2 |
jnz red |
test byte [bTglbar], 1 |
jnz red |
jmp still |
next_or_prev_handler: |
call next_or_prev_image |
jmp red |
258,7 → 289,14 |
jmp still |
|
@@: |
cmp eax, 'sld' |
jne @f |
|
call slide_show |
jmp red |
|
@@: |
|
or esi, -1 |
cmp eax, 'bck' |
jz next_or_prev_handler |
296,10 → 334,6 |
inc eax |
jz .error |
|
; img.decode checks for img.is_img |
; invoke img.is_img, [img_data], [img_data_len] |
; or eax, eax |
; jz exit |
invoke img.decode, [img_data], [img_data_len], 0 |
or eax, eax |
jz .error |
351,10 → 385,11 |
.not_in_row: |
mov [draw_width], edx |
add edx, 19 |
cmp edx, 40 + 25*9 |
cmp edx, 50 + 25*numimages |
jae @f |
mov edx, 40 + 25*9 |
mov edx, 50 + 25*numimages |
@@: |
; dec edx |
mov [wnd_width], edx |
mov esi, [eax + Image.Height] |
test [eax + Image.Flags], Image.IsAnimated |
370,10 → 405,16 |
@@: pop eax |
.max_equals_first: |
mov [draw_height], esi |
add esi, 44 |
add esi, [toolbar_height] |
add esi, [image_padding] |
add esi, [image_padding] |
add esi, 5 ; window bottom frame height |
dec esi |
mov [wnd_height], esi |
popf |
jz .no_resize |
test [wnd_style], 1 SHL 25 |
jz .no_resize |
mcall 48, 4 |
add esi, eax |
mcall 67,-1,-1 |
399,6 → 440,23 |
mcall 15, 3 |
ret |
|
slide_show: |
or byte [bSlideShow], 2 |
xor byte [bSlideShow], 1 |
btc dword [wnd_style], 25 |
jc @f |
mov eax, [toolbar_height_old] |
mov [toolbar_height], eax |
mov [image_padding], 5 |
jmp .toolbar_height_done |
@@: |
mov eax, [toolbar_height] |
mov [toolbar_height_old], eax |
mov [toolbar_height], 0 |
mov [image_padding], 0 |
.toolbar_height_done: |
ret |
|
; seek to ESI image files |
; esi>0 means next file, esi<0 - prev file |
next_or_prev_image: |
574,7 → 632,8 |
jz .copy |
cmp ecx, 'cur' |
jz .copy |
; dunkaist [ |
cmp ecx, 'tga' |
jz .copy |
cmp ecx, 'pcx' |
jz .copy |
cmp ecx, 'xcf' |
591,7 → 650,6 |
jz @f |
cmp ecx, 'wbmp' |
jz @f |
; dunkaist ] |
cmp ecx, 'jpeg' |
jz @f |
cmp ecx, 'jpeG' |
678,21 → 736,57 |
ret |
|
draw_window: |
btr word [bSlideShow], 1 ; mode changed |
jc .mode_changed |
test byte [bTglbar], 1 |
jz .mode_not_changed |
.mode_changed: |
test [wnd_style], 1 SHL 25 |
jz .mode_slide |
mov [bg_color], 0x00ffffff |
mov eax, [image] |
cmp eax, eax |
call update_image_sizes |
mcall 48, 4 |
mov esi, [wnd_height] |
add esi, eax |
test byte [bTglbar], 1 |
jz @f |
mcall 67, -1, -1, [wnd_width], |
jmp .mode_not_changed |
@@: |
mcall 67, [wnd_x], [wnd_y], [wnd_width], |
jmp .mode_not_changed |
.mode_slide: |
mov [bg_color], 0x00000000 |
mov eax, [procinfo.box.left] |
mov [wnd_x], eax |
mov eax, [procinfo.box.top] |
mov [wnd_y], eax |
mcall 14 |
mov edx, eax |
shr edx, 16 |
movzx eax, ax |
mov esi, eax |
mcall 67, 0, 0, , |
jmp .posok.slide_show |
|
.mode_not_changed: |
cmp [bFirstDraw], 0 |
jz .posok |
or ecx, -1 |
mcall 9, procinfo |
|
cmp dword [ebx + 66], 0 |
jle .posok |
test byte [procinfo.wnd_state], 0x04 |
jnz .posok |
|
mov edx, ecx |
mov esi, ecx |
cmp dword [ebx + 42], 40 + 25 * 9 |
cmp dword [procinfo.box.width], 50 + 25 * numimages |
jae @f |
mov edx, 40 + 25 * 9 |
mov edx, 50 + 25 * numimages |
@@: |
cmp dword [ebx + 46], 70 |
cmp dword [procinfo.box.height], 70 |
jae @f |
mov esi, 70 |
@@: |
705,28 → 799,66 |
@@: |
|
.posok: |
test [wnd_style], 1 SHL 25 |
jz .posok.slide_show |
mcall 12, 1 |
mcall 48, 4 |
mov ebp, eax ; save skin height |
add eax, [wnd_height] |
__mov ebx, 100, 0 |
mov ebx, [wnd_x] |
shl ebx, 16 |
add ebx, [wnd_width] |
lea ecx, [100*65536 + eax] |
mcall 0, , , 0x73FFFFFF, 0, real_header |
|
mov ecx, [wnd_y] |
shl ecx, 16 |
add ecx, eax |
mcall 0, , , [wnd_style], 0, real_header |
jmp .posok.common |
.posok.slide_show: |
mcall 12, 1 |
mcall 14 |
mov ebx, eax |
shr ebx, 16 |
movzx eax, ax |
mov ecx, eax |
mcall 0, , , [wnd_style], 0, real_header |
.posok.common: |
mcall 9, procinfo, -1 |
mov eax, [procinfo.client_box.width] |
sub eax, [image_padding] |
sub eax, [image_padding] |
sub eax, [draw_width] |
sar eax, 1 |
test eax, eax |
jns @f |
mov eax, 0 |
@@: |
add eax, [image_padding] |
mov [draw_x], eax |
mov eax, [procinfo.client_box.height] |
sub eax, [toolbar_height] |
sub eax, [image_padding] |
sub eax, [image_padding] |
sub eax, [draw_height] |
sar eax, 1 |
test eax, eax |
jns @f |
mov eax, 0 |
@@: |
add eax, [toolbar_height] |
add eax, [image_padding] |
mov [draw_y], eax |
mov [bFirstDraw], 1 |
cmp dword [ebx + 66], 0 |
cmp dword [procinfo.client_box.height], 0 |
jle .nodraw |
mov ebx, [ebx + 62] |
mov ebx, [procinfo.client_box.width] |
inc ebx |
mcall 13, , <0, 35>, 0xFFFFFF |
mov ecx, [procinfo + 66] |
mov ecx, [draw_y] |
mcall 13, , , [bg_color] |
mov ecx, [procinfo.client_box.height] |
inc ecx |
; mov esi, [draw_height] ; we can not use [draw_height] here because for *.ico files containing several frames |
mov esi, [image] ; with different size window height should depend on maximum frame height, not the first one |
mov esi, [esi+Image.Height] ; |
add esi, 35 |
mov esi, [cur_frame] |
mov esi, [esi + Image.Height] |
add esi, [draw_y] |
sub ecx, esi |
jbe @f |
push esi |
737,14 → 869,16 |
xor ecx, ecx |
@@: |
add ecx, esi |
add ecx, 35*10000h - 35 |
__mov ebx, 0, 5 |
mov ebx, [draw_y] |
sub ecx, ebx |
shl ebx, 16 |
add ecx, ebx |
mov ebx, [draw_x] |
mcall |
; mov esi, [draw_width] ; we can not use [draw_width] here because for *.ico files containing several frames |
mov esi, [image] ; with different size window width should depend on the sum of width of all frames |
mov esi, [esi + Image.Width] ; |
mov esi, [cur_frame] |
mov esi, [esi + Image.Width] |
add esi, ebx |
mov ebx, [procinfo+62] |
mov ebx, [procinfo.client_box.width] |
inc ebx |
sub ebx, esi |
jbe @f |
753,12 → 887,17 |
mcall |
@@: |
|
mov ebx, [procinfo + 62] |
test [wnd_style], 1 SHL 25 |
jz .slide_show_mode |
mov byte [bTglbar], 0 |
cmp byte [toolbar_height], 0 |
je .decorations_done |
mov ebx, [procinfo.client_box.width] |
push ebx |
mcall 38, , <30, 30>, 0x007F7F7F |
mcall , <5 + 25 * 1, 5 + 25 * 1>, <0, 30> |
mcall , <10 + 25 * 3, 10 + 25 * 3> |
mcall , <15 + 25 * 4, 15 + 25 * 4> |
mcall , <15 + 25 * 5, 15 + 25 * 5> |
pop ebx |
sub ebx, 25 * 5 + 10 |
push ebx |
769,6 → 908,7 |
mcall , <10 + 25 * 1, 20>, , 'bck'+40000000h |
mcall , <10 + 25 * 2, 20>, , 'fwd'+40000000h |
mcall , <15 + 25 * 3, 20>, , 'bgr'+40000000h |
mcall , <15 + 25 * 4, 20>, , 'sld'+40000000h |
pop ebx |
add ebx, 5 |
shl ebx, 16 |
789,7 → 929,8 |
mcall , buttons+backbtn*20, , <10 + 25 * 1, 5> |
mcall , buttons+forwardbtn*20, , <10 + 25 * 2, 5> |
mcall , buttons+bgrbtn*20, , <15 + 25 * 3, 5> |
mov edx, [procinfo + 62] |
mcall , buttons+slidebtn*20, , <15 + 25 * 4, 5> |
mov edx, [procinfo.client_box.width] |
sub edx, 25 * 5 + 4 |
shl edx, 16 |
mov dl, 5 |
802,7 → 943,11 |
mcall , buttons+rotccwbtn*20 |
add edx, 25 * 65536 |
mcall , buttons+rot180btn*20 |
jmp .decorations_done |
|
.slide_show_mode: |
|
.decorations_done: |
call draw_cur_frame |
|
.nodraw: |
813,14 → 958,17 |
draw_cur_frame: |
push 0 ; ypos |
push 0 ; xpos |
mov eax, [procinfo+66] |
sub eax, 34 |
mov eax, [procinfo.client_box.height] |
sub eax, [toolbar_height] |
sub eax, [image_padding] |
inc eax |
push eax ; max height |
mov eax, [procinfo+62] |
sub eax, 4 |
mov eax, [procinfo.client_box.width] |
sub eax, [image_padding] |
inc eax |
push eax ; max width |
push 35 ; y |
push 5 ; x |
push [draw_y] |
push [draw_x] |
push [cur_frame] |
call [img.draw] |
mov eax, [image] |
831,11 → 979,11 |
.done: |
ret |
.additional_frames: |
mov ebx, [procinfo+62] |
sub ebx, 4 |
mov ebx, [procinfo.client_box.width] |
sub ebx, [image_padding] |
inc ebx |
jbe .done |
push 5 |
pop esi |
mov esi, [draw_x] |
.afloop: |
sub ebx, [eax + Image.Width] |
jbe .done |
847,11 → 995,14 |
inc esi |
push 0 ; ypos |
push 0 ; xpos |
mov ecx, [procinfo+66] |
sub ecx, 34 |
mov ecx, [procinfo.client_box.height] |
sub ecx, [toolbar_height] |
sub ecx, [image_padding] |
inc ecx |
; inc ebx |
push ecx ; max height |
push ebx ; max width |
push 35 ; y |
push [draw_y] ; y |
push esi ; x |
push eax ; image |
call [img.draw] |
860,31 → 1011,7 |
jnz .afloop |
ret |
|
; void* __stdcall mem.Alloc(unsigned size); |
mem.Alloc: |
push ebx ecx |
mov ecx, [esp+12] |
mcall 68, 12 |
pop ecx ebx |
ret 4 |
|
; void* __stdcall mem.ReAlloc(void* mptr, unsigned size); |
mem.ReAlloc: |
push ebx ecx edx |
mov edx, [esp+16] |
mov ecx, [esp+20] |
mcall 68, 20 |
pop edx ecx ebx |
ret 8 |
|
; void __stdcall mem.Free(void* mptr); |
mem.Free: |
push ebx ecx |
mov ecx, [esp+12] |
mcall 68, 13 |
pop ecx ebx |
ret 4 |
|
check_shortcut: |
; in: cl = scancode (from sysfn 2), |
; eax = state of modifiers (from sysfn 66.3), |
973,6 → 1100,12 |
;----------------------------------------------------------------------------- |
|
s_header db ' - Kolibri Image Viewer', 0 |
wnd_style dd 0x73FFFFFF |
wnd_x dd 100 |
wnd_y dd 100 |
image_padding dd 5 |
toolbar_height dd 31 |
bg_color dd 0x00ffffff |
|
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
1023,6 → 1156,8 |
OpenDialog_Start,'OpenDialog_start' |
|
bFirstDraw db 0 |
bSlideShow db 0 |
bTglbar db 0 |
;----------------------------------------------------------------------------- |
|
virtual at 0 |
1029,7 → 1164,7 |
file 'kivicons.bmp':0xA,4 |
load offbits dword from 0 |
end virtual |
numimages = 9 |
numimages = 10 |
openbtn = 0 |
backbtn = 1 |
forwardbtn = 2 |
1039,6 → 1174,7 |
rotcwbtn = 6 |
rotccwbtn = 7 |
rot180btn = 8 |
slidebtn = 9 |
|
palette: |
file 'kivicons.bmp':0x36,offbits-0x36 |
1059,6 → 1195,8 |
aShortcuts db 'Shortcuts',0 |
aNext db 'Next',0 |
aPrev db 'Prev',0 |
aSlide db 'SlideShow',0 |
aTglbar db 'ToggleBar',0 |
|
align 4 |
check_modifier_table: |
1113,7 → 1251,7 |
db 'PNG',0 |
db 'ICO',0 |
db 'CUR',0 |
; dunkaist [ |
db 'TGA',0 |
db 'PCX',0 |
db 'XCF',0 |
db 'PBM',0 |
1122,7 → 1260,6 |
db 'TIF',0 |
db 'TIFF',0 |
db 'WBMP',0 |
; dunkaist ] |
.end: |
db 0 |
|
1144,8 → 1281,10 |
img_data_len dd ? |
fh dd ? |
image dd ? |
wnd_width dd ? |
wnd_height dd ? |
wnd_width dd 100 |
wnd_height dd 100 |
draw_x dd ? |
draw_y dd ? |
draw_width dd ? |
draw_height dd ? |
last_name_component dd ? |
1157,8 → 1296,14 |
next_key dd ? |
prev_mod dd ? |
prev_key dd ? |
slide_mod dd ? |
slide_key dd ? |
tglbar_mod dd ? |
tglbar_key dd ? |
|
procinfo: rb 1024 |
toolbar_height_old rd 1 |
|
procinfo process_information |
path: rb 4096 ;1024+16 |
real_header rb 256 |
@PARAMS rb 4096 ;512 |