From bcd12226505bd82cc0533dcd81ee4ec7eeae3e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Belleng=C3=A9?= <maxime.bellenge@laposte.net> Date: Tue, 2 Sep 2003 00:56:43 +0000 Subject: [PATCH] Implemented TAB_SetMinTabWidth and TAB_HighlightItem. --- dlls/comctl32/tab.c | 49 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index 48130fae02e..3b0fcf2a905 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -58,6 +58,7 @@ typedef struct UINT uNumRows; /* number of tab rows */ INT tabHeight; /* height of the tab row */ INT tabWidth; /* width of tabs */ + INT tabMinWidth; /* minimum width of items */ USHORT uHItemPadding; /* amount of horizontal padding, in pixels */ USHORT uVItemPadding; /* amount of vertical padding, in pixels */ HFONT hFont; /* handle to the current font */ @@ -1485,7 +1486,7 @@ TAB_DrawItemInterior holdPen = SelectObject(hdc, htextPen); oldBkMode = SetBkMode(hdc, TRANSPARENT); - SetTextColor(hdc, (iItem == infoPtr->iHotTracked) ? + SetTextColor(hdc, ( (iItem == infoPtr->iHotTracked) | (infoPtr->items[iItem].dwState & TCIS_HIGHLIGHTED)) ? comctl32_color.clrHighlight : comctl32_color.clrBtnText); @@ -1562,7 +1563,7 @@ TAB_DrawItemInterior * Setup for text output */ oldBkMode = SetBkMode(hdc, TRANSPARENT); - SetTextColor(hdc, (iItem == infoPtr->iHotTracked) ? + SetTextColor(hdc, ((iItem == infoPtr->iHotTracked) | (infoPtr->items[iItem].dwState & TCIS_HIGHLIGHTED))? comctl32_color.clrHighlight : comctl32_color.clrBtnText); /* get the rectangle that the text fits in */ @@ -2557,7 +2558,7 @@ TAB_SetItemSize (HWND hwnd, WPARAM wParam, LPARAM lParam) { lResult = MAKELONG(infoPtr->tabWidth, infoPtr->tabHeight); /* UNDOCUMENTED: If requested Width or Height is 0 this means that program wants to use default. */ - if (LOWORD(lParam)) infoPtr->tabWidth = (INT)LOWORD(lParam); + if (LOWORD(lParam)) infoPtr->tabWidth = max((INT)LOWORD(lParam), infoPtr->tabMinWidth); if (HIWORD(lParam)) infoPtr->tabHeight = (INT)HIWORD(lParam); TRACE("was h=%d,w=%d, now h=%d,w=%d\n", HIWORD(lResult), LOWORD(lResult), @@ -2568,6 +2569,40 @@ TAB_SetItemSize (HWND hwnd, WPARAM wParam, LPARAM lParam) return lResult; } +static LRESULT +TAB_SetMinTabWidth (HWND hwnd, LPARAM lParam) +{ + TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); + INT cx = (INT)lParam; + INT oldcx; + + if (infoPtr) { + oldcx = infoPtr->tabMinWidth; + infoPtr->tabMinWidth = (cx==-1)?DEFAULT_TAB_WIDTH:cx; + } else + return 0; + + return oldcx; +} + +static LRESULT +TAB_HighlightItem (HWND hwnd, WPARAM wParam, LPARAM lParam) +{ + TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); + INT iItem = (INT)wParam; + BOOL fHighlight = (BOOL)LOWORD(lParam); + + if ((infoPtr) && (iItem>=0) && (iItem<infoPtr->uNumItem)) { + if (fHighlight) + infoPtr->items[iItem].dwState |= TCIS_HIGHLIGHTED; + else + infoPtr->items[iItem].dwState &= ~TCIS_HIGHLIGHTED; + } else + return FALSE; + + return TRUE; +} + static LRESULT TAB_SetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) { @@ -2979,6 +3014,8 @@ TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam) /* Initialize the width of a tab. */ infoPtr->tabWidth = DEFAULT_TAB_WIDTH; + /* The minimum width is the default width at creation */ + infoPtr->tabMinWidth = DEFAULT_TAB_WIDTH; TRACE("tabH=%d, tabW=%d\n", infoPtr->tabHeight, infoPtr->tabWidth); @@ -3101,8 +3138,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return TAB_SetUnicodeFormat (hwnd, wParam); case TCM_HIGHLIGHTITEM: - FIXME("Unimplemented msg TCM_HIGHLIGHTITEM\n"); - return 0; + return TAB_HighlightItem (hwnd, wParam, lParam); case TCM_GETTOOLTIPS: return TAB_GetToolTips (hwnd, wParam, lParam); @@ -3117,8 +3153,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return TAB_SetCurFocus (hwnd, wParam); case TCM_SETMINTABWIDTH: - FIXME("Unimplemented msg TCM_SETMINTABWIDTH\n"); - return 0; + return TAB_SetMinTabWidth(hwnd, lParam); case TCM_DESELECTALL: FIXME("Unimplemented msg TCM_DESELECTALL\n"); -- GitLab