#include "wx/msw/dib.h"
#endif
-#ifdef wxHAVE_RAW_BITMAP
+#ifdef wxHAS_RAW_BITMAP
#include "wx/rawbmp.h"
#endif
// course (except in !wxUSE_WXDIB), but is completely illogical
wxBitmap *self = wx_const_cast(wxBitmap *, this);
+ wxBitmapRefData *selfdata;
#if wxUSE_WXDIB
// copy the other bitmap
if ( data->m_hBitmap )
{
wxDIB dib((HBITMAP)(data->m_hBitmap));
self->CopyFromDIB(dib);
+
+ selfdata = wx_static_cast(wxBitmapRefData *, m_refData);
+ selfdata->m_hasAlpha = data->m_hasAlpha;
}
else
#endif // wxUSE_WXDIB
{
// copy the bitmap data
- self->m_refData = new wxBitmapRefData(*data);
+ selfdata = new wxBitmapRefData(*data);
+ self->m_refData = selfdata;
}
- wxBitmapRefData * const
- selfdata = wx_static_cast(wxBitmapRefData *, m_refData);
-
// copy also the mask
wxMask * const maskSrc = data->GetMask();
if ( maskSrc )
(void)Create(w, h, dc);
}
-wxBitmap::wxBitmap(const void* data, long type, int width, int height, int depth)
+wxBitmap::wxBitmap(const void* data, wxBitmapType type, int width, int height, int depth)
{
(void)Create(data, type, width, height, depth);
}
wxBitmap::wxBitmap(const wxString& filename, wxBitmapType type)
{
- LoadFile(filename, (int)type);
+ LoadFile(filename, type);
}
bool wxBitmap::Create(int width, int height, int depth)
wxCHECK_MSG( dc.IsOk(), false, _T("invalid HDC in wxBitmap::Create()") );
const wxMSWDCImpl *impl = wxDynamicCast( dc.GetImpl(), wxMSWDCImpl );
-
+
if (impl)
return DoCreate(width, height, -1, impl->GetHDC());
else
_T("invalid HDC in wxBitmap::CreateFromImage()") );
const wxMSWDCImpl *impl = wxDynamicCast( dc.GetImpl(), wxMSWDCImpl );
-
+
if (impl)
return CreateFromImage(image, -1, impl->GetHDC());
else
if ( !dib.IsOk() )
return false;
- if ( depth == -1 )
- depth = dib.GetDepth(); // Get depth from image if none specified
+ const bool hasAlpha = image.HasAlpha();
// store the bitmap parameters
- wxBitmapRefData *refData = new wxBitmapRefData;
+ wxBitmapRefData * const refData = new wxBitmapRefData;
refData->m_width = w;
refData->m_height = h;
- refData->m_hasAlpha = image.HasAlpha();
+ refData->m_hasAlpha = hasAlpha;
+ refData->m_depth = depth == -1 ? (hasAlpha ? 32 : 24)
+ : depth;
m_refData = refData;
// are we going to use DIB?
//
// NB: DDBs don't support alpha so if we have alpha channel we must use DIB
- if ( image.HasAlpha() || wxShouldCreateDIB(w, h, depth, hdc) )
+ if ( hasAlpha || wxShouldCreateDIB(w, h, depth, hdc) )
{
// don't delete the DIB section in dib object dtor
hbitmap = dib.Detach();
refData->m_isDIB = true;
- refData->m_depth = depth;
}
#ifndef ALWAYS_USE_DIB
else // we need to convert DIB to DDB
{
hbitmap = dib.CreateDDB((HDC)hdc);
-
- refData->m_depth = depth;
}
#endif // !ALWAYS_USE_DIB
// loading and saving bitmaps
// ----------------------------------------------------------------------------
-bool wxBitmap::LoadFile(const wxString& filename, long type)
+bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type)
{
UnRef();
return false;
}
-bool wxBitmap::Create(const void* data, long type, int width, int height, int depth)
+bool wxBitmap::Create(const void* data, wxBitmapType type, int width, int height, int depth)
{
UnRef();
}
bool wxBitmap::SaveFile(const wxString& filename,
- int type,
- const wxPalette *palette)
+ wxBitmapType type,
+ const wxPalette *palette) const
{
wxBitmapHandler *handler = wxDynamicCast(FindHandler(type), wxBitmapHandler);
{
SelectInHDC selectDst(dcDst, GetHbitmapOf(ret));
-
+
if ( !selectDst )
{
wxLogLastError(_T("SelectObject(destBitmap)"));
// raw bitmap access support
// ----------------------------------------------------------------------------
-#ifdef wxHAVE_RAW_BITMAP
+#ifdef wxHAS_RAW_BITMAP
+
void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
{
#if wxUSE_WXDIB
}
#endif // wxUSE_WXDIB
}
-#endif // #ifdef wxHAVE_RAW_BITMAP
+#endif // wxHAS_RAW_BITMAP
// ----------------------------------------------------------------------------
// wxMask
bool wxBitmapHandler::Create(wxGDIImage *image,
const void* data,
- long flags,
+ wxBitmapType type,
int width, int height, int depth)
{
wxBitmap *bitmap = wxDynamicCast(image, wxBitmap);
- return bitmap && Create(bitmap, data, flags, width, height, depth);
+ return bitmap && Create(bitmap, data, type, width, height, depth);
}
bool wxBitmapHandler::Load(wxGDIImage *image,
const wxString& name,
- long flags,
+ wxBitmapType type,
int width, int height)
{
wxBitmap *bitmap = wxDynamicCast(image, wxBitmap);
- return bitmap && LoadFile(bitmap, name, flags, width, height);
+ return bitmap && LoadFile(bitmap, name, type, width, height);
}
-bool wxBitmapHandler::Save(wxGDIImage *image,
+bool wxBitmapHandler::Save(const wxGDIImage *image,
const wxString& name,
- int type)
+ wxBitmapType type) const
{
wxBitmap *bitmap = wxDynamicCast(image, wxBitmap);
bool wxBitmapHandler::Create(wxBitmap *WXUNUSED(bitmap),
const void* WXUNUSED(data),
- long WXUNUSED(type),
+ wxBitmapType WXUNUSED(type),
int WXUNUSED(width),
int WXUNUSED(height),
int WXUNUSED(depth))
bool wxBitmapHandler::LoadFile(wxBitmap *WXUNUSED(bitmap),
const wxString& WXUNUSED(name),
- long WXUNUSED(type),
+ wxBitmapType WXUNUSED(type),
int WXUNUSED(desiredWidth),
int WXUNUSED(desiredHeight))
{
return false;
}
-bool wxBitmapHandler::SaveFile(wxBitmap *WXUNUSED(bitmap),
+bool wxBitmapHandler::SaveFile(const wxBitmap *WXUNUSED(bitmap),
const wxString& WXUNUSED(name),
- int WXUNUSED(type),
- const wxPalette *WXUNUSED(palette))
+ wxBitmapType WXUNUSED(type),
+ const wxPalette *WXUNUSED(palette)) const
{
return false;
}