Subversion Repositories Kolibri OS

Rev

Rev 105 | Rev 114 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 105 Rev 112
Line 45... Line 45...
45
; eax = cx
45
; eax = cx
46
; ebx = cy
46
; ebx = cy
47
; ecx = ex
47
; ecx = ex
48
; edx = ey
48
; edx = ey
49
; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî,
49
; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî,
-
 
50
;       è äëÿ ïîïàâøèõ â çàäàííóþ îáëàñòü
50
;       è äëÿ êàæäîãî âûçâàòü setscreen
51
;       ÷àñòåé îêîí âûçâàòü setscreen
51
align 4
52
align 4
52
calculatescreen:
53
calculatescreen:
53
        pushad
54
        pushad
54
        pushfd
55
        pushfd
55
        cli
56
        cli
Line -... Line 57...
-
 
57
 
-
 
58
        push    edx ecx ebx eax
56
 
59
 
57
        mov   esi, 1
-
 
58
        xor   eax, eax
-
 
59
        xor   ebx, ebx
-
 
60
        mov   ecx, [0xFE00]
-
 
61
        mov   edx, [0xFE04]
60
        mov     esi, 1
Line 62... Line 61...
62
        call  setscreen
61
        call    setscreen
63
 
62
 
64
        mov   ebp, [0x3004]        ; number of processes
63
        mov     ebp, [0x3004]        ; number of processes
Line 73... Line 72...
73
        je      .not_wnd
72
        je      .not_wnd
Line 74... Line 73...
74
 
73
 
75
        add     edi, window_data
74
        add     edi, window_data
76
        test    [edi+WDATA.fl_wstate],WSTATE_MINIMIZED
75
        test    [edi+WDATA.fl_wstate], WSTATE_MINIMIZED
-
 
76
        jnz     .not_wnd
77
        jnz     .not_wnd
77
 
-
 
78
        mov     eax, [edi+WDATA.left]
-
 
79
        cmp     eax, [esp+RECT.right]
78
        mov     eax,[edi+WDATA.left]
80
        ja      .out_of_bounds
-
 
81
        mov     ebx, [edi+WDATA.top]
-
 
82
        cmp     ebx, [esp+RECT.bottom]
79
        mov     ebx,[edi+WDATA.top]
83
        ja      .out_of_bounds
80
        mov     ecx,[edi+WDATA.width]
84
        mov     ecx, [edi+WDATA.width]
-
 
85
        add     ecx, eax
-
 
86
        cmp     ecx, [esp+RECT.left]
81
        add     ecx,eax
87
        jb      .out_of_bounds
82
        mov     edx,[edi+WDATA.height]
88
        mov     edx, [edi+WDATA.height]
-
 
89
        add     edx, ebx
-
 
90
        cmp     edx, [esp+RECT.top]
-
 
91
        jb      .out_of_bounds
-
 
92
 
-
 
93
	cmp     eax, [esp+RECT.left]
-
 
94
        jae     @f
-
 
95
        mov     eax, [esp+RECT.left]
-
 
96
     @@:
-
 
97
	cmp     ebx, [esp+RECT.top]
-
 
98
        jae     @f
-
 
99
        mov     ebx, [esp+RECT.top]
-
 
100
     @@:
-
 
101
	cmp     ecx, [esp+RECT.right]
-
 
102
        jbe     @f
-
 
103
        mov     ecx, [esp+RECT.right]
-
 
104
     @@:
-
 
105
	cmp     edx, [esp+RECT.bottom]
-
 
106
        jbe     @f
-
 
107
        mov     edx, [esp+RECT.bottom]
-
 
108
     @@:
83
        add     edx,ebx
109
 
84
        push  esi
110
        push    esi
85
        movzx esi, word [0xC400 + esi * 2]
111
        movzx   esi, word [0xC400 + esi * 2]
86
        call  setscreen
112
        call    setscreen
-
 
113
        pop     esi
87
        pop   esi
114
 
-
 
115
      .not_wnd:
88
      .not_wnd:
116
      .out_of_bounds:
89
        inc   esi
117
        inc     esi
90
        dec   ebp
118
        dec     ebp
91
        jnz   .new_wnd
119
        jnz     .new_wnd
-
 
120
      .finish:
-
 
121
 
-
 
122
	pop     eax ebx ecx edx
92
      .finish:
123
 
93
        popfd
124
        popfd
94
        popad
125
        popad
Line 95... Line 126...
95
ret
126
ret
-
 
127
 
-
 
128
 
-
 
129
 
96
 
130
virtual at esp
97
 
131
  ff_x     dd ?
98
 
132
  ff_y     dd ?
99
virtual at esp
133
  ff_width dd ?
Line 184... Line 218...
184
 
218
 
185
        ; get WinMap start  -> ebp
219
        ; get WinMap start  -> ebp
186
        push  eax
220
        push  eax
187
        mov   eax, [0xFE00] ; screen_sx
221
        mov   eax, [0xFE00] ; screen_sx
188
        inc   eax
222
        inc   eax
189
        imul  eax, ebx   ;ebx
223
        imul  eax, ebx
190
        add   eax, [esp] ;eax
224
        add   eax, [esp]
191
        add   eax, WinMapAddress
225
        add   eax, WinMapAddress
Line 192... Line 226...
192
        mov   ebp, eax
226
        mov   ebp, eax
193
 
-
 
194
        mov   edi, [edi]
-
 
195
;        mov   eax, esi
-
 
196
;        shl   eax, 5
227
 
Line 197... Line 228...
197
;        add   edi, [eax+0x3000+0x10]
228
        mov   edi, [edi]
198
        pop   eax
229
        pop   eax
199
 
230
 
200
        ; eax = x_start
231
        ; eax = x_start
201
        ; ebx = y_start
232
        ; ebx = y_start
202
        ; ecx = x_size
233
        ; ecx = x_size
203
        ; edx = y_size
234
        ; edx = y_size
204
        ; esi = process_number
235
        ; esi = process_number
-
 
236
        ; edi = &shape
205
        ; edi = &shape
237
        ;       [scale]
206
        ;       [scale]
238
        push edx ecx ; for loop - x,y size
-
 
239
 
-
 
240
        mov  ecx, esi
-
 
241
        shl  ecx, 5
-
 
242
        mov  edx, [window_data+ecx+WDATA.top]
-
 
243
        push [window_data+ecx+WDATA.width]      ; for loop - width
-
 
244
        mov  ecx, [window_data+ecx+WDATA.left]
-
 
245
        sub  ebx, edx
-
 
246
        sub  eax, ecx
-
 
247
        push ebx eax ; for loop - x,y
-
 
248
 
-
 
249
        add  [ff_xsz], eax
-
 
250
        add  [ff_ysz], ebx
207
        push edx ecx ;ebx eax
251
 
208
        xor  ebx, ebx
252
        mov  ebx, [ff_y]
209
        align 4
253
 
210
      .ff_new_y:
254
      .ff_new_y:
211
        xor  edx, edx
255
        mov  edx, [ff_x]
212
        align 4
256
 
213
      .ff_new_x:
257
      .ff_new_x:
-
 
258
        ; -- body --
214
        ; -- body --
259
        mov  ecx, [ff_scale]
215
        mov  ecx, [ff_scale]
260
        mov  eax, [ff_width]
216
        mov  eax, [ff_xsz]
261
        inc  eax
217
        shr  eax, cl
262
        shr  eax, cl
218
        push ebx edx
263
        push ebx edx
219
        shr  ebx, cl
264
        shr  ebx, cl
220
        shr  edx, cl
265
        shr  edx, cl
221
        imul eax, ebx
266
        imul eax, ebx
222
        add  eax, edx
267
        add  eax, edx
223
        pop  edx ebx
-
 
224
        add  eax, edi ;[ff_shape]
-
 
225
        call .read_byte
268
        pop  edx ebx
226
;        cmp  byte [eax], 1
269
        add  eax, edi
227
;        jne  @f
270
        call .read_byte
228
        test al,al
271
        test al,al
229
        jz   @f
272
        jz   @f
230
        mov  eax, esi  ; [ff_proc]
273
        mov  eax, esi
231
        mov  [ebp], al
274
        mov  [ebp], al
232
       @@:
275
       @@:
233
        ; -- end body --
276
        ; -- end body --
234
        inc  ebp
277
        inc  ebp
235
        inc  edx
278
        inc  edx
-
 
279
        cmp  edx, [ff_xsz]
236
        cmp  edx, [ff_xsz]
280
        jb   .ff_new_x
237
        jb   .ff_new_x
281
        sub  ebp, [ff_xsz]
238
        sub  ebp, [ff_xsz]
282
        add  ebp, [ff_x]
239
        add  ebp, [0xFE00]  ; screen.x
283
        add  ebp, [0xFE00]  ; screen.x
240
        inc  ebp
284
        inc  ebp
Line 241... Line -...
241
        inc  ebx
-
 
242
        cmp  ebx, [ff_ysz]
285
        inc  ebx
243
        jb   .ff_new_y
286
        cmp  ebx, [ff_ysz]
244
 
287
        jb   .ff_new_y
Line 245... Line 288...
245
        pop  ecx edx   ; eax ebx first
288
 
Line 387... Line 430...
387
        mov     [screen_workarea.top],eax
430
        mov     [screen_workarea.top],eax
388
    @@: cmp     ebx,[0xFE04]
431
    @@: cmp     ebx,[0xFE04]
389
        jg      .lp2
432
        jg      .lp2
390
        mov     [screen_workarea.bottom],ebx
433
        mov     [screen_workarea.bottom],ebx
391
  .lp2: call	repos_windows
434
  .lp2: call	repos_windows
-
 
435
        mov     eax, 0
-
 
436
        mov     ebx, 0
-
 
437
        mov     ecx, [0xfe00]
-
 
438
        mov     edx, [0xfe04]
392
	call	calculatescreen
439
	call	calculatescreen
393
;	jmp	redraw_screen_direct
440
;	jmp	redraw_screen_direct
394
    .exit:
441
    .exit:
395
        popad
442
        popad
396
        ret
443
        ret
Line 434... Line 481...
434
        mov     esi,skin_data+64*512
481
        mov     esi,skin_data+64*512
435
        mov     edi,skin_data
482
        mov     edi,skin_data
436
        mov     ecx,(64*512)/4
483
        mov     ecx,(64*512)/4
437
        rep     movsd
484
        rep     movsd
438
        call    parse_skin_data
485
        call    parse_skin_data
-
 
486
	pushad
-
 
487
        mov     eax, 0
-
 
488
        mov     ebx, 0
-
 
489
        mov     ecx, [0xfe00]
-
 
490
        mov     edx, [0xfe04]
439
        call    calculatescreen
491
        call    calculatescreen
-
 
492
	popad
440
        mov     dword[esp+32+36],0
493
        mov     dword[esp+32+36],0
441
        jmp     redraw_screen_direct
494
        jmp     redraw_screen_direct
442
  .exit:
495
  .exit:
443
        mov     [esp+32+36],eax
496
        mov     [esp+32+36],eax
444
        popad
497
        popad
Line 1004... Line 1057...
1004
        jnz   .skip_redrawings
1057
        jnz   .skip_redrawings
1005
        pushfd
1058
        pushfd
1006
        cli
1059
        cli
1007
        or    [eax+WDATA.fl_wstate], WSTATE_MINIMIZED
1060
        or    [eax+WDATA.fl_wstate], WSTATE_MINIMIZED
1008
        mov   edi, eax
1061
        mov   edi, eax
1009
        call  calculatescreen
1062
        ;call  calculatescreen
1010
        mov   eax, [edi+WDATA.left]
1063
        mov   eax, [edi+WDATA.left]
1011
        mov   [dlx], eax
1064
        mov   [dlx], eax
-
 
1065
        mov   ecx, eax
1012
        add   eax, [edi+WDATA.width]
1066
        add   ecx, [edi+WDATA.width]
1013
        mov   [dlxe], eax
1067
        mov   [dlxe], ecx
1014
        mov   eax, [edi+WDATA.top]
1068
        mov   ebx, [edi+WDATA.top]
1015
        mov   [dly], eax
1069
        mov   [dly], ebx
-
 
1070
        mov   edx, ebx
1016
        add   eax, [edi+WDATA.height]
1071
        add   edx, [edi+WDATA.height]
1017
        mov   [dlye], eax
1072
        mov   [dlye], edx
-
 
1073
        call  calculatescreen
1018
        xor   esi, esi
1074
        xor   esi, esi
1019
        xor   eax, eax
1075
        xor   eax, eax
1020
        call  redrawscreen
1076
        call  redrawscreen
1021
        popfd
1077
        popfd
1022
.skip_redrawings:
1078
.skip_redrawings:
Line 1044... Line 1100...
1044
        add   ecx, [edi+WDATA.width]
1100
        add   ecx, [edi+WDATA.width]
1045
        add   edx, [edi+WDATA.height]
1101
        add   edx, [edi+WDATA.height]
1046
        call  setscreen
1102
        call  setscreen
1047
        jmp   .done
1103
        jmp   .done
1048
.no_uppermost:
1104
.no_uppermost:
-
 
1105
        mov   eax, [edi+WDATA.left]
-
 
1106
        mov   ebx, [edi+WDATA.top]
-
 
1107
        mov   ecx, eax
-
 
1108
        mov   edx, ebx
-
 
1109
        add   ecx, [edi+WDATA.width]
-
 
1110
        add   edx, [edi+WDATA.height]
1049
        call  calculatescreen
1111
        call  calculatescreen
1050
.done:
1112
.done:
1051
        mov   [0xfff4],byte 0 ; no mouse under
1113
        mov   [0xfff4],byte 0 ; no mouse under
1052
.skip_redrawings:
1114
.skip_redrawings:
1053
        popfd
1115
        popfd
Line 1480... Line 1542...
1480
        popad
1542
        popad
Line 1481... Line 1543...
1481
 
1543
 
1482
        cmp   [reposition],0
1544
        cmp   [reposition],0
Line 1483... Line -...
1483
        je    retwm
-
 
1484
 
1545
        je    retwm
Line -... Line 1546...
-
 
1546
 
1485
        mov     [edi+WDATA.fl_redraw],1
1547
        mov   [0xfff5],byte 1 ; no mouse
-
 
1548
 
-
 
1549
 
-
 
1550
        push  eax ebx ecx edx
-
 
1551
        mov   eax,[edi+00]
-
 
1552
        mov   ebx,[edi+04]
-
 
1553
        mov   ecx,[edi+8]
-
 
1554
        mov   edx,[edi+12]
-
 
1555
        add   ecx,eax
1486
        mov   [0xfff5],byte 1 ; no mouse
1556
        add   edx,ebx
1487
 
1557
        call  calculatescreen
1488
        push  eax ebx ecx edx
1558
 
1489
        mov   eax,[oldc+00]
1559
        mov   eax,[oldc+00]
1490
        mov   ebx,[oldc+04]
1560
        mov   ebx,[oldc+04]
Line 1496... Line 1566...
1496
        pop   edx ecx ebx eax
1566
        pop   edx ecx ebx eax
Line 1497... Line 1567...
1497
 
1567
 
1498
        mov   eax,edi
1568
        mov   eax,edi
Line -... Line 1569...
-
 
1569
        call  redrawscreen
-
 
1570
 
-
 
1571
 
1499
        call  redrawscreen
1572
        mov     [edi+WDATA.fl_redraw],1
1500
 
1573
 
1501
        mov   ecx,100         ; wait to avoid mouse residuals
1574
        mov   ecx,100         ; wait to avoid mouse residuals
1502
      waitre2:
1575
      waitre2:
1503
        mov   [0xfff5],byte 1
1576
        mov   [0xfff5],byte 1