Subversion Repositories Kolibri OS

Rev

Rev 4779 | Rev 5635 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4779 Rev 5363
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
$Revision: 4779 $
8
$Revision: 5363 $
9
 
9
 
10
 
10
 
11
include "skindata.inc"
11
include "skindata.inc"
12
 
12
 
13
;skin_data = 0x00778000
13
;skin_data = 0x00778000
14
;-----------------------------------------------------------------
14
;-----------------------------------------------------------------
15
align 4
15
align 4
16
read_skin_file:
16
read_skin_file:
17
        stdcall load_file, ebx
17
        stdcall load_file, ebx
18
        test    eax, eax
18
        test    eax, eax
19
        jz      .notfound
19
        jz      .notfound
20
 
20
 
21
        cmp     dword [eax], 'SKIN'
21
        cmp     dword [eax], 'SKIN'
22
        jnz     .noskin
22
        jnz     .noskin
23
 
23
 
24
        xchg    eax, [skin_data]
24
        xchg    eax, [skin_data]
25
        test    eax, eax
25
        test    eax, eax
26
        jz      @f
26
        jz      @f
27
 
27
 
28
        stdcall kernel_free, eax
28
        stdcall kernel_free, eax
29
@@:
29
@@:
30
        call    parse_skin_data
30
        call    parse_skin_data
31
        xor     eax, eax
31
        xor     eax, eax
32
        ret
32
        ret
33
;--------------------------------------
33
;--------------------------------------
34
align 4
34
align 4
35
.notfound:
35
.notfound:
36
        xor     eax, eax
36
        xor     eax, eax
37
        inc     eax
37
        inc     eax
38
        ret
38
        ret
39
;--------------------------------------
39
;--------------------------------------
40
align 4
40
align 4
41
.noskin:
41
.noskin:
42
        stdcall kernel_free, eax
42
        stdcall kernel_free, eax
43
        mov     eax, 2
43
        mov     eax, 2
44
        ret
44
        ret
45
;------------------------------------------------------------------------------
45
;------------------------------------------------------------------------------
46
struct  SKIN_HEADER
46
struct  SKIN_HEADER
47
        ident           dd ?
47
        ident           dd ?
48
        version         dd ?
48
        version         dd ?
49
        params          dd ?
49
        params          dd ?
50
        buttons         dd ?
50
        buttons         dd ?
51
        bitmaps         dd ?
51
        bitmaps         dd ?
52
ends
52
ends
53
 
53
 
54
struct  SKIN_PARAMS
54
struct  SKIN_PARAMS
55
        skin_height     dd ?
55
        skin_height     dd ?
56
        margin.right    dw ?
56
        margin.right    dw ?
57
        margin.left     dw ?
57
        margin.left     dw ?
58
        margin.bottom   dw ?
58
        margin.bottom   dw ?
59
        margin.top      dw ?
59
        margin.top      dw ?
60
        colors.inner    dd ?
60
        colors.inner    dd ?
61
        colors.outer    dd ?
61
        colors.outer    dd ?
62
        colors.frame    dd ?
62
        colors.frame    dd ?
63
        colors_1.inner  dd ?
63
        colors_1.inner  dd ?
64
        colors_1.outer  dd ?
64
        colors_1.outer  dd ?
65
        colors_1.frame  dd ?
65
        colors_1.frame  dd ?
66
        dtp.size        dd ?
66
        dtp.size        dd ?
67
        dtp.data        rb 40
67
        dtp.data        rb 40
68
ends
68
ends
69
 
69
 
70
struct  SKIN_BUTTONS
70
struct  SKIN_BUTTONS
71
        type    dd ?
71
        type    dd ?
72
; position
72
; position
73
        left    dw ?
73
        left    dw ?
74
        top     dw ?
74
        top     dw ?
75
; size
75
; size
76
        width   dw ?
76
        width   dw ?
77
        height  dw ?
77
        height  dw ?
78
ends
78
ends
79
 
79
 
80
struct  SKIN_BITMAPS
80
struct  SKIN_BITMAPS
81
        kind    dw ?
81
        kind    dw ?
82
        type    dw ?
82
        type    dw ?
83
        data    dd ?
83
        data    dd ?
84
ends
84
ends
85
;------------------------------------------------------------------------------
85
;------------------------------------------------------------------------------
86
align 4
86
align 4
87
load_default_skin:
87
load_default_skin:
88
        mov     [_skinh], 22
88
        mov     [_skinh], 22
89
        mov     ebx, _skin_file_default
89
        mov     ebx, _skin_file_default
90
        call    read_skin_file
90
        call    read_skin_file
91
        ret
91
        ret
92
;------------------------------------------------------------------------------
92
;------------------------------------------------------------------------------
93
align 4
93
align 4
94
parse_skin_data:
94
parse_skin_data:
95
        mov     ebp, [skin_data]
95
        mov     ebp, [skin_data]
96
        cmp     [ebp+SKIN_HEADER.ident], 'SKIN'
96
        cmp     [ebp+SKIN_HEADER.ident], 'SKIN'
97
        jne     .exit
97
        jne     .exit
98
 
98
 
99
        mov     edi, skin_udata
99
        mov     edi, skin_udata
100
        mov     ecx, (skin_udata.end-skin_udata)/4
100
        mov     ecx, (skin_udata.end-skin_udata)/4
101
        xor     eax, eax
101
        xor     eax, eax
102
        cld
102
        cld
103
        rep stosd
103
        rep stosd
104
 
104
 
105
        mov     ebx, [ebp+SKIN_HEADER.params]
105
        mov     ebx, [ebp+SKIN_HEADER.params]
106
        add     ebx, [skin_data]
106
        add     ebx, [skin_data]
107
        mov     eax, [ebx+SKIN_PARAMS.skin_height]
107
        mov     eax, [ebx+SKIN_PARAMS.skin_height]
108
        mov     [_skinh], eax
108
        mov     [_skinh], eax
109
        mov     eax, [ebx+SKIN_PARAMS.colors.inner]
109
        mov     eax, [ebx+SKIN_PARAMS.colors.inner]
110
        mov     [skin_active.colors.inner], eax
110
        mov     [skin_active.colors.inner], eax
111
        mov     eax, [ebx+SKIN_PARAMS.colors.outer]
111
        mov     eax, [ebx+SKIN_PARAMS.colors.outer]
112
        mov     [skin_active.colors.outer], eax
112
        mov     [skin_active.colors.outer], eax
113
        mov     eax, [ebx+SKIN_PARAMS.colors.frame]
113
        mov     eax, [ebx+SKIN_PARAMS.colors.frame]
114
        mov     [skin_active.colors.frame], eax
114
        mov     [skin_active.colors.frame], eax
115
        mov     eax, [ebx+SKIN_PARAMS.colors_1.inner]
115
        mov     eax, [ebx+SKIN_PARAMS.colors_1.inner]
116
        mov     [skin_inactive.colors.inner], eax
116
        mov     [skin_inactive.colors.inner], eax
117
        mov     eax, [ebx+SKIN_PARAMS.colors_1.outer]
117
        mov     eax, [ebx+SKIN_PARAMS.colors_1.outer]
118
        mov     [skin_inactive.colors.outer], eax
118
        mov     [skin_inactive.colors.outer], eax
119
        mov     eax, [ebx+SKIN_PARAMS.colors_1.frame]
119
        mov     eax, [ebx+SKIN_PARAMS.colors_1.frame]
120
        mov     [skin_inactive.colors.frame], eax
120
        mov     [skin_inactive.colors.frame], eax
121
        lea     esi, [ebx+SKIN_PARAMS.dtp.data]
121
        lea     esi, [ebx+SKIN_PARAMS.dtp.data]
122
        mov     edi, common_colours
122
        mov     edi, common_colours
123
        mov     ecx, [ebx+SKIN_PARAMS.dtp.size]
123
        mov     ecx, [ebx+SKIN_PARAMS.dtp.size]
124
        and     ecx, 255
124
        and     ecx, 255
125
        rep movsb
125
        rep movsb
126
        mov     eax, dword[ebx+SKIN_PARAMS.margin.right]
126
        mov     eax, dword[ebx+SKIN_PARAMS.margin.right]
127
        mov     dword[_skinmargins+0], eax
127
        mov     dword[_skinmargins+0], eax
128
        mov     eax, dword[ebx+SKIN_PARAMS.margin.bottom]
128
        mov     eax, dword[ebx+SKIN_PARAMS.margin.bottom]
129
        mov     dword[_skinmargins+4], eax
129
        mov     dword[_skinmargins+4], eax
130
 
130
 
131
        mov     ebx, [ebp+SKIN_HEADER.bitmaps]
131
        mov     ebx, [ebp+SKIN_HEADER.bitmaps]
132
        add     ebx, [skin_data]
132
        add     ebx, [skin_data]
133
;--------------------------------------
133
;--------------------------------------
134
align 4
134
align 4
135
.lp1:
135
.lp1:
136
        cmp     dword[ebx], 0
136
        cmp     dword[ebx], 0
137
        je      .end_bitmaps
137
        je      .end_bitmaps
138
        movzx   eax, [ebx+SKIN_BITMAPS.kind]
138
        movzx   eax, [ebx+SKIN_BITMAPS.kind]
139
        movzx   ecx, [ebx+SKIN_BITMAPS.type]
139
        movzx   ecx, [ebx+SKIN_BITMAPS.type]
140
        dec     eax
140
        dec     eax
141
        jnz     .not_left
141
        jnz     .not_left
142
        xor     eax, eax
142
        xor     eax, eax
143
        mov     edx, skin_active.left.data
143
        mov     edx, skin_active.left.data
144
        or      ecx, ecx
144
        or      ecx, ecx
145
        jnz     @f
145
        jnz     @f
146
        mov     edx, skin_inactive.left.data
146
        mov     edx, skin_inactive.left.data
147
;--------------------------------------
147
;--------------------------------------
148
align 4
148
align 4
149
@@:
149
@@:
150
        jmp     .next_bitmap
150
        jmp     .next_bitmap
151
;--------------------------------------
151
;--------------------------------------
152
align 4
152
align 4
153
.not_left:
153
.not_left:
154
        dec     eax
154
        dec     eax
155
        jnz     .not_oper
155
        jnz     .not_oper
156
        mov     esi, [ebx+SKIN_BITMAPS.data]
156
        mov     esi, [ebx+SKIN_BITMAPS.data]
157
        add     esi, [skin_data]
157
        add     esi, [skin_data]
158
        mov     eax, [esi+0]
158
        mov     eax, [esi+0]
159
        neg     eax
159
        neg     eax
160
        mov     edx, skin_active.oper.data
160
        mov     edx, skin_active.oper.data
161
        or      ecx, ecx
161
        or      ecx, ecx
162
        jnz     @f
162
        jnz     @f
163
        mov     edx, skin_inactive.oper.data
163
        mov     edx, skin_inactive.oper.data
164
;--------------------------------------
164
;--------------------------------------
165
align 4
165
align 4
166
@@:
166
@@:
167
        jmp     .next_bitmap
167
        jmp     .next_bitmap
168
;--------------------------------------
168
;--------------------------------------
169
align 4
169
align 4
170
.not_oper:
170
.not_oper:
171
        dec     eax
171
        dec     eax
172
        jnz     .not_base
172
        jnz     .not_base
173
        mov     eax, [skin_active.left.width]
173
        mov     eax, [skin_active.left.width]
174
        mov     edx, skin_active.base.data
174
        mov     edx, skin_active.base.data
175
        or      ecx, ecx
175
        or      ecx, ecx
176
        jnz     @f
176
        jnz     @f
177
        mov     eax, [skin_inactive.left.width]
177
        mov     eax, [skin_inactive.left.width]
178
        mov     edx, skin_inactive.base.data
178
        mov     edx, skin_inactive.base.data
179
;--------------------------------------
179
;--------------------------------------
180
align 4
180
align 4
181
@@:
181
@@:
182
        jmp     .next_bitmap
182
        jmp     .next_bitmap
183
;--------------------------------------
183
;--------------------------------------
184
align 4
184
align 4
185
.not_base:
185
.not_base:
186
        add     ebx, 8
186
        add     ebx, 8
187
        jmp     .lp1
187
        jmp     .lp1
188
;--------------------------------------
188
;--------------------------------------
189
align 4
189
align 4
190
.next_bitmap:
190
.next_bitmap:
191
        mov     ecx, [ebx+SKIN_BITMAPS.data]
191
        mov     ecx, [ebx+SKIN_BITMAPS.data]
192
        add     ecx, [skin_data]
192
        add     ecx, [skin_data]
193
        mov     [edx+4], eax
193
        mov     [edx+4], eax
194
        mov     eax, [ecx+0]
194
        mov     eax, [ecx+0]
195
        mov     [edx+8], eax
195
        mov     [edx+8], eax
196
        add     ecx, 8
196
        add     ecx, 8
197
        mov     [edx+0], ecx
197
        mov     [edx+0], ecx
198
        add     ebx, 8
198
        add     ebx, 8
199
        jmp     .lp1
199
        jmp     .lp1
200
;--------------------------------------
200
;--------------------------------------
201
align 4
201
align 4
202
.end_bitmaps:
202
.end_bitmaps:
203
        mov     ebx, [ebp+SKIN_HEADER.buttons]
203
        mov     ebx, [ebp+SKIN_HEADER.buttons]
204
        add     ebx, [skin_data]
204
        add     ebx, [skin_data]
205
;--------------------------------------
205
;--------------------------------------
206
align 4
206
align 4
207
.lp2:
207
.lp2:
208
        cmp     dword[ebx], 0
208
        cmp     dword[ebx], 0
209
        je      .end_buttons
209
        je      .end_buttons
210
        mov     eax, [ebx+SKIN_BUTTONS.type]
210
        mov     eax, [ebx+SKIN_BUTTONS.type]
211
        dec     eax
211
        dec     eax
212
        jnz     .not_close
212
        jnz     .not_close
213
        mov     edx, skin_btn_close
213
        mov     edx, skin_btn_close
214
        jmp     .next_button
214
        jmp     .next_button
215
;--------------------------------------
215
;--------------------------------------
216
align 4
216
align 4
217
.not_close:
217
.not_close:
218
        dec     eax
218
        dec     eax
219
        jnz     .not_minimize
219
        jnz     .not_minimize
220
        mov     edx, skin_btn_minimize
220
        mov     edx, skin_btn_minimize
221
        jmp     .next_button
221
        jmp     .next_button
222
;--------------------------------------
222
;--------------------------------------
223
align 4
223
align 4
224
.not_minimize:
224
.not_minimize:
225
        add     ebx, 12
225
        add     ebx, 12
226
        jmp     .lp2
226
        jmp     .lp2
227
;--------------------------------------
227
;--------------------------------------
228
align 4
228
align 4
229
.next_button:
229
.next_button:
230
        movsx   eax, [ebx+SKIN_BUTTONS.left]
230
        movsx   eax, [ebx+SKIN_BUTTONS.left]
231
        mov     [edx+SKIN_BUTTON.left], eax
231
        mov     [edx+SKIN_BUTTON.left], eax
232
        movsx   eax, [ebx+SKIN_BUTTONS.top]
232
        movsx   eax, [ebx+SKIN_BUTTONS.top]
233
        mov     [edx+SKIN_BUTTON.top], eax
233
        mov     [edx+SKIN_BUTTON.top], eax
234
        movsx   eax, [ebx+SKIN_BUTTONS.width]
234
        movsx   eax, [ebx+SKIN_BUTTONS.width]
235
        mov     [edx+SKIN_BUTTON.width], eax
235
        mov     [edx+SKIN_BUTTON.width], eax
236
        movsx   eax, [ebx+SKIN_BUTTONS.height]
236
        movsx   eax, [ebx+SKIN_BUTTONS.height]
237
        mov     [edx+SKIN_BUTTON.height], eax
237
        mov     [edx+SKIN_BUTTON.height], eax
238
        add     ebx, 12
238
        add     ebx, 12
239
        jmp     .lp2
239
        jmp     .lp2
240
;--------------------------------------
240
;--------------------------------------
241
align 4
241
align 4
242
.end_buttons:
242
.end_buttons:
243
.exit:
243
.exit:
244
        ret
244
        ret
245
;------------------------------------------------------------------------------
245
;------------------------------------------------------------------------------
246
align 4
246
align 4
247
drawwindow_IV_caption:
247
drawwindow_IV_caption:
248
 
248
 
249
        mov     ebp, skin_active
249
        mov     ebp, skin_active
250
        or      al, al
250
        or      al, al
251
        jnz     @f
251
        jnz     @f
252
        mov     ebp, skin_inactive
252
        mov     ebp, skin_inactive
253
;--------------------------------------
253
;--------------------------------------
254
align 4
254
align 4
255
@@:
255
@@:
256
        mov     esi, [esp+4]
256
        mov     esi, [esp+4]
257
        mov     eax, [esi+WDATA.box.width]   ; window width
257
        mov     eax, [esi+WDATA.box.width]   ; window width
258
        mov     edx, [ebp+SKIN_DATA.left.left]
258
        mov     edx, [ebp+SKIN_DATA.left.left]
259
        shl     edx, 16
259
        shl     edx, 16
260
        mov     ecx, [ebp+SKIN_DATA.left.width]
260
        mov     ecx, [ebp+SKIN_DATA.left.width]
261
        shl     ecx, 16
261
        shl     ecx, 16
262
        add     ecx, [_skinh]
262
        add     ecx, [_skinh]
263
 
263
 
264
        mov     ebx, [ebp+SKIN_DATA.left.data]
264
        mov     ebx, [ebp+SKIN_DATA.left.data]
265
        or      ebx, ebx
265
        or      ebx, ebx
266
        jz      @f
266
        jz      @f
267
        call    sys_putimage.forced
267
        call    sys_putimage.forced
268
;--------------------------------------
268
;--------------------------------------
269
align 4
269
align 4
270
@@:
270
@@:
271
        mov     esi, [esp+4]
271
        mov     esi, [esp+4]
272
        mov     eax, [esi+WDATA.box.width]
272
        mov     eax, [esi+WDATA.box.width]
273
        sub     eax, [ebp+SKIN_DATA.left.width]
273
        sub     eax, [ebp+SKIN_DATA.left.width]
274
        sub     eax, [ebp+SKIN_DATA.oper.width]
274
        sub     eax, [ebp+SKIN_DATA.oper.width]
275
        cmp     eax, [ebp+SKIN_DATA.base.left]
275
        cmp     eax, [ebp+SKIN_DATA.base.left]
276
        jng     .non_base
276
        jng     .non_base
277
        xor     edx, edx
277
        xor     edx, edx
278
        mov     ecx, [ebp+SKIN_DATA.base.width]
278
        mov     ecx, [ebp+SKIN_DATA.base.width]
279
        jecxz   .non_base
279
        jecxz   .non_base
280
        div     ecx
280
        div     ecx
281
 
281
 
282
        inc     eax
282
        inc     eax
283
 
283
 
284
        mov     ebx, [ebp+SKIN_DATA.base.data]
284
        mov     ebx, [ebp+SKIN_DATA.base.data]
285
        mov     ecx, [ebp+SKIN_DATA.base.width]
285
        mov     ecx, [ebp+SKIN_DATA.base.width]
286
        shl     ecx, 16
286
        shl     ecx, 16
287
        add     ecx, [_skinh]
287
        add     ecx, [_skinh]
288
        mov     edx, [ebp+SKIN_DATA.base.left]
288
        mov     edx, [ebp+SKIN_DATA.base.left]
289
        sub     edx, [ebp+SKIN_DATA.base.width]
289
        sub     edx, [ebp+SKIN_DATA.base.width]
290
        shl     edx, 16
290
        shl     edx, 16
291
;--------------------------------------
291
;--------------------------------------
292
align 4
292
align 4
293
.baseskinloop:
293
.baseskinloop:
294
        shr     edx, 16
294
        shr     edx, 16
295
        add     edx, [ebp+SKIN_DATA.base.width]
295
        add     edx, [ebp+SKIN_DATA.base.width]
296
        shl     edx, 16
296
        shl     edx, 16
297
 
297
 
298
        push    eax ebx ecx edx
298
        push    eax ebx ecx edx
299
 
299
 
300
        or      ebx, ebx
300
        or      ebx, ebx
301
        jz      @f
301
        jz      @f
302
        call    sys_putimage.forced
302
        call    sys_putimage.forced
303
;--------------------------------------
303
;--------------------------------------
304
align 4
304
align 4
305
@@:
305
@@:
306
        pop     edx ecx ebx eax
306
        pop     edx ecx ebx eax
307
 
307
 
308
        dec     eax
308
        dec     eax
309
        jnz     .baseskinloop
309
        jnz     .baseskinloop
310
;--------------------------------------
310
;--------------------------------------
311
align 4
311
align 4
312
.non_base:
312
.non_base:
313
 
313
 
314
        mov     esi, [esp+4]
314
        mov     esi, [esp+4]
315
        mov     edx, [esi+WDATA.box.width]
315
        mov     edx, [esi+WDATA.box.width]
316
        sub     edx, [ebp+SKIN_DATA.oper.width]
316
        sub     edx, [ebp+SKIN_DATA.oper.width]
317
        inc     edx
317
        inc     edx
318
        shl     edx, 16
318
        shl     edx, 16
319
        mov     ebx, [ebp+SKIN_DATA.oper.data]
319
        mov     ebx, [ebp+SKIN_DATA.oper.data]
320
 
320
 
321
        mov     ecx, [ebp+SKIN_DATA.oper.width]
321
        mov     ecx, [ebp+SKIN_DATA.oper.width]
322
        shl     ecx, 16
322
        shl     ecx, 16
323
        add     ecx, [_skinh]
323
        add     ecx, [_skinh]
324
 
324
 
325
        or      ebx, ebx
325
        or      ebx, ebx
326
        jz      @f
326
        jz      @f
327
        call    sys_putimage.forced
327
        call    sys_putimage.forced
328
;--------------------------------------
328
;--------------------------------------
329
align 4
329
align 4
330
@@:
330
@@:
331
        ret
331
        ret
332
;------------------------------------------------------------------------------
332
;------------------------------------------------------------------------------
333
align 4
333
align 4
334
drawwindow_IV:
334
drawwindow_IV:
335
;param1 - aw_yes
335
;param1 - aw_yes
336
        pusha
336
        pusha
337
 
337
 
338
        push    edx
338
        push    edx
339
 
339
 
340
        mov     edi, edx
340
        mov     edi, edx
341
 
341
 
342
        mov     ebp, skin_active
342
        mov     ebp, skin_active
343
        cmp     byte [esp+32+4+4], 0
343
        cmp     byte [esp+32+4+4], 0
344
        jne     @f
344
        jne     @f
345
        mov     ebp, skin_inactive
345
        mov     ebp, skin_inactive
346
;--------------------------------------
346
;--------------------------------------
347
align 4
347
align 4
348
@@:
348
@@:
349
        mov     eax, [edi+WDATA.box.left]
349
        mov     eax, [edi+WDATA.box.left]
350
        shl     eax, 16
350
        shl     eax, 16
351
        mov     ax, word [edi+WDATA.box.left]
351
        mov     ax, word [edi+WDATA.box.left]
352
        add     ax, word [edi+WDATA.box.width]
352
        add     ax, word [edi+WDATA.box.width]
353
        mov     ebx, [edi+WDATA.box.top]
353
        mov     ebx, [edi+WDATA.box.top]
354
        shl     ebx, 16
354
        shl     ebx, 16
355
        mov     bx, word [edi+WDATA.box.top]
355
        mov     bx, word [edi+WDATA.box.top]
356
        add     bx, word [edi+WDATA.box.height]
356
        add     bx, word [edi+WDATA.box.height]
357
        mov     esi, [ebp+SKIN_DATA.colors.outer]
357
        mov     esi, [ebp+SKIN_DATA.colors.outer]
358
        or      esi, 1 shl 25 ; 0x02000000 used for draw_rectangle without top line
358
        or      esi, 1 shl 25 ; 0x02000000 used for draw_rectangle without top line
359
        ror     ebx, 16
359
        ror     ebx, 16
360
        add     ebx, [_skinh]
360
        add     ebx, [_skinh]
361
        sub     bx, 1
361
        sub     bx, 1
362
        rol     ebx, 16
362
        rol     ebx, 16
363
        call    draw_rectangle
363
        call    draw_rectangle
364
        mov     ecx, 3
364
        mov     ecx, 3
365
;--------------------------------------
365
;--------------------------------------
366
align 4
366
align 4
367
_dw3l:
367
_dw3l:
368
        add     eax, 1*65536-1
368
        add     eax, 1*65536-1
369
        add     ebx, 0*65536-1
369
        add     ebx, 0*65536-1
370
        test    ax, ax
370
        test    ax, ax
371
        js      no_skin_add_button
371
        js      no_skin_add_button
372
        test    bx, bx
372
        test    bx, bx
373
        js      no_skin_add_button
373
        js      no_skin_add_button
374
        mov     esi, [ebp+SKIN_DATA.colors.frame];[edi+24]
374
        mov     esi, [ebp+SKIN_DATA.colors.frame];[edi+24]
375
        or      esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
375
        or      esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
376
        call    draw_rectangle
376
        call    draw_rectangle
377
        dec     ecx
377
        dec     ecx
378
        jnz     _dw3l
378
        jnz     _dw3l
379
        mov     esi, [ebp+SKIN_DATA.colors.inner]
379
        mov     esi, [ebp+SKIN_DATA.colors.inner]
380
        or      esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
380
        or      esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
381
        add     eax, 1*65536-1
381
        add     eax, 1*65536-1
382
        add     ebx, 0*65536-1
382
        add     ebx, 0*65536-1
383
        test    ax, ax
383
        test    ax, ax
384
        js      no_skin_add_button
384
        js      no_skin_add_button
385
        test    bx, bx
385
        test    bx, bx
386
        js      no_skin_add_button
386
        js      no_skin_add_button
387
        test    [edi + WDATA.fl_wstate], WSTATE_ROLLEDUP
387
        test    [edi + WDATA.fl_wstate], WSTATE_ROLLEDUP
388
        jnz     @f
388
        jnz     @f
389
        call    draw_rectangle
389
        call    draw_rectangle
390
;--------------------------------------
390
;--------------------------------------
391
align 4
391
align 4
392
@@:
392
@@:
393
        mov     eax, [skin_data]
393
        mov     eax, [skin_data]
394
        cmp     [eax], dword 'SKIN'
394
        cmp     [eax], dword 'SKIN'
395
        je      @f
395
        je      @f
396
        xor     eax, eax
396
        xor     eax, eax
397
        xor     ebx, ebx
397
        xor     ebx, ebx
398
        mov     esi, [esp]
398
        mov     esi, [esp]
399
        mov     ecx, [esi+WDATA.box.width]
399
        mov     ecx, [esi+WDATA.box.width]
400
        inc     ecx
400
        inc     ecx
401
        mov     edx, [_skinh]
401
        mov     edx, [_skinh]
402
        mov     edi, [common_colours+4]; standard grab color
402
        mov     edi, [common_colours+4]; standard grab color
403
;        call    [drawbar]
403
;        call    [drawbar]
404
        call    vesa20_drawbar
404
        call    vesa20_drawbar
405
        jmp     draw_clientbar
405
        jmp     draw_clientbar
406
;--------------------------------------
406
;--------------------------------------
407
align 4
407
align 4
408
@@:
408
@@:
409
        mov     al, [esp+32+4+4]
409
        mov     al, [esp+32+4+4]
410
        call    drawwindow_IV_caption
410
        call    drawwindow_IV_caption
411
;--------------------------------------
411
;--------------------------------------
412
align 4
412
align 4
413
draw_clientbar:
413
draw_clientbar:
414
        mov     esi, [esp]
414
        mov     esi, [esp]
415
 
415
 
416
        mov     edx, [esi+WDATA.box.top]                    ; WORK AREA
416
        mov     edx, [esi+WDATA.box.top]                    ; WORK AREA
417
        add     edx, 21+5
417
        add     edx, 21+5
418
        mov     ebx, [esi+WDATA.box.top]
418
        mov     ebx, [esi+WDATA.box.top]
419
        add     ebx, [esi+WDATA.box.height]
419
        add     ebx, [esi+WDATA.box.height]
420
        cmp     edx, ebx
420
        cmp     edx, ebx
421
        jg      _noinside2
421
        jg      _noinside2
422
        mov     eax, 5
422
        mov     eax, 5
423
        mov     ebx, [_skinh]
423
        mov     ebx, [_skinh]
424
        mov     ecx, [esi+WDATA.box.width]
424
        mov     ecx, [esi+WDATA.box.width]
425
        mov     edx, [esi+WDATA.box.height]
425
        mov     edx, [esi+WDATA.box.height]
426
        sub     ecx, 4
426
        sub     ecx, 4
427
        sub     edx, 4
427
        sub     edx, 4
428
        mov     edi, [esi+WDATA.cl_workarea]
428
        mov     edi, [esi+WDATA.cl_workarea]
429
        test    edi, 0x40000000
429
        test    edi, 0x40000000
430
        jnz     _noinside2
430
        jnz     _noinside2
431
;        call    [drawbar]
431
;        call    [drawbar]
432
        call    vesa20_drawbar
432
        call    vesa20_drawbar
433
;--------------------------------------
433
;--------------------------------------
434
align 4
434
align 4
435
_noinside2:
435
_noinside2:
436
        mov     eax, [skin_data]
436
        mov     eax, [skin_data]
437
        cmp     [eax], dword 'SKIN'
437
        cmp     [eax], dword 'SKIN'
438
        jne     no_skin_add_button
438
        jne     no_skin_add_button
439
;* close button
439
;* close button
440
        mov     edi, [BTN_ADDR]
440
        mov     edi, [BTN_ADDR]
441
        movzx   eax, word [edi]
441
        movzx   eax, word [edi]
442
        cmp     eax, 1000
442
        cmp     eax, 1000
443
        jge     no_skin_add_button
443
        jge     no_skin_add_button
444
        inc     eax
444
        inc     eax
445
        mov     [edi], ax
445
        mov     [edi], ax
446
 
446
 
447
        shl     eax, 4
447
        shl     eax, 4
448
        add     eax, edi
448
        add     eax, edi
449
 
449
 
450
        mov     bx, [CURRENT_TASK]
450
        mov     bx, [CURRENT_TASK]
451
        mov     [eax], bx
451
        mov     [eax], bx
452
 
452
 
453
        add     eax, 2      ; save button id number
453
        add     eax, 2      ; save button id number
454
        mov     bx, 1
454
        mov     bx, 1
455
        mov     [eax], bx
455
        mov     [eax], bx
456
        add     eax, 2      ; x start
456
        add     eax, 2      ; x start
457
        xor     ebx, ebx
457
        xor     ebx, ebx
458
        cmp     [skin_btn_close.left], 0
458
        cmp     [skin_btn_close.left], 0
459
        jge     _bCx_at_right
459
        jge     _bCx_at_right
460
        mov     ebx, [esp]
460
        mov     ebx, [esp]
461
        mov     ebx, [ebx+WDATA.box.width]
461
        mov     ebx, [ebx+WDATA.box.width]
462
        inc     ebx
462
        inc     ebx
463
;--------------------------------------
463
;--------------------------------------
464
align 4
464
align 4
465
_bCx_at_right:
465
_bCx_at_right:
466
        add     ebx, [skin_btn_close.left]
466
        add     ebx, [skin_btn_close.left]
467
        mov     [eax], bx
467
        mov     [eax], bx
468
        add     eax, 2      ; x size
468
        add     eax, 2      ; x size
469
        mov     ebx, [skin_btn_close.width]
469
        mov     ebx, [skin_btn_close.width]
470
        dec     ebx
470
        dec     ebx
471
        mov     [eax], bx
471
        mov     [eax], bx
472
        add     eax, 2      ; y start
472
        add     eax, 2      ; y start
473
        mov     ebx, [skin_btn_close.top]
473
        mov     ebx, [skin_btn_close.top]
474
        mov     [eax], bx
474
        mov     [eax], bx
475
        add     eax, 2      ; y size
475
        add     eax, 2      ; y size
476
        mov     ebx, [skin_btn_close.height]
476
        mov     ebx, [skin_btn_close.height]
477
        dec     ebx
477
        dec     ebx
478
        mov     [eax], bx
478
        mov     [eax], bx
479
;* minimize button
479
;* minimize button
480
        mov     edi, [BTN_ADDR]
480
        mov     edi, [BTN_ADDR]
481
        movzx   eax, word [edi]
481
        movzx   eax, word [edi]
482
        cmp     eax, 1000
482
        cmp     eax, 1000
483
        jge     no_skin_add_button
483
        jge     no_skin_add_button
484
        inc     eax
484
        inc     eax
485
        mov     [edi], ax
485
        mov     [edi], ax
486
 
486
 
487
        shl     eax, 4
487
        shl     eax, 4
488
        add     eax, edi
488
        add     eax, edi
489
 
489
 
490
        mov     bx, [CURRENT_TASK]
490
        mov     bx, [CURRENT_TASK]
491
        mov     [eax], bx
491
        mov     [eax], bx
492
 
492
 
493
        add     eax, 2      ; save button id number
493
        add     eax, 2      ; save button id number
494
        mov     bx, 65535;999
494
        mov     bx, 65535;999
495
        mov     [eax], bx
495
        mov     [eax], bx
496
        add     eax, 2      ; x start
496
        add     eax, 2      ; x start
497
        xor     ebx, ebx
497
        xor     ebx, ebx
498
        cmp     [skin_btn_minimize.left], 0
498
        cmp     [skin_btn_minimize.left], 0
499
        jge     _bMx_at_right
499
        jge     _bMx_at_right
500
        mov     ebx, [esp]
500
        mov     ebx, [esp]
501
        mov     ebx, [ebx+WDATA.box.width]
501
        mov     ebx, [ebx+WDATA.box.width]
502
        inc     ebx
502
        inc     ebx
503
;--------------------------------------
503
;--------------------------------------
504
align 4
504
align 4
505
_bMx_at_right:
505
_bMx_at_right:
506
        add     ebx, [skin_btn_minimize.left]
506
        add     ebx, [skin_btn_minimize.left]
507
        mov     [eax], bx
507
        mov     [eax], bx
508
        add     eax, 2      ; x size
508
        add     eax, 2      ; x size
509
        mov     ebx, [skin_btn_minimize.width]
509
        mov     ebx, [skin_btn_minimize.width]
510
        dec     ebx
510
        dec     ebx
511
        mov     [eax], bx
511
        mov     [eax], bx
512
        add     eax, 2      ; y start
512
        add     eax, 2      ; y start
513
        mov     ebx, [skin_btn_minimize.top]
513
        mov     ebx, [skin_btn_minimize.top]
514
        mov     [eax], bx
514
        mov     [eax], bx
515
        add     eax, 2      ; y size
515
        add     eax, 2      ; y size
516
        mov     ebx, [skin_btn_minimize.height]
516
        mov     ebx, [skin_btn_minimize.height]
517
        dec     ebx
517
        dec     ebx
518
        mov     [eax], bx
518
        mov     [eax], bx
519
;--------------------------------------
519
;--------------------------------------
520
align 4
520
align 4
521
no_skin_add_button:
521
no_skin_add_button:
522
        pop     edi
522
        pop     edi
523
        popa
523
        popa
524
        ret     4
524
        ret     4
525
;------------------------------------------------------------------------------
525
;------------------------------------------------------------------------------