#include "xpm.h"
} ;
+#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
+#endif
#include <PictUtils.h>
if ( depth < 0 )
{
- // get max pixel depth
- CGrafPtr port ;
- GetCWMgrPort( &port ) ;
- GDHandle maxDevice ;
-
- maxDevice = GetMaxDevice( &port->portRect ) ;
- if ( maxDevice )
- depth = (**((**maxDevice).gdPMap)).pixelSize ;
- else
- depth = 8 ;
+ depth = wxDisplayDepth() ;
}
err = NewGWorld( &port , depth , &rect , NULL , NULL , 0 ) ;
GetGWorld( &origPort , &origDevice ) ;
SetGWorld( M_BITMAPDATA->m_hBitmap , NULL ) ;
-
+ LockPixels( GetGWorldPixMap( (CGrafPtr) M_BITMAPDATA->m_hBitmap ) ) ;
+
// bits is a word aligned array
unsigned char* linestart = (unsigned char*) bits ;
}
}
+ UnlockPixels( GetGWorldPixMap( (CGrafPtr) M_BITMAPDATA->m_hBitmap ) ) ;
SetGWorld( origPort , origDevice ) ;
}
}
m_maskBitmap = wxMacCreateGWorld( bitmap.GetWidth() , bitmap.GetHeight() , 1 ) ;
+ LockPixels( GetGWorldPixMap( (CGrafPtr) m_maskBitmap ) ) ;
+ LockPixels( GetGWorldPixMap( (CGrafPtr) ((wxBitmapRefData*) bitmap.GetRefData())->m_hBitmap ) ) ;
RGBColor maskColor = colour.GetPixel() ;
// this is not very efficient, but I can't think
}
}
}
+ UnlockPixels( GetGWorldPixMap( (CGrafPtr) m_maskBitmap ) ) ;
+ UnlockPixels( GetGWorldPixMap( ((wxBitmapRefData*) bitmap.GetRefData())->m_hBitmap ) ) ;
SetGWorld( origPort , origDevice ) ;
return TRUE;
if (dc)
{
if (SelectObject(dc, (HBITMAP) M_BITMAPHANDLERDATA->m_hBitmap))
- { /* for following SetPixel */
- /* fill the XImage struct 'by hand' */
+ {
+
ximage.width = M_BITMAPHANDLERDATA->m_width;
ximage.height = M_BITMAPHANDLERDATA->m_height;
ximage.depth = M_BITMAPHANDLERDATA->m_depth;
DeleteDC(dc);
if (errorStatus == XpmSuccess)
- return TRUE; /* no error */
+ return TRUE;
else
return FALSE;
} else return FALSE;
bool wxXPMDataHandler::Create(wxBitmap *bitmap, void *data, long flags, int width, int height, int depth)
{
- XImage * ximage;
+ XImage * ximage = NULL ;
+ XImage * xshapeimage = NULL ;
int ErrorStatus;
XpmAttributes xpmAttr;
xpmAttr.valuemask = XpmReturnInfos; // get infos back
ErrorStatus = XpmCreateImageFromData( GetMainDevice() , (char **)data,
- &ximage, (XImage **) NULL, &xpmAttr);
+ &ximage, &xshapeimage, &xpmAttr);
if (ErrorStatus == XpmSuccess)
{
XImageFree(ximage); // releases the malloc, but does not detroy
// the bitmap
M_BITMAPHANDLERDATA->m_bitmapType = kMacBitmapTypeGrafWorld ;
-
+ if ( xshapeimage != NULL )
+ {
+ wxMask* m = new wxMask() ;
+ m->SetMaskBitmap( xshapeimage->gworldptr ) ;
+ M_BITMAPHANDLERDATA->m_bitmapMask = m ;
+ }
return TRUE;
}
else
int desiredWidth, int desiredHeight)
{
// TODO: load colourmap.
-/*
- M_BITMAPHANDLERDATA->m_hBitmap = (WXHBITMAP) ::LoadBitmap(wxGetInstance(), name);
- if (M_BITMAPHANDLERDATA->m_hBitmap)
- {
- M_BITMAPHANDLERDATA->m_ok = TRUE;
- BITMAP bm;
- GetObject((HBITMAP) M_BITMAPHANDLERDATA->m_hBitmap, sizeof(BITMAP), (LPSTR) &bm);
- M_BITMAPHANDLERDATA->m_width = bm.bmWidth;
- M_BITMAPHANDLERDATA->m_height = bm.bmHeight;
- M_BITMAPHANDLERDATA->m_depth = bm.bmBitsPixel;
- return TRUE;
- }
-*/
// it's probably not found
wxLogError("Can't load bitmap '%s' from resources! Check .rc file.", name.c_str());
#if USE_IMAGE_LOADING_IN_MSW
wxPalette *palette = NULL;
bool success = FALSE;
-/*
- if (type & wxBITMAP_DISCARD_COLOURMAP)
- success = wxLoadIntoBitmap(WXSTRINGCAST name, bitmap);
- else
-*/
success = (wxLoadIntoBitmap(WXSTRINGCAST name, bitmap, &palette) != 0);
if (!success && palette)
{
}
-
void wxBitmap::CleanUpHandlers()
{
wxNode *node = sm_handlers.First();
AddHandler( new wxPICTResourceHandler ) ;
AddHandler( new wxICONResourceHandler ) ;
AddHandler(new wxXPMFileHandler);
- AddHandler(new wxXPMDataHandler);
+ AddHandler(new wxXPMDataHandler);
AddHandler(new wxBMPResourceHandler);
AddHandler(new wxBMPFileHandler);
}