]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/bitmap.cpp
Include missing.h
[wxWidgets.git] / src / mac / bitmap.cpp
index a60d47d2ed6e224ae09a5e6090bc95358460fedc..5974622370f232596b176f21e01d3bfa73f667f9 100644 (file)
@@ -565,7 +565,7 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const
            RGBColor  color;
 
            mask = (GWorldPtr) GetMask()->GetMaskBitmap();
-           submask = wxMacCreateGWorld(rect.width, rect.height, 1);
+           submask = wxMacCreateGWorld(rect.width, rect.height, GetMask()->GetDepth() );
            LockPixels(GetGWorldPixMap(mask));
            LockPixels(GetGWorldPixMap(submask));
 
@@ -694,7 +694,7 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type)
             return true;
         }
     }
-    wxLogWarning("no bitmap handler for type %d defined.", type);
+    wxLogWarning(wxT("no bitmap handler for type %d defined."), type);
     return false;
 }
 
@@ -707,7 +707,7 @@ bool wxBitmap::Create(void *data, wxBitmapType type, int width, int height, int
     wxBitmapHandler *handler = FindHandler(type);
 
     if ( handler == NULL ) {
-        wxLogWarning("no bitmap handler for type %d defined.", type);
+        wxLogWarning(wxT("no bitmap handler for type %d defined."), type);
 
         return FALSE;
     }
@@ -755,7 +755,33 @@ wxBitmap::wxBitmap(const wxImage& image, int depth)
         destinationBase += ((**pixMap).rowBytes & 0x7fff);  
         destination = (unsigned char*) destinationBase ;    
     }  
-    if ( image.HasMask() )
+    if ( image.HasAlpha() )
+    {
+      unsigned char *alpha = image.GetAlpha(); 
+      
+      wxColour maskcolor(image.GetMaskRed(), image.GetMaskGreen(), image.GetMaskBlue());
+      RGBColor color ;
+      wxBitmap maskBitmap ;
+
+      maskBitmap.Create( width, height, 24);
+      LockPixels( GetGWorldPixMap( (GWorldPtr) maskBitmap.GetHBITMAP()) );
+      SetGWorld( (GWorldPtr) maskBitmap.GetHBITMAP(), NULL);
+
+      for (int y = 0; y < height; y++)
+      {
+          for (int x = 0; x < width; x++)
+          {
+              memset( &color , 255 - *alpha , sizeof( color ) );
+              SetCPixel(x,y, &color);
+
+              alpha += 1 ;
+          }
+      }  // for height
+      SetGWorld( (GWorldPtr) GetHBITMAP(), NULL);
+      SetMask(new wxMask( maskBitmap ));
+      UnlockPixels( GetGWorldPixMap( (GWorldPtr) maskBitmap.GetHBITMAP()) );
+    }
+    else if ( image.HasMask() )
     {
       data = image.GetData(); 
       
@@ -777,7 +803,7 @@ wxBitmap::wxBitmap(const wxImage& image, int depth)
                 SetCPixel(x,y, &white);
               }
               else {
-                      SetCPixel(x,y, &black);
+                SetCPixel(x,y, &black);
               }
               data += 3 ;
           }
@@ -918,7 +944,7 @@ bool wxBitmap::SaveFile(const wxString& filename, wxBitmapType type,
         return image.SaveFile(filename, type);
     }
     
-    wxLogWarning("no bitmap handler for type %d defined.", type);
+    wxLogWarning(wxT("no bitmap handler for type %d defined."), type);
     return false;
 }
 
@@ -1122,10 +1148,8 @@ bool wxMask::Create(const wxBitmap& bitmap)
 
    wxCHECK_MSG( bitmap.Ok(), false, wxT("Invalid bitmap"));
 
-   wxCHECK_MSG(bitmap.GetDepth() == 1, false,
-               wxT("Cannot create mask from colour bitmap"));
-
-   m_maskBitmap = wxMacCreateGWorld(bitmap.GetWidth(), bitmap.GetHeight(), 1);
+    m_depth = bitmap.GetDepth() ;
+   m_maskBitmap = wxMacCreateGWorld(bitmap.GetWidth(), bitmap.GetHeight(), bitmap.GetDepth() );
    Rect rect = { 0,0, bitmap.GetHeight(), bitmap.GetWidth() };
 
    LockPixels( GetGWorldPixMap( (GWorldPtr) m_maskBitmap) );
@@ -1163,7 +1187,8 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
     
     wxCHECK_MSG( bitmap.Ok(), false, wxT("Illigal bitmap"));
 
-    m_maskBitmap = wxMacCreateGWorld( bitmap.GetWidth() , bitmap.GetHeight() , 1 ); 
+    m_maskBitmap = wxMacCreateGWorld( bitmap.GetWidth() , bitmap.GetHeight() , 1 );
+    m_depth = 1 ; 
     LockPixels( GetGWorldPixMap(  (GWorldPtr) m_maskBitmap ) );
     LockPixels( GetGWorldPixMap(  (GWorldPtr) bitmap.GetHBITMAP() ) );
     RGBColor maskColor = MAC_WXCOLORREF(colour.GetPixel());
@@ -1257,8 +1282,8 @@ class WXDLLEXPORT wxPICTResourceHandler: public wxBitmapHandler
 public:
     inline wxPICTResourceHandler()
     {
-        m_name = "Macintosh Pict resource";
-        m_extension = "";
+        m_name = wxT("Macintosh Pict resource");
+        m_extension = wxEmptyString;
         m_type = wxBITMAP_TYPE_PICT_RESOURCE;
     };
 
@@ -1271,14 +1296,8 @@ bool  wxPICTResourceHandler::LoadFile(wxBitmap *bitmap, const wxString& name, lo
           int desiredWidth, int desiredHeight)
 {
     Str255 theName ;
-    
-#if TARGET_CARBON
-    c2pstrcpy( (StringPtr) theName , name ) ;
-#else
-    strcpy( (char *) theName , name ) ;
-    c2pstr( (char *)theName ) ;
-#endif
-    
+    wxMacStringToPascal( name , theName ) ;
+   
     PicHandle thePict = (PicHandle ) GetNamedResource( 'PICT' , theName ) ;
     if ( thePict )
     {