X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/545cb3fcf2460919deb52cf47f6cb0bdf494fae7..29188693b3b8ba4b07762df012cc652d421dae79:/src/x11/bitmap.cpp diff --git a/src/x11/bitmap.cpp b/src/x11/bitmap.cpp index e528547e83..cded72e272 100644 --- a/src/x11/bitmap.cpp +++ b/src/x11/bitmap.cpp @@ -34,6 +34,10 @@ bool wxGetImageFromDrawable(GR_DRAW_ID drawable, int srcX, int srcY, int width, int height, wxImage& image); #endif +static WXPixmap wxGetSubPixmap( WXDisplay* xdisplay, WXPixmap xpixmap, + int x, int y, int width, int height, + int depth ); + #if wxUSE_XPM #if wxHAVE_LIB_XPM #include @@ -55,6 +59,24 @@ wxMask::wxMask() m_display = NULL; } +wxMask::wxMask(const wxMask& mask) +{ + m_display = mask.m_display; + if ( !mask.m_bitmap ) + { + m_bitmap = NULL; + return; + } + + m_size = mask.m_size; + + // Duplicate the mask bitmap using the existing wxGetSubPixmap() function. + // There are probably/surely better ways to do it. + m_bitmap = wxGetSubPixmap(m_display, mask.m_bitmap, + 0, 0, m_size.x, m_size.y, + 1); +} + wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour ) { m_bitmap = NULL; @@ -82,6 +104,8 @@ wxMask::~wxMask() bool wxMask::Create( const wxBitmap& bitmap, const wxColour& colour ) { + m_size = bitmap.GetSize(); + #if !wxUSE_NANOX if (m_bitmap) { @@ -295,7 +319,7 @@ bool wxBitmapRefData::Create(int width, int height, int depth) #else // !wxUSE_NANOX Window xroot = RootWindow(m_display, xscreen); - *(depth == 1 ? &m_bitmap : &m_pixmap) = + *(depth == 1 ? &m_bitmap : &m_pixmap) = XCreatePixmap(m_display, xroot, width, height, depth); #endif // wxUSE_NANOX/!wxUSE_NANOX @@ -1072,8 +1096,7 @@ void wxBitmap::SetPalette(const wxPalette& palette) wxT("cannot set palette for bitmap of this depth")); AllocExclusive(); - delete M_BMPDATA->m_palette; - M_BMPDATA->m_palette = NULL; + wxDELETE(M_BMPDATA->m_palette); if (!palette.Ok()) return;