]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/dc.cpp
More RTL fixes.
[wxWidgets.git] / src / dfb / dc.cpp
index 0cda14d34c634a1a88b1a7c9d99515f15184382c..f5d6a1691ddcf77cefcdde57a929480a5964f6a2 100644 (file)
@@ -92,11 +92,16 @@ void wxDC::DoSetClippingRegion(wxCoord cx, wxCoord cy, wxCoord cw, wxCoord ch)
 {
     wxCHECK_RET( Ok(), wxT("invalid dc") );
 
 {
     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;
     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;
 
     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());
 
     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,
 }
 
 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);
     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;
 
     // update the bounding box
     wxCoord w, h;