Small fix in UITOOLS95_DrawRectEdge().
Also a fix to draw scrollbar-buttons more like in win9x.
diff --git a/controls/uitools.c b/controls/uitools.c
index b0aa3aa..98f95bf 100644
--- a/controls/uitools.c
+++ b/controls/uitools.c
@@ -8,6 +8,7 @@
#include "wine/winuser16.h"
#include "winuser.h"
#include "debugtools.h"
+#include "tweak.h"
DEFAULT_DEBUG_CHANNEL(graphics)
@@ -445,6 +446,16 @@
{
LTInnerI = RBInnerI = LTRBInnerFlat[uType & (BDR_INNER|BDR_OUTER)];
LTOuterI = RBOuterI = LTRBOuterFlat[uType & (BDR_INNER|BDR_OUTER)];
+
+ /* Bertho Stultiens states above that this function exactly matches win95
+ * In win98 BF_FLAT rectangels have an inner border same color as the
+ * middle (COLOR_BTNFACE). I believe it's the same for win95 but since
+ * I don't know I go with Bertho and just sets it for win98 until proven
+ * otherwise.
+ * Dennis Björklund, 10 June, 99
+ */
+ if( TWEAK_WineLook == WIN98_LOOK && LTInnerI != -1 )
+ LTInnerI = RBInnerI = COLOR_BTNFACE;
}
else if(uFlags & BF_SOFT)
{
@@ -471,12 +482,6 @@
if(RBInnerI != -1) RBInnerPen = GetSysColorPen(RBInnerI);
if(RBOuterI != -1) RBOuterPen = GetSysColorPen(RBOuterI);
- if((uFlags & BF_MIDDLE) && retval)
- {
- FillRect(hdc, &InnerRect, GetSysColorBrush(uFlags & BF_MONO ?
- COLOR_WINDOW : COLOR_BTNFACE));
- }
-
MoveToEx(hdc, 0, 0, &SavePoint);
/* Draw the outer edge */
@@ -527,15 +532,24 @@
LineTo(hdc, InnerRect.right-2, InnerRect.top-1+RTpenplus);
}
- /* Adjust rectangle if asked */
- if(uFlags & BF_ADJUST)
+ if( ((uFlags & BF_MIDDLE) && retval) || (uFlags & BF_ADJUST) )
{
int add = (LTRBInnerMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0)
+ (LTRBOuterMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0);
- if(uFlags & BF_LEFT) rc->left += add;
- if(uFlags & BF_RIGHT) rc->right -= add;
- if(uFlags & BF_TOP) rc->top += add;
- if(uFlags & BF_BOTTOM) rc->bottom -= add;
+
+ if(uFlags & BF_LEFT) InnerRect.left += add;
+ if(uFlags & BF_RIGHT) InnerRect.right -= add;
+ if(uFlags & BF_TOP) InnerRect.top += add;
+ if(uFlags & BF_BOTTOM) InnerRect.bottom -= add;
+
+ if((uFlags & BF_MIDDLE) && retval)
+ {
+ FillRect(hdc, &InnerRect, GetSysColorBrush(uFlags & BF_MONO ?
+ COLOR_WINDOW : COLOR_BTNFACE));
+ }
+
+ if(uFlags & BF_ADJUST)
+ *rc = InnerRect;
}
/* Cleanup */
@@ -1123,7 +1137,7 @@
int i;
HBRUSH hbsave, hb, hb2;
HPEN hpsave, hp, hp2;
- int tri = 310*SmallDiam/1000;
+ int tri = 290*SmallDiam/1000 - 1;
int d46, d93;
switch(uFlags & 0xff)
@@ -1139,14 +1153,14 @@
case DFCS_SCROLLUP:
Line[2].x = myr.left + 470*SmallDiam/1000 + 2;
- Line[2].y = myr.top + 313*SmallDiam/1000 + 1;
+ Line[2].y = myr.bottom - (687*SmallDiam/1000 + 1);
Line[0].x = Line[2].x - tri;
Line[1].x = Line[2].x + tri;
Line[0].y = Line[1].y = Line[2].y + tri;
break;
case DFCS_SCROLLLEFT:
- Line[2].x = myr.left + 313*SmallDiam/1000 + 1;
+ Line[2].x = myr.right - (687*SmallDiam/1000 + 1);
Line[2].y = myr.top + 470*SmallDiam/1000 + 2;
Line[0].y = Line[2].y - tri;
Line[1].y = Line[2].y + tri;
@@ -1241,7 +1255,12 @@
}
/* Here do the real scroll-bar controls end up */
- UITOOLS95_DFC_ButtonPush(dc, r, uFlags & 0xff00);
+ if( ! (uFlags & (0xff00 & ~DFCS_ADJUSTRECT)) )
+ /* UITOOLS95_DFC_ButtonPush always uses BF_SOFT which we don't */
+ /* want for the normal scroll-arrow button. */
+ UITOOLS95_DrawRectEdge( dc, r, EDGE_RAISED, (uFlags&DFCS_ADJUSTRECT) | BF_MIDDLE | BF_RECT);
+ else
+ UITOOLS95_DFC_ButtonPush(dc, r, (uFlags & 0xff00) );
if(uFlags & DFCS_INACTIVE)
{
@@ -1252,11 +1271,12 @@
SelectObject(dc, hbsave);
}
- for(i = 0; i < 3; i++)
- {
+ if( (uFlags & DFCS_INACTIVE) || !(uFlags & DFCS_PUSHED) )
+ for(i = 0; i < 3; i++)
+ {
Line[i].x--;
Line[i].y--;
- }
+ }
i = uFlags & DFCS_INACTIVE ? COLOR_BTNSHADOW : COLOR_BTNTEXT;
hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(i));