X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fdaad94e75273fa586ec9af9d53518222f9699d0..79cb759dc8580da2e82e880cd94a08cd38bb814e:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 5a8608840b..f99f3963bf 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -399,6 +399,16 @@ wxBrushAttrsSetter::wxBrushAttrsSetter(wxMSWDCImpl& dc) } } +// ---------------------------------------------------------------------------- +// wxDC MSW-specific methods +// ---------------------------------------------------------------------------- + +WXHDC wxDC::GetHDC() const +{ + wxMSWDCImpl * const impl = wxDynamicCast(GetImpl(), wxMSWDCImpl); + return impl ? impl->GetHDC() : 0; +} + // --------------------------------------------------------------------------- // wxMSWDCImpl // --------------------------------------------------------------------------- @@ -695,7 +705,7 @@ void wxMSWDCImpl::Clear() bool wxMSWDCImpl::DoFloodFill(wxCoord WXUNUSED_IN_WINCE(x), wxCoord WXUNUSED_IN_WINCE(y), const wxColour& WXUNUSED_IN_WINCE(col), - int WXUNUSED_IN_WINCE(style)) + wxFloodFillStyle WXUNUSED_IN_WINCE(style)) { #ifdef __WXWINCE__ return false; @@ -878,7 +888,7 @@ void wxMSWDCImpl::DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, - int WXUNUSED_IN_WINCE(fillStyle)) + wxPolygonFillMode WXUNUSED_IN_WINCE(fillStyle)) { WXMICROWIN_CHECK_HDC @@ -927,7 +937,7 @@ wxMSWDCImpl::DoDrawPolyPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, - int fillStyle) + wxPolygonFillMode fillStyle) { #ifdef __WXWINCE__ wxDCImpl::DoDrawPolyPolygon(n, count, points, xoffset, yoffset, fillStyle); @@ -1074,10 +1084,15 @@ void wxMSWDCImpl::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord hei wxBrushAttrsSetter cc(*this); // needed for wxSTIPPLE_MASK_OPAQUE handling - wxCoord x2 = (x+width); - wxCoord y2 = (y+height); + // +1 below makes the ellipse more similar to other platforms. + // In particular, DoDrawEllipse(x,y,1,1) should draw one point. + wxCoord x2 = x + width + 1; + wxCoord y2 = y + height + 1; + + // Problem: Windows GDI Ellipse() with x2-x == y2-y == 3 and transparent + // pen doesn't draw anything. Should we provide a workaround? - (void)Ellipse(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2)); + ::Ellipse(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2)); CalcBoundingBox(x, y); CalcBoundingBox(x2, y2); @@ -1693,7 +1708,7 @@ void wxMSWDCImpl::SetBackgroundMode(int mode) // and m_backgroundMode is used there } -void wxMSWDCImpl::SetLogicalFunction(int function) +void wxMSWDCImpl::SetLogicalFunction(wxRasterOperationMode function) { WXMICROWIN_CHECK_HDC @@ -1707,7 +1722,7 @@ void wxMSWDCImpl::SetRop(WXHDC dc) if ( !dc || m_logicalFunction < 0 ) return; - int rop; + int rop wxDUMMY_INITIALIZE(0); switch (m_logicalFunction) { @@ -1727,10 +1742,6 @@ 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( wxT("unsupported logical function") ); - return; } SetROP2(GetHdc(), rop); @@ -1921,7 +1932,7 @@ void wxMSWDCImpl::RealizeScaleAndOrigin() #endif } -void wxMSWDCImpl::SetMapMode(int mode) +void wxMSWDCImpl::SetMapMode(wxMappingMode mode) { WXMICROWIN_CHECK_HDC @@ -2048,7 +2059,7 @@ bool wxMSWDCImpl::DoBlit(wxCoord dstX, wxCoord dstY, wxCoord dstWidth, wxCoord dstHeight, wxDC *source, wxCoord srcX, wxCoord srcY, - int rop, bool useMask, + wxRasterOperationMode rop, bool useMask, wxCoord srcMaskX, wxCoord srcMaskY) { return DoStretchBlit(dstX, dstY, dstWidth, dstHeight, source, srcX, srcY, dstWidth, dstHeight, rop, useMask, srcMaskX, srcMaskY); @@ -2059,7 +2070,7 @@ bool wxMSWDCImpl::DoStretchBlit(wxCoord xdest, wxCoord ydest, wxDC *source, wxCoord xsrc, wxCoord ysrc, wxCoord srcWidth, wxCoord srcHeight, - int rop, bool useMask, + wxRasterOperationMode rop, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask) { wxCHECK_MSG( source, false, _T("wxMSWDCImpl::Blit(): NULL wxDC pointer") );