equal
deleted
inserted
replaced
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; |