X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3fb1e0594abc234aed02f0b7e614bba7dabc4e99..b85b06e13d22e7fc1604ec1a49caa1227a1b3d36:/src/msw/bitmap.cpp?ds=sidebyside diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index 5a46ab36d7..ca1456ec66 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -56,7 +56,7 @@ #endif // no CLR_INVALID // ---------------------------------------------------------------------------- -// Bitmap data +// wxBitmapRefData // ---------------------------------------------------------------------------- class WXDLLEXPORT wxBitmapRefData : public wxGDIImageRefData @@ -92,12 +92,12 @@ public: // MSW-specific // ------------ -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL // this field is solely for error checking: we detect selecting a bitmap // into more than one DC at once or deleting a bitmap still selected into a // DC (both are serious programming errors under Windows) wxDC *m_selectedInto; -#endif // __WXDEBUG__ +#endif // wxDEBUG_LEVEL #if wxUSE_WXDIB // when GetRawData() is called for a DDB we need to convert it to a DIB @@ -185,7 +185,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject) wxBitmapRefData::wxBitmapRefData() { -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL m_selectedInto = NULL; #endif m_bitmapMask = NULL; @@ -202,7 +202,7 @@ wxBitmapRefData::wxBitmapRefData() wxBitmapRefData::wxBitmapRefData(const wxBitmapRefData& data) : wxGDIImageRefData(data) { -#ifdef __WXDEBUG__ +#if wxDEBUG_LEVEL m_selectedInto = NULL; #endif @@ -254,7 +254,7 @@ wxGDIImageRefData *wxBitmap::CreateData() const wxGDIRefData *wxBitmap::CloneGDIRefData(const wxGDIRefData *dataOrig) const { const wxBitmapRefData * - data = wx_static_cast(const wxBitmapRefData *, dataOrig); + data = static_cast(dataOrig); if ( !data ) return NULL; @@ -262,25 +262,27 @@ wxGDIRefData *wxBitmap::CloneGDIRefData(const wxGDIRefData *dataOrig) const // wxBitmapRefData using its copy ctor but instead it modifies this // bitmap itself and then returns its m_refData -- which works, of // course (except in !wxUSE_WXDIB), but is completely illogical - wxBitmap *self = wx_const_cast(wxBitmap *, this); + wxBitmap *self = const_cast(this); + wxBitmapRefData *selfdata; #if wxUSE_WXDIB // copy the other bitmap if ( data->m_hBitmap ) { wxDIB dib((HBITMAP)(data->m_hBitmap)); self->CopyFromDIB(dib); + + selfdata = static_cast(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 ) @@ -510,11 +512,6 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth) #endif } -wxBitmap::wxBitmap(int w, int h, int d) -{ - (void)Create(w, h, d); -} - wxBitmap::wxBitmap(int w, int h, const wxDC& dc) { (void)Create(w, h, dc); @@ -540,7 +537,7 @@ bool wxBitmap::Create(int width, int height, const wxDC& dc) 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 @@ -816,7 +813,7 @@ bool wxBitmap::CreateFromImage(const wxImage& image, const wxDC& dc) _T("invalid HDC in wxBitmap::CreateFromImage()") ); const wxMSWDCImpl *impl = wxDynamicCast( dc.GetImpl(), wxMSWDCImpl ); - + if (impl) return CreateFromImage(image, -1, impl->GetHDC()); else @@ -839,14 +836,17 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth, WXHDC hdc) if ( !dib.IsOk() ) return false; - if ( depth == -1 ) - depth = dib.GetDepth(); // Get depth from image if none specified + const bool hasAlpha = image.HasAlpha(); + + if (depth == -1) + depth = dib.GetDepth(); // 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; m_refData = refData; @@ -857,20 +857,17 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth, WXHDC hdc) // 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 @@ -1130,7 +1127,7 @@ wxBitmap wxBitmap::GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const { SelectInHDC selectDst(dcDst, GetHbitmapOf(ret)); - + if ( !selectDst ) { wxLogLastError(_T("SelectObject(destBitmap)")); @@ -1173,13 +1170,13 @@ wxBitmap wxBitmap::GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const wxPalette* wxBitmap::GetPalette() const { return GetBitmapData() ? &GetBitmapData()->m_bitmapPalette - : (wxPalette *) NULL; + : NULL; } #endif wxMask *wxBitmap::GetMask() const { - return GetBitmapData() ? GetBitmapData()->GetMask() : (wxMask *) NULL; + return GetBitmapData() ? GetBitmapData()->GetMask() : NULL; } wxBitmap wxBitmap::GetMaskBitmap() const @@ -1191,14 +1188,14 @@ wxBitmap wxBitmap::GetMaskBitmap() const return bmp; } -#ifdef __WXDEBUG__ - wxDC *wxBitmap::GetSelectedInto() const { - return GetBitmapData() ? GetBitmapData()->m_selectedInto : (wxDC *) NULL; -} - +#if wxDEBUG_LEVEL + return GetBitmapData() ? GetBitmapData()->m_selectedInto : NULL; +#else + return NULL; #endif +} void wxBitmap::UseAlpha() { @@ -1215,15 +1212,15 @@ bool wxBitmap::HasAlpha() const // wxBitmap setters // ---------------------------------------------------------------------------- -#ifdef __WXDEBUG__ - void wxBitmap::SetSelectedInto(wxDC *dc) { +#if wxDEBUG_LEVEL if ( GetBitmapData() ) GetBitmapData()->m_selectedInto = dc; -} - +#else + wxUnusedVar(dc); #endif +} #if wxUSE_PALETTE