Modify the look of bitmap menu items to match Win95 and Win98
Fix the sunken edge/bitmap overlap in the Win98 look
Introduce an IS_MAGIC_ITEM macro to test if the item is 'magic'

diff --git a/controls/menu.c b/controls/menu.c
index b95877c..5688676 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -132,6 +132,7 @@
 
 #define IS_STRING_ITEM(flags) (MENU_ITEM_TYPE ((flags)) == MF_STRING)
 #define IS_BITMAP_ITEM(flags) (MENU_ITEM_TYPE ((flags)) == MF_BITMAP)
+#define IS_MAGIC_ITEM(text)   (LOWORD((int)text)<12)
 
 #define IS_SYSTEM_MENU(menu)  \
 	(!((menu)->wFlags & MF_POPUP) && (menu)->wFlags & MF_SYSMENU)
@@ -860,7 +861,7 @@
 	HBITMAP resBmp = 0;
 
 	/* Check if there is a magic menu item associated with this item */
-	if((LOWORD((int)lpitem->text))<12)
+	if (IS_MAGIC_ITEM(lpitem->text))
 	{
 	    resBmp = MENU_LoadMagicItem((int)lpitem->text, (lpitem->fType & MF_HILITE),
 					lpitem->dwItemData);
@@ -1203,24 +1204,22 @@
     {
 	if(TWEAK_WineLook == WIN98_LOOK)
 	{
-	    if(menuBar)
+            if(menuBar) {
 		SetTextColor(hdc, GetSysColor(COLOR_MENUTEXT));
-	    else
-	    {
+                SetBkColor(hdc, GetSysColor(COLOR_MENU));
+	    } else {
 		if(lpitem->fState & MF_GRAYED)
 		    SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
 		else
 		    SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
+                SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
 	    }
-	    SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
 	}
 	else /* Not Win98 Look */
 	{
 	    SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
 	    if(!IS_BITMAP_ITEM(lpitem->fType))
 		SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
-	    else
-		SetBkColor(hdc, GetSysColor(COLOR_MENU));
 	}
     }
     else
@@ -1300,7 +1299,9 @@
 
     /* Draw the item text or bitmap */
     if (IS_BITMAP_ITEM(lpitem->fType))
-    {   int top;
+    {
+        int left,top,w,h;
+        DWORD rop;
 
         HBITMAP resBmp = 0;
 
@@ -1310,7 +1311,7 @@
          * Check if there is a magic menu item associated with this item
          * and load the appropriate bitmap
          */
-	if((LOWORD((int)lpitem->text)) < 12)
+	if (IS_MAGIC_ITEM(lpitem->text))
 	{
 	    resBmp = MENU_LoadMagicItem((int)lpitem->text, (lpitem->fState & MF_HILITE),
 					lpitem->dwItemData);
@@ -1326,12 +1327,23 @@
 	    SelectObject(hdcMem,resBmp );
 	
 	    /* handle fontsize > bitmap_height */
-	    top = ((rect.bottom-rect.top)>bm.bmHeight) ? 
-		rect.top+(rect.bottom-rect.top-bm.bmHeight)/2 : rect.top;
-
-	    BitBlt( hdc, rect.left, top, rect.right - rect.left,
-		  rect.bottom - rect.top, hdcMem, 0, 0,
-		  ((lpitem->fState & MF_HILITE) && !((LOWORD((DWORD)lpitem->text)) < 12)) ? NOTSRCCOPY : SRCCOPY );
+            h=rect.bottom - rect.top;
+	    top = (h>bm.bmHeight) ? 
+		rect.top+(h-bm.bmHeight)/2 : rect.top;
+            w=rect.right - rect.left;
+            left=rect.left;
+            if (TWEAK_WineLook == WIN95_LOOK) {
+                rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text)) ? NOTSRCCOPY : SRCCOPY;
+                if ((lpitem->fState & MF_HILITE) && IS_BITMAP_ITEM(lpitem->fType))
+                    SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
+            } else {
+                left++;
+                w-=2;
+                rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text) && (!menuBar)) ? MERGEPAINT : SRCCOPY;
+            }
+	    BitBlt( hdc, left, top, w,
+		  h, hdcMem, 0, 0,
+		   rop);
 	}
 	DeleteDC( hdcMem );