X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b87142167b4460ec4bf1d5bbed6c92218355868..421962befc8d6b340e9c2d6201cf73574319409d:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 8b84775f38..8c7adc9768 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -278,27 +278,31 @@ private: wxDECLARE_NO_COPY_CLASS(wxBrushAttrsSetter); }; -// this class saves the old stretch blit mode during its life time +#ifdef __WXWINCE__ + +#define SET_STRETCH_BLT_MODE(hdc) + +#else // !__WXWINCE__ + +// this class sets the stretch blit mode to COLORONCOLOR during its lifetime +// +// don't use it directly, use SET_STRETCH_BLT_MODE() macro instead as it +// expands to nothing under WinCE which doesn't have SetStretchBltMode() class StretchBltModeChanger { public: - StretchBltModeChanger(HDC hdc, - int WXUNUSED_IN_WINCE(mode)) + StretchBltModeChanger(HDC hdc) : m_hdc(hdc) { -#ifndef __WXWINCE__ - m_modeOld = ::SetStretchBltMode(m_hdc, mode); + m_modeOld = ::SetStretchBltMode(m_hdc, COLORONCOLOR); if ( !m_modeOld ) wxLogLastError(_T("SetStretchBltMode")); -#endif } ~StretchBltModeChanger() { -#ifndef __WXWINCE__ if ( !::SetStretchBltMode(m_hdc, m_modeOld) ) wxLogLastError(_T("SetStretchBltMode")); -#endif } private: @@ -309,6 +313,11 @@ private: wxDECLARE_NO_COPY_CLASS(StretchBltModeChanger); }; +#define SET_STRETCH_BLT_MODE(hdc) \ + StretchBltModeChanger wxMAKE_UNIQUE_NAME(stretchModeChanger)(hdc) + +#endif // __WXWINCE__/!__WXWINCE__ + #if wxUSE_DYNLIB_CLASS // helper class to cache dynamically loaded libraries and not attempt reloading @@ -457,12 +466,10 @@ void wxMSWDCImpl::SelectOldObjects(WXHDC dc) if (m_oldBitmap) { ::SelectObject((HDC) dc, (HBITMAP) m_oldBitmap); -#ifdef __WXDEBUG__ if (m_selectedBitmap.IsOk()) { m_selectedBitmap.SetSelectedInto(NULL); } -#endif } m_oldBitmap = 0; if (m_oldPen) @@ -1296,6 +1303,8 @@ void wxMSWDCImpl::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool return; } + SET_STRETCH_BLT_MODE(GetHdc()); + if ( useMask ) { wxMask *mask = bmp.GetMask(); @@ -1724,7 +1733,7 @@ void wxMSWDCImpl::SetRop(WXHDC dc) if ( !dc || m_logicalFunction < 0 ) return; - int rop wxDUMMY_INITIALIZE(0); + int rop; switch (m_logicalFunction) { @@ -1744,6 +1753,9 @@ void wxMSWDCImpl::SetRop(WXHDC dc) case wxNAND: rop = R2_NOTMASKPEN; break; case wxOR: rop = R2_MERGEPEN; break; case wxSET: rop = R2_WHITE; break; + default: + wxFAIL_MSG( wxS("unknown logical function") ); + return; } SetROP2(GetHdc(), rop); @@ -2211,9 +2223,7 @@ bool wxMSWDCImpl::DoStretchBlit(wxCoord xdest, wxCoord ydest, wxLogLastError(wxT("BitBlt")); } -#ifndef __WXWINCE__ - StretchBltModeChanger changeMode(dc_buffer, COLORONCOLOR); -#endif + SET_STRETCH_BLT_MODE(GetHdc()); // copy src to buffer using selected raster op if ( !::StretchBlt(dc_buffer, 0, 0, dstWidth, dstHeight, @@ -2281,7 +2291,7 @@ bool wxMSWDCImpl::DoStretchBlit(wxCoord xdest, wxCoord ydest, sizeof(ds), &ds) == sizeof(ds) ) { - StretchBltModeChanger changeMode(GetHdc(), COLORONCOLOR); + SET_STRETCH_BLT_MODE(GetHdc()); // Figure out what co-ordinate system we're supposed to specify // ysrc in. @@ -2320,9 +2330,7 @@ bool wxMSWDCImpl::DoStretchBlit(wxCoord xdest, wxCoord ydest, #endif // __WXWINCE__ { -#ifndef __WXWINCE__ - StretchBltModeChanger changeMode(GetHdc(), COLORONCOLOR); -#endif + SET_STRETCH_BLT_MODE(GetHdc()); if ( !::StretchBlt (