Fixed adding 32-bit icons with transparency to wxImageList.

ComCtl32 prior to 6.0 doesn't support images with alpha channel so if we have 32-bit icon with transparency we need to convert it to a wxBitmap and then add this bitmap to wxImageList. If required, bitmap with alpha channel will be converted to the mask in wxImageList::Add.
This commit is contained in:
Artur Wieczorek 2016-02-16 21:23:10 +01:00
parent a8b1894628
commit 53b6806b50

View File

@ -230,6 +230,19 @@ int wxImageList::Add(const wxBitmap& bitmap, const wxColour& maskColour)
// Adds a bitmap and mask from an icon. // Adds a bitmap and mask from an icon.
int wxImageList::Add(const wxIcon& icon) int wxImageList::Add(const wxIcon& icon)
{ {
// ComCtl32 prior 6.0 doesn't support images with alpha
// channel so if we have 32-bit icon with transparency
// we need to add it as a wxBitmap via dedicated method
// where alpha channel will be converted to the mask.
if ( wxApp::GetComCtl32Version() < 600 )
{
wxBitmap bmp(icon);
if ( bmp.HasAlpha() )
{
return Add(bmp);
}
}
int index = ImageList_AddIcon(GetHImageList(), GetHiconOf(icon)); int index = ImageList_AddIcon(GetHImageList(), GetHiconOf(icon));
if ( index == -1 ) if ( index == -1 )
{ {
@ -292,6 +305,19 @@ bool wxImageList::Replace(int index,
// Replaces a bitmap and mask from an icon. // Replaces a bitmap and mask from an icon.
bool wxImageList::Replace(int i, const wxIcon& icon) bool wxImageList::Replace(int i, const wxIcon& icon)
{ {
// ComCtl32 prior 6.0 doesn't support images with alpha
// channel so if we have 32-bit icon with transparency
// we need to replace it as a wxBitmap via dedicated method
// where alpha channel will be converted to the mask.
if ( wxApp::GetComCtl32Version() < 600 )
{
wxBitmap bmp(icon);
if ( bmp.HasAlpha() )
{
return Replace(i, bmp);
}
}
bool ok = ImageList_ReplaceIcon(GetHImageList(), i, GetHiconOf(icon)) != -1; bool ok = ImageList_ReplaceIcon(GetHImageList(), i, GetHiconOf(icon)) != -1;
if ( !ok ) if ( !ok )
{ {