Changeset 10098 for trunk/src/comctl32/tab.c
- Timestamp:
- May 15, 2003, 4:26:27 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/tab.c
r9469 r10098 59 59 INT tabHeight; /* height of the tab row */ 60 60 INT tabWidth; /* width of tabs */ 61 USHORT uHItemPadding; /* amount of horizontal padding, in pixels */ 62 USHORT uVItemPadding; /* amount of vertical padding, in pixels */ 61 63 HFONT hFont; /* handle to the current font */ 62 64 HCURSOR hcurArrow; /* handle to the current cursor */ … … 81 83 */ 82 84 #define SELECTED_TAB_OFFSET 2 83 #define HORIZONTAL_ITEM_PADDING 684 #define VERTICAL_ITEM_PADDING 385 85 #define ROUND_CORNER_SIZE 2 86 86 #define DISPLAY_AREA_PADDINGX 2 … … 173 173 iItem, ti->mask, ti->dwState, debugstr_w(ti->pszText), 174 174 ti->iImage); 175 TRACE("tab %d, lParam=0x%08lx, rect.left=% d, rect.top(row)=%d\n",175 TRACE("tab %d, lParam=0x%08lx, rect.left=%ld, rect.top(row)=%ld\n", 176 176 iItem, ti->lParam, ti->rect.left, ti->rect.top); 177 177 } … … 259 259 } 260 260 261 static LRESULT 262 TAB_SetPadding (HWND hwnd, WPARAM wParam, LPARAM lParam) 263 { 264 TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); 265 266 if (infoPtr == NULL) return 0; 267 infoPtr->uHItemPadding=LOWORD(lParam); 268 infoPtr->uVItemPadding=HIWORD(lParam); 269 return 0; 270 } 271 261 272 /****************************************************************************** 262 273 * TAB_InternalGetItemRect … … 367 378 0); 368 379 } 369 TRACE("item %d tab h=%d, rect=(% d,%d)-(%d,%d)\n",380 TRACE("item %d tab h=%d, rect=(%ld,%ld)-(%ld,%ld)\n", 370 381 itemIndex, infoPtr->tabHeight, 371 382 itemRect->left, itemRect->top, itemRect->right, itemRect->bottom); … … 488 499 if (isVisible) 489 500 { 490 TRACE("invalidate (% d,%d)-(%d,%d)\n",501 TRACE("invalidate (%ld,%ld)-(%ld,%ld)\n", 491 502 selectedRect.left,selectedRect.top, 492 503 selectedRect.right,selectedRect.bottom); … … 987 998 controlPos.bottom - controlPos.top, 988 999 hwnd, 989 (HMENU)NULL,990 (HINSTANCE)NULL,1000 NULL, 1001 NULL, 991 1002 NULL); 992 1003 } … … 994 1005 { 995 1006 SetWindowPos(infoPtr->hwndUpDown, 996 (HWND)NULL,1007 NULL, 997 1008 controlPos.left, controlPos.top, 998 1009 controlPos.right - controlPos.left, … … 1100 1111 /* Take the highest between font or icon */ 1101 1112 if (fontMetrics.tmHeight > icon_height) 1102 item_height = fontMetrics.tmHeight ;1113 item_height = fontMetrics.tmHeight + 2; 1103 1114 else 1104 1115 item_height = icon_height; … … 1108 1119 * selected item + extra space for the selected item. 1109 1120 */ 1110 #ifdef __WIN32OS2__1111 //Code below doesn't always work1112 infoPtr->tabHeight = item_height + 2 * VERTICAL_ITEM_PADDING +1113 SELECTED_TAB_OFFSET;1114 #else1115 1121 infoPtr->tabHeight = item_height + SELECTED_TAB_OFFSET + 1116 1122 ((lStyle & TCS_BUTTONS) ? 2 : 1) * 1117 VERTICAL_ITEM_PADDING;1118 #endif 1123 infoPtr->uVItemPadding; 1124 1119 1125 TRACE("tabH=%d, tmH=%ld, iconh=%d\n", 1120 1126 infoPtr->tabHeight, fontMetrics.tmHeight, icon_height); 1121 1127 } 1122 1128 1123 TRACE("client right=% d\n", clientRect.right);1129 TRACE("client right=%ld\n", clientRect.right); 1124 1130 1125 1131 for (curItem = 0; curItem < infoPtr->uNumItem; curItem++) … … 1132 1138 infoPtr->items[curItem].rect.right = infoPtr->items[curItem].rect.left + 1133 1139 infoPtr->tabWidth + 1134 2 * HORIZONTAL_ITEM_PADDING;1140 2 * infoPtr->uHItemPadding; 1135 1141 } 1136 1142 else … … 1157 1163 infoPtr->items[curItem].rect.right = infoPtr->items[curItem].rect.left + 1158 1164 size.cx + icon_width + 1159 num * HORIZONTAL_ITEM_PADDING;1160 TRACE("for <%s>, l,r=% d,%d, num=%d\n",1165 num * infoPtr->uHItemPadding; 1166 TRACE("for <%s>, l,r=%ld,%ld, num=%d\n", 1161 1167 debugstr_w(infoPtr->items[curItem].pszText), 1162 1168 infoPtr->items[curItem].rect.left, … … 1182 1188 infoPtr->items[curItem].rect.left = 0; 1183 1189 curItemRowCount++; 1184 TRACE("wrapping <%s>, l,r=% d,%d\n",1190 TRACE("wrapping <%s>, l,r=%ld,%ld\n", 1185 1191 debugstr_w(infoPtr->items[curItem].pszText), 1186 1192 infoPtr->items[curItem].rect.left, … … 1192 1198 1193 1199 TRACE("TextSize: %li\n", size.cx); 1194 TRACE("Rect: T % i, L %i, B %i, R %i\n",1200 TRACE("Rect: T %li, L %li, B %li, R %li\n", 1195 1201 infoPtr->items[curItem].rect.top, 1196 1202 infoPtr->items[curItem].rect.left, … … 1256 1262 infoPtr->items[iItm].rect.left = 0; 1257 1263 1258 TRACE("r=% d, cl=%d, cl.r=%d, iCount=%d, iRow=%d, uNumRows=%d, remTab=%d, tabPerRow=%d\n",1264 TRACE("r=%ld, cl=%d, cl.r=%ld, iCount=%d, iRow=%d, uNumRows=%d, remTab=%d, tabPerRow=%d\n", 1259 1265 infoPtr->items[iItm].rect.right, 1260 1266 curItemLeftPos, clientRect.right, … … 1305 1311 curItemLeftPos = infoPtr->items[iItm].rect.right; 1306 1312 1307 TRACE("arranging <%s>, l,r=% d,%d, row=%d\n",1313 TRACE("arranging <%s>, l,r=%ld,%ld, row=%ld\n", 1308 1314 debugstr_w(infoPtr->items[iItm].pszText), 1309 1315 infoPtr->items[iItm].rect.left, … … 1353 1359 infoPtr->items[iIndex].rect.right += (iCount + 1) * widthDiff; 1354 1360 1355 TRACE("adjusting 1 <%s>, l,r=% d,%d\n",1361 TRACE("adjusting 1 <%s>, l,r=%ld,%ld\n", 1356 1362 debugstr_w(infoPtr->items[iIndex].pszText), 1357 1363 infoPtr->items[iIndex].rect.left, … … 1366 1372 infoPtr->items[iIndexStart].rect.right = clientRect.right - 4; 1367 1373 1368 TRACE("adjusting 2 <%s>, l,r=% d,%d\n",1374 TRACE("adjusting 2 <%s>, l,r=%ld,%ld\n", 1369 1375 debugstr_w(infoPtr->items[iIndexStart].pszText), 1370 1376 infoPtr->items[iIndexStart].rect.left, … … 1483 1489 comctl32_color.clrHighlight : comctl32_color.clrBtnText); 1484 1490 1485 /*1486 * Deflate the rectangle to acount for the padding1487 */1488 if(lStyle & TCS_VERTICAL)1489 InflateRect(drawRect, -VERTICAL_ITEM_PADDING, -HORIZONTAL_ITEM_PADDING);1490 else1491 InflateRect(drawRect, -HORIZONTAL_ITEM_PADDING, -VERTICAL_ITEM_PADDING);1492 1493 1491 1494 1492 /* … … 1512 1510 dis.itemID = iItem; 1513 1511 dis.itemAction = ODA_DRAWENTIRE; 1512 dis.itemState = 0; 1514 1513 if ( iItem == infoPtr->iSelected ) 1515 dis.itemState = ODS_SELECTED;1516 else1517 dis.itemState = 0;1514 dis.itemState |= ODS_SELECTED; 1515 if (infoPtr->uFocus == iItem) 1516 dis.itemState |= ODS_FOCUS; 1518 1517 dis.hwndItem = hwnd; /* */ 1519 1518 dis.hDC = hdc; 1520 dis.rcItem = *drawRect; /* */1519 CopyRect(&dis.rcItem,drawRect); 1521 1520 dis.itemData = infoPtr->items[iItem].lParam; 1522 1521 … … 1544 1543 RECT rcText; 1545 1544 INT center_offset; 1545 1546 /* 1547 * Deflate the rectangle to acount for the padding 1548 */ 1549 if(lStyle & TCS_VERTICAL) 1550 InflateRect(drawRect, -infoPtr->uVItemPadding, -infoPtr->uHItemPadding); 1551 else 1552 InflateRect(drawRect, -infoPtr->uHItemPadding, -infoPtr->uVItemPadding); 1546 1553 1547 1554 /* set rcImage to drawRect, we will use top & left in our ImageList_Draw call */ … … 1573 1580 1574 1581 if(lStyle & TCS_VERTICAL) 1575 center_offset = ((drawRect->bottom - drawRect->top) - (cy + HORIZONTAL_ITEM_PADDING+ (rcText.right - rcText.left))) / 2;1582 center_offset = ((drawRect->bottom - drawRect->top) - (cy + infoPtr->uHItemPadding + (rcText.right - rcText.left))) / 2; 1576 1583 else 1577 center_offset = ((drawRect->right - drawRect->left) - (cx + HORIZONTAL_ITEM_PADDING+ (rcText.right - rcText.left))) / 2;1578 1579 TRACE("for <%s>, c_o=%d, draw=(% d,%d)-(%d,%d), textlen=%d\n",1584 center_offset = ((drawRect->right - drawRect->left) - (cx + infoPtr->uHItemPadding + (rcText.right - rcText.left))) / 2; 1585 1586 TRACE("for <%s>, c_o=%d, draw=(%ld,%ld)-(%ld,%ld), textlen=%ld\n", 1580 1587 debugstr_w(infoPtr->items[iItem].pszText), center_offset, 1581 1588 drawRect->left, drawRect->top, drawRect->right, drawRect->bottom, … … 1588 1595 /* right side of the tab, but the image still uses the left as its x position */ 1589 1596 /* this keeps the image always drawn off of the same side of the tab */ 1590 drawRect->top = rcImage.top + (cx + HORIZONTAL_ITEM_PADDING);1597 drawRect->top = rcImage.top + (cx + infoPtr->uHItemPadding); 1591 1598 } 1592 1599 else if(lStyle & TCS_VERTICAL) … … 1594 1601 rcImage.top = drawRect->bottom - cy - center_offset; 1595 1602 rcImage.left--; 1596 drawRect->bottom = rcImage.top - HORIZONTAL_ITEM_PADDING;1603 drawRect->bottom = rcImage.top - infoPtr->uHItemPadding; 1597 1604 } 1598 1605 else /* normal style, whether TCS_BOTTOM or not */ 1599 1606 { 1600 1607 rcImage.left = drawRect->left + center_offset + 3; 1601 drawRect->left = rcImage.left + cx + HORIZONTAL_ITEM_PADDING;1608 drawRect->left = rcImage.left + cx + infoPtr->uHItemPadding; 1602 1609 rcImage.top -= (lStyle & TCS_BOTTOM) ? 2 : 1; 1603 1610 } 1604 1611 1605 TRACE("drawing image=%d, left=% d, top=%d\n",1612 TRACE("drawing image=%d, left=%ld, top=%ld\n", 1606 1613 infoPtr->items[iItem].iImage, rcImage.left, rcImage.top-1); 1607 1614 ImageList_Draw … … 1861 1868 r.left += (1-ZZ); 1862 1869 1863 TRACE("<left> item=%d, fill=(% d,%d)-(%d,%d), edge=(%d,%d)-(%d,%d)\n",1870 TRACE("<left> item=%d, fill=(%ld,%ld)-(%ld,%ld), edge=(%ld,%ld)-(%ld,%ld)\n", 1864 1871 iItem, 1865 1872 fillRect.left,fillRect.top,fillRect.right,fillRect.bottom, … … 1905 1912 fillRect.right += (1-ZZ); 1906 1913 1907 TRACE("<left> item=%d, fill=(% d,%d)-(%d,%d), edge=(%d,%d)-(%d,%d)\n",1914 TRACE("<left> item=%d, fill=(%ld,%ld)-(%ld,%ld), edge=(%ld,%ld)-(%ld,%ld)\n", 1908 1915 iItem, 1909 1916 fillRect.left,fillRect.top,fillRect.right,fillRect.bottom, … … 1962 1969 r.top -= ZZ; 1963 1970 1964 TRACE("<bottom> item=%d, fill=(% d,%d)-(%d,%d), edge=(%d,%d)-(%d,%d)\n",1971 TRACE("<bottom> item=%d, fill=(%ld,%ld)-(%ld,%ld), edge=(%ld,%ld)-(%ld,%ld)\n", 1965 1972 iItem, 1966 1973 fillRect.left,fillRect.top,fillRect.right,fillRect.bottom, … … 2007 2014 fillRect.bottom += (1-ZZ); 2008 2015 2009 TRACE("<top> item=%d, fill=(% d,%d)-(%d,%d), edge=(%d,%d)-(%d,%d)\n",2016 TRACE("<top> item=%d, fill=(%ld,%ld)-(%ld,%ld), edge=(%ld,%ld)-(%ld,%ld)\n", 2010 2017 iItem, 2011 2018 fillRect.left,fillRect.top,fillRect.right,fillRect.bottom, … … 2102 2109 } 2103 2110 2104 TRACE("border=(% d,%d)-(%d,%d)\n",2111 TRACE("border=(%ld,%ld)-(%ld,%ld)\n", 2105 2112 rect.left, rect.top, rect.right, rect.bottom); 2106 2113 … … 2319 2326 TAB_INFO* infoPtr) 2320 2327 { 2321 RECT clientRect ;2328 RECT clientRect, r; 2322 2329 DWORD lStyle = GetWindowLongA(hwnd, GWL_STYLE); 2323 2330 INT lastRow = infoPtr->uNumRows - 1; … … 2353 2360 ((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) + 2; 2354 2361 } 2355 2356 TRACE("invalidate (%d,%d)-(%d,%d)\n", 2362 2363 /* Punch out the updown control */ 2364 if (infoPtr->needsScrolling && (clientRect.right > 0)) { 2365 GetClientRect(infoPtr->hwndUpDown, &r); 2366 clientRect.right = clientRect.right - (r.right - r.left); 2367 } 2368 2369 TRACE("invalidate (%ld,%ld)-(%ld,%ld)\n", 2357 2370 clientRect.left,clientRect.top, 2358 2371 clientRect.right,clientRect.bottom); 2372 2359 2373 InvalidateRect(hwnd, &clientRect, TRUE); 2360 2374 } … … 2368 2382 hdc = wParam== 0 ? BeginPaint (hwnd, &ps) : (HDC)wParam; 2369 2383 2370 TRACE("erase %d, rect=(% d,%d)-(%d,%d)\n",2384 TRACE("erase %d, rect=(%ld,%ld)-(%ld,%ld)\n", 2371 2385 ps.fErase, 2372 2386 ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom); … … 2392 2406 2393 2407 GetClientRect (hwnd, &rect); 2394 TRACE("Rect: %p T % i, L %i, B %i, R %i\n", hwnd,2408 TRACE("Rect: %p T %li, L %li, B %li, R %li\n", hwnd, 2395 2409 rect.top, rect.left, rect.bottom, rect.right); 2396 2410 … … 2467 2481 2468 2482 GetClientRect (hwnd, &rect); 2469 TRACE("Rect: %p T % i, L %i, B %i, R %i\n", hwnd,2483 TRACE("Rect: %p T %li, L %li, B %li, R %li\n", hwnd, 2470 2484 rect.top, rect.left, rect.bottom, rect.right); 2471 2485 … … 2543 2557 { 2544 2558 lResult = MAKELONG(infoPtr->tabWidth, infoPtr->tabHeight); 2545 infoPtr->tabWidth = (INT)LOWORD(lParam); 2546 infoPtr->tabHeight = (INT)HIWORD(lParam); 2559 /* UNDOCUMENTED: If requested Width or Height is 0 this means that program wants to use default. */ 2560 if (LOWORD(lParam)) infoPtr->tabWidth = (INT)LOWORD(lParam); 2561 if (HIWORD(lParam)) infoPtr->tabHeight = (INT)HIWORD(lParam); 2547 2562 TRACE("was h=%d,w=%d, now h=%d,w=%d\n", 2548 2563 HIWORD(lResult), LOWORD(lResult), … … 2899 2914 infoPtr->uNumItem = 0; 2900 2915 infoPtr->uNumRows = 0; 2916 infoPtr->uHItemPadding = 6; 2917 infoPtr->uVItemPadding = 3; 2901 2918 infoPtr->hFont = 0; 2902 2919 infoPtr->items = 0; … … 2959 2976 infoPtr->tabHeight = fontMetrics.tmHeight + SELECTED_TAB_OFFSET + 2960 2977 ((dwStyle & TCS_BUTTONS) ? 2 : 1) * 2961 VERTICAL_ITEM_PADDING;2978 infoPtr->uVItemPadding; 2962 2979 2963 2980 /* Initialize the width of a tab. */ … … 3073 3090 3074 3091 case TCM_SETPADDING: 3075 FIXME("Unimplemented msg TCM_SETPADDING\n"); 3076 return 0; 3092 return TAB_SetPadding (hwnd, wParam, lParam); 3077 3093 3078 3094 case TCM_GETROWCOUNT: … … 3202 3218 wndClass.cbWndExtra = sizeof(TAB_INFO *); 3203 3219 wndClass.hCursor = LoadCursorA (0, IDC_ARROWA); 3204 wndClass.hbrBackground = (HBRUSH)NULL;3220 wndClass.hbrBackground = NULL; 3205 3221 wndClass.lpszClassName = WC_TABCONTROLA; 3206 3222 … … 3212 3228 TAB_Unregister (void) 3213 3229 { 3214 UnregisterClassA (WC_TABCONTROLA, (HINSTANCE)NULL);3215 } 3230 UnregisterClassA (WC_TABCONTROLA, NULL); 3231 }
Note:
See TracChangeset
for help on using the changeset viewer.