#endif
#include "wx/imaglist.h"
+#include "wx/dc.h"
+#include "wx/msw/dc.h"
#include "wx/msw/private.h"
// ----------------------------------------------------------------------------
bool wxImageList::RemoveAll()
{
// don't use ImageList_RemoveAll() because mingw32 headers don't have it
- int count = ImageList_GetImageCount(GetHImageList());
- for ( int i = 0; i < count; i++ )
- {
- // the image indexes are shifted, so we should always remove the first
- // one
- (void)Remove(0);
- }
-
- return true;
+ return Remove(-1);
}
// Draws the given image on a dc at the specified position.
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