Hi guys (and gals), sorry for the long absence but my time got taken up in something else (a problem with my isp, see http://sourceforge.net/projects/drcom-client) and I couldn't spend my time here...
Anyway, here are patches for the menu (it fixes some menu sizes, and also the shift-down-by-1-pixel bug in winemine), and the caption (fixes the size and position of the caption buttons).
Comments?
William Poetra Yoga Hadisoeseno
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Index: dlls/user/menu.c =================================================================== RCS file: /home/wine/wine/dlls/user/menu.c,v retrieving revision 1.25 diff -u -p -r1.25 menu.c --- dlls/user/menu.c 14 Apr 2005 13:56:29 -0000 1.25 +++ dlls/user/menu.c 15 Apr 2005 04:37:27 -0000 @@ -1090,7 +1090,7 @@ static void MENU_MenuBarCalcSize( HDC hd lprect->left, lprect->top, lprect->right, lprect->bottom); lppop->Width = lprect->right - lprect->left; lppop->Height = 0; - maxY = lprect->top+1; + maxY = lprect->top; start = 0; helpPos = -1; lppop->maxBmpSize.cx = 0; @@ -1126,7 +1126,7 @@ static void MENU_MenuBarCalcSize( HDC hd while (start < i) lppop->items[start++].rect.bottom = maxY; }
- lprect->bottom = maxY; + lprect->bottom = maxY + 1; lppop->Height = lprect->bottom - lprect->top;
/* Flush right all items between the MF_RIGHTJUSTIFY and */ @@ -1514,7 +1514,7 @@ UINT MENU_DrawMenuBar( HDC hDC, LPRECT l lppop = MENU_GetMenu( hMenu ); if (lppop == NULL || lprect == NULL) { - return GetSystemMetrics(SM_CYMENU); + return GetSystemMetrics(SM_CYMENU) + 1; }
if (suppress_draw) @@ -3857,7 +3857,7 @@ DWORD WINAPI DrawMenuBarTemp(HWND hwnd, lppop = MENU_GetMenu( hMenu ); if (lppop == NULL || lprect == NULL) { - retvalue = GetSystemMetrics(SM_CYMENU); + retvalue = GetSystemMetrics(SM_CYMENU) + 1; goto END; }
@@ -3878,7 +3878,7 @@ DWORD WINAPI DrawMenuBarTemp(HWND hwnd,
if (lppop->nItems == 0) { - retvalue = GetSystemMetrics(SM_CYMENU); + retvalue = GetSystemMetrics(SM_CYMENU) + 1; goto END; }
Index: windows/nonclient.c =================================================================== RCS file: /home/wine/wine/windows/nonclient.c,v retrieving revision 1.141 diff -u -p -r1.141 nonclient.c --- windows/nonclient.c 13 Apr 2005 16:13:45 -0000 1.141 +++ windows/nonclient.c 15 Apr 2005 04:37:28 -0000 @@ -398,7 +398,7 @@ LONG NC_HandleNCCalcSize( HWND hwnd, REC winRect->top += MENU_GetMenuBarHeight( hwnd, winRect->right - winRect->left, - -tmpRect.left, -tmpRect.top ) + 1; + -tmpRect.left, -tmpRect.top ); }
if( exStyle & WS_EX_CLIENTEDGE)
Index: windows/nonclient.c =================================================================== RCS file: /home/wine/wine/windows/nonclient.c,v retrieving revision 1.141 diff -u -p -r1.141 nonclient.c --- windows/nonclient.c 13 Apr 2005 16:13:45 -0000 1.141 +++ windows/nonclient.c 15 Apr 2005 04:37:28 -0000 @@ -691,21 +691,21 @@ static void NC_DrawCloseButton (HWND hwn /* A tool window has a smaller Close button */ if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW) { - INT iBmpHeight = 11; /* Windows does not use SM_CXSMSIZE and SM_CYSMSIZE */ - INT iBmpWidth = 11; /* it uses 11x11 for the close button in tool window */ - INT iCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION); + INT iCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION) - 1; + INT iBmpHeight = iCaptionHeight - 4; + INT iBmpWidth = iCaptionHeight - 5;
- rect.top = rect.top + (iCaptionHeight - 1 - iBmpHeight) / 2; - rect.left = rect.right - (iCaptionHeight + 1 + iBmpWidth) / 2; + rect.top += 2; + rect.right -= 2; rect.bottom = rect.top + iBmpHeight; - rect.right = rect.left + iBmpWidth; + rect.left = rect.right - iBmpWidth; } else { - rect.left = rect.right - GetSystemMetrics(SM_CXSIZE) - 1; - rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1; rect.top += 2; rect.right -= 2; + rect.bottom = rect.top + (GetSystemMetrics(SM_CYSIZE) - 4); + rect.left = rect.right - (GetSystemMetrics(SM_CXSIZE) - 2); } DrawFrameControl( hdc, &rect, DFC_CAPTION, (DFCS_CAPTIONCLOSE | @@ -731,12 +731,12 @@ static void NC_DrawMaxButton(HWND hwnd,H flags = IsZoomed(hwnd) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX;
NC_GetInsideRect( hwnd, &rect ); - if (GetWindowLongW( hwnd, GWL_STYLE) & WS_SYSMENU) - rect.right -= GetSystemMetrics(SM_CXSIZE) + 1; - rect.left = rect.right - GetSystemMetrics(SM_CXSIZE); - rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1; rect.top += 2; + if (GetWindowLongA( hwnd, GWL_STYLE) & WS_SYSMENU) + rect.right -= (GetSystemMetrics(SM_CXSIZE) - 2) + 2; rect.right -= 2; + rect.bottom = rect.top + (GetSystemMetrics(SM_CYSIZE) - 4); + rect.left = rect.right - (GetSystemMetrics(SM_CXSIZE) - 2); if (down) flags |= DFCS_PUSHED; if (bGrayed) flags |= DFCS_INACTIVE; DrawFrameControl( hdc, &rect, DFC_CAPTION, flags ); @@ -759,14 +759,14 @@ static void NC_DrawMinButton(HWND hwnd, return;
NC_GetInsideRect( hwnd, &rect ); + rect.top += 2; if (style & WS_SYSMENU) - rect.right -= GetSystemMetrics(SM_CXSIZE) + 1; + rect.right -= (GetSystemMetrics(SM_CXSIZE) - 2) + 2; + rect.right -= 2; if (style & (WS_MAXIMIZEBOX|WS_MINIMIZEBOX)) rect.right -= GetSystemMetrics(SM_CXSIZE) - 2; - rect.left = rect.right - GetSystemMetrics(SM_CXSIZE); - rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1; - rect.top += 2; - rect.right -= 2; + rect.left = rect.right - (GetSystemMetrics(SM_CXSIZE) - 2); + rect.bottom = rect.top + (GetSystemMetrics(SM_CYSIZE) - 4); if (down) flags |= DFCS_PUSHED; if (bGrayed) flags |= DFCS_INACTIVE; DrawFrameControl( hdc, &rect, DFC_CAPTION, flags ); @@ -893,19 +893,23 @@ static void NC_DrawCaption( HDC hdc, R
/* Draw a grayed close button if disabled or if SC_CLOSE is not there */ NC_DrawCloseButton (hwnd, hdc, FALSE, - (state & (MF_DISABLED | MF_GRAYED)) || (state == 0xFFFFFFFF)); - r.right -= GetSystemMetrics(SM_CYCAPTION) - 1; + ((((state & MF_DISABLED) || (state & MF_GRAYED))) && (state != 0xFFFFFFFF))); + r.right -= (GetSystemMetrics(SM_CXSIZE) - 2) + 2;
if ((style & WS_MAXIMIZEBOX) || (style & WS_MINIMIZEBOX)) { + /* There's a 2-pixel space between Maximize and Close buttons */ + + r.right -= 2; + /* In win95 the two buttons are always there */ /* But if the menu item is not in the menu they're disabled*/
NC_DrawMaxButton( hwnd, hdc, FALSE, (!(style & WS_MAXIMIZEBOX))); - r.right -= GetSystemMetrics(SM_CXSIZE) + 1; + r.right -= GetSystemMetrics(SM_CXSIZE) - 2;
NC_DrawMinButton( hwnd, hdc, FALSE, (!(style & WS_MINIMIZEBOX))); - r.right -= GetSystemMetrics(SM_CXSIZE) + 1; + r.right -= GetSystemMetrics(SM_CXSIZE) - 2; } }
@@ -924,6 +928,7 @@ static void NC_DrawCaption( HDC hdc, R else SetTextColor( hdc, GetSysColor( COLOR_INACTIVECAPTIONTEXT ) ); SetBkMode( hdc, TRANSPARENT ); r.left += 2; + r.right -= 2; DrawTextW( hdc, buffer, -1, &r, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_LEFT ); DeleteObject (SelectObject (hdc, hOldFont)); @@ -1025,7 +1030,7 @@ static void NC_DoNCPaint( HWND hwnd, H TRACE("Calling DrawMenuBar with rect (%ld, %ld)-(%ld, %ld)\n", r.left, r.top, r.right, r.bottom);
- rect.top += MENU_DrawMenuBar( hdc, &r, hwnd, suppress_menupaint ) + 1; + rect.top += MENU_DrawMenuBar( hdc, &r, hwnd, suppress_menupaint ); }
TRACE("After MenuBar, rect is (%ld, %ld)-(%ld, %ld).\n",