- Factor out common text shifting logic.
- Shift selected tab text up instead of down.

diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index b41b59c..d8dabc7 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -1727,14 +1727,20 @@
       else
         drawRect->bottom-=center_offset_h;
 
-      center_offset_v = ((drawRect->right - drawRect->left) - (rcText.bottom - rcText.top) + infoPtr->uVItemPadding) / 2;
+      center_offset_v = ((drawRect->right - drawRect->left) - (rcText.bottom - rcText.top)) / 2;
     }
     else
     {
       drawRect->left += center_offset_h;
-      center_offset_v = ((drawRect->bottom - drawRect->top) - (rcText.bottom - rcText.top) + infoPtr->uVItemPadding) / 2;
+      center_offset_v = ((drawRect->bottom - drawRect->top) - (rcText.bottom - rcText.top)) / 2;
     }
 
+    /* if an item is selected, the text is shifted up instead of down */
+    if (iItem == infoPtr->iSelected)
+        center_offset_v -= infoPtr->uVItemPadding / 2;
+    else
+        center_offset_v += infoPtr->uVItemPadding / 2;
+
     if (center_offset_v < 0)
       center_offset_v = 0;