#endif
#include "wx/imaglist.h"
+#include "wx/dc.h"
+#include "wx/msw/dc.h"
#include "wx/msw/private.h"
// ----------------------------------------------------------------------------
int flags,
bool solidBackground)
{
- HDC hDC = GetHdcOf(dc);
+ wxDCImpl *impl = dc.GetImpl();
+ wxMSWDCImpl *msw_impl = wxDynamicCast( impl, wxMSWDCImpl );
+ if (!msw_impl)
+ return false;
+
+ HDC hDC = GetHdcOf(*msw_impl);
wxCHECK_MSG( hDC, false, _T("invalid wxDC in wxImageList::Draw") );
COLORREF clr = CLR_NONE; // transparent by default
// Get the bitmap
wxBitmap wxImageList::GetBitmap(int index) const
{
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && wxUSE_IMAGE
int bmp_width = 0, bmp_height = 0;
GetSize(index, bmp_width, bmp_height);
static HBITMAP GetMaskForImage(const wxBitmap& bitmap, const wxBitmap& mask)
{
+#if wxUSE_IMAGE
+ wxBitmap bitmapWithMask;
+#endif // wxUSE_IMAGE
+
HBITMAP hbmpMask;
wxMask *pMask;
bool deleteMask = false;
else
{
pMask = bitmap.GetMask();
+
+#if wxUSE_IMAGE
+ // check if we don't have alpha in this bitmap -- we can create a mask
+ // from it (and we need to do it for the older systems which don't
+ // support 32bpp bitmaps natively)
+ if ( !pMask )
+ {
+ wxImage img(bitmap.ConvertToImage());
+ if ( img.HasAlpha() )
+ {
+ img.ConvertAlphaToMask();
+ bitmapWithMask = wxBitmap(img);
+ pMask = bitmapWithMask.GetMask();
+ }
+ }
+#endif // wxUSE_IMAGE
+
if ( !pMask )
{
// use the light grey count as transparent: the trouble here is