]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement wxMask copy ctor for wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 28 Mar 2010 23:20:49 +0000 (23:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 28 Mar 2010 23:20:49 +0000 (23:20 +0000)
Without copy ctor copying masks simply crashed because the same pointer was
deleted twice.

Also added a (completely trivial but better than nothing...) unit test for
wxBitmap to check that copying masks does work now.

Closes #11854.

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

13 files changed:
docs/changes.txt
include/wx/gtk/bitmap.h
src/gtk/bitmap.cpp
tests/Makefile.in
tests/makefile.bcc
tests/makefile.gcc
tests/makefile.vc
tests/makefile.wat
tests/test.bkl
tests/test_test_gui.dsp
tests/test_vc7_test_gui.vcproj
tests/test_vc8_test_gui.vcproj
tests/test_vc9_test_gui.vcproj

index 1c4d35f3554a7e4443dcd7d96b5940545ef36682..fa9f11e6168085c98abf35478100749a4978b2c3 100644 (file)
@@ -503,6 +503,7 @@ All (GUI):
 GTK:
 
 - wxRadioBox constructor uses default consistent with other ports now.
 GTK:
 
 - wxRadioBox constructor uses default consistent with other ports now.
+- Implement wxMask copy ctor.
 - Partially implemented wxTextCtrl::GetStyle() (Igor Romanov).
 - Corrected themed border display.
 - Fix wxClipboard::GetData() for asymmetric wxDataObjects (Timothy Lee).
 - Partially implemented wxTextCtrl::GetStyle() (Igor Romanov).
 - Corrected themed border display.
 - Fix wxClipboard::GetData() for asymmetric wxDataObjects (Timothy Lee).
index 30c517a8ba0835f2068c69f6ecd69ea85e426d56..71f5d5b75c4ed1bd6d30319f8ca10ebe588ba748 100644 (file)
@@ -21,6 +21,7 @@ class WXDLLIMPEXP_CORE wxMask: public wxMaskBase
 {
 public:
     wxMask();
 {
 public:
     wxMask();
+    wxMask(const wxMask& mask);
     wxMask( const wxBitmap& bitmap, const wxColour& colour );
 #if wxUSE_PALETTE
     wxMask( const wxBitmap& bitmap, int paletteIndex );
     wxMask( const wxBitmap& bitmap, const wxColour& colour );
 #if wxUSE_PALETTE
     wxMask( const wxBitmap& bitmap, int paletteIndex );
index 0a519cf24ea15ca86d75255d9ab3374978eec841..c296558642e3163dda0ba3766da33ecb6acb5714 100644 (file)
@@ -79,6 +79,23 @@ wxMask::wxMask()
     m_bitmap = NULL;
 }
 
     m_bitmap = NULL;
 }
 
+wxMask::wxMask(const wxMask& mask)
+{
+    if ( !mask.m_bitmap )
+    {
+        m_bitmap = NULL;
+        return;
+    }
+
+    // create a copy of an existing mask
+    gint w, h;
+    gdk_drawable_get_size(mask.m_bitmap, &w, &h);
+    m_bitmap = gdk_pixmap_new(mask.m_bitmap, w, h, 1);
+
+    wxGtkObject<GdkGC> gc(gdk_gc_new(m_bitmap));
+    gdk_draw_drawable(m_bitmap, gc, mask.m_bitmap, 0, 0, 0, 0, -1, -1);
+}
+
 wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour )
 {
     m_bitmap = NULL;
 wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour )
 {
     m_bitmap = NULL;
@@ -859,12 +876,7 @@ wxGDIRefData* wxBitmap::CloneGDIRefData(const wxGDIRefData* data) const
     }
     if (oldRef->m_mask != NULL)
     {
     }
     if (oldRef->m_mask != NULL)
     {
-        newRef->m_mask = new wxMask;
-        newRef->m_mask->m_bitmap = gdk_pixmap_new(
-            oldRef->m_mask->m_bitmap, oldRef->m_width, oldRef->m_height, 1);
-        wxGtkObject<GdkGC> gc(gdk_gc_new(newRef->m_mask->m_bitmap));
-        gdk_draw_drawable(newRef->m_mask->m_bitmap,
-            gc, oldRef->m_mask->m_bitmap, 0, 0, 0, 0, -1, -1);
+        newRef->m_mask = new wxMask(*oldRef->m_mask);
     }
 
     return newRef;
     }
 
     return newRef;
index 06d196338f4fad724285195f3e39c41f6aa4003c..4af8fdf6e807cb9790022e2a1f617cc5cdb1cdbe 100644 (file)
@@ -135,6 +135,7 @@ TEST_GUI_OBJECTS =  \
        test_gui_rect.o \
        test_gui_size.o \
        test_gui_point.o \
        test_gui_rect.o \
        test_gui_size.o \
        test_gui_point.o \
+       test_gui_bitmap.o \
        test_gui_colour.o \
        test_gui_ellipsization.o \
        test_gui_measuring.o \
        test_gui_colour.o \
        test_gui_ellipsization.o \
        test_gui_measuring.o \
@@ -573,6 +574,9 @@ test_gui_size.o: $(srcdir)/geometry/size.cpp $(TEST_GUI_ODEP)
 test_gui_point.o: $(srcdir)/geometry/point.cpp $(TEST_GUI_ODEP)
        $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/geometry/point.cpp
 
 test_gui_point.o: $(srcdir)/geometry/point.cpp $(TEST_GUI_ODEP)
        $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/geometry/point.cpp
 
+test_gui_bitmap.o: $(srcdir)/graphics/bitmap.cpp $(TEST_GUI_ODEP)
+       $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/bitmap.cpp
+
 test_gui_colour.o: $(srcdir)/graphics/colour.cpp $(TEST_GUI_ODEP)
        $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/colour.cpp
 
 test_gui_colour.o: $(srcdir)/graphics/colour.cpp $(TEST_GUI_ODEP)
        $(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/colour.cpp
 
index 241dc034fa3748645f924042ba2fb18a15569327..028783cda066327883a23cd61fbb300d00f09f17 100644 (file)
@@ -120,6 +120,7 @@ TEST_GUI_OBJECTS =  \
        $(OBJS)\test_gui_rect.obj \\r
        $(OBJS)\test_gui_size.obj \\r
        $(OBJS)\test_gui_point.obj \\r
        $(OBJS)\test_gui_rect.obj \\r
        $(OBJS)\test_gui_size.obj \\r
        $(OBJS)\test_gui_point.obj \\r
+       $(OBJS)\test_gui_bitmap.obj \\r
        $(OBJS)\test_gui_colour.obj \\r
        $(OBJS)\test_gui_ellipsization.obj \\r
        $(OBJS)\test_gui_measuring.obj \\r
        $(OBJS)\test_gui_colour.obj \\r
        $(OBJS)\test_gui_ellipsization.obj \\r
        $(OBJS)\test_gui_measuring.obj \\r
@@ -627,6 +628,9 @@ $(OBJS)\test_gui_size.obj: .\geometry\size.cpp
 $(OBJS)\test_gui_point.obj: .\geometry\point.cpp\r
        $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\geometry\point.cpp\r
 \r
 $(OBJS)\test_gui_point.obj: .\geometry\point.cpp\r
        $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\geometry\point.cpp\r
 \r
+$(OBJS)\test_gui_bitmap.obj: .\graphics\bitmap.cpp\r
+       $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\bitmap.cpp\r
+\r
 $(OBJS)\test_gui_colour.obj: .\graphics\colour.cpp\r
        $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\colour.cpp\r
 \r
 $(OBJS)\test_gui_colour.obj: .\graphics\colour.cpp\r
        $(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\colour.cpp\r
 \r
index 1aeb186b2923aa11ee09925e29f78843711a693d..6bb33379a997495a67df26a01a14f605d5b0afd5 100644 (file)
@@ -114,6 +114,7 @@ TEST_GUI_OBJECTS =  \
        $(OBJS)\test_gui_rect.o \\r
        $(OBJS)\test_gui_size.o \\r
        $(OBJS)\test_gui_point.o \\r
        $(OBJS)\test_gui_rect.o \\r
        $(OBJS)\test_gui_size.o \\r
        $(OBJS)\test_gui_point.o \\r
+       $(OBJS)\test_gui_bitmap.o \\r
        $(OBJS)\test_gui_colour.o \\r
        $(OBJS)\test_gui_ellipsization.o \\r
        $(OBJS)\test_gui_measuring.o \\r
        $(OBJS)\test_gui_colour.o \\r
        $(OBJS)\test_gui_ellipsization.o \\r
        $(OBJS)\test_gui_measuring.o \\r
@@ -609,6 +610,9 @@ $(OBJS)\test_gui_size.o: ./geometry/size.cpp
 $(OBJS)\test_gui_point.o: ./geometry/point.cpp\r
        $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<\r
 \r
 $(OBJS)\test_gui_point.o: ./geometry/point.cpp\r
        $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<\r
 \r
+$(OBJS)\test_gui_bitmap.o: ./graphics/bitmap.cpp\r
+       $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<\r
+\r
 $(OBJS)\test_gui_colour.o: ./graphics/colour.cpp\r
        $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<\r
 \r
 $(OBJS)\test_gui_colour.o: ./graphics/colour.cpp\r
        $(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<\r
 \r
index 6ca56cd97daae2eb9293630e36034060319f8c61..0f1e64a60fa2314f2daa292d0ea40e848f63731f 100644 (file)
@@ -115,6 +115,7 @@ TEST_GUI_OBJECTS =  \
        $(OBJS)\test_gui_rect.obj \\r
        $(OBJS)\test_gui_size.obj \\r
        $(OBJS)\test_gui_point.obj \\r
        $(OBJS)\test_gui_rect.obj \\r
        $(OBJS)\test_gui_size.obj \\r
        $(OBJS)\test_gui_point.obj \\r
+       $(OBJS)\test_gui_bitmap.obj \\r
        $(OBJS)\test_gui_colour.obj \\r
        $(OBJS)\test_gui_ellipsization.obj \\r
        $(OBJS)\test_gui_measuring.obj \\r
        $(OBJS)\test_gui_colour.obj \\r
        $(OBJS)\test_gui_ellipsization.obj \\r
        $(OBJS)\test_gui_measuring.obj \\r
@@ -753,6 +754,9 @@ $(OBJS)\test_gui_size.obj: .\geometry\size.cpp
 $(OBJS)\test_gui_point.obj: .\geometry\point.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\geometry\point.cpp\r
 \r
 $(OBJS)\test_gui_point.obj: .\geometry\point.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\geometry\point.cpp\r
 \r
+$(OBJS)\test_gui_bitmap.obj: .\graphics\bitmap.cpp\r
+       $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\bitmap.cpp\r
+\r
 $(OBJS)\test_gui_colour.obj: .\graphics\colour.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\colour.cpp\r
 \r
 $(OBJS)\test_gui_colour.obj: .\graphics\colour.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\colour.cpp\r
 \r
index 299502875f6579fff96f52e4ac5f27a98223dfc0..007c9994d8845b8821e485db5d8889db445d3fca 100644 (file)
@@ -358,6 +358,7 @@ TEST_GUI_OBJECTS =  &
        $(OBJS)\test_gui_rect.obj &\r
        $(OBJS)\test_gui_size.obj &\r
        $(OBJS)\test_gui_point.obj &\r
        $(OBJS)\test_gui_rect.obj &\r
        $(OBJS)\test_gui_size.obj &\r
        $(OBJS)\test_gui_point.obj &\r
+       $(OBJS)\test_gui_bitmap.obj &\r
        $(OBJS)\test_gui_colour.obj &\r
        $(OBJS)\test_gui_ellipsization.obj &\r
        $(OBJS)\test_gui_measuring.obj &\r
        $(OBJS)\test_gui_colour.obj &\r
        $(OBJS)\test_gui_ellipsization.obj &\r
        $(OBJS)\test_gui_measuring.obj &\r
@@ -664,6 +665,9 @@ $(OBJS)\test_gui_size.obj :  .AUTODEPEND .\geometry\size.cpp
 $(OBJS)\test_gui_point.obj :  .AUTODEPEND .\geometry\point.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<\r
 \r
 $(OBJS)\test_gui_point.obj :  .AUTODEPEND .\geometry\point.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<\r
 \r
+$(OBJS)\test_gui_bitmap.obj :  .AUTODEPEND .\graphics\bitmap.cpp\r
+       $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<\r
+\r
 $(OBJS)\test_gui_colour.obj :  .AUTODEPEND .\graphics\colour.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<\r
 \r
 $(OBJS)\test_gui_colour.obj :  .AUTODEPEND .\graphics\colour.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<\r
 \r
index 4b85193a27c03d2e1ce76e8e4bb8f0d8f4f82424..eac3d28888e1d07fda0db3aa484531bd2c75a879 100644 (file)
             geometry/rect.cpp
             geometry/size.cpp
             geometry/point.cpp
             geometry/rect.cpp
             geometry/size.cpp
             geometry/point.cpp
+            graphics/bitmap.cpp
             graphics/colour.cpp
             graphics/ellipsization.cpp
             graphics/measuring.cpp
             graphics/colour.cpp
             graphics/ellipsization.cpp
             graphics/measuring.cpp
index afb37c53319e4192d071ff8b05e1cb6ad217b1b2..a22cc6ce742db569b7d842837b15ea5dd3c1a127 100644 (file)
@@ -235,6 +235,10 @@ LINK32=link.exe
 # PROP Default_Filter ""\r
 # Begin Source File\r
 \r
 # PROP Default_Filter ""\r
 # Begin Source File\r
 \r
+SOURCE=.\graphics\bitmap.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\sizers\boxsizer.cpp\r
 # End Source File\r
 # Begin Source File\r
 SOURCE=.\sizers\boxsizer.cpp\r
 # End Source File\r
 # Begin Source File\r
index dd00cfe5de5ae5415b3652606b6452bcefe7885c..ea83d8c93c0c4dad5fbe298e174bedf96a73c89c 100644 (file)
                        Name="Source Files"\r
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
                        Name="Source Files"\r
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">\r
+                       <File\r
+                               RelativePath=".\graphics\bitmap.cpp">\r
+                       </File>\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp">\r
                        </File>\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp">\r
                        </File>\r
index 7ce61f53c7b4326b600dd9613cd367ddbddc1c49..6152dc7e6e68b58889e5ce37c9d25076d0893d68 100644 (file)
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
+                       <File\r
+                               RelativePath=".\graphics\bitmap.cpp"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp"\r
                                >\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp"\r
                                >\r
index fd6952f626940b6af413b75963553f2cff751edf..7e40b0c0879984493bc35c0855ddf9feaf005693 100644 (file)
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
+                       <File\r
+                               RelativePath=".\graphics\bitmap.cpp"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp"\r
                                >\r
                        <File\r
                                RelativePath=".\sizers\boxsizer.cpp"\r
                                >\r