Rework on missing message TCM_SETPADDING implemented

BiGgUn fbiggun at hotmail.com
Sat Apr 26 14:40:30 CDT 2003


Changelog:
  Implemented message TCM_SETPADDING with the Dimitri's advice.

Index: dlls/comctl32/tab.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/tab.c,v
retrieving revision 1.78
diff -u -r1.78 tab.c
--- dlls/comctl32/tab.c 17 Mar 2003 04:43:26 -0000 1.78
+++ dlls/comctl32/tab.c 26 Apr 2003 19:22:59 -0000
@@ -58,6 +58,8 @@
   UINT       uNumRows;       /* number of tab rows */
   INT        tabHeight;       /* height of the tab row */
   INT        tabWidth;        /* width of tabs */
+  USHORT     uHItemPadding;   /* amount of horizontal padding, in pixels */
+  USHORT     uVItemPadding;   /* amount of vertical padding, in pixels */
   HFONT      hFont;           /* handle to the current font */
   HCURSOR    hcurArrow;       /* handle to the current cursor */
   HIMAGELIST himl;            /* handle to a image list (may be 0) */
@@ -80,8 +82,6 @@
  * Positioning constants
  */
 #define SELECTED_TAB_OFFSET     2
-#define HORIZONTAL_ITEM_PADDING 6
-#define VERTICAL_ITEM_PADDING   3
 #define ROUND_CORNER_SIZE       2
 #define DISPLAY_AREA_PADDINGX   2
 #define DISPLAY_AREA_PADDINGY   2
@@ -258,6 +258,17 @@
     return 0;
 }
 
+static LRESULT
+TAB_SetPadding (HWND hwnd, WPARAM wParam, LPARAM lParam)
+{
+    TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd);
+    
+    if (infoPtr == NULL) return 0;
+    infoPtr->uHItemPadding=LOWORD(lParam);
+    infoPtr->uVItemPadding=HIWORD(lParam);
+    return 0;
+}
+
 /******************************************************************************
  * TAB_InternalGetItemRect
  *
@@ -1109,7 +1120,7 @@
      */
     infoPtr->tabHeight = item_height + SELECTED_TAB_OFFSET +
                   ((lStyle & TCS_BUTTONS) ? 2 : 1) *
-                          VERTICAL_ITEM_PADDING;
+                          infoPtr->uVItemPadding;
 
     TRACE("tabH=%d, tmH=%ld, iconh=%d\n",
    infoPtr->tabHeight, fontMetrics.tmHeight, icon_height);
@@ -1126,7 +1137,7 @@
     {
       infoPtr->items[curItem].rect.right = infoPtr->items[curItem].rect.left +
                                            infoPtr->tabWidth +
-                                           2 * HORIZONTAL_ITEM_PADDING;
+                                           2 * infoPtr->uHItemPadding;
     }
     else
     {
@@ -1151,7 +1162,7 @@
 
       infoPtr->items[curItem].rect.right = infoPtr->items[curItem].rect.left +
                                            size.cx + icon_width +
-                                           num * HORIZONTAL_ITEM_PADDING;
+                                           num * infoPtr->uHItemPadding;
       TRACE("for <%s>, l,r=%ld,%ld, num=%d\n",
    debugstr_w(infoPtr->items[curItem].pszText),
    infoPtr->items[curItem].rect.left,
@@ -1481,9 +1492,9 @@
    * Deflate the rectangle to acount for the padding
    */
   if(lStyle & TCS_VERTICAL)
-    InflateRect(drawRect, -VERTICAL_ITEM_PADDING, -HORIZONTAL_ITEM_PADDING);
+    InflateRect(drawRect, -infoPtr->uVItemPadding, -infoPtr->uHItemPadding);
   else
-    InflateRect(drawRect, -HORIZONTAL_ITEM_PADDING, -VERTICAL_ITEM_PADDING);
+    InflateRect(drawRect, -infoPtr->uHItemPadding, -infoPtr->uVItemPadding);
 
 
   /*
@@ -1567,9 +1578,9 @@
       ImageList_GetIconSize(infoPtr->himl, &cx, &cy);
 
       if(lStyle & TCS_VERTICAL)
-        center_offset = ((drawRect->bottom - drawRect->top) - (cy + HORIZONTAL_ITEM_PADDING + (rcText.right - rcText.left))) / 2;
+        center_offset = ((drawRect->bottom - drawRect->top) - (cy + infoPtr->uHItemPadding + (rcText.right - rcText.left))) / 2;
       else
-        center_offset = ((drawRect->right - drawRect->left) - (cx + HORIZONTAL_ITEM_PADDING + (rcText.right - rcText.left))) / 2;
+        center_offset = ((drawRect->right - drawRect->left) - (cx + infoPtr->uHItemPadding + (rcText.right - rcText.left))) / 2;
 
       TRACE("for <%s>, c_o=%d, draw=(%ld,%ld)-(%ld,%ld), textlen=%ld\n",
    debugstr_w(infoPtr->items[iItem].pszText), center_offset,
@@ -1582,18 +1593,18 @@
         rcImage.left = drawRect->right - cx; /* if tab is TCS_VERTICAL and TCS_BOTTOM, the text is drawn from the */
                                              /* right side of the tab, but the image still uses the left as its x position */
                                              /* this keeps the image always drawn off of the same side of the tab */
-        drawRect->top = rcImage.top + (cx + HORIZONTAL_ITEM_PADDING);
+        drawRect->top = rcImage.top + (cx + infoPtr->uHItemPadding);
       }
       else if(lStyle & TCS_VERTICAL)
       {
         rcImage.top = drawRect->bottom - cy - center_offset;
  rcImage.left--;
-        drawRect->bottom = rcImage.top - HORIZONTAL_ITEM_PADDING;
+        drawRect->bottom = rcImage.top - infoPtr->uHItemPadding;
       }
       else /* normal style, whether TCS_BOTTOM or not */
       {
         rcImage.left = drawRect->left + center_offset + 3;
-        drawRect->left = rcImage.left + cx + HORIZONTAL_ITEM_PADDING;
+        drawRect->left = rcImage.left + cx + infoPtr->uHItemPadding;
  rcImage.top -= (lStyle & TCS_BOTTOM) ? 2 : 1;
       }
 
@@ -2901,6 +2912,8 @@
 
   infoPtr->uNumItem        = 0;
   infoPtr->uNumRows        = 0;
+  infoPtr->uHItemPadding   = 6;
+  infoPtr->uVItemPadding   = 3;
   infoPtr->hFont           = 0;
   infoPtr->items           = 0;
   infoPtr->hcurArrow       = LoadCursorA (0, IDC_ARROWA);
@@ -2961,7 +2974,7 @@
    */
   infoPtr->tabHeight = fontMetrics.tmHeight + SELECTED_TAB_OFFSET +
                 ((dwStyle & TCS_BUTTONS) ? 2 : 1) *
-                        VERTICAL_ITEM_PADDING;
+                        infoPtr->uVItemPadding;
 
   /* Initialize the width of a tab. */
   infoPtr->tabWidth = DEFAULT_TAB_WIDTH;
@@ -3075,8 +3088,7 @@
       return 0;
 
     case TCM_SETPADDING:
-      FIXME("Unimplemented msg TCM_SETPADDING\n");
-      return 0;
+      return TAB_SetPadding (hwnd, wParam, lParam);
 
     case TCM_GETROWCOUNT:
       return TAB_GetRowCount(hwnd);



More information about the wine-patches mailing list