Fix adding wxBitmap with mask to generic wxImageList
If wxBitmap with mask is added to wxImageList that doesn't support masks we need to convert a bitmap mask to alpha channel values prior to adding bitmap to the list to preserve bitmap transparency.
This commit is contained in:
parent
f3800cee1f
commit
dfb09d2ae9
2 changed files with 27 additions and 2 deletions
|
|
@ -58,6 +58,7 @@ private:
|
|||
const wxBitmap *DoGetPtr(int index) const;
|
||||
|
||||
wxVector<wxBitmap> m_images;
|
||||
bool m_useMask;
|
||||
|
||||
// Size of a single bitmap in the list.
|
||||
wxSize m_size;
|
||||
|
|
|
|||
|
|
@ -42,9 +42,10 @@ int wxGenericImageList::GetImageCount() const
|
|||
return static_cast<int>(m_images.size());
|
||||
}
|
||||
|
||||
bool wxGenericImageList::Create( int width, int height, bool WXUNUSED(mask), int WXUNUSED(initialCount) )
|
||||
bool wxGenericImageList::Create( int width, int height, bool mask, int WXUNUSED(initialCount) )
|
||||
{
|
||||
m_size = wxSize(width, height);
|
||||
m_useMask = mask;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -82,7 +83,30 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
|
|||
"All bitmaps in wxImageList must have the same size" );
|
||||
}
|
||||
|
||||
m_images.push_back(bitmap);
|
||||
wxBitmap bmp(bitmap);
|
||||
if ( !m_useMask )
|
||||
{
|
||||
if ( bmp.GetMask() )
|
||||
{
|
||||
if ( bmp.HasAlpha() )
|
||||
{
|
||||
// TODO: It would be better to blend a mask with existing alpha values.
|
||||
bmp.SetMask(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Convert a mask to alpha values.
|
||||
#if wxUSE_IMAGE
|
||||
wxImage img = bmp.ConvertToImage();
|
||||
img.InitAlpha();
|
||||
bmp = img;
|
||||
#else
|
||||
bmp.SetMask(NULL);
|
||||
#endif // wxUSE_IMAGE
|
||||
}
|
||||
}
|
||||
}
|
||||
m_images.push_back(bmp);
|
||||
|
||||
return GetImageCount() - 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue