X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3af4da323ab401ad41e2eca2c6afbc2c3d632da6..5eefe029764003751db7998a92f0645765c6e6c7:/src/dfb/dc.cpp diff --git a/src/dfb/dc.cpp b/src/dfb/dc.cpp index 0cda14d34c..f5d6a1691d 100644 --- a/src/dfb/dc.cpp +++ b/src/dfb/dc.cpp @@ -92,11 +92,16 @@ void wxDC::DoSetClippingRegion(wxCoord cx, wxCoord cy, wxCoord cw, wxCoord ch) { wxCHECK_RET( Ok(), wxT("invalid dc") ); + wxSize size(GetSize()); + + // NB: We intersect the clipping rectangle with surface's area here because + // DirectFB will return an error if you try to set clipping rectangle + // that is partially outside of the surface. DFBRegion r; - r.x1 = XLOG2DEV(cx); - r.y1 = YLOG2DEV(cy); - r.x2 = r.x1 + XLOG2DEVREL(cw) - 1; - r.y2 = r.y1 + XLOG2DEVREL(ch) - 1; + r.x1 = wxMax(0, XLOG2DEV(cx)); + r.y1 = wxMax(0, YLOG2DEV(cy)); + r.x2 = wxMin(r.x1 + XLOG2DEVREL(cw), size.x) - 1; + r.y2 = wxMin(r.y1 + YLOG2DEVREL(ch), size.y) - 1; if ( !m_surface->SetClip(&r) ) return; @@ -146,6 +151,10 @@ void wxDC::Clear() wxColour clr = m_backgroundBrush.GetColour(); m_surface->Clear(clr.Red(), clr.Green(), clr.Blue(), clr.Alpha()); + + wxSize size(GetSize()); + CalcBoundingBox(XDEV2LOG(0), YDEV2LOG(0)); + CalcBoundingBox(XDEV2LOG(size.x), YDEV2LOG(size.y)); } extern bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y, @@ -289,7 +298,7 @@ void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y) wxCHECK_RET( Ok(), wxT("invalid dc") ); wxCoord xx = XLOG2DEV(x); - wxCoord yy = XLOG2DEV(y); + wxCoord yy = YLOG2DEV(y); // update the bounding box wxCoord w, h;