Subversion Repositories Kolibri OS

Rev

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