X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9eddec696f06d65a80e7339b2fae14fcb55f8383..c9c023ddeb1ba8d5c50b8a2d7718b1dd18665b2b:/src/os2/ownerdrw.cpp diff --git a/src/os2/ownerdrw.cpp b/src/os2/ownerdrw.cpp index 609253e30a..8f7d425b09 100644 --- a/src/os2/ownerdrw.cpp +++ b/src/os2/ownerdrw.cpp @@ -23,11 +23,11 @@ #include "wx/menu.h" #include "wx/utils.h" #include "wx/settings.h" + #include "wx/menuitem.h" #endif #include "wx/ownerdrw.h" -#include "wx/menuitem.h" - +#include "wx/os2/dcclient.h" // ============================================================================ // implementation of wxOwnerDrawn class @@ -79,8 +79,8 @@ bool wxOwnerDrawn::OnMeasureItem( size_t* pWidth, } vDC.SetFont(GetFont()); vDC.GetTextExtent( sStr - ,(long *)pWidth - ,(long *)pHeight + ,(wxCoord *)pWidth + ,(wxCoord *)pHeight ); if (!m_strAccel.empty()) { @@ -156,8 +156,9 @@ bool wxOwnerDrawn::OnMeasureItem( size_t* pWidth, // Make sure that this item is at least as // tall as the user's system settings specify // - if (*pHeight < m_nMinHeight) - *pHeight = m_nMinHeight; + const size_t heightStd = 6; // FIXME: get value from the system + if ( *pHeight < heightStd ) + *pHeight = heightStd; m_nHeight = *pHeight; // remember height for use in OnDrawItem return true; } // end of wxOwnerDrawn::OnMeasureItem @@ -180,7 +181,8 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, // CHARBUNDLE vCbnd; - HPS hPS= rDC.GetHPS(); + wxPMDCImpl *impl = (wxPMDCImpl*) rDC.GetImpl(); + HPS hPS= impl->GetHPS(); wxColour vColBack; wxColour vColText; COLORREF vRef; @@ -205,12 +207,22 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, // if (eStatus & wxODSelected) { - wxColour vCol2(wxT("WHITE")); - vColBack.Set( (unsigned char)0 - ,(unsigned char)0 - ,(unsigned char)160 - ); // no dark blue in color table - vColText = vCol2; + vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP + ,SYSCLR_MENUHILITEBGND + ,0L + ); + vColBack.Set( GetRValue(vRef) + ,GetGValue(vRef) + ,GetBValue(vRef) + ); + vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP + ,SYSCLR_MENUHILITE + ,0L + ); + vColText.Set( GetRValue(vRef) + ,GetGValue(vRef) + ,GetBValue(vRef) + ); } else if (eStatus & wxODDisabled) { @@ -304,7 +316,7 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, // // Deal with the tab, extracting the Accel text // - nIndex = sFullString.Find(sTgt.c_str()); + nIndex = sFullString.Find(sTgt); if (nIndex != -1) { bFoundAccel = true; @@ -316,7 +328,7 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, // Deal with the mnemonic character // sTgt = wxT("~"); - nIndex = sFullString.Find(sTgt.c_str()); + nIndex = sFullString.Find(sTgt); if (nIndex != -1) { wxString sTmp = sFullString; @@ -324,13 +336,13 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, bFoundMnemonic = true; sTmp.Remove(nIndex); rDC.GetTextExtent( sTmp - ,(long *)&nWidth - ,(long *)&nHeight + ,(wxCoord *)&nWidth + ,(wxCoord *)&nHeight ); sTmp = sFullString[(size_t)(nIndex + 1)]; rDC.GetTextExtent( sTmp - ,(long *)&nCharWidth - ,(long *)&nHeight + ,(wxCoord *)&nCharWidth + ,(wxCoord *)&nHeight ); sFullString.Replace(sTgt.c_str(), wxEmptyString, true); } @@ -339,10 +351,10 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, // Draw the main item text sans the accel text // POINTL vPntStart = {nX, rRect.y + 4}; - ::GpiCharStringAt( rDC.GetHPS() + ::GpiCharStringAt( impl->GetHPS() ,&vPntStart ,sFullString.length() - ,(PCH)sFullString.c_str() + ,sFullString.char_str() ); if (bFoundMnemonic) { @@ -369,18 +381,18 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC, size_t nHeight; rDC.GetTextExtent( sAccel - ,(long *)&nWidth - ,(long *)&nHeight + ,(wxCoord *)&nWidth + ,(wxCoord *)&nHeight ); // // Back off the starting position from the right edge // vPntStart.x = rRect.width - (nWidth + 7); vPntStart.y = rRect.y + 4; - ::GpiCharStringAt( rDC.GetHPS() + ::GpiCharStringAt( impl->GetHPS() ,&vPntStart ,sAccel.length() - ,(PCH)sAccel.c_str() + ,sAccel.char_str() ); }