Only redraw the necessary area of the tab component and not the whole

component like windows does.
oldstable
Maxime Bellengé 2003-10-14 20:12:05 +00:00 committed by Alexandre Julliard
parent 47d64a0459
commit 8147ee1095
1 changed files with 6 additions and 1 deletions

View File

@ -2334,36 +2334,41 @@ static void TAB_InvalidateTabArea(
RECT clientRect, r; RECT clientRect, r;
DWORD lStyle = GetWindowLongA(hwnd, GWL_STYLE); DWORD lStyle = GetWindowLongA(hwnd, GWL_STYLE);
INT lastRow = infoPtr->uNumRows - 1; INT lastRow = infoPtr->uNumRows - 1;
RECT rect;
if (lastRow < 0) return; if (lastRow < 0) return;
GetClientRect(hwnd, &clientRect); GetClientRect(hwnd, &clientRect);
TAB_InternalGetItemRect(hwnd, infoPtr, infoPtr->uNumItem-1 , &rect, NULL);
if ((lStyle & TCS_BOTTOM) && !(lStyle & TCS_VERTICAL)) if ((lStyle & TCS_BOTTOM) && !(lStyle & TCS_VERTICAL))
{ {
clientRect.top = clientRect.bottom - clientRect.top = clientRect.bottom -
infoPtr->tabHeight - infoPtr->tabHeight -
lastRow * (infoPtr->tabHeight - 2) - lastRow * (infoPtr->tabHeight - 2) -
((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) - 3; ((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) - 3;
clientRect.right = clientRect.left + rect.right + 2 * SELECTED_TAB_OFFSET;
} }
else if((lStyle & TCS_BOTTOM) && (lStyle & TCS_VERTICAL)) else if((lStyle & TCS_BOTTOM) && (lStyle & TCS_VERTICAL))
{ {
clientRect.left = clientRect.right - infoPtr->tabHeight - clientRect.left = clientRect.right - infoPtr->tabHeight -
lastRow * (infoPtr->tabHeight - 2) - lastRow * (infoPtr->tabHeight - 2) -
((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) - 2; ((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) - 2;
clientRect.bottom = clientRect.top + rect.bottom + 2 * SELECTED_TAB_OFFSET;
} }
else if(lStyle & TCS_VERTICAL) else if(lStyle & TCS_VERTICAL)
{ {
clientRect.right = clientRect.left + infoPtr->tabHeight + clientRect.right = clientRect.left + infoPtr->tabHeight +
lastRow * (infoPtr->tabHeight - 2) - lastRow * (infoPtr->tabHeight - 2) -
((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) + 2; ((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) + 2;
clientRect.bottom = clientRect.top + rect.bottom + 2 * SELECTED_TAB_OFFSET;
} }
else else
{ {
clientRect.bottom = clientRect.top + infoPtr->tabHeight + clientRect.bottom = clientRect.top + infoPtr->tabHeight +
lastRow * (infoPtr->tabHeight - 2) + lastRow * (infoPtr->tabHeight - 2) +
((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) + 2; ((lStyle & TCS_BUTTONS) ? lastRow * BUTTON_SPACINGY : 0) + 2;
clientRect.right = clientRect.left + rect.right + 2 * SELECTED_TAB_OFFSET;
} }
/* Punch out the updown control */ /* Punch out the updown control */