uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp
branchRCL_3
changeset 5 433cbbb6a04b
parent 3 d8a3531bc6b8
child 7 88b23e2e82e1
equal deleted inserted replaced
3:d8a3531bc6b8 5:433cbbb6a04b
  1221 
  1221 
  1222     
  1222     
  1223     
  1223     
  1224 EXPORT_C TBool CHuiCanvasGc::ClipNext()
  1224 EXPORT_C TBool CHuiCanvasGc::ClipNext()
  1225     {
  1225     {
       
  1226     if (iDelayedClipVisibility == EFullyOutside)
       
  1227         {
       
  1228         // If drawing would fall completely outside the clipping region, we are done. 
       
  1229         return EFalse;
       
  1230         }
       
  1231 
       
  1232     const TBool clipOneByOne = iDelayedClipRegion.Count() > MaxNumberOfClipRects();
  1226     if (iDelayedClipVisibility != EFullyOutside && 
  1233     if (iDelayedClipVisibility != EFullyOutside && 
  1227         iDelayedClipRegion.Count() && 
  1234         iDelayedClipRegion.Count() && 
  1228         iDelayedClipCount < iDelayedClipRegion.Count())        
  1235         iDelayedClipCount < iDelayedClipRegion.Count())        
  1229         {
  1236         {
  1230         if (iDelayedClipRectPushed)
  1237         if (iDelayedClipRectPushed)
  1234       	
  1241       	
  1235       	iGc->Enable(CHuiGc::EFeatureClipping);
  1242       	iGc->Enable(CHuiGc::EFeatureClipping);
  1236       	iGc->PushClip();
  1243       	iGc->PushClip();
  1237         iDelayedClipRectPushed = ETrue;
  1244         iDelayedClipRectPushed = ETrue;
  1238         
  1245         
  1239         if (MaxNumberOfClipRects() == 1)
  1246         if (clipOneByOne)
  1240             {
  1247             {
  1241             iGc->Clip(iDelayedClipRegion[iDelayedClipCount]);                            
  1248             iGc->Clip(iDelayedClipRegion[iDelayedClipCount]);                            
  1242             }
  1249             }
  1243         else
  1250         else
  1244             {
  1251             {
  1245             iGc->Clip(iDelayedClipRegion);                                
  1252             iGc->Clip(iDelayedClipRegion);                                
  1246             }                            
  1253             }                            
  1247         }    
  1254         }    
  1248 
  1255 
  1249     iDelayedClipCount += MaxNumberOfClipRects();
  1256     TBool continueDrawing = EFalse;
  1250     
  1257     if (clipOneByOne)
  1251     if (iDelayedClipVisibility == EFullyOutside)
  1258         {
  1252         {
  1259         // Clip one by one.            
  1253         // If drawing would fall completely outside the clipping region, we are done. 
  1260         iDelayedClipCount++;
  1254         return EFalse;
  1261         continueDrawing = iDelayedClipCount <= iDelayedClipRegion.Count();
  1255         }
  1262         }
  1256     else
  1263     else
  1257         {
  1264         {
  1258         // Check how many times we must do the operation in case rederer does not support many clip rects at once 
  1265         // Drawing once is sufficient - all clipping can be done.
  1259         return (iDelayedClipCount <= iDelayedClipRegion.Count() || iDelayedClipCount == MaxNumberOfClipRects());
  1266         continueDrawing = !iDelayedClipCount;
  1260         }
  1267         iDelayedClipCount++;
       
  1268         }
       
  1269 
       
  1270     return continueDrawing;    
  1261     }
  1271     }
  1262 
  1272 
  1263 EXPORT_C void CHuiCanvasGc::DisableDelayedClippingIfNeeded()
  1273 EXPORT_C void CHuiCanvasGc::DisableDelayedClippingIfNeeded()
  1264     {
  1274     {
  1265     iDelayedClipVisibility = EPartialOverlap;
  1275     iDelayedClipVisibility = EPartialOverlap;