]> git.saurik.com Git - wxWidgets.git/commitdiff
split wxRegion(wxBitmap) ctor into two ctors with clearer semantics
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 3 Jun 2004 21:13:52 +0000 (21:13 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 3 Jun 2004 21:13:52 +0000 (21:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27606 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
docs/latex/wx/region.tex
include/wx/cocoa/region.h
include/wx/gtk/region.h
include/wx/gtk1/region.h
include/wx/mac/carbon/region.h
include/wx/mac/classic/region.h
include/wx/mgl/region.h
include/wx/motif/region.h
include/wx/msw/region.h
include/wx/os2/region.h
include/wx/x11/region.h
src/common/rgncmn.cpp
src/unix/taskbarx11.cpp

index 2246cba2cbc502116cd48be4aa6d4d020eb94355..09b6beb2ad9af5f701d2e3c1e82f048d4679224b 100644 (file)
@@ -48,8 +48,10 @@ provided array. {\it fillStyle} parameter may have values
 
 {\bf NB:} This constructor is only implemented for Win32 and GTK+ wxWidgets ports.
 
+\func{}{wxRegion}{\param{const wxBitmap\&}{ bmp}}
+
 \func{}{wxRegion}{\param{const wxBitmap\&}{ bmp},
-                  \param{const wxColour\&}{ transColour = wxNullColour},
+                  \param{const wxColour\&}{ transColour},
                  \param{int}{ tolerance = 0}}
 
 Constructs a region using the non-transparent pixels of a bitmap.  See
@@ -183,13 +185,19 @@ Finds the union of this region and another, rectangular region.
 
 Finds the union of this region and another region.
 
+\func{bool}{Union}{\param{const wxBitmap\&}{ bmp}}
+
+Finds the union of this region and the the non-transparent pixels of a
+bitmap. Bitmap's mask is used to determine transparency. If the bitmap doesn't
+have a mask, solid rectangle of bitmap's dimensions is used.
+
 \func{bool}{Union}{\param{const wxBitmap\&}{ bmp},
-                  \param{const wxColour\&}{ transColour = wxNullColour},
+                  \param{const wxColour\&}{ transColour},
                  \param{int}{ tolerance = 0}}
 
 Finds the union of this region and the the non-transparent pixels of a
-bitmap.  If the bitmap has a mask then it will be used, otherwise the
-colour to be treated as transparent may be specified, along with an
+bitmap. Colour to be treated as transparent is specified in the
+\arg{transColour} argument, along with an
 optional colour tolerance value.
 
 \wxheading{Return value}
index 652b5c8b47913dcae9fd01f5a0036ed4404c7b78..24ac542e838cb1e13ae3c33120761f1d9f69fad5 100644 (file)
@@ -30,13 +30,13 @@ public:
     :   wxRegionGeneric(rect)
     {}
     wxRegion() {}
+    wxRegion(const wxBitmap& bmp)
+    :   wxRegionGeneric()
+        { Union(bmp); }
     wxRegion(const wxBitmap& bmp,
-            const wxColour& transColour = wxNullColour,
-            int tolerance = 0)
+             const wxColour& transColour, int tolerance = 0)
     :   wxRegionGeneric()
-    {
-        Union(bmp, transColour, tolerance);
-    }
+        { Union(bmp, transColour, tolerance); }
     ~wxRegion() {}
     wxRegion(const wxRegion& r)
     :   wxRegionGeneric(r)
@@ -49,13 +49,13 @@ public:
     wxRegion(const NSRect *rects, int count);
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
     // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
     /* And because of function hiding: */
     bool Union(long x, long y, long width, long height)
     {   return wxRegionGeneric::Union(x,y,width,height); }
index 90356ba2ea8a05b0b212a2bdbfd9686bd7d1b1f5..5eec88fe8222f64bd5808674f80ef360f3e0613e 100644 (file)
@@ -72,9 +72,12 @@ public:
 
     wxRegion( size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
 
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -127,12 +130,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
 
 public:
index 90356ba2ea8a05b0b212a2bdbfd9686bd7d1b1f5..5eec88fe8222f64bd5808674f80ef360f3e0613e 100644 (file)
@@ -72,9 +72,12 @@ public:
 
     wxRegion( size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
 
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -127,12 +130,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
 
 public:
index ab04dd8975c2aa841e78e420ac2be5660909b282..24c060337f53a0b1c71d2ce3cbe55030ae52fd08 100644 (file)
@@ -45,9 +45,12 @@ public:
     wxRegion(const wxRect& rect);
     wxRegion( WXHRGN hRegion );
     wxRegion();
-    wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+    wxRegion(const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
+    wxRegion(const wxBitmap& bmp,
+             const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -122,12 +125,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
     // Internal
     bool Combine(long x, long y, long width, long height, wxRegionOp op);
index ab04dd8975c2aa841e78e420ac2be5660909b282..f71565a9649f577cf6396137657ca5404c9a85f7 100644 (file)
@@ -45,9 +45,12 @@ public:
     wxRegion(const wxRect& rect);
     wxRegion( WXHRGN hRegion );
     wxRegion();
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -122,12 +125,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
     // Internal
     bool Combine(long x, long y, long width, long height, wxRegionOp op);
index ec8f4474a21f8c90005ee3f51b6ea17767b5dee2..c9ba07c32b181ec01fd78ad5a8155913cc30d906 100644 (file)
@@ -41,9 +41,12 @@ public:
     wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
     wxRegion(const wxRect& rect);
     wxRegion(const MGLRegion& region);
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -108,12 +111,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
 
     // implementation from now on:
index 9fe9acd6131e20098d0d40fef1d5a552d08c2adf..a03e4e8ced48372a1df9c12cb58ea1211ad7c2f1 100644 (file)
@@ -48,9 +48,12 @@ public:
     wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
     wxRegion(const wxRect& rect);
     wxRegion();
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -112,12 +115,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
     // Internal
     bool Combine(wxCoord x, wxCoord y, wxCoord width, wxCoord height, wxRegionOp op);
index f145db60251cb5b3b8e5851e0f7f5b66bead6580..4539ec1d815df0ddec0287dae138c1ff8a416812 100644 (file)
@@ -48,9 +48,12 @@ public:
     wxRegion(const wxRect& rect);
     wxRegion(WXHRGN hRegion); // Hangs on to this region
     wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -119,12 +122,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
 // Internal
     bool Combine(wxCoord x, wxCoord y, wxCoord width, wxCoord height, wxRegionOp op);
index 4a60ed3fa02e8328cc5c654430cd7fbfcab23daf..6205315f22a614489c3d04138b3e7f7fbbdf99aa 100644 (file)
@@ -15,6 +15,7 @@
 #include "wx/list.h"
 #include "wx/gdiobj.h"
 #include "wx/gdicmn.h"
+#include "wx/bitmap.h"
 #include "wx/os2/private.h"
 
 class WXDLLEXPORT wxRect;
@@ -45,6 +46,15 @@ public:
             );
     wxRegion(const wxRect& rRect);
     wxRegion(WXHRGN hRegion, WXHDC hPS); // Hangs on to this region
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
+    wxRegion( const wxBitmap& bmp,
+              const wxColour& transColour, int tolerance = 0)
+    {
+        Union(bmp, transColour, tolerance);
+    }
 
     wxRegion();
     ~wxRegion();
@@ -179,13 +189,13 @@ public:
     wxBitmap        ConvertToBitmap(void) const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
-    bool            Union( const wxBitmap& rBmp
-                          ,const wxColour& rTransColour = wxNullColour
-                          ,int   nTolerance = 0
-                         );
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
+    bool Union(const wxBitmap& bmp,
+               const wxColour& transColour, int tolerance = 0);
 
     //
     // Does the region contain the point pt?
index 0b3c967d3c06da39512a08ffe249a745c187d19e..6d25a33e0df0d2227f9b938aa4fe7779f095ecd5 100644 (file)
@@ -74,9 +74,12 @@ public:
 
     wxRegion( size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
 
+    wxRegion( const wxBitmap& bmp)
+    {
+        Union(bmp);
+    }
     wxRegion( const wxBitmap& bmp,
-              const wxColour& transColour = wxNullColour,
-              int   tolerance = 0)
+              const wxColour& transColour, int tolerance = 0)
     {
         Union(bmp, transColour, tolerance);
     }
@@ -127,12 +130,13 @@ public:
     wxBitmap ConvertToBitmap() const;
 
     // Use the non-transparent pixels of a wxBitmap for the region to combine
-    // with this region.  If the bitmap has a mask then it will be used,
-    // otherwise the colour to be treated as transparent may be specified,
+    // with this region.  First version takes transparency from bitmap's mask,
+    // second lets the user specify the colour to be treated as transparent
     // along with an optional tolerance value.
+    // NOTE: implemented in common/rgncmn.cpp
+    bool Union(const wxBitmap& bmp);
     bool Union(const wxBitmap& bmp,
-               const wxColour& transColour = wxNullColour,
-               int   tolerance = 0);
+               const wxColour& transColour, int tolerance = 0);
 
 
 public:
index 581ecbf68eb209445f2a25e8134d3a8072a85a0d..2b1b5b6600a5b234021b58cc2d7e1043524c1ae7 100644 (file)
@@ -51,38 +51,15 @@ wxBitmap wxRegion::ConvertToBitmap() const
 //---------------------------------------------------------------------------
 
 #if wxUSE_IMAGE
-bool wxRegion::Union(const wxBitmap& bmp,
-                     const wxColour& transColour,
-                     int   tolerance)
-#else
-bool wxRegion::Union(const wxBitmap& WXUNUSED(bmp),
-                     const wxColour& WXUNUSED(transColour),
-                     int   WXUNUSED(tolerance))
-#endif
+static bool DoRegionUnion(wxRegion& region,
+                          const wxImage& image,
+                          unsigned char loR,
+                          unsigned char loG,
+                          unsigned char loB,
+                          int tolerance)
 {
-#if wxUSE_IMAGE
-    unsigned char loR, loG, loB;
     unsigned char hiR, hiG, hiB;
 
-    wxCHECK_MSG((bmp.GetMask() != NULL) || transColour.Ok(),
-                FALSE,
-                wxT("Either the bitmap should have a mask or a colour should be given."));
-
-    wxImage image = bmp.ConvertToImage();
-
-    if (image.HasMask())
-    {
-        loR = image.GetMaskRed();
-        loG = image.GetMaskGreen();
-        loB = image.GetMaskBlue();
-    }
-    else
-    {
-        loR = transColour.Red();
-        loG = transColour.Green();
-        loB = transColour.Blue();
-    }
-
     hiR = wxMin(0xFF, loR + tolerance);
     hiG = wxMin(0xFF, loG + tolerance);
     hiB = wxMin(0xFF, loB + tolerance);
@@ -117,16 +94,61 @@ bool wxRegion::Union(const wxBitmap& WXUNUSED(bmp),
             if (x > x0) {
                 rect.x = x0;
                 rect.width = x - x0;
-                Union(rect);
+                region.Union(rect);
             }
         }
     }
 
     return true;
+}
+
+bool wxRegion::Union(const wxBitmap& bmp)
+{
+    if (bmp.GetMask())
+    {
+        wxImage image = bmp.ConvertToImage();
+        wxASSERT_MSG( image.HasMask(), _T("wxBitmap::ConvertToImage doesn't preserve mask?") );
+        return DoRegionUnion(*this, image,
+                             image.GetMaskRed(),
+                             image.GetMaskGreen(),
+                             image.GetMaskBlue(),
+                             0);
+    }
+    else
+    {
+        return Union(0, 0, bmp.GetWidth(), bmp.GetHeight());
+    }
+}
+
+bool wxRegion::Union(const wxBitmap& bmp,
+                     const wxColour& transColour,
+                     int   tolerance)
+{
+    wxImage image = bmp.ConvertToImage();
+    return DoRegionUnion(*this, image,
+                         transColour.Red(),
+                         transColour.Green(),
+                         transColour.Blue(),
+                         tolerance);
+}
+
 #else
+
+bool wxRegion::Union(const wxBitmap& WXUNUSED(bmp))
+{
+    // No wxImage support
+    return false;
+}
+
+bool wxRegion::Union(const wxBitmap& WXUNUSED(bmp),
+                     const wxColour& WXUNUSED(transColour),
+                     int   WXUNUSED(tolerance))
+{
     // No wxImage support
     return false;
-#endif
 }
 
+#endif
+
 //---------------------------------------------------------------------------
index 759be00a01e04cc204b18d8d031ea081b054cfcf..a4d17981116a0e95a94d374f9bfd8ed853b9a22c 100644 (file)
@@ -150,10 +150,7 @@ void wxTaskBarIconArea::SetTrayIcon(const wxBitmap& bmp)
     }
 
     wxRegion region;
-    if (m_bmp.GetMask())
-        region.Union(m_bmp);
-    else
-        region.Union(0,0, iconsize.x, iconsize.y);
+    region.Union(m_bmp);
 
     // if the bitmap is smaller than the window, offset it:
     if (winsize != iconsize)