X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17a6a2e097cf7c2c952685f3529c527bfb71a6bc..537a0880d225ab023024f6f5fc8955666b7641b8:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index b723df633d..0ec26a8b0e 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -54,7 +54,6 @@ #endif #include -#include #if wxUSE_COMMON_DIALOGS && !defined(__WXMICROWIN__) #include @@ -94,11 +93,6 @@ static const int VIEWPORT_EXTENT = 1000; static const int MM_POINTS = 9; static const int MM_METRIC = 10; -// usually this is defined in math.h -#ifndef M_PI - static const double M_PI = 3.14159265358979323846; -#endif // M_PI - // ROPs which don't have standard names (see "Ternary Raster Operations" in the // MSDN docs for how this and other numbers in wxDC::Blit() are obtained) #define DSTCOPY 0x00AA0029 // a.k.a. NOP operation @@ -553,10 +547,10 @@ void wxDC::Clear() ::FillRect(GetHdc(), &rect, brush); ::DeleteObject(brush); +#ifndef __WXWINCE__ int width = DeviceToLogicalXRel(VIEWPORT_EXTENT)*m_signX, height = DeviceToLogicalYRel(VIEWPORT_EXTENT)*m_signY; -#ifndef __WXWINCE__ ::SetMapMode(GetHdc(), MM_ANISOTROPIC); ::SetViewportExtEx(GetHdc(), VIEWPORT_EXTENT, VIEWPORT_EXTENT, NULL); @@ -819,7 +813,7 @@ wxDC::DoDrawPolyPolygon(int n, { #ifdef __WXWINCE__ wxDCBase::DoDrawPolyPolygon(n, count, points, xoffset, yoffset, fillStyle); -#else +#else WXMICROWIN_CHECK_HDC wxColourChanger cc(*this); // needed for wxSTIPPLE_MASK_OPAQUE handling @@ -840,11 +834,11 @@ wxDC::DoDrawPolyPolygon(int n, } #ifndef __WXWINCE__ int prev = SetPolyFillMode(GetHdc(),fillStyle==wxODDEVEN_RULE?ALTERNATE:WINDING); -#endif +#endif (void)PolyPolygon(GetHdc(), cpoints, count, n); #ifndef __WXWINCE__ SetPolyFillMode(GetHdc(),prev); -#endif +#endif delete[] cpoints; } else @@ -854,11 +848,11 @@ wxDC::DoDrawPolyPolygon(int n, #ifndef __WXWINCE__ int prev = SetPolyFillMode(GetHdc(),fillStyle==wxODDEVEN_RULE?ALTERNATE:WINDING); -#endif +#endif (void)PolyPolygon(GetHdc(), (POINT*) points, count, n); #ifndef __WXWINCE__ SetPolyFillMode(GetHdc(),prev); -#endif +#endif } #endif // __WXWINCE__ @@ -1911,8 +1905,11 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, WXMICROWIN_CHECK_HDC_RET(false) + // if either the source or destination has alpha channel, we must use + // AlphaBlt() as other function don't handle it correctly const wxBitmap& bmpSrc = source->m_selectedBitmap; - if ( bmpSrc.Ok() && bmpSrc.HasAlpha() ) + if ( bmpSrc.Ok() && (bmpSrc.HasAlpha() || + (m_selectedBitmap.Ok() && m_selectedBitmap.HasAlpha())) ) { if ( AlphaBlt(GetHdc(), xdest, ydest, width, height, GetHdcOf(*source), bmpSrc) ) @@ -2128,7 +2125,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, // On Win9x this API fails most (all?) of the time, so // logging it becomes quite distracting. Since it falls // back to the code below this is not really serious, so - // don't log it. + // don't log it. //wxLogLastError(wxT("StretchDIBits")); } else @@ -2458,6 +2455,7 @@ static bool AlphaBlt(HDC hdcDst, #else // !wxHAVE_RAW_BITMAP // no wxAlphaBlend() neither, fall back to using simple BitBlt() (we lose // alpha but at least something will be shown like this) + wxUnusedVar(bmp); return false; #endif // wxHAVE_RAW_BITMAP }