Attempt to paint the checkbox and radio buttons better.

diff --git a/controls/button.c b/controls/button.c
index 747b732..671bb11 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -759,10 +759,24 @@
 
 	    if (wndPtr->dwStyle & WS_DISABLED) state |= DFCS_INACTIVE;
 
+	    /* rbox must have the correct height */ 
+ 	    delta = rbox.bottom - rbox.top - checkBoxHeight;
+	    if (delta > 0) 
+	    {  
+		int ofs = (abs(delta) / 2);
+		rbox.bottom -= ofs + 1;
+		rbox.top = rbox.bottom - checkBoxHeight;
+	    }
+	    else if (delta < 0)
+	    {
+		int ofs = (abs(delta) / 2);
+		rbox.top -= ofs + 1;
+		rbox.bottom = rbox.top + checkBoxHeight;
+	    }
+
 	    DrawFrameControl( hDC, &rbox, DFC_BUTTON, state );
         }
 
-
         if( textlen && action != ODA_SELECT )
         {
 	  if (wndPtr->dwStyle & WS_DISABLED &&
diff --git a/controls/uitools.c b/controls/uitools.c
index 4f514df..c9d0657 100644
--- a/controls/uitools.c
+++ b/controls/uitools.c
@@ -705,13 +705,12 @@
  * however there because MS uses a TrueType font (Marlett) to draw
  * the buttons.
  */
-#define DFC_CHECKPOINTSMAX      6
 
 static BOOL UITOOLS95_DFC_ButtonCheck(HDC dc, LPRECT r, UINT uFlags)
 {
-    RECT myr;
-    int SmallDiam = UITOOLS_MakeSquareRect(r, &myr);
+    RECT myr, bar;
     UINT flags = BF_RECT | BF_ADJUST;
+    UITOOLS_MakeSquareRect(r, &myr);
 
     if(uFlags & DFCS_FLAT) flags |= BF_FLAT;
     else if(uFlags & DFCS_MONO) flags |= BF_MONO;
@@ -729,34 +728,20 @@
 
     if(uFlags & DFCS_CHECKED)
     {
-        POINT CheckPoints[DFC_CHECKPOINTSMAX];
-        int i;
-        HBRUSH hbsave;
-        HPEN hpsave;
+        int i, k;
+        i = (uFlags & DFCS_INACTIVE) || (uFlags & 0xff) == DFCS_BUTTON3STATE ?
+		COLOR_BTNSHADOW : COLOR_WINDOWTEXT;
 
-        /* FIXME: This comes very close to M$'s checkmark, but not */
-        /* exactly... When small or large there is a few pixels */
-        /* shift. Not bad, but could be better :) */
-        UITOOLS_MakeSquareRect(r, &myr);
-        CheckPoints[0].x = myr.left + 253*SmallDiam/1000;
-        CheckPoints[0].y = myr.top  + 345*SmallDiam/1000;
-        CheckPoints[1].x = myr.left + 409*SmallDiam/1000;
-        CheckPoints[1].y = CheckPoints[0].y + (CheckPoints[1].x-CheckPoints[0].x);
-        CheckPoints[2].x = myr.left + 690*SmallDiam/1000;
-        CheckPoints[2].y = CheckPoints[1].y - (CheckPoints[2].x-CheckPoints[1].x);
-        CheckPoints[3].x = CheckPoints[2].x;
-        CheckPoints[3].y = CheckPoints[2].y + 3*SmallDiam/16;
-        CheckPoints[4].x = CheckPoints[1].x;
-        CheckPoints[4].y = CheckPoints[1].y + 3*SmallDiam/16;
-        CheckPoints[5].x = CheckPoints[0].x;
-        CheckPoints[5].y = CheckPoints[0].y + 3*SmallDiam/16;
-
-        i = (uFlags & DFCS_INACTIVE) || (uFlags & 0xff) == DFCS_BUTTON3STATE ? COLOR_BTNSHADOW : COLOR_WINDOWTEXT;
-        hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(i));
-        hpsave = (HPEN)SelectObject(dc, GetSysColorPen(i));
-        Polygon(dc, CheckPoints, DFC_CHECKPOINTSMAX);
-        SelectObject(dc, hpsave);
-        SelectObject(dc, hbsave);
+        /* draw 7 bars, with h=3w to form the check */
+        bar.left = myr.left;
+	bar.top = myr.top + 2;
+        for (k = 0; k < 7; k++) {
+            bar.left = bar.left + 1;
+	    bar.top = (k < 3) ? bar.top + 1 : bar.top - 1;
+	    bar.bottom = bar.top + 3;
+   	    bar.right = bar.left + 1;
+            FillRect(dc, &bar, GetSysColorBrush(i));
+	}
     }
     return TRUE;
 }
@@ -779,7 +764,6 @@
     int BorderShrink = SmallDiam / 16;
     HPEN hpsave;
     HBRUSH hbsave;
-    int xe, ye;
     int xc, yc;
 
     if(BorderShrink < 1) BorderShrink = 1;
@@ -789,9 +773,6 @@
         FillRect(dc, r, (HBRUSH)GetStockObject(BLACK_BRUSH));
     }
 
-    xe = myr.left;
-    ye = myr.top  + SmallDiam - SmallDiam/2;
-
     xc = myr.left + SmallDiam - SmallDiam/2;
     yc = myr.top  + SmallDiam - SmallDiam/2;
 
@@ -805,7 +786,7 @@
     if((uFlags & 0xff) == DFCS_BUTTONRADIOMASK)
     {
         hbsave = (HBRUSH)SelectObject(dc, GetStockObject(BLACK_BRUSH));
-        Pie(dc, myr.left, myr.top, myr.right, myr.bottom, xe, ye, xe, ye);
+        Ellipse(dc, myr.left, myr.top, myr.right, myr.bottom);
         SelectObject(dc, hbsave);
     }
     else
@@ -814,7 +795,7 @@
         {
             hpsave = (HPEN)SelectObject(dc, GetSysColorPen(COLOR_WINDOWFRAME));
             hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(COLOR_WINDOWFRAME));
-            Pie(dc, myr.left, myr.top, myr.right, myr.bottom, xe, ye, xe, ye);
+            Ellipse(dc, myr.left, myr.top, myr.right, myr.bottom);
             SelectObject(dc, hbsave);
             SelectObject(dc, hpsave);
         }
@@ -822,11 +803,11 @@
         {
             hpsave = (HPEN)SelectObject(dc, GetSysColorPen(COLOR_BTNHIGHLIGHT));
             hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(COLOR_BTNHIGHLIGHT));
-            Pie(dc, myr.left, myr.top, myr.right, myr.bottom, myr.left-1, myr.bottom, myr.right-1, myr.top);
+            Pie(dc, myr.left, myr.top, myr.right+1, myr.bottom+1, myr.left-1, myr.bottom, myr.right+1, myr.top);
 
             SelectObject(dc, GetSysColorPen(COLOR_BTNSHADOW));
             SelectObject(dc, GetSysColorBrush(COLOR_BTNSHADOW));
-            Pie(dc, myr.left, myr.top, myr.right, myr.bottom, myr.right+1, myr.top, myr.left+1, myr.bottom);
+            Pie(dc, myr.left, myr.top, myr.right+1, myr.bottom+1, myr.right+1, myr.top, myr.left-1, myr.bottom);
 
             myr.left   += BorderShrink;
             myr.right  -= BorderShrink;
@@ -835,11 +816,11 @@
 
             SelectObject(dc, GetSysColorPen(COLOR_3DLIGHT));
             SelectObject(dc, GetSysColorBrush(COLOR_3DLIGHT));
-            Pie(dc, myr.left, myr.top, myr.right, myr.bottom, myr.left-1, myr.bottom, myr.right-1, myr.top);
+            Pie(dc, myr.left, myr.top, myr.right+1, myr.bottom+1, myr.left-1, myr.bottom, myr.right+1, myr.top);
 
             SelectObject(dc, GetSysColorPen(COLOR_3DDKSHADOW));
             SelectObject(dc, GetSysColorBrush(COLOR_3DDKSHADOW));
-            Pie(dc, myr.left, myr.top, myr.right, myr.bottom, myr.right+1, myr.top, myr.left+1, myr.bottom);
+            Pie(dc, myr.left, myr.top, myr.right+1, myr.bottom+1, myr.right+1, myr.top, myr.left-1, myr.bottom);
             SelectObject(dc, hbsave);
             SelectObject(dc, hpsave);
         }
@@ -852,7 +833,7 @@
         i= !(uFlags & (DFCS_INACTIVE|DFCS_PUSHED)) ? COLOR_WINDOW : COLOR_BTNFACE;
         hpsave = (HPEN)SelectObject(dc, GetSysColorPen(i));
         hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(i));
-        Pie(dc, myr.left, myr.top, myr.right, myr.bottom, xe, ye, xe, ye);
+        Ellipse(dc, myr.left, myr.top, myr.right, myr.bottom);
         SelectObject(dc, hbsave);
         SelectObject(dc, hpsave);
     }
@@ -869,7 +850,7 @@
         i = uFlags & DFCS_INACTIVE ? COLOR_BTNSHADOW : COLOR_WINDOWTEXT;
         hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(i));
         hpsave = (HPEN)SelectObject(dc, GetSysColorPen(i));
-        Pie(dc, myr.left, myr.top, myr.right, myr.bottom, xe, ye, xe, ye);
+        Ellipse(dc, myr.left, myr.top, myr.right, myr.bottom);
         SelectObject(dc, hpsave);
         SelectObject(dc, hbsave);
     }