--- a/uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp Mon Feb 22 17:57:49 2010 +0200
+++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp Fri Mar 12 15:47:04 2010 +0200
@@ -1223,6 +1223,13 @@
EXPORT_C TBool CHuiCanvasGc::ClipNext()
{
+ if (iDelayedClipVisibility == EFullyOutside)
+ {
+ // If drawing would fall completely outside the clipping region, we are done.
+ return EFalse;
+ }
+
+ const TBool clipOneByOne = iDelayedClipRegion.Count() > MaxNumberOfClipRects();
if (iDelayedClipVisibility != EFullyOutside &&
iDelayedClipRegion.Count() &&
iDelayedClipCount < iDelayedClipRegion.Count())
@@ -1236,7 +1243,7 @@
iGc->PushClip();
iDelayedClipRectPushed = ETrue;
- if (MaxNumberOfClipRects() == 1)
+ if (clipOneByOne)
{
iGc->Clip(iDelayedClipRegion[iDelayedClipCount]);
}
@@ -1246,18 +1253,21 @@
}
}
- iDelayedClipCount += MaxNumberOfClipRects();
-
- if (iDelayedClipVisibility == EFullyOutside)
+ TBool continueDrawing = EFalse;
+ if (clipOneByOne)
{
- // If drawing would fall completely outside the clipping region, we are done.
- return EFalse;
+ // Clip one by one.
+ iDelayedClipCount++;
+ continueDrawing = iDelayedClipCount <= iDelayedClipRegion.Count();
}
else
{
- // Check how many times we must do the operation in case rederer does not support many clip rects at once
- return (iDelayedClipCount <= iDelayedClipRegion.Count() || iDelayedClipCount == MaxNumberOfClipRects());
+ // Drawing once is sufficient - all clipping can be done.
+ continueDrawing = !iDelayedClipCount;
+ iDelayedClipCount++;
}
+
+ return continueDrawing;
}
EXPORT_C void CHuiCanvasGc::DisableDelayedClippingIfNeeded()