예제 #1
0
EXPORT_C CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::IsClipped(const TRect& aRect) const
    {
    TClipRectVisibility isClipped = EFullyOutside;
    if (!iGc)
        {
        return isClipped;
        }

    // First check the active clipping region from GC...
    
    // aRect is untransformed, activeClippingRegion is transformed
    // so we must transform aRect first when we comapre it to activeClippingRegion...
    THuiRealRect transformed = aRect;
    iGc->TransformDirtyRect(transformed );
    const TRegion& activeClippingRegion = iGc->ClipRegion();

    isClipped = IsClipped(transformed.Round(), activeClippingRegion);
    //...fully outside of GC so it would not be drawn regardless of
    // the iClipRegion (if it is trying to do clipping), we can return immediately.
    if (isClipped == EFullyOutside && activeClippingRegion.Count())
        {        
        return isClipped;
        }            
    //...not clipped by active clip region, check our own iClipRegion
    if (iClippingRegion.Count())
        {
        isClipped = IsClipped(aRect, iClippingRegion);
        }
    
    return isClipped;
    }
예제 #2
0
EXPORT_C CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::EnableDelayedClippingIfNeeded(const RArray<THuiRealLine>& aUpdatedLines)
    {
    iDelayedClipCount = 0;
    TClipRectVisibility vis1 = EPartialOverlap;
    TClipRectVisibility vis2 = EPartialOverlap;

    if (iClipMode == EHuiCanvasClipModeDelayed)
        {
        for (TInt i=0; i<aUpdatedLines.Count();i++)
            {
            TPoint start = aUpdatedLines[i].iStart.Round();
            TPoint end = aUpdatedLines[i].iEnd.Round();            
            vis1 = IsClipped(start);
            vis2 = IsClipped(end);
            if ((vis1 != EFullyOutside) || (vis2 != EFullyOutside))
                {
                // Could copy only needed rects to avoid excessive clipping
                iDelayedClipRegion.Copy(iClippingRegion);
                break;
                }

		    // both points lie outside - but the line may still intersect the region, 
            // so represent the line as a rect and try an intersection test...
            TRect lineBoundingRect(start, end);
            lineBoundingRect.Normalize();
            lineBoundingRect.iBr += TPoint(1, 1);
            if (IsClipped(lineBoundingRect, iClippingRegion) != EFullyOutside)
                {
                iDelayedClipRegion.Copy(iClippingRegion);
                vis1 = EPartialOverlap;
                break;
                }                    
            }                    
        }        
    if (vis1 == EFullyOutside && vis2 == EFullyOutside)
        {
        iDelayedClipVisibility = EFullyOutside;
        }
    else
        {
        iDelayedClipVisibility = EPartialOverlap;
        }
    return iDelayedClipVisibility;
    }
예제 #3
0
EXPORT_C CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::EnableDelayedClippingIfNeeded(const THuiRealRect& aUpdatedRect)
    {
    iDelayedClipCount = 0;
    iDelayedClipVisibility = EPartialOverlap;
    if (iClipMode == EHuiCanvasClipModeDelayed)
        {            
        iDelayedClipVisibility = IsClipped(aUpdatedRect.Round());
        if ( iDelayedClipVisibility ==  EPartialOverlap )
            {
            // Could copy only needed rects to avoid excessive clipping
            iDelayedClipRegion.Copy(iClippingRegion);
            }
        }                        
    return iDelayedClipVisibility;
    }
예제 #4
0
EXPORT_C CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::EnableDelayedClippingIfNeeded(const RArray<THuiRealRect>& aUpdatedRects)
    {
    iDelayedClipCount = 0;
    iDelayedClipVisibility = EPartialOverlap;
    if (iClipMode == EHuiCanvasClipModeDelayed)
        {            
        for (TInt i=0; i<aUpdatedRects.Count(); i++)
            {
            iDelayedClipVisibility = IsClipped(aUpdatedRects[i].Round());            
            if (iDelayedClipVisibility ==  EPartialOverlap)
                {
                // Could copy only needed rects to avoid excessive clipping
                iDelayedClipRegion.Copy(iClippingRegion);
                break;
                }                                                
            }        
        }
    return iDelayedClipVisibility;
    }
예제 #5
0
CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::IsClipped(const TRegion& aTestedRegion, const TRegion& aClippingRegion) const
    {
    TClipRectVisibility isWholeRegionClipped = EUnknown;
    TInt count = aTestedRegion.Count(); 
    
    if (count == 0)
        {
        isWholeRegionClipped = EFullyOutside;
        }
    
    for (TInt i=0; i<count; i++)
        {
        TClipRectVisibility isRectClipped = IsClipped(aTestedRegion[i], aClippingRegion);
        if (isWholeRegionClipped == EFullyInside)
            {
            if (isRectClipped == EFullyOutside ||
                isRectClipped == EPartialOverlap )
                {
                isWholeRegionClipped = EPartialOverlap;
                }            
            }
        else if (isWholeRegionClipped == EFullyOutside)
            {
            if (isRectClipped == EFullyInside ||
                isRectClipped == EPartialOverlap )
                {
                isWholeRegionClipped = EPartialOverlap;
                }                        
            }
        else if (isWholeRegionClipped == EPartialOverlap)
            {
            // No changes to isWholeRegionClipped in this case and no need to look further
            break;
            }
        else
            {
            isWholeRegionClipped = isRectClipped;
            }                   
        }
    return isWholeRegionClipped;
    }
예제 #6
0
ClipHelper::~ClipHelper()
{
	if (IsClipped())
		UnClip();
}
예제 #7
0
EXPORT_C CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::IsClipped(const TPoint& aPoint) const
    {
    return IsClipped(aPoint, iClippingRegion);
    }