From: Stefan Csomor Date: Sun, 25 Aug 2002 21:02:39 +0000 (+0000) Subject: added forcing to image conversion to always attempt a color icon (needed eg for menus) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/93e5d8999f3cb79e09f0895cfbfc1a89aee66879?ds=sidebyside added forcing to image conversion to always attempt a color icon (needed eg for menus) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/mac/private.h b/include/wx/mac/private.h index 839b738b6e..f34b32ea62 100644 --- a/include/wx/mac/private.h +++ b/include/wx/mac/private.h @@ -129,7 +129,7 @@ PicHandle wxMacCreatePict( GWorldPtr gw , GWorldPtr mask = NULL ) ; CIconHandle wxMacCreateCIcon(GWorldPtr image , GWorldPtr mask , short dstDepth , short iconSize ) ; void wxMacSetColorTableEntry( CTabHandle newColors , int index , int red , int green , int blue ) ; CTabHandle wxMacCreateColorTable( int numColors ) ; -void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap ) ; +void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , bool forceColorIcon = false ) ; #define MAC_WXCOLORREF(a) (*((RGBColor*)&(a))) #define MAC_WXHBITMAP(a) (GWorldPtr(a)) diff --git a/src/mac/bitmap.cpp b/src/mac/bitmap.cpp index ddabfe2384..08590d1006 100644 --- a/src/mac/bitmap.cpp +++ b/src/mac/bitmap.cpp @@ -218,20 +218,24 @@ CIconHandle wxMacCreateCIcon(GWorldPtr image , GWorldPtr mask , short dstDepth , if ( mask ) { + Rect r ; + GetPortBounds( image , &r ) ; LockPixels(GetGWorldPixMap(mask) ) ; CopyBits(GetPortBitMapForCopyBits(mask) , - &(**icon).iconBMap , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconBMap , &r , &r, srcCopy , nil ) ; CopyBits(GetPortBitMapForCopyBits(mask) , - &(**icon).iconMask , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconMask , &r , &r, srcCopy , nil ) ; UnlockPixels(GetGWorldPixMap( mask ) ) ; } else { + Rect r ; + GetPortBounds( image , &r ) ; LockPixels(GetGWorldPixMap(image)); CopyBits(GetPortBitMapForCopyBits(image) , - &(**icon).iconBMap , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconBMap , &r , &r, srcCopy , nil ) ; CopyBits(GetPortBitMapForCopyBits(image) , - &(**icon).iconMask , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconMask , &r , &r, srcCopy , nil ) ; UnlockPixels(GetGWorldPixMap(image)); } @@ -289,7 +293,7 @@ PicHandle wxMacCreatePict(GWorldPtr wp, GWorldPtr mask) return pict; } -void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap ) +void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , bool forceColorIcon ) { memset( info , 0 , sizeof(ControlButtonContentInfo) ) ; if ( bitmap.Ok() ) @@ -305,11 +309,11 @@ void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bi } else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) { - if ( (bmap->m_width == bmap->m_height) && (bmap->m_width & 0x3 == 0) ) + if ( (forceColorIcon || bmap->m_width == bmap->m_height) && ((bmap->m_width & 0x3) == 0) ) { info->contentType = kControlContentCIconHandle ; if ( bitmap.GetMask() ) - { + { info->u.cIconHandle = wxMacCreateCIcon( MAC_WXHBITMAP(bmap->m_hBitmap) , MAC_WXHBITMAP(bitmap.GetMask()->GetMaskBitmap()) , 8 , bmap->m_width ) ; } diff --git a/src/mac/carbon/bitmap.cpp b/src/mac/carbon/bitmap.cpp index ddabfe2384..08590d1006 100644 --- a/src/mac/carbon/bitmap.cpp +++ b/src/mac/carbon/bitmap.cpp @@ -218,20 +218,24 @@ CIconHandle wxMacCreateCIcon(GWorldPtr image , GWorldPtr mask , short dstDepth , if ( mask ) { + Rect r ; + GetPortBounds( image , &r ) ; LockPixels(GetGWorldPixMap(mask) ) ; CopyBits(GetPortBitMapForCopyBits(mask) , - &(**icon).iconBMap , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconBMap , &r , &r, srcCopy , nil ) ; CopyBits(GetPortBitMapForCopyBits(mask) , - &(**icon).iconMask , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconMask , &r , &r, srcCopy , nil ) ; UnlockPixels(GetGWorldPixMap( mask ) ) ; } else { + Rect r ; + GetPortBounds( image , &r ) ; LockPixels(GetGWorldPixMap(image)); CopyBits(GetPortBitMapForCopyBits(image) , - &(**icon).iconBMap , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconBMap , &r , &r, srcCopy , nil ) ; CopyBits(GetPortBitMapForCopyBits(image) , - &(**icon).iconMask , &imageBounds , &imageBounds, srcCopy , nil ) ; + &(**icon).iconMask , &r , &r, srcCopy , nil ) ; UnlockPixels(GetGWorldPixMap(image)); } @@ -289,7 +293,7 @@ PicHandle wxMacCreatePict(GWorldPtr wp, GWorldPtr mask) return pict; } -void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap ) +void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , bool forceColorIcon ) { memset( info , 0 , sizeof(ControlButtonContentInfo) ) ; if ( bitmap.Ok() ) @@ -305,11 +309,11 @@ void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bi } else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) { - if ( (bmap->m_width == bmap->m_height) && (bmap->m_width & 0x3 == 0) ) + if ( (forceColorIcon || bmap->m_width == bmap->m_height) && ((bmap->m_width & 0x3) == 0) ) { info->contentType = kControlContentCIconHandle ; if ( bitmap.GetMask() ) - { + { info->u.cIconHandle = wxMacCreateCIcon( MAC_WXHBITMAP(bmap->m_hBitmap) , MAC_WXHBITMAP(bitmap.GetMask()->GetMaskBitmap()) , 8 , bmap->m_width ) ; } diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp index 2bf327fc4c..caadf18ce3 100644 --- a/src/mac/carbon/menu.cpp +++ b/src/mac/carbon/menu.cpp @@ -209,10 +209,34 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) if ( pos == (size_t)-1 ) { UMAAppendMenuItem(MAC_WXHMENU(m_hMenu), label,key,modifiers); + if ( pItem->GetBitmap().Ok() ) + { + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , pItem->GetBitmap() , true ) ; + if ( info.contentType != kControlNoContent ) + { + if ( info.contentType == kControlContentCIconHandle ) + SetMenuItemIconHandle( MAC_WXHMENU(m_hMenu) , CountMenuItems(MAC_WXHMENU(m_hMenu) ) , + kMenuColorIconType , (Handle) info.u.cIconHandle ) ; + } + + } } else { UMAInsertMenuItem(MAC_WXHMENU(m_hMenu), label , pos,key,modifiers); + if ( pItem->GetBitmap().Ok() ) + { + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , pItem->GetBitmap() , true ) ; + if ( info.contentType != kControlNoContent ) + { + if ( info.contentType == kControlContentCIconHandle ) + SetMenuItemIconHandle( MAC_WXHMENU(m_hMenu) , pos , + kMenuColorIconType , (Handle) info.u.cIconHandle ) ; + } + + } } if ( pItem->GetId() == idMenuTitle ) { diff --git a/src/mac/menu.cpp b/src/mac/menu.cpp index 2bf327fc4c..caadf18ce3 100644 --- a/src/mac/menu.cpp +++ b/src/mac/menu.cpp @@ -209,10 +209,34 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) if ( pos == (size_t)-1 ) { UMAAppendMenuItem(MAC_WXHMENU(m_hMenu), label,key,modifiers); + if ( pItem->GetBitmap().Ok() ) + { + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , pItem->GetBitmap() , true ) ; + if ( info.contentType != kControlNoContent ) + { + if ( info.contentType == kControlContentCIconHandle ) + SetMenuItemIconHandle( MAC_WXHMENU(m_hMenu) , CountMenuItems(MAC_WXHMENU(m_hMenu) ) , + kMenuColorIconType , (Handle) info.u.cIconHandle ) ; + } + + } } else { UMAInsertMenuItem(MAC_WXHMENU(m_hMenu), label , pos,key,modifiers); + if ( pItem->GetBitmap().Ok() ) + { + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , pItem->GetBitmap() , true ) ; + if ( info.contentType != kControlNoContent ) + { + if ( info.contentType == kControlContentCIconHandle ) + SetMenuItemIconHandle( MAC_WXHMENU(m_hMenu) , pos , + kMenuColorIconType , (Handle) info.u.cIconHandle ) ; + } + + } } if ( pItem->GetId() == idMenuTitle ) {