// 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.
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());
}
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);