X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/21e3246c42c29fe01d37597036e766a082e062ec..f0ed40adbf95b79923f4ef12688876156af89061:/src/dfb/dc.cpp?ds=sidebyside diff --git a/src/dfb/dc.cpp b/src/dfb/dc.cpp index 4e171feb3d..d8d9176e83 100644 --- a/src/dfb/dc.cpp +++ b/src/dfb/dc.cpp @@ -53,10 +53,10 @@ wxDC::wxDC() wxDC::wxDC(const wxIDirectFBSurfacePtr& surface) { - Init(surface); + DFBInit(surface); } -void wxDC::Init(const wxIDirectFBSurfacePtr& surface) +void wxDC::DFBInit(const wxIDirectFBSurfacePtr& surface) { m_ok = (surface != NULL); wxCHECK_RET( surface != NULL, _T("invalid surface") ); @@ -180,8 +180,32 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) if ( m_pen.GetStyle() == wxTRANSPARENT ) return; - m_surface->DrawLine(XLOG2DEV(x1), YLOG2DEV(y1), - XLOG2DEV(x2), YLOG2DEV(y2)); + wxCoord xx1 = XLOG2DEV(x1); + wxCoord yy1 = YLOG2DEV(y1); + wxCoord xx2 = XLOG2DEV(x2); + wxCoord yy2 = YLOG2DEV(y2); + + // FIXME: DrawLine() shouldn't draw the last pixel, but DFB's DrawLine() + // does draw it. We should undo any change to the last pixel by + // using GetPixel() and PutPixel(), but until they are implemented, + // handle at least the special case of vertical and horizontal + // lines correctly: + if ( xx1 == xx2 ) + { + if ( yy1 < yy2 ) + yy2--; + else if ( yy1 > yy2 ) + yy2++; + } + if ( yy1 == yy2 ) + { + if ( xx1 < xx2 ) + xx2--; + else if ( xx1 > xx2 ) + xx2++; + } + + m_surface->DrawLine(xx1, yy1, xx2, yy2); CalcBoundingBox(x1, y1); CalcBoundingBox(x2, y2);