Subversion Repositories Kolibri OS

Rev

Rev 8497 | Rev 8945 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5183 hidnplayr 1
format binary as ""
2
 
1004 diamond 3
use32
4
org 0x0
5
 
6
db 'MENUET01'
7656 dunkaist 7
dd 0x01, START, I_END, E_END, stacktop, __params, sys_path
1004 diamond 8
 
9
;-----------------------------------------------------------------------------
10
 
7656 dunkaist 11
__DEBUG__        = 0
12
__DEBUG_LEVEL__  = 1
1004 diamond 13
 
7656 dunkaist 14
LG_TRACE equ 1
1004 diamond 15
 
7879 leency 16
include '../../../config.inc'
17
include '../../../proc32.inc'
18
include '../../../macros.inc'
19
include '../../../KOSfuncs.inc'
20
include '../../../dll.inc'
21
include '../../../debug-fdo.inc'
22
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
7656 dunkaist 23
 
24
 
25
KEY_MOVE_PIXELS   = 50
26
SCROLL_WIDTH_SIZE = 15
27
AR_OFFSET         = 10
28
 
7860 dunkaist 29
MIN_WINDOW_WIDTH  = 50+25*numimages
7656 dunkaist 30
MIN_WINDOW_HEIGHT = 100
31
TOOLBAR_HEIGHT    = 31
32
CANVAS_PADDING    = 5
1004 diamond 33
;-----------------------------------------------------------------------------
34
 
35
START:
7656 dunkaist 36
        mcall   SF_SYS_MISC, SSF_HEAP_INIT
37
        mcall   SF_KEYBOARD, SSF_SET_INPUT_MODE, 1  ; set kbd mode to scancodes
8497 dunkaist 38
        mcall   SF_SET_EVENTS_MASK, EVM_REDRAW or EVM_KEY or EVM_BUTTON or \
39
                EVM_MOUSE or EVM_MOUSE_FILTER
1004 diamond 40
 
7656 dunkaist 41
        stdcall dll.Load, @IMPORT
42
        or      eax, eax
43
        jnz     exit
1004 diamond 44
 
7656 dunkaist 45
        invoke  sort.START, 1
1016 diamond 46
 
7656 dunkaist 47
        mov     ecx, 1  ; for 15.4: 1 = tile
48
        cmp     word[__params], '\T'
49
        jz      set_bgr
50
        inc     ecx     ; for 15.4: 2 = stretch
51
        cmp     word[__params], '\S'
52
        jz      set_bgr
1004 diamond 53
 
7656 dunkaist 54
        cmp     byte[__params], 0
55
        jz      @f
56
        mov     esi, __params
57
        mov     edi, path
58
        mov     ecx, 4096/4
8497 dunkaist 59
        rep movsd
7656 dunkaist 60
        mov     byte[edi-1], 0
7860 dunkaist 61
@@:
1594 mario79 62
; OpenDialog initialisation
7656 dunkaist 63
        push    dword OpenDialog_data
64
        call    [OpenDialog_Init]
1594 mario79 65
 
1427 diamond 66
; initialize keyboard handling
7879 leency 67
        invoke  ini_get_shortcut, inifilename, aKivSection, aNext, -1, next_mod
7656 dunkaist 68
        mov     [next_key], eax
7879 leency 69
        invoke  ini_get_shortcut, inifilename, aKivSection, aPrev, -1, prev_mod
7656 dunkaist 70
        mov     [prev_key], eax
7879 leency 71
        invoke  ini_get_shortcut, inifilename, aKivSection, aSlide, -1, slide_mod
7656 dunkaist 72
        mov     [slide_key], eax
7879 leency 73
        invoke  ini_get_shortcut, inifilename, aKivSection, aTglbar, -1, tglbar_mod
7656 dunkaist 74
        mov     [tglbar_key], eax
8497 dunkaist 75
 
7879 leency 76
        invoke  ini_get_int, inifilename, aKivSection, aWinX, 100
77
        mov     [window.left], eax
78
        invoke  ini_get_int, inifilename, aKivSection, aWinY, 150
79
        mov     [window.top], eax
80
        invoke  ini_get_int, inifilename, aKivSection, aWinW, 0
81
        mov     [window.width], eax
82
        invoke  ini_get_int, inifilename, aKivSection, aWinH, 0
83
        mov     [window.height], eax
1427 diamond 84
 
7656 dunkaist 85
        cmp     byte[__params], 0
86
        jnz     params_given
1004 diamond 87
 
7656 dunkaist 88
        mov     [OpenDialog_data.draw_window], draw_window_fake
89
 
1511 mario79 90
; OpenDialog Open
7656 dunkaist 91
        push    dword OpenDialog_data
92
        call    [OpenDialog_Start]
1470 mario79 93
 
7656 dunkaist 94
        cmp     [OpenDialog_data.status], 1
95
        jnz     exit
1470 mario79 96
 
7656 dunkaist 97
        mov     [OpenDialog_data.draw_window], draw_window
1470 mario79 98
 
7656 dunkaist 99
        mov     esi, path
100
        mov     edi, __params
101
        mov     ecx, 4096/4
8497 dunkaist 102
        rep movsd
7656 dunkaist 103
        mov     byte[edi-1], 0
104
        jmp     params_given
1004 diamond 105
 
106
set_bgr:
7656 dunkaist 107
        mcall   SF_BACKGROUND_SET, SSF_MODE_BG
7860 dunkaist 108
        stdcall load_image, __params+4
7656 dunkaist 109
        jc      exit
110
        call    set_as_bgr
111
        jmp     exit
1004 diamond 112
 
113
params_given:
7656 dunkaist 114
        mov     esi, __params
115
        push    esi
116
        call    find_last_name_component
117
        call    load_directory
1004 diamond 118
 
7656 dunkaist 119
        pop     eax
120
        stdcall load_image, eax
121
        jc      exit
1427 diamond 122
 
1004 diamond 123
;-----------------------------------------------------------------------------
124
 
7656 dunkaist 125
redraw_all:
126
        call    draw_window
1004 diamond 127
 
128
still:
7656 dunkaist 129
        mov     eax, [orig_image]
7860 dunkaist 130
        test    [eax+Image.Flags], Image.IsAnimated
7656 dunkaist 131
        movi    eax, SF_WAIT_EVENT
132
        jz      .wait_event
133
        mcall   SF_SYSTEM_GET, SSF_TIME_COUNT
134
        mov     edx, [cur_frame]
135
        mov     ebx, [cur_frame_time]
7860 dunkaist 136
        add     ebx, [edx+Image.Delay]
7656 dunkaist 137
        sub     ebx, eax
7860 dunkaist 138
        cmp     ebx, [edx+Image.Delay]
7656 dunkaist 139
        jna     @f
140
        call    red_update_frame
141
        jmp     still
7860 dunkaist 142
@@:
7656 dunkaist 143
        test    ebx, ebx
144
        jnz     @f
145
        call    red_update_frame
146
        jmp     still
7860 dunkaist 147
@@:
7656 dunkaist 148
        movi    eax, SF_WAIT_EVENT_TIMEOUT
7860 dunkaist 149
.wait_event:
8497 dunkaist 150
        mcall
7656 dunkaist 151
        dec     eax
152
        jns     @f
153
        call    red_update_frame
154
        jmp     still
7860 dunkaist 155
@@:
7656 dunkaist 156
        jz      redraw_all
157
        dec     eax
158
        jz      key
159
        dec     eax
160
        jz      button
1004 diamond 161
 
7656 dunkaist 162
mouse:
7860 dunkaist 163
        mov     eax, [need_scrollbar_v]
164
        add     eax, [need_scrollbar_h]
165
        test    eax, eax
166
        jz      .done
7656 dunkaist 167
        mov     [pict_moved], 0
168
 
169
        invoke  scrollbar_vert_mouse, scroll_bar_data_vertical
170
        invoke  scrollbar_hort_mouse, scroll_bar_data_horizontal
171
        xor     ecx, ecx
172
        mov     eax, [scroll_bar_data_vertical.position]
173
        cmp     [pict.top], eax
174
        mov     [pict.top], eax
175
        setnz   cl
176
        mov     eax, [scroll_bar_data_horizontal.position]
177
        cmp     [pict.left], eax
178
        mov     [pict.left], eax
179
        setnz   ch
180
        test    ecx, ecx
181
        jz      @f
182
        call    draw_view
183
        call    draw_onimage_decorations
7860 dunkaist 184
@@:
7656 dunkaist 185
 
186
        ; check for scroll
187
        mcall   SF_MOUSE_GET, SSF_SCROLL_DATA
188
        test    eax, eax
189
        jz      .no_scroll
190
        movsx   ecx, ax
191
        shl     ecx, 4
192
        sar     eax, 16
193
        shl     eax, 4
194
        stdcall move_pictport, eax, ecx
195
        mov     [pict_moved], eax
196
        jmp     .mouse_done
7860 dunkaist 197
.no_scroll:
7656 dunkaist 198
 
199
        ; get cursor coordinates in window
200
        mcall   SF_MOUSE_GET, SSF_WINDOW_POSITION
201
        movsx   ebx, ax
202
        cmp     ebx, 0
203
        jge     @f
204
        add     eax, 0x10000
7860 dunkaist 205
@@:
7656 dunkaist 206
        mov     ecx, [mouse_pos]
207
        cmp     eax, ecx
208
        jz      .no_mouse_move
209
        mov     [mouse_pos], eax
210
 
211
        cmp     [pict_drag], 1
212
        jnz     .no_mouse_move
213
        sar     eax, 16
214
        movsx   edx, cx
215
        sar     ecx, 16
216
        sub     eax, ecx
217
        sub     ebx, edx
218
        neg     eax
219
        neg     ebx
220
        stdcall move_pictport, eax, ebx
221
        mov     [pict_moved], eax
222
        jmp     .no_mouse_move
7860 dunkaist 223
.no_mouse_move:
7656 dunkaist 224
 
225
        ; check buttons
226
        mcall   SF_MOUSE_GET, SSF_BUTTON
227
        mov     ecx, eax
228
        xor     ecx, [mouse_buttons]
229
        mov     [mouse_buttons], eax
230
        test    ecx, 0x01
231
        jz      .left_button_handled
232
        test    eax, 0x01
233
        jnz     .left_button_down
7860 dunkaist 234
.left_button_up:
7656 dunkaist 235
        mov     [pict_drag], 0
236
        jmp     .left_button_handled
7860 dunkaist 237
.left_button_down:
7656 dunkaist 238
        mov     ecx, [mouse_pos]
239
        movzx   edx, cx
240
        sar     ecx, 16
241
        mov     ebx, [canvas_abs_top]
242
        add     ebx, [view.top]
243
        cmp     ebx, edx
244
        jg      .left_click_pict_done
245
        add     ebx, [view.height]
246
        cmp     ebx, edx
247
        jl      .left_click_pict_done
248
        mov     ebx, [canvas_abs_left]
249
        add     ebx, [view.left]
250
        cmp     ebx, ecx
251
        jg      .left_click_pict_done
252
        add     ebx, [view.width]
253
        cmp     ebx, ecx
254
        jl      .left_click_pict_done
255
        mov     [pict_drag], 1
256
        jmp     .left_button_handled
7860 dunkaist 257
.left_click_pict_done:
7656 dunkaist 258
 
7860 dunkaist 259
.left_button_handled:
260
.mouse_done:
7656 dunkaist 261
        mov     eax, [pict_moved]
262
        test    eax, eax
263
        jz      .done
264
        stdcall update_scrollbars, eax
265
        call    draw_view
266
        call    draw_onimage_decorations
7860 dunkaist 267
.done:
7656 dunkaist 268
        jmp     still
269
 
1080 diamond 270
key:
7656 dunkaist 271
        xor     esi, esi
1427 diamond 272
keyloop:
7656 dunkaist 273
        mcall   SF_GET_KEY
274
        test    al, al
275
        jnz     keyloopdone
276
        shr     eax, 8
277
        mov     ecx, eax
278
        mcall   SF_KEYBOARD, SSF_GET_CONTROL_KEYS
279
        mov     edx, next_mod
280
        call    check_shortcut
281
        jz      .next
7860 dunkaist 282
        add     edx, prev_mod-next_mod
7656 dunkaist 283
        call    check_shortcut
284
        jz      .prev
7860 dunkaist 285
        add     edx, slide_mod-prev_mod
7656 dunkaist 286
        call    check_shortcut
287
        jz      .slide
7860 dunkaist 288
        add     edx, tglbar_mod-slide_mod
7656 dunkaist 289
        call    check_shortcut
290
        jz      .tglbar
291
 
292
        mov     edx, scale_none_mod
293
        call    check_shortcut
294
        jz      .set_scale_none
7860 dunkaist 295
        add     edx, scale_fit_min_mod-scale_none_mod
7656 dunkaist 296
        call    check_shortcut
297
        jz      .set_scale_fit_min
7860 dunkaist 298
        add     edx, move_pictport_left_1_mod-scale_fit_min_mod
7656 dunkaist 299
        call    check_shortcut
300
        jz      .move_pictport_left
7860 dunkaist 301
        add     edx, move_pictport_left_2_mod-move_pictport_left_1_mod
7656 dunkaist 302
        call    check_shortcut
303
        jz      .move_pictport_left
7860 dunkaist 304
        add     edx, move_pictport_right_1_mod-move_pictport_left_2_mod
7656 dunkaist 305
        call    check_shortcut
306
        jz      .move_pictport_right
7860 dunkaist 307
        add     edx, move_pictport_right_2_mod-move_pictport_right_1_mod
7656 dunkaist 308
        call    check_shortcut
309
        jz      .move_pictport_right
7860 dunkaist 310
        add     edx, move_pictport_up_1_mod-move_pictport_right_2_mod
7656 dunkaist 311
        call    check_shortcut
312
        jz      .move_pictport_up
7860 dunkaist 313
        add     edx, move_pictport_up_2_mod-move_pictport_up_1_mod
7656 dunkaist 314
        call    check_shortcut
315
        jz      .move_pictport_up
7860 dunkaist 316
        add     edx, move_pictport_down_1_mod-move_pictport_up_2_mod
7656 dunkaist 317
        call    check_shortcut
318
        jz      .move_pictport_down
7860 dunkaist 319
        add     edx, move_pictport_down_2_mod-move_pictport_down_1_mod
7656 dunkaist 320
        call    check_shortcut
321
        jz      .move_pictport_down
322
 
323
        cmp     cl, 1 ; Esc
324
        jz      .esc
325
        jmp     keyloop
7860 dunkaist 326
.esc:
7656 dunkaist 327
        test    [bSlideShow], 1
328
        jz      keyloop
329
        jmp     .slide
7860 dunkaist 330
.tglbar:
7656 dunkaist 331
        bt      [window_style], 25
332
        jnc     @f
333
        mov     [bToggleToolbar], 1
334
        xor     [bShowToolbar], 1
7860 dunkaist 335
@@:
7656 dunkaist 336
        jmp     keyloop
7860 dunkaist 337
.slide:
7656 dunkaist 338
        call    slide_show
339
        jmp     keyloop
7860 dunkaist 340
.set_scale_none:
7726 dunkaist 341
        mov     eax, LIBIMG_SCALE_NONE
342
        call    set_scale_mode
343
        jz      @f
7656 dunkaist 344
        call    recalc_canvas
7860 dunkaist 345
@@:
7656 dunkaist 346
        jmp     keyloop
7860 dunkaist 347
.set_scale_fit_min:
7726 dunkaist 348
        mov     eax, LIBIMG_SCALE_FIT_MIN
349
        call    set_scale_mode
350
        jz      @f
7656 dunkaist 351
        call    recalc_work
7860 dunkaist 352
@@:
7656 dunkaist 353
        jmp     keyloop
7860 dunkaist 354
.move_pictport_left:
7656 dunkaist 355
        stdcall move_pictport, -KEY_MOVE_PIXELS, 0
356
        stdcall update_scrollbars, eax
357
        call    draw_view
358
        call    draw_onimage_decorations
359
        jmp     keyloop
7860 dunkaist 360
.move_pictport_right:
7656 dunkaist 361
        stdcall move_pictport, KEY_MOVE_PIXELS, 0
362
        stdcall update_scrollbars, eax
363
        call    draw_view
364
        call    draw_onimage_decorations
365
        jmp     keyloop
7860 dunkaist 366
.move_pictport_up:
7656 dunkaist 367
        stdcall move_pictport, 0, -KEY_MOVE_PIXELS
368
        stdcall update_scrollbars, eax
369
        call    draw_view
370
        call    draw_onimage_decorations
371
        jmp     keyloop
7860 dunkaist 372
.move_pictport_down:
7656 dunkaist 373
        stdcall move_pictport, 0, KEY_MOVE_PIXELS
374
        stdcall update_scrollbars, eax
375
        call    draw_view
376
        call    draw_onimage_decorations
377
        jmp     keyloop
7860 dunkaist 378
.prev:
7656 dunkaist 379
        dec     esi
380
        jmp     keyloop
7860 dunkaist 381
.next:
7656 dunkaist 382
        inc     esi
383
        jmp     keyloop
1427 diamond 384
keyloopdone:
7656 dunkaist 385
        test    esi, esi
386
        jnz     next_or_prev_handler
387
        test    [bToggleSlideShow], 1
388
        jnz     redraw_all
389
        test    [bToggleToolbar], 1
390
        stdcall recalc_client
391
        jnz     redraw_all
392
        test    [bScaleModeChanged], 1
393
        mov     [bScaleModeChanged], 0
394
        jnz     redraw_all
395
        test    [bNewImage], 1
396
        mov     [bNewImage], 0
397
        jnz     redraw_all
398
        jmp     still
1427 diamond 399
next_or_prev_handler:
7656 dunkaist 400
        call    next_or_prev_image
401
        jmp     redraw_all
1004 diamond 402
 
1080 diamond 403
red_update_frame:
7656 dunkaist 404
        mov     eax, [cur_frame]
7860 dunkaist 405
        mov     eax, [eax+Image.Next]
7656 dunkaist 406
        test    eax, eax
407
        jnz     @f
408
        mov     eax, [cur_image]
7860 dunkaist 409
@@:
7656 dunkaist 410
        mov     [cur_frame], eax
411
        mcall   SF_SYSTEM_GET, SSF_TIME_COUNT
412
        mov     [cur_frame_time], eax
413
        call    draw_view
414
        ret
1080 diamond 415
 
416
button:
7656 dunkaist 417
        mcall   SF_GET_BUTTON
418
        shr     eax, 8
1004 diamond 419
 
7656 dunkaist 420
        ; flip horizontally
421
        cmp     eax, 'flh'
422
        jnz     .not_flh
1004 diamond 423
 
7656 dunkaist 424
        mov     eax, [cur_image]
425
        cmp     eax, [orig_image]
426
        jz      @f
427
        invoke  img.flip, [cur_image], FLIP_HORIZONTAL
7860 dunkaist 428
@@:
7656 dunkaist 429
        invoke  img.flip, [orig_image], FLIP_HORIZONTAL
430
        jmp     redraw_all
1004 diamond 431
 
7656 dunkaist 432
        ; flip vertically
7860 dunkaist 433
.not_flh:
7656 dunkaist 434
        cmp     eax, 'flv'
435
        jnz     .not_flv
1004 diamond 436
 
7656 dunkaist 437
        mov     eax, [cur_image]
438
        cmp     eax, [orig_image]
439
        jz      @f
440
        invoke  img.flip, [cur_image], FLIP_VERTICAL
7860 dunkaist 441
@@:
7656 dunkaist 442
        invoke  img.flip, [orig_image], FLIP_VERTICAL
443
        jmp     redraw_all
1004 diamond 444
 
7656 dunkaist 445
        ; flip both horizontally and vertically
7860 dunkaist 446
.not_flv:
7656 dunkaist 447
        cmp     eax, 'flb'
448
        jnz     .not_flb
1004 diamond 449
 
7656 dunkaist 450
        mov     eax, [cur_image]
451
        cmp     eax, [orig_image]
452
        jz      @f
453
        invoke  img.flip, [cur_image], FLIP_BOTH
7860 dunkaist 454
@@:
7656 dunkaist 455
        invoke  img.flip, [orig_image], FLIP_BOTH
456
        jmp     redraw_all
1004 diamond 457
 
7656 dunkaist 458
        ; rotate left
7860 dunkaist 459
.not_flb:
7656 dunkaist 460
        cmp     eax, 'rtl'
461
        jnz     .not_rtl
1004 diamond 462
 
7656 dunkaist 463
        push    ROTATE_90_CCW
7860 dunkaist 464
.rotate_common:
7656 dunkaist 465
        mov     eax, [cur_image]
466
        cmp     eax, [orig_image]
467
        jz      @f
8496 dunkaist 468
        push    dword[esp]
469
        invoke  img.rotate, [cur_image]
7860 dunkaist 470
@@:
7656 dunkaist 471
        invoke  img.rotate, [orig_image]
8497 dunkaist 472
        mov     [bNewImage], 1
7656 dunkaist 473
        jmp     redraw_all
1004 diamond 474
 
7656 dunkaist 475
        ; rotate right
7860 dunkaist 476
.not_rtl:
7656 dunkaist 477
        cmp     eax, 'rtr'
478
        jnz     .not_rtr
1004 diamond 479
 
7656 dunkaist 480
        push    ROTATE_90_CW
481
        jmp     .rotate_common
1004 diamond 482
 
7656 dunkaist 483
        ; open new file
7860 dunkaist 484
.not_rtr:
7656 dunkaist 485
        cmp     eax, 'opn'
486
        jnz     @f
487
 
1511 mario79 488
; OpenDialog Open
7656 dunkaist 489
        push    dword OpenDialog_data
490
        call    [OpenDialog_Start]
1475 diamond 491
 
7656 dunkaist 492
        cmp     [OpenDialog_data.status], 1
493
        jnz     still
1004 diamond 494
 
7656 dunkaist 495
        mov     esi, path
496
        mov     edi, __params
497
        push    edi
498
        mov     ecx, 4096/4
8497 dunkaist 499
        rep movsd
7656 dunkaist 500
        mov     byte[edi-1], 0
1016 diamond 501
 
7656 dunkaist 502
        pop     esi
503
        push    esi
504
        call    find_last_name_component
1016 diamond 505
 
8497 dunkaist 506
        pop     eax
7656 dunkaist 507
        push    [cur_image]
508
        stdcall load_image, eax
509
        jc      .restore_old
510
        call    free_directory
511
        jmp     redraw_all
512
 
7860 dunkaist 513
.restore_old:
7656 dunkaist 514
        pop     eax
515
        jmp     still
516
 
517
        ; set background
7860 dunkaist 518
@@:
7656 dunkaist 519
        cmp     eax, 'bgr'
520
        jnz     @f
1016 diamond 521
 
7656 dunkaist 522
        mcall   SF_BACKGROUND_SET, SSF_MODE_BG, 2 ; stretch by default
523
        call    set_as_bgr
524
        jmp     still
3116 dunkaist 525
 
7860 dunkaist 526
@@:
7656 dunkaist 527
        cmp     eax, 'sld'
528
        jnz     @f
3116 dunkaist 529
 
7656 dunkaist 530
        call    slide_show
531
        jmp     redraw_all
1016 diamond 532
 
7860 dunkaist 533
@@:
534
        cmp     eax, 'scl'
535
        jnz     .not_scl
536
        mov     eax, LIBIMG_SCALE_NONE
537
        cmp     [scale_mode], LIBIMG_SCALE_NONE
538
        jnz     @f
539
        mov     eax, LIBIMG_SCALE_FIT_MIN
540
@@:
541
        call    set_scale_mode
542
        jz      @f
543
        call    recalc_work
544
@@:
545
        jmp     redraw_all
546
.not_scl:
7656 dunkaist 547
        or      esi, -1
548
        cmp     eax, 'bck'
549
        jz      next_or_prev_handler
550
        neg     esi
551
        cmp     eax, 'fwd'
552
        jz      next_or_prev_handler
1004 diamond 553
 
7656 dunkaist 554
        cmp     eax, 1
555
        jnz     still
1004 diamond 556
 
7656 dunkaist 557
exit:
7879 leency 558
        invoke  ini_set_int, inifilename, aKivSection, aWinX, [window.left]
559
        invoke  ini_set_int, inifilename, aKivSection, aWinY, [window.top]
560
        invoke  ini_set_int, inifilename, aKivSection, aWinW, [window.width]
561
        invoke  ini_set_int, inifilename, aKivSection, aWinH, [window.height]
7656 dunkaist 562
        mcall   -1
1004 diamond 563
 
564
 
7656 dunkaist 565
proc load_image _filename
566
        push    ebx esi edi
567
        invoke  img.from_file, [_filename]
568
        test    eax, eax
569
        jz      .error
570
        mov     ebx, eax
1004 diamond 571
 
7860 dunkaist 572
        test    [eax+Image.Flags], Image.IsAnimated
7656 dunkaist 573
        jnz     @f
7860 dunkaist 574
        cmp     [eax+Image.Next], 0
7656 dunkaist 575
        jz      @f
576
        stdcall merge_icons_to_single_img, eax
577
        test    eax, eax
578
        jz      .error_destroy
7860 dunkaist 579
@@:
7656 dunkaist 580
        stdcall init_frame, eax
581
        clc
582
        jmp     .exit
1004 diamond 583
 
7860 dunkaist 584
.error_destroy:
7656 dunkaist 585
        invoke  img.destroy, ebx
586
        xor     eax, eax
7860 dunkaist 587
.error:
7656 dunkaist 588
        stc
7860 dunkaist 589
.exit:
7656 dunkaist 590
        pop     edi esi ebx
591
        ret
592
endp
1004 diamond 593
 
6804 IgorA 594
 
7656 dunkaist 595
; in:  eax -- pointer to image
596
; out: fill pict structure
597
proc calculate_picture_size
7860 dunkaist 598
        mov     edx, [eax+Image.Width]
599
        test    [eax+Image.Flags], Image.IsAnimated
7656 dunkaist 600
        jnz     .not_in_row
601
        push    eax
7860 dunkaist 602
@@:
603
        cmp     [eax+Image.Next], 0
7656 dunkaist 604
        jz      @f
7860 dunkaist 605
        mov     eax, [eax+Image.Next]
606
        add     edx, [eax+Image.Width]
7656 dunkaist 607
        inc     edx
608
        jmp     @b
7860 dunkaist 609
@@:
7656 dunkaist 610
        pop     eax
7860 dunkaist 611
.not_in_row:
7656 dunkaist 612
        mov     [pict.width], edx
613
        add     edx, 19
7860 dunkaist 614
        cmp     edx, 50+25*numimages
7656 dunkaist 615
        jae     @f
7860 dunkaist 616
        mov     edx, 50+25*numimages
617
@@:
618
        mov     esi, [eax+Image.Height]
619
        test    [eax+Image.Flags], Image.IsAnimated
7656 dunkaist 620
        jnz     .max_equals_first
621
        push    eax
7860 dunkaist 622
@@:
623
        cmp     [eax+Image.Next], 0
7656 dunkaist 624
        jz      @f
7860 dunkaist 625
        mov     eax, [eax+Image.Next]
626
        cmp     esi, [eax+Image.Height]
7656 dunkaist 627
        jae     @b
7860 dunkaist 628
        mov     esi, [eax+Image.Height]
7656 dunkaist 629
        jmp     @b
7860 dunkaist 630
@@:
7656 dunkaist 631
        pop     eax
7860 dunkaist 632
.max_equals_first:
7656 dunkaist 633
        mov     [pict.height], esi
634
        ret
6804 IgorA 635
endp
636
 
1004 diamond 637
 
7656 dunkaist 638
; in:  [orig_image]
639
proc set_as_bgr
640
        mov     esi, [orig_image]
7860 dunkaist 641
        mov     ecx, [esi+Image.Width]
642
        mov     edx, [esi+Image.Height]
7656 dunkaist 643
        mcall   SF_BACKGROUND_SET, SSF_SIZE_BG
644
        mcall   SF_BACKGROUND_SET, SSF_MAP_BG
645
        test    eax, eax
646
        jz      @f
1004 diamond 647
 
7656 dunkaist 648
        push    eax
649
        invoke  img.to_rgb2, esi, eax
650
        pop     ecx
651
        mcall   SF_BACKGROUND_SET, SSF_UNMAP_BG
1016 diamond 652
 
7860 dunkaist 653
@@:
7656 dunkaist 654
        mcall   SF_BACKGROUND_SET, SSF_REDRAW_BG
655
        ; save to file eskin.ini
656
        xor     al, al
657
        mov     ecx, 1024
658
        mov     edi, sys_path+2
659
        repne scasb
660
        sub     edi, sys_path+3
661
        invoke  ini_set_str, inifileeskin, amain, aprogram, sys_path+2, edi
662
        ; add param '\S__'
663
        cmp     word[__params], '\T'
664
        jz      @f
665
        cmp     word[__params], '\S'
666
        je      @f
667
        mov     esi, __params+4096-8
668
        mov     edi, __params+4096-4
669
        mov     ecx, 4096/4-1
670
        std
671
        rep movsd
672
        cld
673
        mov     dword[__params], '\S__'
7860 dunkaist 674
@@:
7656 dunkaist 675
        xor     al, al
676
        mov     ecx, 4096
677
        mov     edi, __params
678
        repne scasb
679
        sub     edi, __params+1
680
        invoke  ini_set_str, inifileeskin, amain, aparam, __params, edi
681
        ret
682
endp
1016 diamond 683
 
7656 dunkaist 684
proc slide_show
685
        push    ebx esi edi
686
        mov     [bToggleSlideShow], 1
687
        btc     [window_style], 25
688
        xor     [bSlideShow], 1
689
        jnz     .to_fullscreen
690
        ; back from fullscreen
691
        movzx   eax, [bShowToolbarSave]
692
        mov     [bShowToolbar], al
693
        mov     [canvas_padding], CANVAS_PADDING
694
        mov     [bg_color], 0x00ffffff
695
        mcall   SF_CHANGE_WINDOW, [window_save.left], [window_save.top], [window_save.width], [window_save.height]
696
        jmp     .done
7860 dunkaist 697
.to_fullscreen:
7656 dunkaist 698
        stdcall copy_box, window, window_save
699
        movzx   eax, [bShowToolbar]
700
        mov     [bShowToolbarSave], al
701
        mov     [bShowToolbar], 0
702
        mov     [canvas_padding], 0
703
        mov     [bg_color], 0x00000000
704
        mcall   SF_GET_SCREEN_SIZE
705
        mov     edx, eax
706
        shr     edx, 16
707
        movzx   eax, ax
708
        mov     esi, eax
709
        mcall   SF_CHANGE_WINDOW, 0, 0, ,
7726 dunkaist 710
        mov     eax, LIBIMG_SCALE_FIT_MIN
711
        call    set_scale_mode
1016 diamond 712
 
7860 dunkaist 713
.done:
7656 dunkaist 714
        pop     edi esi ebx
715
        ret
716
endp
7421 leency 717
 
1016 diamond 718
 
1427 diamond 719
; seek to ESI image files
7860 dunkaist 720
; esi>0 means next file, esi<0-prev file
7656 dunkaist 721
proc next_or_prev_image
722
locals
723
        files_cnt       dd ?
724
        file_idx        dd ?
725
endl
726
        push    ebx esi edi
727
        push    esi
728
        call    load_directory
729
        pop     esi
730
        mov     eax, [directory_ptr]
731
        mov     eax, [eax+4]
732
        mov     [files_cnt], eax
733
        cmp     [directory_ptr], 0
734
        jz      .ret
735
        cmp     [files_cnt], 0 ; number of files
736
        jz      .ret
737
        mov     eax, [cur_file_idx]
738
        cmp     eax, -1
739
        jnz     @f
740
        test    esi, esi
741
        jns     @f
742
        mov     eax, [files_cnt]
7860 dunkaist 743
@@:
7656 dunkaist 744
        add     eax, esi
7860 dunkaist 745
@@:
7656 dunkaist 746
        test    eax, eax
747
        jns     @f
748
        add     eax, [files_cnt]
749
        jmp     @b
7860 dunkaist 750
@@:
7656 dunkaist 751
        cmp     eax, [files_cnt]
752
        jb      @f
753
        sub     eax, [files_cnt]
754
        jmp     @b
7860 dunkaist 755
@@:
7656 dunkaist 756
        mov     [file_idx], eax
7860 dunkaist 757
.scanloop:
7656 dunkaist 758
        push    eax esi
759
        imul    esi, eax, 304
760
        add     esi, [directory_ptr]
7860 dunkaist 761
        add     esi, 32+40
7656 dunkaist 762
        mov     edi, curdir
7860 dunkaist 763
@@:
7656 dunkaist 764
        inc     edi
765
        cmp     byte[edi-1], 0
766
        jnz     @b
767
        mov     byte[edi-1], '/'
7860 dunkaist 768
@@:
7656 dunkaist 769
        lodsb
770
        stosb
771
        test    al, al
772
        jnz     @b
773
        mov     esi, curdir
774
        push    esi
775
        mov     edi, __params
776
        mov     ecx, 4096/4
777
        rep movsd
778
        mov     byte[edi-1], 0
779
        pop     esi
780
        stdcall load_image, curdir
781
        pushfd
7860 dunkaist 782
@@:
7656 dunkaist 783
        lodsb
784
        test    al, al
785
        jnz     @b
7860 dunkaist 786
@@:
7656 dunkaist 787
        dec     esi
788
        cmp     byte[esi], '/'
789
        jnz     @b
790
        mov     byte[esi], 0
791
        popfd
792
        pop     esi eax
793
        jnc     .loadedok
794
        test    esi, esi
795
        js      .try_prev
7860 dunkaist 796
.try_next:
7656 dunkaist 797
        inc     eax
798
        cmp     eax, [files_cnt]
799
        jb      @f
800
        xor     eax, eax
7860 dunkaist 801
@@:
802
.try_common:
7656 dunkaist 803
        cmp     eax, [file_idx]
804
        jz      .notfound
805
        jmp     .scanloop
7860 dunkaist 806
.try_prev:
7656 dunkaist 807
        dec     eax
808
        jns     @f
809
        mov     eax, [files_cnt]
810
        dec     eax
7860 dunkaist 811
@@:
7656 dunkaist 812
        jmp     .try_common
7860 dunkaist 813
.loadedok:
7656 dunkaist 814
        mov     [cur_file_idx], eax
7860 dunkaist 815
.ret:
7656 dunkaist 816
        pop     edi esi ebx
817
        ret
7860 dunkaist 818
.notfound:
7656 dunkaist 819
        pop     edi esi ebx
820
        ret
821
endp
1016 diamond 822
 
7656 dunkaist 823
 
1016 diamond 824
load_directory:
7656 dunkaist 825
        cmp     [directory_ptr], 0
826
        jnz     .ret
827
        mov     esi, __params
828
        mov     edi, curdir
829
        mov     ecx, [last_name_component]
830
        sub     ecx, esi
831
        dec     ecx
832
        js      @f
8497 dunkaist 833
        rep movsb
7860 dunkaist 834
@@:
7656 dunkaist 835
        mov     byte[edi], 0
836
        mcall   68, 12, 0x1000
837
        test    eax, eax
838
        jz      .ret
839
        mov     ebx, readdir_fileinfo
7860 dunkaist 840
        mov     dword[ebx+12], (0x1000-32) / 304      ; blocks to read
7656 dunkaist 841
        mov     dword[ebx+16], eax      ; where to store
842
        mcall   70
843
        cmp     eax, 6  ; read ok, but there are more files
844
        jz      .dirok
845
        test    eax, eax
846
        jnz     free_directory
847
        mov     edx, [directory_ptr]
848
        mov     ecx, [edx+8]            ; total number of files
849
        mov     [readblocks], ecx
850
        imul    ecx, 304        ; try to read entire dir, FIXME
851
        add     ecx, 32         ; plus header
852
        mcall   68, 20          ; realloc
853
        test    eax, eax
854
        jz      free_directory
855
        mov     [directory_ptr], eax
856
        mcall   70, readdir_fileinfo
7860 dunkaist 857
.dirok:
7656 dunkaist 858
        cmp     ebx, 0
859
        jle     free_directory
860
        mov     eax, [directory_ptr]
7860 dunkaist 861
        mov     edi, [eax+8]  ; total number of files
7656 dunkaist 862
        mov     [files_num], edi
863
        add     eax, 32         ; skip header
864
        mov     edi, eax
865
        push    0
7860 dunkaist 866
.dirskip:
7656 dunkaist 867
        push    eax
868
        test    byte[eax], 0x18 ; volume label or folder
869
        jnz     .nocopy
870
        lea     esi, [eax+40]   ; name
871
        mov     ecx, esi
7860 dunkaist 872
@@:
7656 dunkaist 873
        lodsb
874
        test    al, al
875
        jnz     @b
7860 dunkaist 876
@@:
7656 dunkaist 877
        dec     esi
878
        cmp     esi, ecx
879
        jb      .noext
880
        cmp     byte[esi], '.'
881
        jnz     @b
882
        inc     esi
883
        mov     ecx, [esi]
884
        cmp     byte[esi+3], 0
885
        jnz     .not_3
886
        or      ecx, 0x202020
887
        cmp     ecx, 'jpg'
888
        jz      .copy
889
        cmp     ecx, 'bmp'
890
        jz      .copy
891
        cmp     ecx, 'gif'
892
        jz      .copy
893
        cmp     ecx, 'png'
894
        jz      .copy
895
        cmp     ecx, 'jpe'
896
        jz      .copy
897
        cmp     ecx, 'ico'
898
        jz      .copy
899
        cmp     ecx, 'cur'
900
        jz      .copy
901
        cmp     ecx, 'tga'
902
        jz      .copy
903
        cmp     ecx, 'pcx'
904
        jz      .copy
905
        cmp     ecx, 'xcf'
906
        jz      .copy
907
        cmp     ecx, 'pbm'
908
        jz      .copy
909
        cmp     ecx, 'pgm'
910
        jz      .copy
911
        cmp     ecx, 'pnm'
912
        jz      .copy
913
        cmp     ecx, 'ppm'
914
        jz      .copy
915
        cmp     ecx, 'tif'
916
        jz      .copy
917
        cmp     ecx, 'xbm'
918
        jz      .copy
7860 dunkaist 919
.not_3:
7656 dunkaist 920
        cmp     byte[esi+4], 0
921
        jnz     .nocopy
922
        or      ecx, 0x20202020
923
        cmp     ecx, 'tiff'
924
        jz      @f
925
        cmp     ecx, 'wbmp'
926
        jz      @f
927
        cmp     ecx, 'webp'
928
        jz      @f
929
        cmp     ecx, 'jpeg'
930
        jnz     .nocopy
7860 dunkaist 931
@@:
7656 dunkaist 932
        cmp     byte[esi+4], 0
933
        jnz     .nocopy
7860 dunkaist 934
.copy:
7656 dunkaist 935
        mov     esi, [esp]
936
        mov     ecx, 304 / 4
8497 dunkaist 937
        rep movsd
7656 dunkaist 938
        inc     dword[esp+4]
7860 dunkaist 939
.nocopy:
940
.noext:
7656 dunkaist 941
        pop     eax
942
        add     eax, 304
943
        dec     ebx
944
        jnz     .dirskip
945
        mov     eax, [directory_ptr]
946
        pop     ebx
947
        mov     [eax+4], ebx
948
        test    ebx, ebx
949
        jz      free_directory
950
        push    0   ; sort mode
951
        push    ebx
952
        add     eax, 32
953
        push    eax
954
        call    [SortDir]
955
        xor     eax, eax
956
        mov     edi, [directory_ptr]
7860 dunkaist 957
        add     edi, 32+40    ; name
958
.scan:
7656 dunkaist 959
        mov     esi, [last_name_component]
960
        push    edi
961
        invoke  strcmpi
962
        pop     edi
963
        jz      .found
964
        inc     eax
965
        add     edi, 304
966
        dec     ebx
967
        jnz     .scan
968
        or      eax, -1
7860 dunkaist 969
.found:
7656 dunkaist 970
        mov     [cur_file_idx], eax
7860 dunkaist 971
.ret:
7656 dunkaist 972
        ret
1016 diamond 973
 
974
free_directory:
7656 dunkaist 975
        mcall   68, 13, [directory_ptr]
976
        and     [directory_ptr], 0
977
        ret
1016 diamond 978
 
7656 dunkaist 979
 
1427 diamond 980
; in: esi->full name (e.g. /path/to/file.png)
981
; out: [last_name_component]->last component (e.g. file.png)
7656 dunkaist 982
proc find_last_name_component
983
        mov     ecx, esi
7860 dunkaist 984
@@:
7656 dunkaist 985
        lodsb
986
        test    al, al
987
        jnz     @b
7860 dunkaist 988
@@:
7656 dunkaist 989
        dec     esi
990
        cmp     esi, ecx
991
        jb      @f
992
        cmp     byte[esi], '/'
993
        jnz     @b
7860 dunkaist 994
@@:
7656 dunkaist 995
        inc     esi
996
        mov     [last_name_component], esi
997
        ret
998
endp
1427 diamond 999
 
1080 diamond 1000
 
7860 dunkaist 1001
proc init_frame uses ebx edx, _img
7656 dunkaist 1002
        mov     eax, [orig_image]
1003
        cmp     eax, [_img]
1004
        jz      .exit
1005
        test    eax, eax
1006
        jz      .freed
1007
        cmp     eax, [cur_image]
1008
        jz      @f
1009
        invoke  img.destroy, [orig_image]
7860 dunkaist 1010
@@:
7656 dunkaist 1011
        invoke  img.destroy, [cur_image]
7860 dunkaist 1012
.freed:
3116 dunkaist 1013
 
7656 dunkaist 1014
        mov     [bNewImage], 1
1015
        mov     eax, [_img]
1016
        mov     [orig_image], eax
1017
        mov     [cur_image], eax
1018
        mov     [cur_frame], eax
7860 dunkaist 1019
        test    byte[eax+Image.Flags], Image.IsAnimated
7656 dunkaist 1020
        jz      @f
1021
        push    ebx
1022
        mcall   SF_SYSTEM_GET, SSF_TIME_COUNT
1023
        pop     ebx
1024
        mov     [cur_frame_time], eax
7860 dunkaist 1025
@@:
7656 dunkaist 1026
        mov     [pict.top], 0
1027
        mov     [pict.left], 0
7860 dunkaist 1028
.exit:
7656 dunkaist 1029
        ret
1030
endp
1040 diamond 1031
 
1032
 
7656 dunkaist 1033
proc draw_window
1034
        test    [bFirstWinDraw], 1
1035
        jnz     .min_size_ok
1040 diamond 1036
 
7656 dunkaist 1037
        mcall   SF_THREAD_INFO, procinfo, -1
1038
        xor     eax, eax
1039
        mov     edx, -1
1040
        mov     esi, -1
1041
        cmp     [procinfo.box.width], MIN_WINDOW_WIDTH
1042
        ja      @f
1043
        mov     edx, MIN_WINDOW_WIDTH
1044
        inc     eax
7860 dunkaist 1045
@@:
7656 dunkaist 1046
        cmp     [procinfo.box.height], MIN_WINDOW_HEIGHT
1047
        ja      @f
1048
        mov     esi, MIN_WINDOW_HEIGHT
1049
        inc     eax
7860 dunkaist 1050
@@:
7656 dunkaist 1051
        test    eax, eax
1052
        jz      @f
8497 dunkaist 1053
        mcall   SF_CHANGE_WINDOW, -1, -1, ,
7860 dunkaist 1054
@@:
1004 diamond 1055
 
7860 dunkaist 1056
.min_size_ok:
7656 dunkaist 1057
        test    [bNewImage], 1
1058
        jz      @f
1059
        call    generate_window_header
7860 dunkaist 1060
@@:
8497 dunkaist 1061
        cmp     [window.width], 0
1062
        jne     @f
1063
        mcall   SF_GET_SCREEN_SIZE
1064
        mov     ebx, eax
1065
        shr     ebx, 16         ; ebx = width
1066
        movzx   esi, ax         ; esi = height
7879 leency 1067
 
8497 dunkaist 1068
        mov     eax, ebx
1069
        xor     edx, edx
1070
        mov     ebx, 3
1071
        div     ebx
1072
        imul    eax, 2
1073
        mov     [window.width], eax
1074
 
1075
        xor     edx, edx
1076
        mov     ebx, 4
1077
        div     ebx
1078
        mov     [window.left], eax
1079
 
1080
        mov     eax, esi
1081
        xor     edx, edx
1082
        mov     ebx, 3
1083
        div     ebx
1084
        imul    eax, 2
1085
        mov     [window.height], eax
1086
 
1087
        xor     edx, edx
1088
        mov     ebx, 4
1089
        div     ebx
1090
        mov     [window.top], eax
7879 leency 1091
@@:
1092
 
7656 dunkaist 1093
        mcall   SF_REDRAW, SSF_BEGIN_DRAW
1094
        mov     ecx, [window.top]
1095
        shl     ecx, 16
1096
        mov     cx, word[window.height]
1097
        mov     ebx, [window.left]
1098
        shl     ebx, 16
1099
        mov     bx, word[window.width]
1100
        mcall   0, , , [window_style], 0, window_header
1004 diamond 1101
 
7656 dunkaist 1102
        mcall   SF_THREAD_INFO, procinfo, -1
1103
        test    [procinfo.wnd_state], 0x04
1104
        jnz     .nodraw
1004 diamond 1105
 
7656 dunkaist 1106
        stdcall copy_box, window, window_prev
1107
        stdcall copy_box, procinfo.box, window
1108
        test    [bFirstWinDraw], 1
1109
        jnz     .recalc
1110
        test    [bToggleSlideShow], 1
1111
        jnz     .recalc
1112
        mov     eax, [window.width]
1113
        cmp     eax, [window_prev.width]
1114
        jnz     .recalc
1115
        mov     eax, [window.height]
1116
        cmp     eax, [window_prev.height]
1117
        jnz     .recalc
1118
        test    [bNewImage], 1
1119
        jnz     .recalc
1120
        test    [bToggleToolbar], 1
1121
        jnz     .recalc
1122
        jmp     .recalc_done
1004 diamond 1123
 
7860 dunkaist 1124
.recalc:
7656 dunkaist 1125
        stdcall recalc_window
7860 dunkaist 1126
.recalc_done:
1004 diamond 1127
 
7656 dunkaist 1128
        stdcall draw_client
7860 dunkaist 1129
.nodraw:
7656 dunkaist 1130
        mcall   SF_REDRAW, SSF_END_DRAW
1131
        mov     [bFirstWinDraw], 0
1132
        mov     [bNewImage], 0
1133
        mov     [bToggleToolbar], 0
1134
        mov     [bToggleSlideShow], 0
3116 dunkaist 1135
 
7656 dunkaist 1136
        ret
1137
endp
1004 diamond 1138
 
1040 diamond 1139
 
7860 dunkaist 1140
proc draw_view uses ebx esi edi
7656 dunkaist 1141
        cmp     [scale_mode], LIBIMG_SCALE_FIT_MIN
1142
        jnz     .scale_none
1143
        mov     ecx, [cur_frame]
7860 dunkaist 1144
        mov     eax, [ecx+Image.Width]
7656 dunkaist 1145
        cmp     eax, [view.width]
1146
        jnz     .scale
7860 dunkaist 1147
        mov     eax, [ecx+Image.Height]
7656 dunkaist 1148
        cmp     eax, [view.height]
1149
        jnz     .scale
1150
        jmp     .draw
7860 dunkaist 1151
.scale:
7656 dunkaist 1152
        mov     eax, [orig_image]
1153
        cmp     eax, [cur_image]
1154
        jz      @f
1155
        invoke  img.destroy, [cur_image]
1156
        mov     eax, [orig_image]
7860 dunkaist 1157
@@:
1158
        invoke  img.scale, eax, 0, 0, [eax+Image.Width], [eax+Image.Height], 0, LIBIMG_SCALE_STRETCH, LIBIMG_INTER_DEFAULT, [view.width], [view.height]
7656 dunkaist 1159
        test    eax, eax
1160
;FIXME
1161
        mov     [cur_image], eax
1162
        mov     [cur_frame], eax        ; FIXME index
1163
        jmp     .draw
1004 diamond 1164
 
7860 dunkaist 1165
.scale_none:
1080 diamond 1166
 
7860 dunkaist 1167
.draw:
7656 dunkaist 1168
        push    [pict.top]
1169
        push    [pict.left]
1170
        push    [view.height]
1171
        push    [view.width]
1172
        push    [view_abs_top]  ; ypos
1173
        push    [view_abs_left] ; xpos
1174
        invoke  img.draw, [cur_frame]
7860 dunkaist 1175
.done:
7656 dunkaist 1176
        ret
1177
endp
1004 diamond 1178
 
7860 dunkaist 1179
proc draw_scale_button
1180
        pushad
1181
        mcall   65, buttons+scalebtn*20, <20,20>, [scale_button_xy], 8, palette
1182
        mov     ebx, [scale_button_xy]
1183
        add     ebx, 0x00050006
1184
        ; print letter(s) corresponding to the current scaling mode
1185
        mov     edi, 2
1186
        mov     [scale_button_letter], 'x1'
1187
        cmp     [scale_mode], LIBIMG_SCALE_NONE
1188
        jz      @f
1189
        add     ebx, 0x00020001
1190
        mov     edi, 1
1191
        mov     [scale_button_letter], 'W'
1192
;        cmp     [scale_mode], LIBIMG_SCALE_FIT_MIN
1193
@@:
7862 dunkaist 1194
        mcall   4, , 0x800000ff, scale_button_letter
7860 dunkaist 1195
        popad
1196
        ret
1197
endp
7656 dunkaist 1198
 
7860 dunkaist 1199
proc draw_toolbar uses ebx esi edi
7656 dunkaist 1200
        cmp     [toolbar.height], 0
1201
        jz      .quit
1202
        mov     ebx, [toolbar_abs_left]
1203
        shl     ebx, 16
1204
        add     ebx, [toolbar.width]
1205
        inc     ebx
1206
        mov     ecx, [toolbar_abs_top]
1207
        shl     ecx, 16
1208
        add     ecx, [toolbar.height]
1209
        mcall   13, , , [bg_color]
1210
        mov     ebx, [toolbar_abs_left]
1211
        shl     ebx, 16
1212
        add     ebx, [toolbar_abs_left]
1213
        add     ebx, [toolbar.width]
1214
        mov     ecx, [toolbar_abs_top]
1215
        shl     ecx, 16
1216
        add     ecx, [toolbar_abs_top]
7860 dunkaist 1217
        add     ecx, (30 SHL 16)+30
7656 dunkaist 1218
        mcall   38, , , 0x007F7F7F
1219
        mov     ebx, [toolbar_abs_left]
1220
        shl     ebx, 16
1221
        add     ebx, [toolbar_abs_left]
7860 dunkaist 1222
        add     ebx, ((5+25*1) SHL 16)+(5+25*1)
7656 dunkaist 1223
        mov     ecx, [toolbar_abs_top]
1224
        shl     ecx, 16
1225
        add     ecx, [toolbar_abs_top]
1226
        add     ecx, [toolbar.height]
1227
        mcall
7860 dunkaist 1228
        add     ebx, ((5+25*2) SHL 16)+(5+25*2)
7656 dunkaist 1229
        mcall
7860 dunkaist 1230
        add     ebx, ((5+25*2) SHL 16)+(5+25*2)
7656 dunkaist 1231
        mcall
7860 dunkaist 1232
        add     ebx, ((5+25*1) SHL 16)+(5+25*1)
1233
        mcall
7656 dunkaist 1234
        mov     ebx, [toolbar_abs_left]
1235
        add     ebx, [toolbar.width]
8497 dunkaist 1236
        sub     ebx, 25*5+10
7656 dunkaist 1237
        shl     ebx, 16
1238
        add     ebx, [toolbar_abs_left]
1239
        add     ebx, [toolbar.width]
8497 dunkaist 1240
        sub     ebx, 25*5+10
7656 dunkaist 1241
        mcall
1242
 
1243
        mov     ebx, [toolbar_abs_left]
1244
        shl     ebx, 16
7860 dunkaist 1245
        add     ebx, ((4+25*0) SHL 16)+21
7656 dunkaist 1246
        mov     ecx, [toolbar_abs_top]
1247
        shl     ecx, 16
7860 dunkaist 1248
        add     ecx, (4 SHL 16)+21
7656 dunkaist 1249
        mcall   SF_DEFINE_BUTTON, , , 'opn'+40000000h
7860 dunkaist 1250
        add     ebx, (5+25*1) SHL 16
7656 dunkaist 1251
        mcall    , , , 'bck'+40000000h
7860 dunkaist 1252
        add     ebx, (0+25*1) SHL 16
7656 dunkaist 1253
        mcall    , , , 'fwd'+40000000h
7860 dunkaist 1254
        add     ebx, (5+25*1) SHL 16
7656 dunkaist 1255
        mcall    , , , 'bgr'+40000000h
7860 dunkaist 1256
        add     ebx, (0+25*1) SHL 16
7656 dunkaist 1257
        mcall    , , , 'sld'+40000000h
7860 dunkaist 1258
        add     ebx, (5+25*1) SHL 16
1259
        mcall    , , , 'scl'+40000000h
7656 dunkaist 1260
        mov     ebx, [toolbar_abs_left]
1261
        add     ebx, [toolbar.width]
8497 dunkaist 1262
        sub     ebx, 25*5+10
7656 dunkaist 1263
        add     ebx, 5
1264
        shl     ebx, 16
1265
        mov     bl, 21
1266
        mcall   , , , 'flh'+40000000h
1267
        add     ebx, 25 SHL 16
1268
        mcall   , , , 'flv'+40000000h
1269
        add     ebx, 30 SHL 16
1270
        mcall   , , , 'rtr'+40000000h
1271
        add     ebx, 25 SHL 16
1272
        mcall   , , , 'rtl'+40000000h
1273
        add     ebx, 25 SHL 16
1274
        mcall   , , , 'flb'+40000000h
1275
 
1276
        mov     ebp, (numimages-1)*20
1277
 
1278
        mov     edx, [toolbar_abs_left]
1279
        shl     edx, 16
1280
        add     edx, [toolbar_abs_top]
7860 dunkaist 1281
        add     edx, ((5+25*0) SHL 16)+5
1282
        mcall   65, buttons+openbtn   *20, <20, 20>, , 8, palette
1283
        add     edx, ((5+25*1) SHL 16)+0
1284
        mcall     , buttons+backbtn   *20
1285
        add     edx, ((0+25*1) SHL 16)+0
1286
        mcall     , buttons+forwardbtn*20
1287
        add     edx, ((5+25*1) SHL 16)+0
1288
        mcall     , buttons+bgrbtn    *20
1289
        add     edx, ((0+25*1) SHL 16)+0
1290
        mcall     , buttons+slidebtn  *20
1291
        add     edx, ((5+25*1) SHL 16)+0
1292
;        mcall     , buttons+scalebtn  *20
1293
        mov     [scale_button_xy], edx
1294
        call    draw_scale_button
7656 dunkaist 1295
        mov     edx, [client_abs_left]
1296
        add     edx, [client.width]
7860 dunkaist 1297
        sub     edx, 25*5+4
7656 dunkaist 1298
        shl     edx, 16
1299
        add     edx, [client_abs_top]
1300
        add     edx, 5
1301
        mcall   , buttons+fliphorzbtn*20
7860 dunkaist 1302
        add     edx, 25*65536
7656 dunkaist 1303
        mcall   , buttons+flipvertbtn*20
7860 dunkaist 1304
        add     edx, 30*65536
7656 dunkaist 1305
        mcall   , buttons+rotcwbtn*20
7860 dunkaist 1306
        add     edx, 25*65536
7656 dunkaist 1307
        mcall   , buttons+rotccwbtn*20
7860 dunkaist 1308
        add     edx, 25*65536
7656 dunkaist 1309
        mcall   , buttons+rot180btn*20
8497 dunkaist 1310
 
7860 dunkaist 1311
.quit:
7656 dunkaist 1312
        ret
1313
endp
1314
 
1315
 
1316
proc draw_canvas
1317
        push    ebx esi edi
1318
 
1319
        mov     ebx, [canvas_abs_left]
1320
        shl     ebx, 16
1321
        add     ebx, [canvas.width]
1322
        mov     ecx, [canvas_abs_top]
1323
        shl     ecx, 16
1324
        add     ecx, [view.top]
1325
;mov edx, 0xff0000
1326
        mcall   13, , , [bg_color]
1327
        mcall   13
1328
        mov     ecx, [view_abs_top]
1329
        add     ecx, [view.height]
1330
        shl     ecx, 16
1331
        add     ecx, [canvas.height]
1332
        sub     ecx, [view.top]
1333
        sub     ecx, [view.height]
1334
;mov edx, 0x00ff00
1335
        mcall   13, , , [bg_color]
1336
        mcall   13
1337
        mov     ebx, [canvas_abs_left]
1338
        shl     ebx, 16
1339
        add     ebx, [view.left]
1340
        mov     ecx, [canvas_abs_top]
1341
        shl     ecx, 16
1342
        add     ecx, [canvas.height]
1343
;mov edx, 0x0000ff
1344
;bg_color
1345
        mcall
1346
        mov     ebx, [view_abs_left]
1347
        add     ebx, [view.width]
1348
        shl     ebx, 16
1349
        mov     eax, [canvas.width]
1350
        sub     eax, [view.left]
1351
        sub     ebx, [view.width]
1352
        add     ebx, eax
1353
;mov edx, 0xffff00
1354
;bg_color
1355
        mcall   13
7860 dunkaist 1356
@@:
7656 dunkaist 1357
 
1358
        call    draw_view
1359
 
1360
        pop     edi esi ebx
1361
        ret
1362
endp
1363
 
1364
 
1365
proc draw_client
1366
        push    ebx esi edi
1367
 
1368
        test    [bShowToolbar], 1
1369
        jz      .toolbar_done
1370
        call    draw_toolbar
7860 dunkaist 1371
.toolbar_done:
7656 dunkaist 1372
        call    draw_work
1373
 
1374
        pop     edi esi ebx
1375
        ret
1376
endp
1377
 
1378
 
1379
proc draw_work
1380
        push    ebx esi edi
1381
 
1382
        mov     ebx, [work_abs_left]
1383
        shl     ebx, 16
1384
        add     ebx, [work.width]
1385
        inc     ebx
1386
        mov     ecx, [work_abs_top]
1387
        shl     ecx, 16
1388
        add     ecx, [canvas.top]
1389
;        mcall   13, , , 0xff0000
1390
        mcall   13, , , [bg_color]
1391
        mov     eax, [canvas.height]
1392
        ror     ecx, 16
1393
        add     ecx, eax
1394
        add     ecx, [canvas_padding]
1395
        ror     ecx, 16
1396
;        mcall   13, , , 0x00ff00
1397
        mcall   13, , , [bg_color]
1398
;        mcall   13
1399
 
1400
        mov     ebx, [work_abs_left]
1401
        shl     ebx, 16
1402
        add     ebx, [canvas.left]
1403
        mov     ecx, [work_abs_top]
1404
        add     ecx, [canvas_padding]
1405
        shl     ecx, 16
1406
        add     ecx, [canvas.height]
1407
;        mcall   13, , , 0x0000ff
1408
        mcall   13, , , [bg_color]
1409
;        mcall
1410
        mov     eax, [canvas.width]
1411
        ror     ebx, 16
1412
        add     ebx, eax
1413
        add     ebx, [canvas_padding]
1414
        ror     ebx, 16
1415
;        mcall   13, , , 0xffff00
1416
        mcall   13, , , [bg_color]
1417
;        mcall   13
1418
 
1419
        call    draw_canvas
1420
        call    draw_onimage_decorations
1421
 
1422
        mov     eax, 13
1423
        cmp     [need_scrollbar_v], 1
1424
        jnz     @f
1425
        cmp     [need_scrollbar_h], 1
1426
        jnz     @f
1427
        mov     ebx, [work_abs_left]
1428
        add     ebx, [work.width]
1429
        sub     ebx, SCROLL_WIDTH_SIZE
1430
        shl     ebx, 16
1431
        add     ebx, SCROLL_WIDTH_SIZE
1432
        inc     ebx
1433
        mov     ecx, [work_abs_top]
1434
        add     ecx, [work.height]
1435
        sub     ecx, SCROLL_WIDTH_SIZE
1436
        shl     ecx, 16
1437
        add     ecx, SCROLL_WIDTH_SIZE
1438
        inc     ecx
1439
        mov     edx, [bg_color]
1440
;        mov     edx, 0x00ffff
1441
        mcall
7860 dunkaist 1442
@@:
7656 dunkaist 1443
 
1444
        cmp     [need_scrollbar_v], 0
1445
        jz      .v_scrollbar_done
1446
        mov     eax, [client.left]
1447
        add     eax, [client.width]
1448
        sub     eax, SCROLL_WIDTH_SIZE
1449
        mov     [scroll_bar_data_vertical.start_x], ax
1450
        mov     eax, [toolbar.height]
1451
        add     eax, [client.top]
1452
        mov     [scroll_bar_data_vertical.start_y], ax
1453
        mov     eax, [canvas.height]
1454
        add     eax, [canvas_padding]
1455
        add     eax, [canvas_padding]
1456
        mov     [scroll_bar_data_vertical.size_y], ax
1457
        mov     [scroll_bar_data_vertical.all_redraw], 1
1458
        invoke  scrollbar_vert_draw, scroll_bar_data_vertical
7860 dunkaist 1459
.v_scrollbar_done:
7656 dunkaist 1460
 
1461
        cmp     [need_scrollbar_h], 0
1462
        jz      .h_scrollbar_done
1463
        mov     eax, [client.left]
1464
        mov     [scroll_bar_data_horizontal.start_x], ax
1465
        mov     eax, [client.top]
1466
        add     eax, [client.height]
1467
        sub     eax, SCROLL_WIDTH_SIZE
1468
        mov     [scroll_bar_data_horizontal.start_y], ax
1469
        mov     eax, [canvas.width]
1470
        add     eax, [canvas_padding]
1471
        add     eax, [canvas_padding]
1472
        mov     [scroll_bar_data_horizontal.size_x], ax
1473
        mov     [scroll_bar_data_horizontal.all_redraw], 1
1474
        invoke  scrollbar_hort_draw, scroll_bar_data_horizontal
7860 dunkaist 1475
.h_scrollbar_done:
7656 dunkaist 1476
 
1477
        pop     edi esi ebx
1478
        ret
1479
endp
1480
 
1481
 
1482
proc draw_onimage_decorations
1483
        bt      [window_style], 25
1484
        jc      @f
1485
        ; draw fullscreen decorations on image
1486
        call    draw_filename
1487
        call    draw_fullscreen_controls
7860 dunkaist 1488
@@:
7656 dunkaist 1489
        ret
1490
endp
1491
 
1492
 
1493
proc draw_filename
1494
        push    esi
1495
        mcall   4, <100, 65>, 0x40ffffff, window_header, [window_header_len], 0x008800
1496
        pop     esi
1497
        ret
1498
endp
1499
 
1500
 
1501
proc draw_fullscreen_controls
1502
        push    esi
1503
        mov     ebx, [canvas.width]
1504
        shr     ebx, 1
1505
        add     ebx, [canvas.left]
1506
        sub     ebx, 22
1507
        shl     ebx, 16
1508
        add     ebx, 20
1509
        mov     ecx, [canvas.height]
1510
        shr     ecx, 3
1511
        neg     ecx
1512
        add     ecx, [canvas.height]
1513
        add     ecx, [canvas.top]
1514
        shl     ecx, 16
1515
        add     ecx, 20
1516
        mcall   8, , , 'bck'+40000000h
1517
        add     ebx, 25 SHL 16
1518
        mcall   8, , , 'fwd'+40000000h
1519
        mov     edx, [canvas.width]
1520
        shr     edx, 1
1521
        add     edx, [canvas.left]
1522
        sub     edx, 22
1523
        shl     edx, 16
1524
        add     edx, [canvas.height]
1525
        shr     dx, 3
1526
        neg     dx
1527
        add     dx, word[canvas.height]
1528
        add     edx, [canvas.top]
7860 dunkaist 1529
        mcall   65, buttons+backbtn*20, <20, 20>, , 8, palette
7656 dunkaist 1530
        add     edx, 25 SHL 16
8497 dunkaist 1531
        mcall   65, buttons+forwardbtn*20,      , , 8,
7656 dunkaist 1532
        pop     esi
1533
        ret
1534
endp
1535
 
1536
 
1537
proc check_shortcut
1570 dunkaist 1538
; in:   cl = scancode (from sysfn 2),
1539
;   eax = state of modifiers (from sysfn 66.3),
1540
;   edx -> shortcut descriptor
1541
; out:  ZF set <=> fail
7656 dunkaist 1542
        cmp     cl, [edx+4]
1543
        jnz     .not
1544
        push    eax
1545
        mov     esi, [edx]
1546
        and     esi, 0xf
1547
        and     al, 3
1548
        call    dword[check_modifier_table+esi*4]
1549
        test    al, al
1550
        pop     eax
1551
        jnz     .not
1552
        push    eax
1553
        mov     esi, [edx]
1554
        shr     esi, 4
1555
        and     esi, 0xf
1556
        shr     al, 2
1557
        and     al, 3
1558
        call    dword[check_modifier_table+esi*4]
1559
        test    al, al
1560
        pop     eax
1561
        jnz     .not
1562
        push    eax
1563
        mov     esi, [edx]
1564
        shr     esi, 8
1565
        and     esi, 0xf
1566
        shr     al, 4
1567
        and     al, 3
1568
        call    dword[check_modifier_table+esi*4]
1569
        test    al, al
1570
        pop     eax
1571
;       jnz     .not
7860 dunkaist 1572
.not:
7656 dunkaist 1573
        ret
1574
endp
1427 diamond 1575
 
7656 dunkaist 1576
 
1427 diamond 1577
check_modifier_0:
7656 dunkaist 1578
        setnz   al
1579
        ret
1427 diamond 1580
check_modifier_1:
7656 dunkaist 1581
        setp    al
1582
        ret
1427 diamond 1583
check_modifier_2:
7656 dunkaist 1584
        cmp     al, 3
1585
        setnz   al
1586
        ret
1427 diamond 1587
check_modifier_3:
7656 dunkaist 1588
        cmp     al, 1
1589
        setnz   al
1590
        ret
1427 diamond 1591
check_modifier_4:
7656 dunkaist 1592
        cmp     al, 2
1593
        setnz   al
1594
        ret
1427 diamond 1595
 
7656 dunkaist 1596
; >edi = destination string
1597
; >eax = number
1598
proc bin2dec
1599
        push    ebx ecx edx esi
1600
 
1601
        mov     ebx, 10
1602
        xor     ecx, ecx
7860 dunkaist 1603
@@:
7656 dunkaist 1604
        xor     edx, edx
1605
        div     ebx
1606
        push    edx
1607
        inc     ecx
1608
        test    eax, eax
1609
        jnz     @b
1610
 
7860 dunkaist 1611
@@:
7656 dunkaist 1612
        pop     eax
1613
        add     eax, '0'
1614
        stosb
1615
        inc     [window_header_len]
1616
        dec     ecx
1617
        jnz     @b
1618
 
1619
        pop     esi edx ecx ebx
1620
        ret
1621
endp
1622
 
1623
 
1624
; fills window_header with window title
1625
; window title is generated as '[k/n]  - Kolibri Image Viewer'
1626
; n = total files in dir
1627
; k = current file index
1628
proc generate_window_header
1629
        push    eax ebx esi edi
1630
        mov     esi, [last_name_component]
1631
        mov     edi, window_header
8497 dunkaist 1632
        mov     [window_header_len], 4    ; [,/,],
7656 dunkaist 1633
 
1634
        mov     byte[edi], '['
1635
        inc     edi
1636
        mov     eax, [cur_file_idx]
1637
        inc     eax
1638
        call    bin2dec
1639
        mov     byte[edi], '/'
1640
        inc     edi
7860 dunkaist 1641
        mov     eax, [directory_ptr]
1642
        mov     eax, [eax+4]
7656 dunkaist 1643
        call    bin2dec
1644
        mov     word[edi], '] '
1645
        add     edi, 2
1646
 
1647
        ; add filename
7860 dunkaist 1648
.next_symbol:
7656 dunkaist 1649
        lodsb
1650
        test    al, al
1651
        jz      @f
1652
        stosb
1653
        inc     [window_header_len]
1654
        cmp     edi, window_header+256
1655
        jb      .next_symbol
7860 dunkaist 1656
.overflow:
7656 dunkaist 1657
        mov     dword[edi-4], '...'
7860 dunkaist 1658
.ret:
7656 dunkaist 1659
        pop     edi esi ebx eax
1660
        ret
7860 dunkaist 1661
@@:
7656 dunkaist 1662
        mov     esi, s_header
7860 dunkaist 1663
@@:
7656 dunkaist 1664
        lodsb
1665
        stosb
1666
        test    al, al
1667
        jz      .ret
1668
        cmp     edi, window_header+256
1669
        jb      @b
1670
        jmp     .overflow
1671
endp
1672
 
1673
 
1674
proc scale_none_calc
1675
        push    ebx
1676
 
1677
        mov     [scale_mode], LIBIMG_SCALE_NONE
1678
 
8496 dunkaist 1679
        mov     eax, [cur_image]
1680
        cmp     eax, [orig_image]
1681
        jz      @f
1682
        invoke  img.destroy, eax
1683
@@:
7656 dunkaist 1684
        mov     eax, [orig_image]
1685
        mov     [cur_image], eax
1686
        mov     [cur_frame], eax
1687
        mov     ebx, eax
1688
 
1689
        mov     [need_scrollbar_v], 0
1690
        mov     [need_scrollbar_h], 0
1691
 
7860 dunkaist 1692
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1693
        cmp     eax, [canvas.width]
1694
        jbe     @f
1695
        sub     [canvas.height], SCROLL_WIDTH_SIZE+1
1696
        mov     [need_scrollbar_h], 1
7860 dunkaist 1697
@@:
1698
        mov     eax, [ebx+Image.Height]
7656 dunkaist 1699
        cmp     eax, [canvas.height]
1700
        jbe     @f
1701
        sub     [canvas.width], SCROLL_WIDTH_SIZE+1
1702
        mov     [need_scrollbar_v], 1
7860 dunkaist 1703
@@:
7656 dunkaist 1704
        cmp     [need_scrollbar_h], 1
1705
        jz      @f
7860 dunkaist 1706
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1707
        cmp     eax, [canvas.width]
1708
        jbe     @f
1709
        sub     [canvas.height], SCROLL_WIDTH_SIZE+1
1710
        mov     [need_scrollbar_h], 1
7860 dunkaist 1711
@@:
7656 dunkaist 1712
 
1713
 
7860 dunkaist 1714
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1715
        cmp     eax, [canvas.width]
1716
        jbe     @f
1717
        mov     eax, [canvas.width]
7860 dunkaist 1718
@@:
7656 dunkaist 1719
        mov     [view.width], eax
1720
        mov     [pict.width], eax
1721
 
7860 dunkaist 1722
        mov     eax, [ebx+Image.Height]
7656 dunkaist 1723
        cmp     eax, [canvas.height]
1724
        jbe     @f
1725
        mov     eax, [canvas.height]
7860 dunkaist 1726
@@:
7656 dunkaist 1727
        mov     [view.height], eax
1728
        mov     [pict.height], eax
1729
 
1730
        mov     eax, [canvas.width]
1731
        sub     eax, [view.width]
1732
        sar     eax, 1
1733
        mov     [view.left], eax
1734
        mov     eax, [canvas.height]
1735
        sub     eax, [view.height]
1736
        sar     eax, 1
1737
        mov     [view.top], eax
1738
 
7860 dunkaist 1739
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1740
        sub     eax, [pict.width]
1741
        sar     eax, 1
1742
        mov     [pict.left], eax
7860 dunkaist 1743
        mov     eax, [ebx+Image.Height]
7656 dunkaist 1744
        sub     eax, [pict.height]
1745
        sar     eax, 1
1746
        mov     [pict.top], eax
1747
 
1748
 
7860 dunkaist 1749
        mov     eax, [ebx+Image.Height]
7656 dunkaist 1750
        mov     [scroll_bar_data_vertical.max_area], eax
1751
        mov     eax, [pict.height]
1752
        mov     [scroll_bar_data_vertical.cur_area], eax
1753
        mov     eax, [pict.top]
1754
        mov     [scroll_bar_data_vertical.position], eax
1755
 
7860 dunkaist 1756
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1757
        mov     [scroll_bar_data_horizontal.max_area], eax
1758
        mov     eax, [pict.width]
1759
        mov     [scroll_bar_data_horizontal.cur_area], eax
1760
        mov     eax, [pict.left]
1761
        mov     [scroll_bar_data_horizontal.position], eax
1762
 
1763
        pop     ebx
1764
        ret
1765
endp
1766
 
1767
 
1768
proc scale_fit_min_calc
1769
        push    ebx
1770
 
1771
        mov     [need_scrollbar_v], 0
1772
        mov     [need_scrollbar_h], 0
1773
        mov     [scroll_bar_data_vertical.position], 0
1774
        mov     [scroll_bar_data_horizontal.position], 0
1775
 
1776
        mov     eax, [orig_image]
7860 dunkaist 1777
        cmp     [eax+Image.Type], Image.bpp24
7656 dunkaist 1778
        jz      @f
7860 dunkaist 1779
        cmp     [eax+Image.Type], Image.bpp32
7656 dunkaist 1780
        jz      @f
7860 dunkaist 1781
        cmp     [eax+Image.Type], Image.bpp8g
7656 dunkaist 1782
        jz      @f
1783
        invoke  img.convert, eax, 0, Image.bpp24, 0, 0
1784
        test    eax, eax
1785
;       jz      .error
1786
        push    eax
1787
        invoke  img.destroy, [orig_image]
1788
        pop     eax
1789
        mov     [orig_image], eax
1790
        mov     [cur_image], eax
1791
        mov     [cur_frame], eax
7860 dunkaist 1792
@@:
7656 dunkaist 1793
 
1794
        mov     eax, [orig_image]
7860 dunkaist 1795
        mov     ecx, [eax+Image.Height]
1796
        mov     eax, [eax+Image.Width]
7656 dunkaist 1797
        cmp     eax, [canvas.width]
1798
        ja      .get_size
1799
        cmp     ecx, [canvas.height]
1800
        ja      .get_size
1801
        jmp     .got_size
7860 dunkaist 1802
.get_size:
7656 dunkaist 1803
        invoke  img.get_scaled_size, eax, ecx, LIBIMG_SCALE_FIT_MIN, [canvas.width], [canvas.height]
7860 dunkaist 1804
.got_size:
7656 dunkaist 1805
 
1806
        mov     [pict.top], 0
1807
        mov     [pict.left], 0
1808
 
1809
        cmp     eax, [canvas.width]
1810
        jbe     @f
1811
        mov     eax, [canvas.width]
7860 dunkaist 1812
@@:
7656 dunkaist 1813
        mov     [view.width], eax
1814
        mov     [pict.width], eax
1815
        neg     eax
1816
        add     eax, [canvas.width]
1817
        shr     eax, 1
1818
        mov     [view.left], eax
1819
 
1820
        mov     eax, ecx
1821
        cmp     eax, [canvas.height]
1822
        jbe     @f
1823
        mov     eax, [canvas.height]
7860 dunkaist 1824
@@:
7656 dunkaist 1825
        mov     [view.height], eax
1826
        mov     [pict.height], eax
1827
        neg     eax
1828
        add     eax, [canvas.height]
1829
        shr     eax, 1
1830
        mov     [view.top], eax
1831
 
1832
 
1833
        pop     ebx
1834
        ret
1835
endp
1836
 
1837
 
7726 dunkaist 1838
; eax: new scaling mode
1839
; z/Z - not/changed
1840
proc set_scale_mode
1841
        cmp     eax, [scale_mode]
7656 dunkaist 1842
        mov     [scale_mode], eax
7726 dunkaist 1843
        setnz   [bScaleModeChanged]
7656 dunkaist 1844
        ret
1845
endp
1846
 
1847
proc move_pictport _dx, _dy
1848
locals
1849
        new_left dd ?
1850
        new_top  dd ?
1851
endl
1852
        push    ebx ecx
1853
 
1854
        mov     ebx, [cur_image]
7860 dunkaist 1855
.x:
7656 dunkaist 1856
        mov     eax, [pict.left]
1857
        add     eax, [_dx]
1858
        cmp     eax, 0
1859
        jge     @f
1860
        mov     [new_left], 0
1861
        jmp     .xdone
7860 dunkaist 1862
@@:
7656 dunkaist 1863
        mov     ecx, eax
1864
        add     eax, [pict.width]
7860 dunkaist 1865
        cmp     eax, [ebx+Image.Width]
7656 dunkaist 1866
        ja      @f
1867
        mov     [new_left], ecx
1868
        jmp     .xdone
7860 dunkaist 1869
@@:
1870
        mov     eax, [ebx+Image.Width]
7656 dunkaist 1871
        sub     eax, [pict.width]
1872
        mov     [new_left], eax
1873
        jmp     .xdone
7860 dunkaist 1874
.xdone:
7656 dunkaist 1875
 
7860 dunkaist 1876
.y:
7656 dunkaist 1877
        mov     eax, [pict.top]
1878
        add     eax, [_dy]
1879
        cmp     eax, 0
1880
        jge     @f
1881
        mov     [new_top], 0
1882
        jmp     .ydone
7860 dunkaist 1883
@@:
7656 dunkaist 1884
        mov     ecx, eax
1885
        add     eax, [pict.height]
7860 dunkaist 1886
        cmp     eax, [ebx+Image.Height]
7656 dunkaist 1887
        ja      @f
1888
        mov     [new_top], ecx
1889
        jmp     .ydone
7860 dunkaist 1890
@@:
1891
        mov     eax, [ebx+Image.Height]
7656 dunkaist 1892
        sub     eax, [pict.height]
1893
        mov     [new_top], eax
1894
        jmp     .ydone
7860 dunkaist 1895
.ydone:
7656 dunkaist 1896
 
1897
        xor     eax, eax
1898
        mov     ecx, [new_left]
1899
        mov     edx, [new_top]
1900
 
1901
        cmp     ecx, [pict.left]
1902
        setnz   al
1903
        shl     eax, 8
1904
 
1905
        cmp     edx, [pict.top]
1906
        setnz   al
1907
 
1908
        mov     [pict.left], ecx
1909
        mov     [pict.top], edx
1910
 
1911
        pop     ecx ebx
1912
        ret
1913
endp
1914
 
1915
 
1916
proc update_scrollbars _xxhv
1917
        mov     eax, [_xxhv]
1918
 
1919
        test    ah, ah
1920
        jz      .no_h_scroll
1921
        push    eax
1922
        mov     [scroll_bar_data_horizontal.all_redraw], 0
1923
        mov     eax, [pict.left]
1924
        mov     [scroll_bar_data_horizontal.position], eax
1925
        invoke  scrollbar_hort_draw, scroll_bar_data_horizontal
1926
        pop     eax
7860 dunkaist 1927
.no_h_scroll:
7656 dunkaist 1928
        test    al, al
1929
        jz      .no_v_scroll
1930
        push    eax
1931
        mov     [scroll_bar_data_vertical.all_redraw], 0
1932
        mov     eax, [pict.top]
1933
        mov     [scroll_bar_data_vertical.position], eax
1934
        invoke  scrollbar_vert_draw, scroll_bar_data_vertical
1935
        pop     eax
7860 dunkaist 1936
.no_v_scroll:
7656 dunkaist 1937
 
1938
        ret
1939
endp
1940
 
1941
 
1942
proc merge_icons_to_single_img _img
1943
        push    ebx esi edi
1944
 
1945
        mov     edx, [_img]
7860 dunkaist 1946
        mov     eax, [edx+Image.Width]
1947
        mov     ecx, [edx+Image.Height]
1948
.next:
1949
        cmp     [edx+Image.Next], 0
7656 dunkaist 1950
        jz      .got_sizes
1951
        inc     eax
7860 dunkaist 1952
        mov     edx, [edx+Image.Next]
1953
        add     eax, [edx+Image.Width]
1954
        cmp     ecx, [edx+Image.Height]
7656 dunkaist 1955
        jae     @f
7860 dunkaist 1956
        mov     ecx, [edx+Image.Height]
1957
@@:
7656 dunkaist 1958
        jmp     .next
1959
 
7860 dunkaist 1960
.got_sizes:
7656 dunkaist 1961
        invoke  img.create, eax, ecx, Image.bpp32
1962
        test    eax, eax
1963
        jz      .error
1964
        mov     ebx, eax
1965
 
1966
        mov     eax, [bg_color]
7860 dunkaist 1967
        mov     edi, [ebx+Image.Data]
1968
        mov     ecx, [ebx+Image.Width]
1969
        imul    ecx, [ebx+Image.Height]
8497 dunkaist 1970
        rep stosd
7656 dunkaist 1971
 
1972
        mov     eax, [_img]
7860 dunkaist 1973
        cmp     [eax+Image.Type], Image.bpp32
7656 dunkaist 1974
        jz      @f
1975
        invoke  img.convert, eax, 0, Image.bpp32, 0, 0
1976
        test    eax, eax
1977
        jz      .error
1978
        push    eax
1979
        invoke  img.destroy, [_img]
1980
        pop     eax
7860 dunkaist 1981
@@:
7656 dunkaist 1982
        mov     esi, eax
1983
        xor     edi, edi
7860 dunkaist 1984
.next_img:
7656 dunkaist 1985
        stdcall put_img_on_img, ebx, esi, edi, 0
7860 dunkaist 1986
        add     edi, [esi+Image.Width]
7656 dunkaist 1987
        inc     edi
7860 dunkaist 1988
        cmp     [esi+Image.Next], 0
7656 dunkaist 1989
        jz      @f
7860 dunkaist 1990
        mov     esi, [esi+Image.Next]
7656 dunkaist 1991
        jmp     .next_img
7860 dunkaist 1992
@@:
7656 dunkaist 1993
        invoke  img.destroy, esi
1994
        mov     eax, ebx
1995
        jmp     .quit
1996
 
7860 dunkaist 1997
.error:
7656 dunkaist 1998
        xor     eax, eax
7860 dunkaist 1999
.quit:
7656 dunkaist 2000
        pop     edi esi ebx
2001
        ret
2002
endp
2003
 
2004
 
2005
proc put_img_on_img _bottom, _top, _x, _y
2006
locals
2007
        img_height dd ?
2008
endl
2009
        push    ebx esi edi
2010
 
2011
        mov     ebx, [_bottom]
2012
        mov     edx, [_top]
7860 dunkaist 2013
        mov     eax, [edx+Image.Height]
7656 dunkaist 2014
        mov     [img_height], eax
7860 dunkaist 2015
        mov     esi, [edx+Image.Data]
2016
        mov     edi, [ebx+Image.Data]
7656 dunkaist 2017
        mov     eax, [_y]
7860 dunkaist 2018
        imul    eax, [ebx+Image.Width]
7656 dunkaist 2019
        add     eax, [_x]
2020
        shl     eax, 2
2021
        add     edi, eax
7860 dunkaist 2022
.next_line:
2023
        mov     ecx, [edx+Image.Width]
8497 dunkaist 2024
        rep movsd
7860 dunkaist 2025
        mov     eax, [ebx+Image.Width]
2026
        sub     eax, [edx+Image.Width]
7656 dunkaist 2027
        shl     eax, 2
2028
        add     edi, eax
2029
        dec     [img_height]
2030
        jnz     .next_line
2031
 
2032
        pop     edi esi ebx
2033
        ret
2034
endp
2035
 
2036
 
2037
proc copy_box _src, _dst
2038
        pushad
2039
 
2040
        mov     esi, [_src]
2041
        mov     edi, [_dst]
2042
        mov     ecx, 4
2043
        rep movsd
2044
 
2045
        popad
2046
        ret
2047
endp
2048
 
2049
 
2050
proc cmp_box _a, _b
2051
        pushad
2052
 
2053
        mov     esi, [_a]
2054
        mov     edi, [_b]
2055
        mov     ecx, 4
2056
        rep cmpsd
2057
 
2058
        popad
2059
        ret
2060
endp
2061
 
2062
 
2063
proc recalc_client
2064
        stdcall copy_box, toolbar, toolbar_prev
2065
        mov     [toolbar.left], 0
2066
        mov     [toolbar.top], 0
2067
        mov     eax, [client.width]
2068
        mov     [toolbar.width], eax
2069
        mov     [toolbar.height], 0
2070
        cmp     [bShowToolbar], 1
2071
        jnz     @f
2072
        mov     [toolbar.height], TOOLBAR_HEIGHT
7860 dunkaist 2073
@@:
7656 dunkaist 2074
 
2075
        mov     eax, [toolbar.top]
2076
        add     eax, [client_abs_top]
2077
        mov     [toolbar_abs_top], eax
2078
        mov     eax, [toolbar.left]
2079
        add     eax, [client_abs_left]
2080
        mov     [toolbar_abs_left], eax
2081
 
2082
        test    [bFirstWinDraw], 1
2083
        jnz     .recalc_toolbar
2084
        stdcall cmp_box, toolbar, toolbar_prev
2085
        jnz     .recalc_toolbar
2086
        test    [bNewImage], 1
2087
        jnz     .recalc_toolbar
2088
        jmp     .recalc_toolbar_done
7860 dunkaist 2089
.recalc_toolbar:
7656 dunkaist 2090
        stdcall recalc_toolbar
7860 dunkaist 2091
.recalc_toolbar_done:
7656 dunkaist 2092
 
2093
        stdcall copy_box, work, work_prev
2094
        xor     ecx, ecx
8497 dunkaist 2095
        test    [bShowToolbar], 1
7656 dunkaist 2096
        jz      @f
2097
        mov     ecx, [toolbar.height]
7860 dunkaist 2098
@@:
7656 dunkaist 2099
        mov     eax, ecx
2100
        mov     [work.top], eax
2101
        mov     eax, [client.height]
2102
        sub     eax, ecx
2103
        mov     [work.height], eax
2104
        mov     [work.left], 0
2105
        mov     eax, [client.width]
2106
        mov     [work.width], eax
2107
 
2108
        mov     eax, [work.top]
2109
        add     eax, [client_abs_top]
2110
        mov     [work_abs_top], eax
2111
        mov     eax, [work.left]
2112
        add     eax, [client_abs_left]
2113
        mov     [work_abs_left], eax
2114
 
2115
        test    [bFirstWinDraw], 1
2116
        jnz     .recalc_work
2117
        test    [bNewImage], 1
2118
        jnz     .recalc_work
2119
        stdcall cmp_box, work, work_prev
2120
        jnz     .recalc_work
2121
        jmp     .recalc_work_done
7860 dunkaist 2122
.recalc_work:
7656 dunkaist 2123
        stdcall recalc_work
7860 dunkaist 2124
.recalc_work_done:
7656 dunkaist 2125
 
2126
        ret
2127
endp
2128
 
2129
 
2130
proc recalc_toolbar
2131
 
2132
        ret
2133
endp
2134
 
2135
 
2136
proc recalc_window
2137
        stdcall copy_box, client, client_prev
2138
        test    [bSlideShow], 1
2139
        jz      .no_slide_show
7860 dunkaist 2140
.slide_show:
7656 dunkaist 2141
        mov     [client.left], 0
2142
        mov     [client.top], 0
2143
        mov     eax, [procinfo.box.width]
2144
        mov     [client.width], eax
2145
        mov     eax, [procinfo.box.height]
2146
        mov     [client.height], eax
2147
        jmp     .calc_abs
7860 dunkaist 2148
.no_slide_show:
7656 dunkaist 2149
        mcall   SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
2150
        mov     [client.top], eax
2151
        neg     eax
2152
        add     eax, [procinfo.box.height]
2153
        sub     eax, 5
2154
        mov     [client.height], eax
2155
        mov     [client.left], 5
2156
        mov     eax, [procinfo.box.width]
2157
        sub     eax, 10
2158
        mov     [client.width], eax
2159
 
7860 dunkaist 2160
.calc_abs:
7656 dunkaist 2161
        mov     eax, [client.top]
2162
        mov     [client_abs_top], eax
2163
        mov     eax, [client.left]
2164
        mov     [client_abs_left], eax
2165
 
2166
        stdcall cmp_box, client, client_prev
2167
        jnz     .recalc_client
2168
        test    [bNewImage], 1
2169
        jnz     .recalc_client
2170
        test    [bToggleToolbar], 1
2171
        jnz     .recalc_client
2172
        jmp     .recalc_client_done
7860 dunkaist 2173
.recalc_client:
7656 dunkaist 2174
        stdcall recalc_client
7860 dunkaist 2175
.recalc_client_done:
7656 dunkaist 2176
 
2177
        ret
2178
endp
2179
 
2180
 
2181
proc recalc_work
2182
        stdcall copy_box, canvas, canvas_prev
2183
        mov     eax, [work.left]
2184
        add     eax, [canvas_padding]
2185
        mov     [canvas.left], eax
2186
        mov     eax, [work.width]
2187
        sub     eax, [canvas_padding]
2188
        sub     eax, [canvas_padding]
2189
        inc     eax
2190
        mov     [canvas.width], eax
2191
        mov     eax, [canvas_padding]
2192
        mov     [canvas.top], eax
2193
        mov     eax, [work.height]
2194
        sub     eax, [canvas_padding]
2195
        sub     eax, [canvas_padding]
2196
        inc     eax
2197
        mov     [canvas.height], eax
2198
 
2199
        mov     eax, [canvas.top]
2200
        add     eax, [work_abs_top]
2201
        mov     [canvas_abs_top], eax
2202
        mov     eax, [canvas.left]
2203
        add     eax, [work_abs_left]
2204
        mov     [canvas_abs_left], eax
2205
 
2206
        test    [bFirstWinDraw], 1
2207
        jnz     .recalc_canvas
2208
        test    [bNewImage], 1
2209
        jnz     .recalc_canvas
2210
        stdcall cmp_box, canvas, canvas_prev
2211
        jnz     .recalc_canvas
7860 dunkaist 2212
        cmp     [bScaleModeChanged], 0
2213
        jnz     .recalc_canvas
7656 dunkaist 2214
        jmp     .recalc_canvas_done
7860 dunkaist 2215
.recalc_canvas:
7656 dunkaist 2216
        stdcall recalc_canvas
7860 dunkaist 2217
.recalc_canvas_done:
7656 dunkaist 2218
        ret
2219
endp
2220
 
2221
 
2222
proc recalc_canvas
2223
        stdcall copy_box, view, view_prev
2224
        mov     eax, [scale_mode]
7860 dunkaist 2225
        call    [scale_mode_calc+eax*4]
7656 dunkaist 2226
 
2227
        mov     eax, [view.top]
2228
        add     eax, [canvas_abs_top]
2229
        mov     [view_abs_top], eax
2230
        mov     eax, [view.left]
2231
        add     eax, [canvas_abs_left]
2232
        mov     [view_abs_left], eax
2233
 
2234
        ret
2235
endp
2236
 
1004 diamond 2237
;-----------------------------------------------------------------------------
7656 dunkaist 2238
DATA
1004 diamond 2239
 
7656 dunkaist 2240
s_header        db ' - Kolibri Image Viewer',0
2241
window_style    dd 0x53FFFFFF
7879 leency 2242
window          BOX 100, 150, 0, 0  ; left top width height
7656 dunkaist 2243
window_prev     BOX 0, 0, 0, 0
2244
window_save     BOX 0, 0, 0, 0  ; restore after slide show
2245
client          BOX 0, 0, 0, 0
2246
client_prev     BOX 0, 0, 0, 0
2247
client_abs_top  dd ?
2248
client_abs_left dd ?
2249
toolbar         BOX 0, 0, 0, 0
2250
toolbar_prev    BOX 0, 0, 0, 0
2251
toolbar_abs_top dd ?
2252
toolbar_abs_left dd ?
2253
work            BOX 0, 0, 0, 0
2254
work_prev       BOX 0, 0, 0, 0
2255
work_abs_top    dd ?
2256
work_abs_left   dd ?
2257
canvas          BOX 0, 0, 0, 0
2258
canvas_prev     BOX 0, 0, 0, 0
2259
canvas_abs_top  dd ?
2260
canvas_abs_left dd ?
2261
view            BOX -1, -1, 0, 0
2262
view_prev       BOX -1, -1, 0, 0
2263
view_abs_top    dd ?
2264
view_abs_left   dd ?
2265
pict            BOX 0, 0, 0, 0
2266
canvas_padding  dd 5
2267
bg_color        dd 0x00ffffff
2268
scale_mode      dd LIBIMG_SCALE_FIT_MIN
2269
pict_drag       dd 0
2270
scroll_v_drag   dd 0
2271
scroll_h_drag   dd 0
1004 diamond 2272
 
7656 dunkaist 2273
mouse_buttons    dd 0
2274
mouse_pos        dd 0
2275
need_scrollbar_v dd 0
2276
need_scrollbar_h dd 0
2277
 
2278
pict_moved      dd 0
2279
 
1004 diamond 2280
;-----------------------------------------------------------------------------
7656 dunkaist 2281
align   4
2282
scroll_bar_data_vertical:
2283
.x:
2284
.size_x         dw SCROLL_WIDTH_SIZE
2285
.start_x        dw 1
2286
.y:
2287
.size_y         dw 100
2288
.start_y        dw 0
2289
.btn_high       dd SCROLL_WIDTH_SIZE
2290
.type           dd 0    ;+12
2291
.max_area       dd 100  ;+16
2292
.cur_area       dd 10   ;+20
2293
.position       dd 0    ;+24
2294
.bckg_col       dd 0xAAAAAA     ;+28
2295
.frnt_col       dd 0xCCCCCC     ;+32
2296
.line_col       dd 0    ;+36
2297
.redraw         dd 0    ;+40
2298
.delta          dw 0    ;+44
2299
.delta2         dw 0    ;+46
2300
.run_x:
2301
.r_size_x       dw 0    ;+48
2302
.r_start_x      dw 0    ;+50
2303
.run_y:
2304
.r_size_y       dw 0    ;+52
2305
.r_start_y      dw 0    ;+54
2306
.m_pos          dd 0    ;+56
2307
.m_pos_2        dd 0    ;+60
2308
.m_keys         dd 0    ;+64
2309
.run_size       dd 0    ;+68
2310
.position2      dd 0    ;+72
2311
.work_size      dd 0    ;+76
2312
.all_redraw     dd 0    ;+80
2313
.ar_offset      dd KEY_MOVE_PIXELS   ;+84
1004 diamond 2314
;-----------------------------------------------------------------------------
7656 dunkaist 2315
align   4
2316
scroll_bar_data_horizontal:
2317
.x:
2318
.size_x         dw 0    ;+0
2319
.start_x        dw 0    ;+2
2320
.y:
2321
.size_y         dw SCROLL_WIDTH_SIZE    ;+4
2322
.start_y        dw 0    ;+6
2323
.btn_high       dd SCROLL_WIDTH_SIZE    ;+8
2324
.type           dd 0    ;+12
2325
.max_area       dd 50   ;+16
2326
.cur_area       dd 50   ;+20
2327
.position       dd 0    ;+24
2328
.bckg_col       dd 0xAAAAAA     ;+28
2329
.frnt_col       dd 0xCCCCCC     ;+32
2330
.line_col       dd 0    ;+36
2331
.redraw         dd 0    ;+40
2332
.delta          dw 0    ;+44
2333
.delta2         dw 0    ;+46
2334
.run_x:
2335
.r_size_x       dw 0    ;+48
2336
.r_start_x      dw 0    ;+50
2337
.run_y:
2338
.r_size_y       dw 0    ;+52
2339
.r_start_y      dw 0    ;+54
2340
.m_pos          dd 0    ;+56
2341
.m_pos_2        dd 0    ;+60
2342
.m_keys         dd 0    ;+64
2343
.run_size       dd 0    ;+68
2344
.position2      dd 0    ;+72
2345
.work_size      dd 0    ;+76
2346
.all_redraw     dd 0    ;+80
2347
.ar_offset      dd KEY_MOVE_PIXELS      ;+84
2348
;-----------------------------------------------------------------------------
1004 diamond 2349
align 4
2350
@IMPORT:
2351
 
7656 dunkaist 2352
library                           \
2353
        libgfx  , 'libgfx.obj'  , \
2354
        libimg  , 'libimg.obj'  , \
2355
        libini  , 'libini.obj'  , \
2356
        sort    , 'sort.obj'    , \
2357
        proc_lib, 'proc_lib.obj', \
2358
        box_lib , 'box_lib.obj'
1004 diamond 2359
 
1511 mario79 2360
 
7656 dunkaist 2361
import libgfx                         , \
2362
        libgfx.init  , 'lib_init'     , \
2363
        gfx.open     , 'gfx_open'     , \
2364
        gfx.close    , 'gfx_close'    , \
2365
        gfx.pen.color, 'gfx_pen_color', \
2366
        gfx.line     , 'gfx_line'
1004 diamond 2367
 
7656 dunkaist 2368
import libimg                                     , \
2369
        libimg.init        , 'lib_init'           , \
2370
        img.from_file      , 'img_from_file'      , \
2371
        img.to_rgb2        , 'img_to_rgb2'        , \
2372
        img.create         , 'img_create'         , \
2373
        img.flip           , 'img_flip'           , \
2374
        img.rotate         , 'img_rotate'         , \
2375
        img.destroy        , 'img_destroy'        , \
2376
        img.scale          , 'img_scale'          , \
2377
        img.get_scaled_size, 'img_get_scaled_size', \
2378
        img.convert        , 'img_convert'        , \
2379
        img.draw           , 'img_draw'
1004 diamond 2380
 
7656 dunkaist 2381
import libini                               , \
2382
        ini_get_shortcut, 'ini_get_shortcut', \
7879 leency 2383
        ini_get_int,      'ini_get_int',\
2384
        ini_set_int,      'ini_set_int',\
7656 dunkaist 2385
        ini_set_str,      'ini_set_str'
1004 diamond 2386
 
7656 dunkaist 2387
import sort                  ,\
2388
        sort.START, 'START'  ,\
2389
        SortDir   , 'SortDir',\
2390
        strcmpi   , 'strcmpi'
1427 diamond 2391
 
7656 dunkaist 2392
import proc_lib                             ,\
2393
        OpenDialog_Init , 'OpenDialog_init' ,\
2394
        OpenDialog_Start, 'OpenDialog_start'
1016 diamond 2395
 
7656 dunkaist 2396
import box_lib                                   ,\
2397
        scrollbar_vert_draw , 'scrollbar_v_draw' ,\
2398
        scrollbar_vert_mouse, 'scrollbar_v_mouse',\
2399
        scrollbar_hort_draw , 'scrollbar_h_draw' ,\
2400
        scrollbar_hort_mouse, 'scrollbar_h_mouse'
1511 mario79 2401
 
7656 dunkaist 2402
bFirstWinDraw     db 1
2403
bSlideShow        db 0
2404
bToggleSlideShow  db 0
2405
bShowToolbar      db 1
2406
bShowToolbarSave  db 0  ; to restore state when return from slide show
2407
bToggleToolbar    db 0
2408
bScaleModeChanged db 0
2409
bNewImage         db 0
1004 diamond 2410
;-----------------------------------------------------------------------------
2411
 
1016 diamond 2412
virtual at 0
2413
file 'kivicons.bmp':0xA,4
2414
load offbits dword from 0
2415
end virtual
7860 dunkaist 2416
numimages = 11
1016 diamond 2417
openbtn = 0
2418
backbtn = 1
2419
forwardbtn = 2
2420
bgrbtn = 3
2421
fliphorzbtn = 4
2422
flipvertbtn = 5
2423
rotcwbtn = 6
2424
rotccwbtn = 7
2425
rot180btn = 8
3116 dunkaist 2426
slidebtn = 9
7860 dunkaist 2427
scalebtn = 10
1016 diamond 2428
 
1004 diamond 2429
palette:
1570 dunkaist 2430
    file 'kivicons.bmp':0x36,offbits-0x36
1016 diamond 2431
buttons:
1570 dunkaist 2432
    file 'kivicons.bmp':offbits
7862 dunkaist 2433
repeat 10
7860 dunkaist 2434
y = %-1
2435
z = 20-%
1016 diamond 2436
repeat numimages*5
2437
load a dword from $ - numimages*20*20 + numimages*20*y + (%-1)*4
2438
load b dword from $ - numimages*20*20 + numimages*20*z + (%-1)*4
7656 dunkaist 2439
store  dword a at $ - numimages*20*20 + numimages*20*z + (%-1)*4
2440
store  dword b at $ - numimages*20*20 + numimages*20*y + (%-1)*4
1004 diamond 2441
end repeat
2442
end repeat
2443
 
7432 leency 2444
inifilename db  '/sys/settings/app.ini',0
7879 leency 2445
aKivSection  db  'Kiv',0
1570 dunkaist 2446
aNext       db  'Next',0
2447
aPrev       db  'Prev',0
3116 dunkaist 2448
aSlide      db  'SlideShow',0
2449
aTglbar     db  'ToggleBar',0
7879 leency 2450
aWinX       db  'WinX',0
2451
aWinY       db  'WinY',0
2452
aWinW       db  'WinW',0
2453
aWinH       db  'WinH',0
1427 diamond 2454
 
7870 leency 2455
inifileeskin db '/sys/settings/system.ini',0
2456
amain       db 'style',0
2457
aprogram    db 'bg_program',0
2458
aparam      db 'bg_param',0
7421 leency 2459
 
1427 diamond 2460
align 4
2461
check_modifier_table:
1570 dunkaist 2462
    dd  check_modifier_0
2463
    dd  check_modifier_1
2464
    dd  check_modifier_2
2465
    dd  check_modifier_3
2466
    dd  check_modifier_4
1427 diamond 2467
 
1470 mario79 2468
;---------------------------------------------------------------------
2469
align 4
2470
OpenDialog_data:
7656 dunkaist 2471
.type                   dd 0
2472
.procinfo               dd procinfo                             ; +4
2473
.com_area_name          dd communication_area_name              ; +8
2474
.com_area               dd 0                                    ; +12
2475
.opendir_path           dd temp_dir_path                        ; +16
2476
.dir_default_path       dd communication_area_default_path      ; +20
2477
.start_path             dd open_dialog_path                     ; +24
2478
.draw_window            dd draw_window                          ; +28
2479
.status                 dd 0                                    ; +32
2480
.openfile_path          dd path                                 ; openfile_path ; +36
2481
.filename_area          dd 0                                    ; +40
2482
.filter_area            dd Filter
1582 mario79 2483
.x:
7656 dunkaist 2484
.x_size                 dw 420                                  ; +48 ; Window X size
2485
.x_start                dw 10                                   ; +50 ; Window X position
1582 mario79 2486
.y:
7656 dunkaist 2487
.y_size                 dw 320                                  ; +52 ; Window y size
2488
.y_start                dw 10                                   ; +54 ; Window Y position
1004 diamond 2489
 
1470 mario79 2490
communication_area_name:
1570 dunkaist 2491
    db 'FFFFFFFF_open_dialog',0
1701 lrz 2492
 
1470 mario79 2493
open_dialog_path:
1701 lrz 2494
if __nightbuild eq yes
2495
    db '/sys/MANAGERS/opendial',0
2496
else
1570 dunkaist 2497
    db '/sys/File Managers/opendial',0
1701 lrz 2498
end if
7656 dunkaist 2499
communication_area_default_path:
1570 dunkaist 2500
    db '/rd/1',0
1004 diamond 2501
 
1470 mario79 2502
Filter:
7860 dunkaist 2503
dd Filter.end-Filter
1470 mario79 2504
.1:
2505
db 'BMP',0
2506
db 'GIF',0
2507
db 'JPG',0
2508
db 'JPEG',0
2509
db 'JPE',0
2510
db 'PNG',0
2511
db 'ICO',0
2512
db 'CUR',0
3116 dunkaist 2513
db 'TGA',0
1570 dunkaist 2514
db 'PCX',0
1922 dunkaist 2515
db 'XCF',0
2389 dunkaist 2516
db 'PBM',0
2517
db 'PGM',0
2518
db 'PNM',0
7656 dunkaist 2519
db 'PPM',0
2389 dunkaist 2520
db 'TIF',0
2521
db 'TIFF',0
2394 dunkaist 2522
db 'WBMP',0
7656 dunkaist 2523
db 'WEBP',0
2524
db 'XBM',0
1470 mario79 2525
.end:
2526
db 0
1004 diamond 2527
 
1470 mario79 2528
draw_window_fake:
8497 dunkaist 2529
        ret
1470 mario79 2530
;------------------------------------------------------------------------------
7656 dunkaist 2531
scale_mode_calc dd scale_none_calc, 0, 0, 0, scale_fit_min_calc
2532
 
2533
scale_none_mod    dd 0
2534
scale_none_key    dd 13 ; '='
2535
scale_fit_min_mod dd 0
2536
scale_fit_min_key dd 17 ; 'w'
2537
 
2538
move_pictport_left_1_mod dd 0
2539
move_pictport_left_1_key dd 35 ; 'h'
2540
move_pictport_left_2_mod dd 0
2541
move_pictport_left_2_key dd 75 ; arrow left
2542
 
2543
move_pictport_right_1_mod dd 0
2544
move_pictport_right_1_key dd 38 ; 'l'
2545
move_pictport_right_2_mod dd 0
2546
move_pictport_right_2_key dd 77 ; arrow right
2547
 
2548
move_pictport_up_1_mod dd 0
2549
move_pictport_up_1_key dd 37 ; 'k'
2550
move_pictport_up_2_mod dd 0
2551
move_pictport_up_2_key dd 72 ; arrow up
2552
 
2553
move_pictport_down_1_mod dd 0
2554
move_pictport_down_1_key dd 36 ; 'j'
2555
move_pictport_down_2_mod dd 0
2556
move_pictport_down_2_key dd 80 ; arrow down
2557
 
2558
;shift_left_down_mod
2559
 
2560
;include_debug_strings
2561
 
1016 diamond 2562
readdir_fileinfo:
1570 dunkaist 2563
    dd  1
2564
    dd  0
2565
    dd  0
2566
readblocks dd   0
7860 dunkaist 2567
directory_ptr   dd 0
2568
curdir          rb 1024
1470 mario79 2569
;------------------------------------------------------------------------------
7656 dunkaist 2570
 
1004 diamond 2571
I_END:
1016 diamond 2572
align 4
7656 dunkaist 2573
img_data_len    rd 1
2574
fh              rd 1
2575
orig_image      rd 1
2576
cur_image       rd 1
2577
files_num       rd 1
2578
cur_file_idx    rd 1
2579
cur_frame_time  rd 1
2580
cur_frame       rd 1
1004 diamond 2581
 
7656 dunkaist 2582
next_mod          rd 1
2583
next_key          rd 1
2584
prev_mod          rd 1
2585
prev_key          rd 1
2586
slide_mod         rd 1
2587
slide_key         rd 1
2588
tglbar_mod        rd 1
2589
tglbar_key        rd 1
1004 diamond 2590
 
3116 dunkaist 2591
 
7656 dunkaist 2592
last_name_component rd 1
2593
toolbar.height_old  rd 1
2594
 
2595
procinfo        process_information
7860 dunkaist 2596
scale_button_xy dd ?
2597
scale_button_letter dd ?        ; i.e. 'x1',0
7421 leency 2598
align 16
7656 dunkaist 2599
path            rb 4096
2600
window_header   rb 256
2601
window_header_len rd 1
2602
__params        rb 4096
1470 mario79 2603
;---------------------------------------------------------------------
7421 leency 2604
sys_path rb 1024
7656 dunkaist 2605
temp_dir_path:
1470 mario79 2606
        rb 4096
2607
;---------------------------------------------------------------------
1570 dunkaist 2608
    rb 4096
1470 mario79 2609
stacktop:
2610
;---------------------------------------------------------------------
7656 dunkaist 2611
E_END: