X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ca6a5f04692678cd2d9f3ea0843fc3f5a0b254f..095472c0da262f8a686a6adfef0362c3eada3ccb:/src/common/image.cpp diff --git a/src/common/image.cpp b/src/common/image.cpp index d8117cb9da..430bf440d0 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -409,9 +409,36 @@ void wxImage::Paste( const wxImage &image, int x, int y ) source_data += source_step; target_data += target_step; } + return; } - else + + if (!HasMask() && image.HasMask()) { + unsigned char r = image.GetMaskRed(); + unsigned char g = image.GetMaskGreen(); + unsigned char b = image.GetMaskBlue(); + + width *= 3; + unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth(); + int source_step = image.GetWidth()*3; + + unsigned char* target_data = GetData() + (x+xx)*3 + (y+yy)*3*M_IMGDATA->m_width; + int target_step = M_IMGDATA->m_width*3; + + for (int j = 0; j < height; j++) + { + for (int i = 0; i < width; i+=3) + { + if ((source_data[i] != r) && + (source_data[i+1] != g) && + (source_data[i+2] != b)) + { + memcpy( target_data+i, source_data+i, 3 ); + } + } + source_data += source_step; + target_data += target_step; + } } } @@ -1371,12 +1398,16 @@ wxImage::wxImage( const wxBitmap &bitmap ) #ifdef __WXMAC__ -#include +#ifdef __UNIX__ + #include +#else + #include +#endif extern CTabHandle wxMacCreateColorTable( int numColors ) ; extern void wxMacDestroyColorTable( CTabHandle colors ) ; extern void wxMacSetColorTableEntry( CTabHandle newColors , int index , int red , int green , int blue ) ; -extern GWorldPtr wxMacCreateGWorld( int height , int width , int depth ) ; +extern GWorldPtr wxMacCreateGWorld( int width , int height , int depth ) ; extern void wxMacDestroyGWorld( GWorldPtr gw ) ; wxBitmap wxImage::ConvertToBitmap() const @@ -1921,7 +1952,7 @@ wxImage::wxImage( const wxBitmap &bitmap ) } wxCHECK_RET( gdk_image, wxT("couldn't create image") ); - + Create( bitmap.GetWidth(), bitmap.GetHeight() ); char unsigned *data = GetData();