]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement bitmap mask copying in wxX11.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Nov 2010 13:53:08 +0000 (13:53 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Nov 2010 13:53:08 +0000 (13:53 +0000)
Copy the mask pixmap properly in wxX11, otherwise copying masks resulted in
freeing the same pixmap twice and an X error.

This fixes the bitmap unit test for wxX11.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66097 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/x11/bitmap.h
src/x11/bitmap.cpp

index 2a272f92c2483c4245c8cc712a7a4bfeab333a49..6ae61b96c274e1245bed8e93941258310d17fc0d 100644 (file)
@@ -34,6 +34,7 @@ class WXDLLIMPEXP_CORE wxMask: public wxObject
 {
 public:
     wxMask();
+    wxMask(const wxMask& mask);
     wxMask( const wxBitmap& bitmap, const wxColour& colour );
     wxMask( const wxBitmap& bitmap, int paletteIndex );
     wxMask( const wxBitmap& bitmap );
@@ -53,6 +54,7 @@ public:
 private:
     WXPixmap    m_bitmap;
     WXDisplay  *m_display;
+    wxSize m_size;
 
 private:
     DECLARE_DYNAMIC_CLASS(wxMask)
index fac57599b154f744b2541b5a8aa84b643e0ecf65..cded72e272f89cd6142b8e21a4fab87d1b4d7bb7 100644 (file)
 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 <X11/xpm.h>
@@ -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)
     {