don't use built-in support for menu bitmaps if they are too big, they don't come out correctly then (see #10452)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -105,8 +105,11 @@ static const UINT idMenuTitle = (UINT)-3;
|
|||||||
// private functions
|
// private functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
// make the given menu item default
|
// make the given menu item default
|
||||||
static void SetDefaultMenuItem(HMENU WXUNUSED_IN_WINCE(hmenu),
|
void SetDefaultMenuItem(HMENU WXUNUSED_IN_WINCE(hmenu),
|
||||||
UINT WXUNUSED_IN_WINCE(id))
|
UINT WXUNUSED_IN_WINCE(id))
|
||||||
{
|
{
|
||||||
#ifndef __WXWINCE__
|
#ifndef __WXWINCE__
|
||||||
@@ -135,7 +138,18 @@ UINT GetMenuState(HMENU hMenu, UINT id, UINT flags)
|
|||||||
wxLogLastError(wxT("GetMenuItemInfo"));
|
wxLogLastError(wxT("GetMenuItemInfo"));
|
||||||
return info.fState;
|
return info.fState;
|
||||||
}
|
}
|
||||||
#endif
|
#endif // __WXWINCE__
|
||||||
|
|
||||||
|
bool IsLessThanStdSize(const wxBitmap& bmp)
|
||||||
|
{
|
||||||
|
// FIXME: these +4 are chosen so that 16*16 bitmaps pass this test with
|
||||||
|
// default SM_CXMENUCHECK value but I have no idea what do we really
|
||||||
|
// need to use here
|
||||||
|
return bmp.GetWidth() < ::GetSystemMetrics(SM_CXMENUCHECK) + 4 &&
|
||||||
|
bmp.GetHeight() < ::GetSystemMetrics(SM_CYMENUCHECK) + 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -448,20 +462,30 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
|
|||||||
#if wxUSE_OWNER_DRAWN
|
#if wxUSE_OWNER_DRAWN
|
||||||
if ( pItem->IsOwnerDrawn() )
|
if ( pItem->IsOwnerDrawn() )
|
||||||
{
|
{
|
||||||
// is the item owner-drawn just because of the [checked] bitmap?
|
|
||||||
if ( (pItem->GetBitmap(false).Ok() || pItem->GetBitmap(true).Ok()) &&
|
|
||||||
!pItem->GetTextColour().Ok() &&
|
|
||||||
!pItem->GetBackgroundColour().Ok() &&
|
|
||||||
!pItem->GetFont().Ok() )
|
|
||||||
{
|
|
||||||
// try to use InsertMenuItem() as it's guaranteed to look correct
|
|
||||||
// while our owner-drawn code is not
|
|
||||||
#ifndef __DMC__
|
#ifndef __DMC__
|
||||||
// DMC at march 2007 doesn't have HBITMAP hbmpItem tagMENUITEMINFOA /W
|
// if the item is owner-drawn just because of the [checked] bitmap and
|
||||||
// MIIM_BITMAP only works under WinME/2000+
|
// the bitmap uses standard menu bitmap size we can avoid making it
|
||||||
WinStruct<MENUITEMINFO> mii;
|
// owner-drawn and use built-in support for menu bitmaps instead
|
||||||
if ( wxGetWinVersion() >= wxWinVersion_98 )
|
bool mustUseOwnerDrawn = pItem->GetTextColour().Ok() ||
|
||||||
|
pItem->GetBackgroundColour().Ok() ||
|
||||||
|
pItem->GetFont().Ok();
|
||||||
|
if ( !mustUseOwnerDrawn )
|
||||||
{
|
{
|
||||||
|
const wxBitmap& bmpUnchecked = pItem->GetBitmap(false),
|
||||||
|
bmpChecked = pItem->GetBitmap(true);
|
||||||
|
if ( (bmpUnchecked.Ok() && !IsLessThanStdSize(bmpUnchecked)) ||
|
||||||
|
(bmpChecked.Ok() && !IsLessThanStdSize(bmpChecked)) )
|
||||||
|
{
|
||||||
|
mustUseOwnerDrawn = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MIIM_BITMAP only works under WinME/2000+
|
||||||
|
if ( !mustUseOwnerDrawn && wxGetWinVersion() >= wxWinVersion_98 )
|
||||||
|
{
|
||||||
|
// use InsertMenuItem() as it's guaranteed to look correct while
|
||||||
|
// our owner-drawn code is not
|
||||||
|
WinStruct<MENUITEMINFO> mii;
|
||||||
mii.fMask = MIIM_STRING | MIIM_DATA | MIIM_BITMAP;
|
mii.fMask = MIIM_STRING | MIIM_DATA | MIIM_BITMAP;
|
||||||
if ( pItem->IsCheckable() )
|
if ( pItem->IsCheckable() )
|
||||||
{
|
{
|
||||||
@@ -532,7 +556,6 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // __DMC__
|
#endif // __DMC__
|
||||||
}
|
|
||||||
|
|
||||||
if ( !ok )
|
if ( !ok )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user