- PicHandle picture; // This is the returned picture
-
- // If bitmap already in Pict format return pointer
- if(M_BITMAPDATA->m_bitmapType == kMacBitmapTypePict) {
- return M_BITMAPDATA->m_hPict;
- }
- else if(M_BITMAPDATA->m_bitmapType != kMacBitmapTypeGrafWorld) {
- // Invalid bitmap
- return NULL;
- }
-
- RGBColor gray = { 0xCCCC ,0xCCCC , 0xCCCC } ;
- RGBColor white = { 0xffff ,0xffff , 0xffff } ;
- RGBColor black = { 0x0000 ,0x0000 , 0x0000 } ;
- CGrafPtr origPort;
- GDHandle origDev ;
- wxMask *mask;
- Rect portRect ;
-
- GetPortBounds( (GWorldPtr) GetHBITMAP() , &portRect ) ;
- int width = portRect.right - portRect.left ;
- int height = portRect.bottom - portRect.top ;
-
- LockPixels( GetGWorldPixMap( (GWorldPtr) GetHBITMAP() ) ) ;
- GetGWorld( &origPort , &origDev ) ;
-
- mask = GetMask();
-
- SetGWorld( (GWorldPtr) GetHBITMAP() , NULL ) ;
-
- picture = OpenPicture(&portRect); // open a picture, this disables drawing
- if(!picture) {
- return NULL;
- }
-
- if( mask )
- {
-#ifdef __DARWIN__
- RGBColor trans = white;
-#else
- RGBBackColor( &gray );
- EraseRect( &portRect );
- RGBColor trans = gray;
-#endif
- RGBForeColor( &black ) ;
- RGBBackColor( &white ) ;
- PenMode(transparent);
-
- for ( int y = 0 ; y < height ; ++y )
- {
- for( int x = 0 ; x < width ; ++x )
- {
- if ( !mask->PointMasked(x,y) )
- {
- RGBColor col ;
-
- GetCPixel( x + portRect.left , y + portRect.top , &col ) ;
- SetCPixel( x + portRect.left , y + portRect.top , &col ) ;
- }
- else {
- // With transparency this sets a blank pixel
- SetCPixel( x + portRect.left , y + portRect.top , &trans);
- }
- }
- }
- }
- else
- {
- RGBBackColor( &gray ) ;
- EraseRect(&portRect);
- RGBForeColor( &black ) ;
- RGBBackColor( &white ) ;
-
- CopyBits(GetPortBitMapForCopyBits( (GWorldPtr) GetHBITMAP()),
- // src PixMap - we copy image over itself -
- GetPortBitMapForCopyBits( (GWorldPtr) GetHBITMAP()),
- // dst PixMap - no drawing occurs
- &portRect, // srcRect - it will be recorded and compressed -
- &portRect, // dstRect - into the picture that is open -
- srcCopy,NULL); // copyMode and no clip region
- }
- ClosePicture(); // We are done recording the picture
- UnlockPixels( GetGWorldPixMap( (GWorldPtr) GetHBITMAP() ) ) ;
- SetGWorld( origPort , origDev ) ;
-
- return picture; // return our groovy pict handle
+ PicHandle picture = NULL ; // This is the returned picture
+ if ( created )
+ (*created) = false ;
+ // If bitmap already in Pict format return pointer
+ if(M_BITMAPDATA->m_bitmapType == kMacBitmapTypePict) {
+ return M_BITMAPDATA->m_hPict;
+ }
+ else if(M_BITMAPDATA->m_bitmapType != kMacBitmapTypeGrafWorld) {
+ // Invalid bitmap
+ return NULL;
+ }
+ else
+ {
+ if ( GetMask() )
+ {
+ picture = wxMacCreatePict( MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap) , MAC_WXHBITMAP(GetMask()->GetMaskBitmap() ) ) ;
+ }
+ else
+ {
+ picture = wxMacCreatePict( MAC_WXHBITMAP(M_BITMAPDATA->m_hBitmap) , NULL ) ;
+ }
+ if ( created && picture )
+ (*created) = true ;
+ }
+ return picture ;