]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/dc.cpp
Make status bar grip move to the left in RTL.
[wxWidgets.git] / src / dfb / dc.cpp
index cf11ae7aaaf4a5238cc2e5f2dfe6910604186d9e..4e171feb3d47fbc41ea6e2d4e0c146c5a7439e7a 100644 (file)
@@ -78,22 +78,15 @@ void wxDC::Init(const wxIDirectFBSurfacePtr& surface)
 // clipping
 // ---------------------------------------------------------------------------
 
-
-#define DO_SET_CLIPPING_BOX(rg)                      \
-{                                                    \
-    wxRect rect = rg.GetBox();                       \
-    m_clipX1 = (wxCoord) XDEV2LOG(rect.GetLeft());   \
-    m_clipY1 = (wxCoord) YDEV2LOG(rect.GetTop());    \
-    m_clipX2 = (wxCoord) XDEV2LOG(rect.GetRight());  \
-    m_clipY2 = (wxCoord) YDEV2LOG(rect.GetBottom()); \
-}
-
 void wxDC::DoSetClippingRegion(wxCoord cx, wxCoord cy, wxCoord cw, wxCoord ch)
 {
     wxCHECK_RET( Ok(), wxT("invalid dc") );
 
     wxSize size(GetSize());
 
+    wxASSERT_MSG( !m_clipping,
+                  _T("narrowing clipping region not implemented yet") );
+
     // 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.
@@ -115,8 +108,7 @@ void wxDC::DoSetClippingRegion(wxCoord cx, wxCoord cy, wxCoord cw, wxCoord ch)
 
 void wxDC::DoSetClippingRegionAsRegion(const wxRegion& region)
 {
-    // NB: this can be done because wxDFB only supports
-    //     rectangular regions
+    // NB: this can be done because wxDFB only supports rectangular regions
     SetClippingRegion(region.AsRect());
 }
 
@@ -765,6 +757,16 @@ bool wxDC::DoBlitFromSurface(const wxIDirectFBSurfacePtr& src,
                              wxCoord w, wxCoord h,
                              wxCoord dstx, wxCoord dsty)
 {
+    // don't do anything if the source rectangle is outside of source surface,
+    // DirectFB would assert in that case:
+    wxSize srcsize;
+    src->GetSize(&srcsize.x, &srcsize.y);
+    if ( !wxRect(srcx, srcy, w, h).Intersects(wxRect(srcsize)) )
+    {
+        wxLogDebug(_T("Blitting from area outside of the source surface, caller code needs fixing."));
+        return false;
+    }
+
     CalcBoundingBox(dstx, dsty);
     CalcBoundingBox(dstx + w, dsty + h);