Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 111 → Rev 112

/kernel/trunk/core/sys32.inc
978,10 → 978,10
; call systest
sti ; .. and life goes on
 
; movzx eax,word [dlx]
; movzx ebx,word [dly]
; movzx ecx,word [dlxe]
; movzx edx,word [dlye]
mov eax, [dlx]
mov ebx, [dly]
mov ecx, [dlxe]
mov edx, [dlye]
call calculatescreen
xor eax, eax
xor esi, esi
/kernel/trunk/gui/window.inc
47,7 → 47,8
; ecx = ex
; edx = ey
; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî,
; è äëÿ êàæäîãî âûçâàòü setscreen
; è äëÿ ïîïàâøèõ â çàäàííóþ îáëàñòü
; ÷àñòåé îêîí âûçâàòü setscreen
align 4
calculatescreen:
pushad
54,16 → 55,14
pushfd
cli
 
mov esi, 1
xor eax, eax
xor ebx, ebx
mov ecx, [0xFE00]
mov edx, [0xFE04]
call setscreen
push edx ecx ebx eax
 
mov ebp, [0x3004] ; number of processes
cmp ebp, 1
jbe .finish
mov esi, 1
call setscreen
 
mov ebp, [0x3004] ; number of processes
cmp ebp, 1
jbe .finish
align 4
.new_wnd:
movzx edi, word [0xC400 + esi * 2]
73,23 → 72,55
je .not_wnd
 
add edi, window_data
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED
test [edi+WDATA.fl_wstate], WSTATE_MINIMIZED
jnz .not_wnd
mov eax,[edi+WDATA.left]
mov ebx,[edi+WDATA.top]
mov ecx,[edi+WDATA.width]
add ecx,eax
mov edx,[edi+WDATA.height]
add edx,ebx
push esi
movzx esi, word [0xC400 + esi * 2]
call setscreen
pop esi
 
mov eax, [edi+WDATA.left]
cmp eax, [esp+RECT.right]
ja .out_of_bounds
mov ebx, [edi+WDATA.top]
cmp ebx, [esp+RECT.bottom]
ja .out_of_bounds
mov ecx, [edi+WDATA.width]
add ecx, eax
cmp ecx, [esp+RECT.left]
jb .out_of_bounds
mov edx, [edi+WDATA.height]
add edx, ebx
cmp edx, [esp+RECT.top]
jb .out_of_bounds
 
cmp eax, [esp+RECT.left]
jae @f
mov eax, [esp+RECT.left]
@@:
cmp ebx, [esp+RECT.top]
jae @f
mov ebx, [esp+RECT.top]
@@:
cmp ecx, [esp+RECT.right]
jbe @f
mov ecx, [esp+RECT.right]
@@:
cmp edx, [esp+RECT.bottom]
jbe @f
mov edx, [esp+RECT.bottom]
@@:
 
push esi
movzx esi, word [0xC400 + esi * 2]
call setscreen
pop esi
 
.not_wnd:
inc esi
dec ebp
jnz .new_wnd
.out_of_bounds:
inc esi
dec ebp
jnz .new_wnd
.finish:
 
pop eax ebx ecx edx
 
popfd
popad
ret
97,6 → 128,9
 
 
virtual at esp
ff_x dd ?
ff_y dd ?
ff_width dd ?
ff_xsz dd ?
ff_ysz dd ?
ff_scale dd ?
186,15 → 220,12
push eax
mov eax, [0xFE00] ; screen_sx
inc eax
imul eax, ebx ;ebx
add eax, [esp] ;eax
imul eax, ebx
add eax, [esp]
add eax, WinMapAddress
mov ebp, eax
 
mov edi, [edi]
; mov eax, esi
; shl eax, 5
; add edi, [eax+0x3000+0x10]
pop eax
 
; eax = x_start
204,16 → 235,30
; esi = process_number
; edi = &shape
; [scale]
push edx ecx ;ebx eax
xor ebx, ebx
align 4
push edx ecx ; for loop - x,y size
 
mov ecx, esi
shl ecx, 5
mov edx, [window_data+ecx+WDATA.top]
push [window_data+ecx+WDATA.width] ; for loop - width
mov ecx, [window_data+ecx+WDATA.left]
sub ebx, edx
sub eax, ecx
push ebx eax ; for loop - x,y
 
add [ff_xsz], eax
add [ff_ysz], ebx
 
mov ebx, [ff_y]
 
.ff_new_y:
xor edx, edx
align 4
mov edx, [ff_x]
 
.ff_new_x:
; -- body --
mov ecx, [ff_scale]
mov eax, [ff_xsz]
mov eax, [ff_width]
inc eax
shr eax, cl
push ebx edx
shr ebx, cl
221,13 → 266,11
imul eax, ebx
add eax, edx
pop edx ebx
add eax, edi ;[ff_shape]
add eax, edi
call .read_byte
; cmp byte [eax], 1
; jne @f
test al,al
jz @f
mov eax, esi ; [ff_proc]
mov eax, esi
mov [ebp], al
@@:
; -- end body --
236,6 → 279,7
cmp edx, [ff_xsz]
jb .ff_new_x
sub ebp, [ff_xsz]
add ebp, [ff_x]
add ebp, [0xFE00] ; screen.x
inc ebp
inc ebx
242,8 → 286,7
cmp ebx, [ff_ysz]
jb .ff_new_y
 
pop ecx edx ; eax ebx first
add esp, 4
add esp, 24
popad
ret
 
389,6 → 432,10
jg .lp2
mov [screen_workarea.bottom],ebx
.lp2: call repos_windows
mov eax, 0
mov ebx, 0
mov ecx, [0xfe00]
mov edx, [0xfe04]
call calculatescreen
; jmp redraw_screen_direct
.exit:
436,7 → 483,13
mov ecx,(64*512)/4
rep movsd
call parse_skin_data
pushad
mov eax, 0
mov ebx, 0
mov ecx, [0xfe00]
mov edx, [0xfe04]
call calculatescreen
popad
mov dword[esp+32+36],0
jmp redraw_screen_direct
.exit:
1006,15 → 1059,18
cli
or [eax+WDATA.fl_wstate], WSTATE_MINIMIZED
mov edi, eax
call calculatescreen
;call calculatescreen
mov eax, [edi+WDATA.left]
mov [dlx], eax
add eax, [edi+WDATA.width]
mov [dlxe], eax
mov eax, [edi+WDATA.top]
mov [dly], eax
add eax, [edi+WDATA.height]
mov [dlye], eax
mov ecx, eax
add ecx, [edi+WDATA.width]
mov [dlxe], ecx
mov ebx, [edi+WDATA.top]
mov [dly], ebx
mov edx, ebx
add edx, [edi+WDATA.height]
mov [dlye], edx
call calculatescreen
xor esi, esi
xor eax, eax
call redrawscreen
1046,6 → 1102,12
call setscreen
jmp .done
.no_uppermost:
mov eax, [edi+WDATA.left]
mov ebx, [edi+WDATA.top]
mov ecx, eax
mov edx, ebx
add ecx, [edi+WDATA.width]
add edx, [edi+WDATA.height]
call calculatescreen
.done:
mov [0xfff4],byte 0 ; no mouse under
1482,10 → 1544,18
cmp [reposition],0
je retwm
 
mov [edi+WDATA.fl_redraw],1
mov [0xfff5],byte 1 ; no mouse
 
 
push eax ebx ecx edx
mov eax,[edi+00]
mov ebx,[edi+04]
mov ecx,[edi+8]
mov edx,[edi+12]
add ecx,eax
add edx,ebx
call calculatescreen
 
mov eax,[oldc+00]
mov ebx,[oldc+04]
mov ecx,[oldc+8]
1498,6 → 1568,9
mov eax,edi
call redrawscreen
 
 
mov [edi+WDATA.fl_redraw],1
 
mov ecx,100 ; wait to avoid mouse residuals
waitre2:
mov [0xfff5],byte 1
/kernel/trunk/kernel.asm
4667,9 → 4667,9
mov edx,[0x3010]
add eax,[edx-twdw]
add ebx,[edx-twdw+4]
; xor edi,edi ; no force
mov edi,1
; call [disable_mouse]
xor edi,edi ; no force
;mov edi,1
call [disable_mouse]
jmp [putpixel]
 
align 4
/kernel/trunk/vmodeint.inc
36,6 → 36,10
sub [screen_workarea.bottom],ebx
 
call repos_windows
mov eax, 0
mov ebx, 0
mov ecx, [0xfe00]
mov edx, [0xfe04]
call calculatescreen
 
.resolution_wasnt_changed: