- Fix some indentation problems.
- Handle correctly the alignement of the checkboxes if the
  BS_TOP/BS_BOTTOM flags are set.

diff --git a/controls/button.c b/controls/button.c
index d4fac46..a38445b 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -862,6 +862,12 @@
         rbox.right = checkBoxWidth;
     }
 
+    /* Draw label */
+    client = rtext;
+    dtFlags = BUTTON_CalcLabelRect(hwnd, hDC, &rtext);
+    
+    rbox.top = rtext.top;
+    rbox.bottom = rtext.bottom;
     /* Draw the check-box bitmap */
     if (action == ODA_DRAWENTIRE || action == ODA_SELECT)
     {
@@ -871,29 +877,29 @@
 
         if( TWEAK_WineLook == WIN31_LOOK )
         {
-        HDC hMemDC = CreateCompatibleDC( hDC );
-        int x = 0, y = 0;
-        delta = (rbox.bottom - rbox.top - checkBoxHeight) / 2;
-
-	/* Check in case the client area is smaller than the checkbox bitmap */
-	if (delta < 0) delta = 0;
-
-        if (state & BUTTON_HIGHLIGHTED) x += 2 * checkBoxWidth;
-        if (state & (BUTTON_CHECKED | BUTTON_3STATE)) x += checkBoxWidth;
-        if ((get_button_type(style) == BS_RADIOBUTTON) ||
-            (get_button_type(style) == BS_AUTORADIOBUTTON)) y += checkBoxHeight;
-        else if (state & BUTTON_3STATE) y += 2 * checkBoxHeight;
-
-	/* The bitmap for the radio button is not aligned with the
-	 * left of the window, it is 1 pixel off. */
-        if ((get_button_type(style) == BS_RADIOBUTTON) ||
-            (get_button_type(style) == BS_AUTORADIOBUTTON))
-	  rbox.left += 1;
-
-	SelectObject( hMemDC, hbitmapCheckBoxes );
-	BitBlt( hDC, rbox.left, rbox.top + delta, checkBoxWidth,
-		  checkBoxHeight, hMemDC, x, y, SRCCOPY );
-	DeleteDC( hMemDC );
+	    HDC hMemDC = CreateCompatibleDC( hDC );
+	    int x = 0, y = 0;
+	    delta = (rbox.bottom - rbox.top - checkBoxHeight) / 2;
+	    
+	    /* Check in case the client area is smaller than the checkbox bitmap */
+	    if (delta < 0) delta = 0;
+	    
+	    if (state & BUTTON_HIGHLIGHTED) x += 2 * checkBoxWidth;
+	    if (state & (BUTTON_CHECKED | BUTTON_3STATE)) x += checkBoxWidth;
+	    if ((get_button_type(style) == BS_RADIOBUTTON) ||
+		(get_button_type(style) == BS_AUTORADIOBUTTON)) y += checkBoxHeight;
+	    else if (state & BUTTON_3STATE) y += 2 * checkBoxHeight;
+	    
+	    /* The bitmap for the radio button is not aligned with the
+	     * left of the window, it is 1 pixel off. */
+	    if ((get_button_type(style) == BS_RADIOBUTTON) ||
+		(get_button_type(style) == BS_AUTORADIOBUTTON))
+	      rbox.left += 1;
+	    
+	    SelectObject( hMemDC, hbitmapCheckBoxes );
+	    BitBlt( hDC, rbox.left, rbox.top + delta, checkBoxWidth,
+		    checkBoxHeight, hMemDC, x, y, SRCCOPY );
+	    DeleteDC( hMemDC );
         }
         else
         {
@@ -910,28 +916,41 @@
 	    if (style & WS_DISABLED) flags |= 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;
+	    delta = rbox.bottom - rbox.top - checkBoxHeight;
+	    
+	    if (style & BS_TOP) {
+	      if (delta > 0) {
 		rbox.bottom = rbox.top + checkBoxHeight;
+	      } else {
+		rbox.top -= -delta/2 + 1;
+		rbox.bottom += rbox.top + checkBoxHeight;
+	      }
+	    } else if (style & BS_BOTTOM) {
+	      if (delta > 0) {
+		rbox.top = rbox.bottom - checkBoxHeight;
+	      } else {
+		rbox.bottom += -delta/2 + 1;
+		rbox.top = rbox.bottom -= checkBoxHeight;
+	      }
+	    } else { /* Default */
+	      if (delta > 0)
+		{
+		  int ofs = (delta / 2);
+		  rbox.bottom -= ofs + 1;
+		  rbox.top = rbox.bottom - checkBoxHeight;
+		}
+	      else if (delta < 0)
+		{
+		  int ofs = (-delta / 2);
+		  rbox.top -= ofs + 1;
+		  rbox.bottom = rbox.top + checkBoxHeight;
+		}
 	    }
 
 	    DrawFrameControl( hDC, &rbox, DFC_BUTTON, flags );
         }
     }
 
-    /* Draw label */
-    client = rtext;
-    dtFlags = BUTTON_CalcLabelRect(hwnd, hDC, &rtext);
-
     if (dtFlags == (UINT)-1L) /* Noting to draw */
 	return;
     hRgn = CreateRectRgn(client.left, client.top, client.right, client.bottom);