Fix compatibility breakage with wxMask::Create() in wxOSX (#1019)

Defining a Mac-specific Create(wxMemoryBuffer) overload hid the other
Create() overloads, which are actually part of the public API, so they
couldn't be used any longer since the changes of
e7d21f6638

Fix this by renaming this Create() to OSXCreate(), to avoid hiding the
base class methods.

Also remove Mac-specific ctor taking wxMemoryBuffer, this is confusing
and can be avoided by just calling OSXCreate() directly in the only
place where it is used.
This commit is contained in:
VZ
2018-11-09 17:52:58 +01:00
committed by Stefan Csomor
parent e484a2db19
commit cce9ef9d53
2 changed files with 9 additions and 17 deletions

View File

@@ -47,13 +47,8 @@ public:
// Construct a mask from a mono bitmap (black meaning show pixels, white meaning transparent) // Construct a mask from a mono bitmap (black meaning show pixels, white meaning transparent)
wxMask(const wxBitmap& bitmap); wxMask(const wxBitmap& bitmap);
// implementation helper only : construct a mask from a 32 bit memory buffer
wxMask(const wxMemoryBuffer& buf, int width , int height , int bytesPerRow ) ;
virtual ~wxMask(); virtual ~wxMask();
bool Create(const wxMemoryBuffer& buf, int width , int height , int bytesPerRow ) ;
wxBitmap GetBitmap() const; wxBitmap GetBitmap() const;
// Implementation below // Implementation below
@@ -71,6 +66,9 @@ public:
WXHBITMAP GetHBITMAP() const ; WXHBITMAP GetHBITMAP() const ;
// implementation helper only : construct a mask from a 32 bit memory buffer
bool OSXCreate(const wxMemoryBuffer& buf, int width , int height , int bytesPerRow ) ;
protected: protected:
// this function is called from Create() to free the existing mask data // this function is called from Create() to free the existing mask data
virtual void FreeData() wxOVERRIDE; virtual void FreeData() wxOVERRIDE;

View File

@@ -1062,7 +1062,9 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const
maskbuf.UngetWriteBuf( maskbufsize ) ; maskbuf.UngetWriteBuf( maskbufsize ) ;
} }
ret.SetMask( new wxMask( maskbuf , destwidth , destheight , rowBytes ) ) ; wxMask* const mask = new wxMask();
mask->OSXCreate( maskbuf , destwidth , destheight , rowBytes );
ret.SetMask(mask) ;
} }
else if ( HasAlpha() ) else if ( HasAlpha() )
ret.UseAlpha() ; ret.UseAlpha() ;
@@ -1505,22 +1507,14 @@ wxMask::wxMask(const wxMask &tocopy) : wxMaskBase()
wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour ) wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour )
{ {
Init() ; Init() ;
wxMaskBase::Create( bitmap, colour ); Create( bitmap, colour );
} }
// Construct a mask from a mono bitmap (copies the bitmap). // Construct a mask from a mono bitmap (copies the bitmap).
wxMask::wxMask( const wxBitmap& bitmap ) wxMask::wxMask( const wxBitmap& bitmap )
{ {
Init() ; Init() ;
wxMaskBase::Create( bitmap ); Create( bitmap );
}
// Construct a mask from a mono bitmap (copies the bitmap).
wxMask::wxMask( const wxMemoryBuffer& data, int width , int height , int bytesPerRow )
{
Init() ;
Create( data, width , height , bytesPerRow );
} }
wxMask::~wxMask() wxMask::~wxMask()
@@ -1591,7 +1585,7 @@ void wxMask::RealizeNative()
// Create a mask from a mono bitmap (copies the bitmap). // Create a mask from a mono bitmap (copies the bitmap).
bool wxMask::Create(const wxMemoryBuffer& data,int width , int height , int bytesPerRow) bool wxMask::OSXCreate(const wxMemoryBuffer& data,int width , int height , int bytesPerRow)
{ {
wxASSERT( data.GetDataLen() == (size_t)(height * bytesPerRow) ) ; wxASSERT( data.GetDataLen() == (size_t)(height * bytesPerRow) ) ;