Subversion Repositories Kolibri OS

Rev

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

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