Subversion Repositories Kolibri OS

Rev

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

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