uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp
branchRCL_3
changeset 5 433cbbb6a04b
parent 3 d8a3531bc6b8
child 7 88b23e2e82e1
--- 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()