Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
7 me_root 1
include "skindata.inc"
1 ha 2
 
49 mikedld 3
skin_data = 0x00778000
1 ha 4
 
49 mikedld 5
load_skin_file:
6
; eax = filename
7
; edx = destination
8
    mov   ebx,1
9
    or    ecx,-1
10
    mov   esi,12
11
    call  fileread
1 ha 12
    ret
13
 
49 mikedld 14
struct SKIN_HEADER
15
  .ident   dd ?
16
  .version dd ?
17
  .params  dd ?
18
  .buttons dd ?
19
  .bitmaps dd ?
20
ends
1 ha 21
 
49 mikedld 22
struct SKIN_PARAMS
23
  .skin_height    dd ?
24
  .margin.right   dw ?
25
  .margin.left    dw ?
26
  .margin.bottom  dw ?
27
  .margin.top     dw ?
28
  .colors.inner   dd ?
29
  .colors.outer   dd ?
30
  .colors.frame   dd ?
31
  .colors_1.inner dd ?
32
  .colors_1.outer dd ?
33
  .colors_1.frame dd ?
34
  .dtp.size       dd ?
35
  .dtp.data       db 40 dup (?)
36
ends
1 ha 37
 
49 mikedld 38
struct SKIN_BUTTONS
39
  .type     dd ?
40
  .pos:
41
    .left   dw ?
42
    .top    dw ?
43
  .size:
44
    .width  dw ?
45
    .height dw ?
46
ends
1 ha 47
 
49 mikedld 48
struct SKIN_BITMAPS
49
  .kind  dw ?
50
  .type  dw ?
51
  .data  dd ?
52
ends
1 ha 53
 
49 mikedld 54
load_skin:
55
        pushad
56
        mov     eax,_skin_file
57
        mov     edx,skin_data
58
        call    load_skin_file
59
        call    parse_skin_data
60
        popad
61
        ret
1 ha 62
 
49 mikedld 63
parse_skin_data:
64
        mov     ebp,skin_data
65
        cmp     [ebp+SKIN_HEADER.ident],'SKIN'
66
        jne     .exit
1 ha 67
 
49 mikedld 68
        mov     ebx,[ebp+SKIN_HEADER.params]
69
        add     ebx,skin_data
70
        mov     eax,[ebx+SKIN_PARAMS.skin_height]
71
        mov     [_skinh],eax
72
        mov     eax,[ebx+SKIN_PARAMS.colors.inner]
73
        mov     [skin_active.colors.inner],eax
74
        mov     eax,[ebx+SKIN_PARAMS.colors.outer]
75
        mov     [skin_active.colors.outer],eax
76
        mov     eax,[ebx+SKIN_PARAMS.colors.frame]
77
        mov     [skin_active.colors.frame],eax
78
        mov     eax,[ebx+SKIN_PARAMS.colors_1.inner]
79
        mov     [skin_inactive.colors.inner],eax
80
        mov     eax,[ebx+SKIN_PARAMS.colors_1.outer]
81
        mov     [skin_inactive.colors.outer],eax
82
        mov     eax,[ebx+SKIN_PARAMS.colors_1.frame]
83
        mov     [skin_inactive.colors.frame],eax
84
        lea     esi,[ebx+SKIN_PARAMS.dtp.data]
85
        mov     edi,common_colours
86
        mov     ecx,[ebx+SKIN_PARAMS.dtp.size]
87
        and     ecx,127
88
        cld
89
        rep     movsb
90
        mov     eax,dword[ebx+SKIN_PARAMS.margin.left]
91
        mov     dword[_skinmargins+0],eax
92
        mov     eax,dword[ebx+SKIN_PARAMS.margin.top]
93
        mov     dword[_skinmargins+4],eax
1 ha 94
 
49 mikedld 95
        mov     ebx,[ebp+SKIN_HEADER.bitmaps]
96
        add     ebx,skin_data
97
  .lp1: cmp     dword[ebx],0
98
        je      .end_bitmaps
99
        movzx   eax,[ebx+SKIN_BITMAPS.kind]
100
        movzx   ecx,[ebx+SKIN_BITMAPS.type]
101
        dec     eax
102
        jnz     .not_left
103
        xor     eax,eax
104
        mov     edx,skin_active.left.data
105
        or      ecx,ecx
106
        jnz     @f
107
        mov     edx,skin_inactive.left.data
108
    @@: jmp     .next_bitmap
109
  .not_left:
110
        dec     eax
111
        jnz     .not_oper
112
        mov     esi,[ebx+SKIN_BITMAPS.data]
113
        add     esi,skin_data
114
        mov     eax,[esi+0]
115
        neg     eax
116
        mov     edx,skin_active.oper.data
117
        or      ecx,ecx
118
        jnz     @f
119
        mov     edx,skin_inactive.oper.data
120
    @@: jmp     .next_bitmap
121
  .not_oper:
122
        dec     eax
123
        jnz     .not_base
124
        mov     eax,[skin_active.left.width]
125
        mov     edx,skin_active.base.data
126
        or      ecx,ecx
127
        jnz     @f
128
        mov     eax,[skin_inactive.left.width]
129
        mov     edx,skin_inactive.base.data
130
    @@: jmp     .next_bitmap
131
  .not_base:
132
        add     ebx,8
133
        jmp     .lp1
134
  .next_bitmap:
135
        mov     ecx,[ebx+SKIN_BITMAPS.data]
136
        add     ecx,skin_data
137
        mov     [edx+4],eax
138
        mov     eax,[ecx+0]
139
        mov     [edx+8],eax
140
        add     ecx,8
141
        mov     [edx+0],ecx
142
        add     ebx,8
143
        jmp     .lp1
144
  .end_bitmaps:
1 ha 145
 
49 mikedld 146
        mov     ebx,[ebp+SKIN_HEADER.buttons]
147
        add     ebx,skin_data
148
  .lp2: cmp     dword[ebx],0
149
        je      .end_buttons
150
        mov     eax,[ebx+SKIN_BUTTONS.type]
151
        dec     eax
152
        jnz     .not_close
153
        mov     edx,skin_btn_close
154
        jmp     .next_button
155
  .not_close:
156
        dec     eax
157
        jnz     .not_minimize
158
        mov     edx,skin_btn_minimize
159
        jmp     .next_button
160
  .not_minimize:
161
        add     ebx,12
162
        jmp     .lp2
163
  .next_button:
164
        movsx   eax,[ebx+SKIN_BUTTONS.left]
165
        mov     [edx+SKIN_BUTTON.left],eax
166
        movsx   eax,[ebx+SKIN_BUTTONS.top]
167
        mov     [edx+SKIN_BUTTON.top],eax
168
        movsx   eax,[ebx+SKIN_BUTTONS.width]
169
        mov     [edx+SKIN_BUTTON.width],eax
170
        movsx   eax,[ebx+SKIN_BUTTONS.height]
171
        mov     [edx+SKIN_BUTTON.height],eax
172
        add     ebx,12
173
        jmp     .lp2
174
  .end_buttons:
1 ha 175
 
49 mikedld 176
  .exit:
177
        ret
1 ha 178
 
179
drawwindow_IV:
35 halyavin 180
;param1 - aw_yes
1 ha 181
 
182
        pusha
183
 
184
        push  edx
185
 
186
        mov   edi,[esp]                              ; RECTANGLE
187
 
49 mikedld 188
        mov     ebp,skin_active
189
        cmp     byte [esp+32+4+4],0
190
        jne     @f
191
        mov     ebp,skin_inactive
192
     @@:
193
 
1 ha 194
        mov   eax,[edi+0]
195
        shl   eax,16
196
        mov   ax,[edi+0]
197
        add   ax,[edi+8]
198
        mov   ebx,[edi+4]
199
        shl   ebx,16
200
        mov   bx,[edi+4]
201
        add   bx,[edi+12]
202
;        mov   esi,[edi+24]
203
;        shr   esi,1
204
;        and   esi,0x007f7f7f
49 mikedld 205
        mov   esi,[ebp+SKIN_DATA.colors.outer]
1 ha 206
        call  draw_rectangle
207
        mov   ecx,3
208
      _dw3l:
209
        add   eax,1*65536-1
210
        add   ebx,1*65536-1
211
        test  ax,ax
212
        js    no_skin_add_button
213
        test  bx,bx
214
        js    no_skin_add_button
49 mikedld 215
        mov   esi,[ebp+SKIN_DATA.colors.frame] ;[edi+24]
1 ha 216
        call  draw_rectangle
217
        dec   ecx
218
        jnz   _dw3l
49 mikedld 219
        mov   esi,[ebp+SKIN_DATA.colors.inner]
1 ha 220
        add   eax,1*65536-1
221
        add   ebx,1*65536-1
222
        test  ax,ax
223
        js    no_skin_add_button
224
        test  bx,bx
225
        js    no_skin_add_button
226
        call  draw_rectangle
227
 
228
        mov   esi,[esp]
229
        mov   eax,[esi+8]    ; window width
49 mikedld 230
        mov   edx,[ebp+SKIN_DATA.left.left]
1 ha 231
        shl   edx,16
49 mikedld 232
        mov   ecx,[ebp+SKIN_DATA.left.width]
1 ha 233
        shl   ecx,16
234
        add   ecx,[_skinh]
33 mario79 235
 
49 mikedld 236
        mov   ebx, [ebp+SKIN_DATA.left.data]
1 ha 237
        call  sys_putimage
238
 
239
        mov   esi,[esp]
240
        mov   eax,[esi+8]
49 mikedld 241
        sub   eax,[ebp+SKIN_DATA.left.width]
242
        sub   eax,[ebp+SKIN_DATA.oper.width]
243
        cmp   eax,[ebp+SKIN_DATA.base.left]
1 ha 244
        jng   non_base
245
        xor   edx,edx
49 mikedld 246
        mov   ebx,[ebp+SKIN_DATA.base.width]
1 ha 247
        div   ebx
248
 
249
        inc   eax
250
 
49 mikedld 251
        mov   ebx,[ebp+SKIN_DATA.base.data]
252
        mov   ecx,[ebp+SKIN_DATA.base.width]
1 ha 253
        shl   ecx,16
254
        add   ecx,[_skinh]
49 mikedld 255
        mov   edx,[ebp+SKIN_DATA.base.left]
256
        sub   edx,[ebp+SKIN_DATA.base.width]
1 ha 257
        shl   edx,16
258
      baseskinloop:
259
        shr   edx,16
49 mikedld 260
        add   edx,[ebp+SKIN_DATA.base.width]
1 ha 261
        shl   edx,16
262
 
263
        push  eax ebx ecx edx
264
        call  sys_putimage
265
        pop   edx ecx ebx eax
266
 
267
        dec   eax
268
        jnz   baseskinloop
269
      non_base:
270
 
271
        mov   esi,[esp]
272
        mov   edx,[esi+8]
49 mikedld 273
        sub   edx,[ebp+SKIN_DATA.oper.width]
1 ha 274
        inc   edx
275
        shl   edx,16
49 mikedld 276
        mov   ebx,[ebp+SKIN_DATA.oper.data]
35 halyavin 277
 
49 mikedld 278
        mov   ecx,[ebp+SKIN_DATA.oper.width]
1 ha 279
        shl   ecx,16
280
        add   ecx,[_skinh]
281
        call  sys_putimage
282
 
283
        mov   esi,[esp]
284
 
285
        mov   edx,[esi+04]                       ; WORK AREA
286
        add   edx,21+5
287
        mov   ebx,[esi+04]
288
        add   ebx,[esi+12]
289
        cmp   edx,ebx
290
        jg    _noinside2
291
        mov   eax,5
292
        mov   ebx,[_skinh]
293
        mov   ecx,[esi+8]
294
        mov   edx,[esi+12]
295
        sub   ecx,4
296
        sub   edx,4
297
        mov   edi,[esi+16]
298
        call  [drawbar]
299
      _noinside2:
300
 
49 mikedld 301
;* close button
1 ha 302
        mov   edi,[0xfe88]
303
        movzx eax,word [edi]
304
        cmp   eax,1000
305
        jge   no_skin_add_button
306
        inc   eax
307
        mov   [edi],ax
308
 
309
        shl   eax,4
310
        add   eax,edi
311
 
312
        mov   bx,[0x3000]
313
        mov   [eax],bx
314
 
315
        add   eax,2         ; save button id number
316
        mov   bx,1
317
        mov   [eax],bx
318
        add   eax,2         ; x start
49 mikedld 319
        xor   ebx,ebx
320
        cmp   [skin_btn_close.left],0
321
        jge   _bCx_at_right
1 ha 322
        mov   ebx,[esp]
323
        mov   ebx,[ebx+8]
49 mikedld 324
        inc   ebx
1 ha 325
      _bCx_at_right:
49 mikedld 326
        add   ebx,[skin_btn_close.left]
1 ha 327
        mov   [eax],bx
328
        add   eax,2         ; x size
49 mikedld 329
        mov   ebx,[skin_btn_close.width]
330
        dec   ebx
1 ha 331
        mov   [eax],bx
332
        add   eax,2         ; y start
49 mikedld 333
        mov   ebx,[skin_btn_close.top]
1 ha 334
        mov   [eax],bx
335
        add   eax,2         ; y size
49 mikedld 336
        mov   ebx,[skin_btn_close.height]
337
        dec   ebx
1 ha 338
        mov   [eax],bx
339
 
340
;* minimize button
341
        mov   edi,[0xfe88]
342
        movzx eax,word [edi]
343
        cmp   eax,1000
344
        jge   no_skin_add_button
345
        inc   eax
346
        mov   [edi],ax
347
 
348
        shl   eax,4
349
        add   eax,edi
350
 
351
        mov   bx,[0x3000]
352
        mov   [eax],bx
353
 
354
        add   eax,2         ; save button id number
355
        mov   bx,65535 ;999
356
        mov   [eax],bx
357
        add   eax,2         ; x start
49 mikedld 358
        xor   ebx,ebx
359
        cmp   [skin_btn_minimize.left],0
360
        jge   _bMx_at_right
1 ha 361
        mov   ebx,[esp]
362
        mov   ebx,[ebx+8]
49 mikedld 363
        inc   ebx
1 ha 364
      _bMx_at_right:
49 mikedld 365
        add   ebx,[skin_btn_minimize.left]
1 ha 366
        mov   [eax],bx
367
        add   eax,2         ; x size
49 mikedld 368
        mov   ebx,[skin_btn_minimize.width]
369
        dec   ebx
1 ha 370
        mov   [eax],bx
371
        add   eax,2         ; y start
49 mikedld 372
        mov   ebx,[skin_btn_minimize.top]
1 ha 373
        mov   [eax],bx
374
        add   eax,2         ; y size
49 mikedld 375
        mov   ebx,[skin_btn_minimize.height]
376
        dec   ebx
1 ha 377
        mov   [eax],bx
378
 
379
      no_skin_add_button:
380
 
381
        add   esp,4
382
        popa
33 mario79 383
 
35 halyavin 384
        ret  4
1 ha 385