CHuiCanvasGc::TClipRectVisibility CHuiCanvasGc::IsClipped(const TRect& aRect, const TRegion& aClippingRegion) const { TClipRectVisibility isClipped = EFullyOutside; if (!aClippingRegion.Count()) { return EFullyInside; } if (!aRect.IsEmpty() && aClippingRegion.Count()) { #if 0 TBool test = EFalse; if (test) { for (TInt i=0; i<aClippingRegion.Count(); i++) { #ifdef _DEBUG RDebug::Print(_L("aClippingRegion Rect: %d %d %d %d"), aClippingRegion[i].iTl.iX, aClippingRegion[i].iTl.iY, aClippingRegion[i].iBr.iX, aClippingRegion[i].iBr.iY); #endif } } #endif if (aClippingRegion.Intersects(aRect)) { iTempRegion.Clear(); iTempRegion2.Clear(); iTempRegion.AddRect(aRect); iTempRegion2.Intersection(aClippingRegion, iTempRegion); iTempRegion2.Tidy(); // Assume it is only partially inside region -> Clipped isClipped = EPartialOverlap; if (iTempRegion2.Count() == 1) { if (iTempRegion2[0] == aRect) { // Fully inside region -> Not clipped isClipped = EFullyInside; } } } else { // No overlap -> aRect is completely outside region -> Clipped isClipped = EFullyOutside; } } return isClipped; }
void CWsWindow::RestartAnimations(const TRegion& aNewRegion) { //When not ChangeTracking, restarting is handled by AddRedrawRegion (called from CWsWindow::SetVisibleRegion) and TWalkWindowTreeScheduleRegions WS_ASSERT_DEBUG(iScreen->ChangeTracking(),EWsPanicNoChangetracking); //Restart uncovered window animations for (CWsAnim* anim = iAnimList; anim; anim = anim->Next()) { if(!iScreen->IsScheduled(EWindowAnim, anim->BestRect(), this) && aNewRegion.Intersects(anim->BestRect())) { iScreen->ScheduleAnimation(EWindowAnim, anim->BestRect(), 0, 0, 0, this); } } //Restart uncovered sprite animations for (CWsSpriteBase* sprite = iSpriteList; sprite; sprite = sprite->Next()) { if(!iScreen->IsScheduled(ESpriteAnim, sprite->Rect(), sprite->Win()) && aNewRegion.Intersects(sprite->Rect())) { iScreen->ScheduleAnimation(ESpriteAnim, sprite->Rect(), 0, 0, 0, sprite->Win()); } } }