diff --git a/kernel/trunk/gui/skincode.inc b/kernel/trunk/gui/skincode.inc index aa3496b678..e5951e1f39 100644 --- a/kernel/trunk/gui/skincode.inc +++ b/kernel/trunk/gui/skincode.inc @@ -317,22 +317,29 @@ drawwindow_IV: ; shr esi,1 ; and esi,0x007f7f7f mov esi, [ebp+SKIN_DATA.colors.outer] + or esi, 1 shl 25 ; 0x02000000 used for draw_rectangle without top line + ror ebx, 16 + add ebx, [_skinh] + sub bx, 1 + rol ebx, 16 call draw_rectangle mov ecx, 3 _dw3l: add eax, 1*65536-1 - add ebx, 1*65536-1 + add ebx, 0*65536-1 test ax, ax js no_skin_add_button test bx, bx js no_skin_add_button mov esi, [ebp+SKIN_DATA.colors.frame];[edi+24] + or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line call draw_rectangle dec ecx jnz _dw3l mov esi, [ebp+SKIN_DATA.colors.inner] + or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line add eax, 1*65536-1 - add ebx, 1*65536-1 + add ebx, 0*65536-1 test ax, ax js no_skin_add_button test bx, bx diff --git a/kernel/trunk/gui/window.inc b/kernel/trunk/gui/window.inc index 4473a23a3e..759b400d34 100644 --- a/kernel/trunk/gui/window.inc +++ b/kernel/trunk/gui/window.inc @@ -609,6 +609,9 @@ draw_rectangle: ;////////////////////////////////////////////////////////////// ;> eax = pack[16(left), 16(right)] ;> ebx = pack[16(top), 16(bottom)] ;> esi = color +; ?? RR GG BB ; 0x01000000 negation +; ; 0x02000000 used for draw_rectangle without top line +; ; for example drawwindow_III and drawwindow_IV ;------------------------------------------------------------------------------ push eax ebx ecx edi @@ -619,14 +622,17 @@ draw_rectangle: ;////////////////////////////////////////////////////////////// ; set line color mov ecx, esi - + sub esi, 1 shl 25 ; draw top border rol ebx, 16 push ebx rol ebx, 16 pop bx + test ecx, 1 shl 25 + jnz @f + sub ecx, 1 shl 25 call [draw_line] - +@@: ; draw bottom border mov ebx, [esp - 2] pop bx @@ -828,22 +834,28 @@ drawwindow_III: ;////////////////////////////////////////////////////////////// mov esi, [edx + WDATA.cl_frames] shr esi, 1 and esi, 0x007f7f7f + or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line + ror ebx, 16 + add ebx, [_skinh] + sub bx, 1 + rol ebx, 16 call draw_rectangle push esi mov ecx, 3 mov esi, [edx + WDATA.cl_frames] + or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line .next_frame: add eax, 1 * 65536 - 1 - add ebx, 1 * 65536 - 1 + add ebx, 0 * 65536 - 1 call draw_rectangle dec ecx jnz .next_frame pop esi add eax, 1 * 65536 - 1 - add ebx, 1 * 65536 - 1 + add ebx, 0 * 65536 - 1 call draw_rectangle ; window caption diff --git a/kernel/trunk/video/vesa20.inc b/kernel/trunk/video/vesa20.inc index 019f3345c0..6b46f2a578 100644 --- a/kernel/trunk/video/vesa20.inc +++ b/kernel/trunk/video/vesa20.inc @@ -300,6 +300,8 @@ __sys_putpixel: ; eax = x coordinate ; ebx = y coordinate ; ecx = ?? RR GG BB ; 0x01000000 negation + ; 0x02000000 used for draw_rectangle without top line + ; for example drawwindow_III and drawwindow_IV ; edi = 0x00000001 force ;;; mov [novesachecksum], dword 0