]> git.saurik.com Git - wxWidgets.git/commitdiff
added forcing to image conversion to always attempt a color icon (needed eg for menus)
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 25 Aug 2002 21:02:39 +0000 (21:02 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 25 Aug 2002 21:02:39 +0000 (21:02 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/private.h
src/mac/bitmap.cpp
src/mac/carbon/bitmap.cpp
src/mac/carbon/menu.cpp
src/mac/menu.cpp

index 839b738b6ebd70eeaa8ec4f81ecce60c8274ece8..f34b32ea62682ccc442121921beb4986da4110ce 100644 (file)
@@ -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))
index ddabfe2384f0cbabafbd3d9cf80bca52f6eef009..08590d10066e0abbeb69a34d448d2e3645842371 100644 (file)
@@ -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 ) ;
                 }
index ddabfe2384f0cbabafbd3d9cf80bca52f6eef009..08590d10066e0abbeb69a34d448d2e3645842371 100644 (file)
@@ -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 ) ;
                 }
index 2bf327fc4cdc03c7e5ad91947474b9887c7f80bb..caadf18ce3b69cddef6565e5583ba2c757fa3d97 100644 (file)
@@ -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 ) 
                        {
index 2bf327fc4cdc03c7e5ad91947474b9887c7f80bb..caadf18ce3b69cddef6565e5583ba2c757fa3d97 100644 (file)
@@ -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 ) 
                        {