Final attempt to fix border drawing

git-svn-id: svn://kolibrios.org@186 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond) 2006-10-18 11:29:50 +00:00
parent 5e5bb72582
commit 85aa5c3167
3 changed files with 98 additions and 91 deletions

View File

@ -270,7 +270,7 @@ drawwindow_IV:
push edx
mov edi,[esp] ; RECTANGLE
mov edi,edx
mov ebp,skin_active
cmp byte [esp+32+4+4],0
@ -290,6 +290,7 @@ drawwindow_IV:
; shr esi,1
; and esi,0x007f7f7f
mov esi,[ebp+SKIN_DATA.colors.outer]
or [edi+WDATA.fl_wdrawn], 4
call draw_rectangle
mov ecx,3
_dw3l:
@ -430,8 +431,13 @@ drawwindow_IV:
mov [eax],bx
no_skin_add_button:
pop edi
and [edi+WDATA.fl_wdrawn], not 4
test [edi+WDATA.fl_wdrawn], 2
jz @f
call drawwindowframes2
@@:
add esp,4
popa
ret 4

View File

@ -705,6 +705,7 @@ drawwindow_I_caption:
drawwindow_I:
pushad
or [edx+WDATA.fl_wdrawn], 4
mov esi,[edx+WDATA.cl_frames] ; rectangle
mov eax,[edx+WDATA.box.left]
@ -717,6 +718,12 @@ drawwindow_I:
add ebx,[edx+WDATA.box.height]
call draw_rectangle
and [edx+WDATA.fl_wdrawn], not 4
test [edx+WDATA.fl_wdrawn], 2
jz @f
call drawwindowframes2
@@:
call drawwindow_I_caption
mov edx,[esi+WDATA.box.top] ; inside work area
@ -846,7 +853,13 @@ drawwindow_III:
shr esi,1
and esi,0x007f7f7f
push esi
or [edi+WDATA.fl_wdrawn], 4
call draw_rectangle
and [edi+WDATA.fl_wdrawn], not 4
test [edi+WDATA.fl_wdrawn], 2
jz @f
call drawwindowframes2
@@:
mov ecx,3
dw3l:
add eax,1*65536-1
@ -1645,92 +1658,80 @@ endg
; draw negative window frames
uglobal
moving_wnd dd ?
moving_wnd_redrawed db ?
endg
drawwindowframes2:
pushad
cli
jmp drawwindowframes.do
drawwindowframes:
mov [moving_wnd], edi
pushad
cli
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
jnz .ret
cmp [edi+WDATA.fl_redraw], 0
jz @f
xor [moving_wnd_redrawed], 1
jmp .ret
@@:
cmp [moving_wnd_redrawed], 0
jz @f
mov [moving_wnd_redrawed], 0
mov eax, [npx]
cmp eax, [edi+WDATA.box.left]
jnz .nowndframe
mov eax, [npxe]
cmp eax, [edi+WDATA.box.width]
jnz .nowndframe
mov eax, [npy]
cmp eax, [edi+WDATA.box.top]
jnz .nowndframe
mov eax, [npye]
cmp eax, [edi+WDATA.box.height]
jnz .nowndframe
xor [edi+WDATA.fl_wdrawn], 2
test [edi+WDATA.fl_wdrawn], 4
jnz .ret
.nowndframe:
.do:
mov edi, 1
mov ecx, 0x01000000
mov eax,[npx]
shl eax,16
add eax,[npx]
add eax,[npxe]
add eax,65536*1-1
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
call [draw_line]
mov eax,[npx]
shl eax,16
add eax,[npx]
add eax,[npxe]
add eax,65536*1-1
mov ebx,[npy]
add ebx,[npye]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
call [draw_line]
mov eax,[npx]
shl eax,16
add eax,[npx]
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
call [draw_line]
mov eax,[npx]
add eax,[npxe]
shl eax,16
add eax,[npx]
add eax,[npxe]
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
call [draw_line]
.ret:
ret
@@:
pushad
mov eax,[npx]
shl eax,16
add eax,[npx]
add eax,[npxe]
add eax,65536*1-1
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
mov ecx,0x01000000
push edi
mov edi,1
call [draw_line]
pop edi
mov eax,[npx]
shl eax,16
add eax,[npx]
add eax,[npxe]
add eax,65536*1-1
mov ebx,[npy]
add ebx,[npye]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
mov ecx,0x01000000
push edi
mov edi,1
call [draw_line]
pop edi
mov eax,[npx]
shl eax,16
add eax,[npx]
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
mov ecx,0x01000000
push edi
mov edi,1
call [draw_line]
pop edi
mov eax,[npx]
add eax,[npxe]
shl eax,16
add eax,[npx]
add eax,[npxe]
mov ebx,[npy]
shl ebx,16
add ebx,[npy]
add ebx,[npye]
mov ecx,0x01000000
push edi
mov edi,1
call [draw_line]
mov edi,[0x3000]
shl edi,5
add edi,window_data
mov [edi+WDATA.fl_wdrawn],byte 1
pop edi
sti
popad
ret

View File

@ -2696,8 +2696,7 @@ sys_redrawstat:
mov [edx+RECT.bottom],eax
mov edi,[0x3010]
mov [edi-twdw+WDATA.fl_wdrawn], 1 ; no new position & buttons from app
mov [edi-twdw+WDATA.fl_redraw], 0
or [edi-twdw+WDATA.fl_wdrawn], 1 ; no new position & buttons from app
call sys_window_mouse
@ -2949,8 +2948,8 @@ sys_set_window:
mov [edi+WDATA.cl_frames],esi
; check flag (?)
cmp [edi+WDATA.fl_wdrawn],1
jz newd
test [edi+WDATA.fl_wdrawn],1
jnz newd
push eax
mov eax,[timer_ticks] ;[0xfdf0]
@ -2986,9 +2985,10 @@ sys_set_window:
@@: mov esi,[esp+0]
add edi, APPDATA.saved_box
mov ecx,4
cld
rep movsd
movsd
movsd
movsd
movsd
pop edi esi ecx
push eax ebx ecx edx
@ -3007,7 +3007,7 @@ sys_set_window:
mov [0xf500],byte 0 ; empty button buffer
newd:
; mov [edi+WDATA.fl_redraw],byte 0 ; no redraw
mov [edi+WDATA.fl_redraw],byte 0 ; no redraw
mov edx,edi
ret