From 85aa5c316752f0b41c14a88b0c187a870345fbce Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Wed, 18 Oct 2006 11:29:50 +0000 Subject: [PATCH] Final attempt to fix border drawing git-svn-id: svn://kolibrios.org@186 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/gui/skincode.inc | 10 ++- kernel/trunk/gui/window.inc | 163 +++++++++++++++++----------------- kernel/trunk/kernel.asm | 16 ++-- 3 files changed, 98 insertions(+), 91 deletions(-) diff --git a/kernel/trunk/gui/skincode.inc b/kernel/trunk/gui/skincode.inc index 60f28fdd1a..fe5e6d94a7 100644 --- a/kernel/trunk/gui/skincode.inc +++ b/kernel/trunk/gui/skincode.inc @@ -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 diff --git a/kernel/trunk/gui/window.inc b/kernel/trunk/gui/window.inc index 403a8f98c3..71aeb66a62 100644 --- a/kernel/trunk/gui/window.inc +++ b/kernel/trunk/gui/window.inc @@ -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 diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index fa7591f2e3..af556fee6e 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -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