Subversion Repositories Kolibri OS

Rev

Rev 9035 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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