Win9x look & feel on buttons and a fix for ownerdrawn buttons
(background set to COLOR_BTNFACE).

diff --git a/controls/button.c b/controls/button.c
index 12937b9..1fa628f 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -312,7 +312,7 @@
 
 static void PB_Paint( WND *wndPtr, HDC hDC, WORD action )
 {
-    RECT rc;
+    RECT rc, focus_rect;
     HPEN hOldPen;
     HBRUSH hOldBrush;
     BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
@@ -327,43 +327,77 @@
     hOldPen = (HPEN)SelectObject(hDC, GetSysColorPen(COLOR_WINDOWFRAME));
     hOldBrush =(HBRUSH)SelectObject(hDC,GetSysColorBrush(COLOR_BTNFACE));
     SetBkMode(hDC, TRANSPARENT);
-    Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
-    if (TWEAK_WineLook == WIN31_LOOK)
+
+    if ( TWEAK_WineLook == WIN31_LOOK)
     {
+        Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
+
         SetPixel( hDC, rc.left, rc.top, GetSysColor(COLOR_WINDOW) );
         SetPixel( hDC, rc.left, rc.bottom-1, GetSysColor(COLOR_WINDOW) );
         SetPixel( hDC, rc.right-1, rc.top, GetSysColor(COLOR_WINDOW) );
         SetPixel( hDC, rc.right-1, rc.bottom-1, GetSysColor(COLOR_WINDOW));
+	InflateRect( &rc, -1, -1 );
     }
-    InflateRect( &rc, -1, -1 );
-
+    
     if ((wndPtr->dwStyle & 0x000f) == BS_DEFPUSHBUTTON)
     {
         Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
-        InflateRect( &rc, -1, -1 );
+	InflateRect( &rc, -1, -1 );
     }
 
-    if (infoPtr->state & BUTTON_HIGHLIGHTED)
+    if (TWEAK_WineLook == WIN31_LOOK)
     {
-        /* draw button shadow: */
-        SelectObject(hDC, GetSysColorBrush(COLOR_BTNSHADOW));
-        PatBlt(hDC, rc.left, rc.top, 1, rc.bottom-rc.top, PATCOPY );
-        PatBlt(hDC, rc.left, rc.top, rc.right-rc.left, 1, PATCOPY );
-        rc.left += 2;  /* To position the text down and right */
-        rc.top  += 2;
-    } else {
-        rc.right++, rc.bottom++;
-	DrawEdge( hDC, &rc, EDGE_RAISED, BF_RECT );
+        if (infoPtr->state & BUTTON_HIGHLIGHTED)
+	{
+	    /* draw button shadow: */
+	    SelectObject(hDC, GetSysColorBrush(COLOR_BTNSHADOW));
+	    PatBlt(hDC, rc.left, rc.top, 1, rc.bottom-rc.top, PATCOPY );
+	    PatBlt(hDC, rc.left, rc.top, rc.right-rc.left, 1, PATCOPY );
+	    rc.left += 2;  /* To position the text down and right */
+	    rc.top  += 2;
+	} else {
+	   rc.right++, rc.bottom++;
+	   DrawEdge( hDC, &rc, EDGE_RAISED, BF_RECT );
 
-	/* To place de bitmap correctly */
-	xBorderOffset += GetSystemMetrics(SM_CXEDGE);
-	yBorderOffset += GetSystemMetrics(SM_CYEDGE);
+	   /* To place de bitmap correctly */
+	   xBorderOffset += GetSystemMetrics(SM_CXEDGE);
+	   yBorderOffset += GetSystemMetrics(SM_CYEDGE);
 
-        rc.right--, rc.bottom--;
+	   rc.right--, rc.bottom--;
+	}
     }
-	
-    /* draw button label, if any: */
-    if (wndPtr->text && wndPtr->text[0])
+    else
+    {
+        UINT uState = DFCS_BUTTONPUSH;
+
+        if (infoPtr->state & BUTTON_HIGHLIGHTED)
+	{
+	    if ( (wndPtr->dwStyle & 0x000f) == BS_DEFPUSHBUTTON )
+	        uState |= DFCS_FLAT;
+	    else
+	        uState |= DFCS_PUSHED;
+	}
+
+	DrawFrameControl( hDC, &rc, DFC_BUTTON, uState );
+	InflateRect( &rc, -2, -2 );
+
+	focus_rect = rc;
+
+        if (infoPtr->state & BUTTON_HIGHLIGHTED)
+	{
+	    rc.left += 2;  /* To position the text down and right */
+	    rc.top  += 2;
+	}
+    }
+
+    /* draw button label, if any:
+     *
+     * In win9x we don't show text if there is a bitmap or icon.
+     * I don't know about win31 so I leave it as it was for win31.
+     * Dennis Björklund 12 Jul, 99
+     */
+    if ( wndPtr->text && wndPtr->text[0]
+	 && (TWEAK_WineLook == WIN31_LOOK || !(wndPtr->dwStyle & (BS_ICON|BS_BITMAP))) )
     {
         LOGBRUSH lb;
         GetObjectA( GetSysColorBrush(COLOR_BTNFACE), sizeof(lb), &lb );
@@ -379,8 +413,11 @@
                                  GetSysColor(COLOR_BTNTEXT) );
             DrawTextA( hDC, wndPtr->text, -1, &rc,
                          DT_SINGLELINE | DT_CENTER | DT_VCENTER );
-            /* do we have the focus? */
-            if (infoPtr->state & BUTTON_HASFOCUS)
+            /* do we have the focus?
+	     * Win9x draws focus last with a size prop. to the button
+	     */
+            if (TWEAK_WineLook == WIN31_LOOK
+		&& infoPtr->state & BUTTON_HASFOCUS)
             {
                 RECT r = { 0, 0, 0, 0 };
                 INT xdelta, ydelta;
@@ -437,6 +474,14 @@
 
 	DeleteDC (hdcMem);
     }
+
+    if (TWEAK_WineLook != WIN31_LOOK
+	&& infoPtr->state & BUTTON_HASFOCUS)
+    {
+        InflateRect( &focus_rect, -1, -1 );
+        DrawFocusRect( hDC, &focus_rect );
+    }
+
     
     SelectObject( hDC, hOldPen );
     SelectObject( hDC, hOldBrush );
@@ -711,6 +756,10 @@
     dis.hDC        = hDC;
     dis.itemData   = 0;
     GetClientRect( wndPtr->hwndSelf, &dis.rcItem );
+
+    SetBkColor( hDC, GetSysColor( COLOR_BTNFACE ) );
+    FillRect( hDC,  &dis.rcItem, GetSysColorBrush( COLOR_BTNFACE ) );
+
     SendMessageA( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
                     wndPtr->wIDmenu, (LPARAM)&dis );
 }