fix text align when using HBMMENU_CALLBACK (patch by Brezenbak) Modified: trunk/reactos/lib/user32/windows/menu.c Modified: trunk/reactos/subsys/win32k/ntuser/menu.c _____
Modified: trunk/reactos/lib/user32/windows/menu.c --- trunk/reactos/lib/user32/windows/menu.c 2006-01-16 23:00:38 UTC (rev 20924) +++ trunk/reactos/lib/user32/windows/menu.c 2006-01-16 23:20:11 UTC (rev 20925) @@ -63,6 +63,7 @@
#define IS_MAGIC_ITEM(Bmp) ((int) Bmp <12)
+#define MENU_ITEM_HBMP_SPACE (5) #define MENU_BAR_ITEMS_SPACE (12) #define SEPARATOR_HEIGHT (5) #define MENU_TAB_SPACE (8) @@ -763,6 +764,11 @@ Rect.left += MENU_BAR_ITEMS_SPACE / 2; Rect.right -= MENU_BAR_ITEMS_SPACE / 2; } + if (Item->hbmpItem == HBMMENU_CALLBACK || MenuInfo->maxBmpSize.cx != 0 ) + { + Rect.left += MenuInfo->maxBmpSize.cx; + Rect.right -= MenuInfo->maxBmpSize.cx; + }
Text = (PWCHAR) Item->dwTypeData; for (i = 0; L'\0' != Text[i]; i++) @@ -784,7 +790,6 @@ } SetTextColor(Dc, RGB(0x80, 0x80, 0x80)); } - DrawTextW(Dc, Text, i, &Rect, uFormat);
/* paint the shortcut text */ @@ -1130,7 +1135,7 @@ * Calculate the size of the menu item and store it in ItemInfo->rect. */ static void FASTCALL -MenuCalcItemSize(HDC Dc, PROSMENUITEMINFO ItemInfo, HWND WndOwner, +MenuCalcItemSize(HDC Dc, PROSMENUITEMINFO ItemInfo, PROSMENUINFO MenuInfo, HWND WndOwner, INT OrgX, INT OrgY, BOOL MenuBar) { PWCHAR p; @@ -1203,7 +1208,14 @@ measItem.itemData = ItemInfo->dwItemData; SendMessageW( WndOwner, WM_MEASUREITEM, ItemInfo->wID, (LPARAM)&measItem); ItemInfo->Rect.right = ItemInfo->Rect.left + measItem.itemWidth; - } + if (MenuInfo->maxBmpSize.cx < abs(measItem.itemWidth) + MENU_ITEM_HBMP_SPACE || + MenuInfo->maxBmpSize.cy < abs(measItem.itemHeight)) + { + MenuInfo->maxBmpSize.cx = abs(measItem.itemWidth) + MENU_ITEM_HBMP_SPACE; + MenuInfo->maxBmpSize.cy = abs(measItem.itemHeight); + MenuSetRosMenuInfo(MenuInfo); + } + } else { SIZE Size; @@ -1320,7 +1332,7 @@ break; }
- MenuCalcItemSize(Dc, &ItemInfo, WndOwner, OrgX, OrgY, FALSE); + MenuCalcItemSize(Dc, &ItemInfo, MenuInfo, WndOwner, OrgX, OrgY, FALSE); if (! MenuSetRosMenuItemInfo(MenuInfo->Self, i, &ItemInfo)) { MenuCleanupRosMenuItemInfo(&ItemInfo); @@ -1426,7 +1438,7 @@ }
DPRINT("calling MENU_CalcItemSize org=(%d, %d)\n", OrgX, OrgY); - MenuCalcItemSize(Dc, &ItemInfo, WndOwner, OrgX, OrgY, TRUE); + MenuCalcItemSize(Dc, &ItemInfo, MenuInfo, WndOwner, OrgX, OrgY, TRUE); if (! MenuSetRosMenuItemInfo(MenuInfo->Self, i, &ItemInfo)) { MenuCleanupRosMenuItemInfo(&ItemInfo); _____
Modified: trunk/reactos/subsys/win32k/ntuser/menu.c --- trunk/reactos/subsys/win32k/ntuser/menu.c 2006-01-16 23:00:38 UTC (rev 20924) +++ trunk/reactos/subsys/win32k/ntuser/menu.c 2006-01-16 23:20:11 UTC (rev 20925) @@ -486,7 +486,11 @@
(char *) &Menu->MenuInfo + sizeof(MENUINFO), lpmi->cbSize - sizeof(MENUINFO)); } - + if (sizeof(ROSMENUINFO) == lpmi->cbSize) + { + lpmi->maxBmpSize.cx = Menu->MenuInfo.maxBmpSize.cx; + lpmi->maxBmpSize.cy = Menu->MenuInfo.maxBmpSize.cy; + } return TRUE; }
@@ -530,7 +534,11 @@ Menu->MenuInfo.WndOwner = lpmi->WndOwner; Menu->MenuInfo.TimeToHide = lpmi->TimeToHide; } - + if (sizeof(ROSMENUINFO) == lpmi->cbSize) + { + Menu->MenuInfo.maxBmpSize.cx = lpmi->maxBmpSize.cx; + Menu->MenuInfo.maxBmpSize.cy = lpmi->maxBmpSize.cy; + } return TRUE; }