forked from KolibriOS/kolibrios
1. faster GUI: calculatescreen
2. fixed sysfunc 1 - put pixel which was completely broken git-svn-id: svn://kolibrios.org@112 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
fca11d7700
commit
849b393cad
@ -978,10 +978,10 @@ terminate: ; terminate application
|
||||
; 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
|
||||
|
@ -47,18 +47,17 @@ setwindowdefaults:
|
||||
; ecx = ex
|
||||
; edx = ey
|
||||
; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî,
|
||||
; è äëÿ êàæäîãî âûçâàòü setscreen
|
||||
; è äëÿ ïîïàâøèõ â çàäàííóþ îáëàñòü
|
||||
; ÷àñòåé îêîí âûçâàòü setscreen
|
||||
align 4
|
||||
calculatescreen:
|
||||
pushad
|
||||
pushfd
|
||||
cli
|
||||
|
||||
push edx ecx ebx eax
|
||||
|
||||
mov esi, 1
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
mov ecx, [0xFE00]
|
||||
mov edx, [0xFE04]
|
||||
call setscreen
|
||||
|
||||
mov ebp, [0x3004] ; number of processes
|
||||
@ -75,21 +74,53 @@ calculatescreen:
|
||||
add edi, window_data
|
||||
test [edi+WDATA.fl_wstate], WSTATE_MINIMIZED
|
||||
jnz .not_wnd
|
||||
|
||||
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:
|
||||
.out_of_bounds:
|
||||
inc esi
|
||||
dec ebp
|
||||
jnz .new_wnd
|
||||
.finish:
|
||||
|
||||
pop eax ebx ecx edx
|
||||
|
||||
popfd
|
||||
popad
|
||||
ret
|
||||
@ -97,6 +128,9 @@ ret
|
||||
|
||||
|
||||
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 @@ pushad
|
||||
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 @@ pushad
|
||||
; 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 @@ pushad
|
||||
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,14 +279,14 @@ pushad
|
||||
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
|
||||
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 @@ display_settings:
|
||||
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 @@ display_settings:
|
||||
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 @@ minimize_window:
|
||||
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 @@ restore_minimized_window:
|
||||
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 @@ checkwindows:
|
||||
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 @@ checkwindows:
|
||||
mov eax,edi
|
||||
call redrawscreen
|
||||
|
||||
|
||||
mov [edi+WDATA.fl_redraw],1
|
||||
|
||||
mov ecx,100 ; wait to avoid mouse residuals
|
||||
waitre2:
|
||||
mov [0xfff5],byte 1
|
||||
|
@ -4667,9 +4667,9 @@ syscall_setpixel: ; SetPixel
|
||||
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
|
||||
|
@ -36,6 +36,10 @@ endg
|
||||
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:
|
||||
|
Loading…
Reference in New Issue
Block a user