diff -r cd0ae4656946 -r c9d868f1e20c uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Mon Jun 21 16:41:52 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Thu Jul 15 19:40:07 2010 +0300 @@ -82,14 +82,16 @@ public: // from MHuiEffectable CHuiEffectable(CHuiVisual *aVisual) : iVisual(aVisual) { } void EffectSetEffect(CHuiFxEffect* aEffect); - TReal32 EffectOpacityTarget() const; - void EffectSetOpacity(TReal32 aOpacity); + TReal32 EffectOpacity() const; + void EffectSetOpacityAdditive(TReal32 aOpacity, TBool aReplace); void EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const; THuiRealRect EffectDisplayRect() const __SOFTFP; void SetLoadingEffect(TBool aLoading); void EffectSetSource( TBool aIsInput1 ); TBool EffectGetSource() const; + TBool EffectReadyToDrawNextFrame() const; + private: CHuiVisual *iVisual; TBool iIsInput1; @@ -107,14 +109,22 @@ return iIsInput1; } -TReal32 CHuiEffectable::EffectOpacityTarget() const +TBool CHuiEffectable::EffectReadyToDrawNextFrame() const { - return iVisual->iOpacity.Target(); + return iVisual->EffectReadyToDrawNextFrame(); } -void CHuiEffectable::EffectSetOpacity(TReal32 aOpacity) +TReal32 CHuiEffectable::EffectOpacity() const { - iVisual->iOpacity.Set( aOpacity ); + return iVisual->iEffectOpacity; + } + +void CHuiEffectable::EffectSetOpacityAdditive(TReal32 aOpacity, TBool aReplace) + { + if( aReplace || aOpacity > iVisual->iEffectOpacity) + { + iVisual->iEffectOpacity = aOpacity; + } } void CHuiEffectable::EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const @@ -184,6 +194,11 @@ return iVisualData->iFreezed; } +EXPORT_C TBool CHuiVisual::EffectReadyToDrawNextFrame() const + { + return ETrue; + } + EXPORT_C CHuiVisual* CHuiVisual::AddNewL(CHuiControl& aOwnerControl, CHuiLayout* aParentLayout) { @@ -195,6 +210,7 @@ EXPORT_C CHuiVisual::CHuiVisual(MHuiVisualOwner& aOwner) : iOpacity(1.f), + iEffectOpacity(1.f), iOwner(&aOwner), // Set the maximum size to unlimited. iMaxSize(TSize(KMaxTInt, KMaxTInt)), @@ -917,10 +933,30 @@ if (canUseEffectDrawing) { - // Note that EHuiVisualFlagOpaqueHint improves performance a lot in cached effect drawing - TBool transparent = !(Flags() & EHuiVisualFlagOpaqueHint); - TBool refreshCache = Changed(); - didDrawEffect = iVisualData->iEffect->CachedDraw(aGc, displayRect, refreshCache, !transparent); + Effectable()->EffectSetOpacityAdditive(0.0f, ETrue); + // PrepareDrawL will update iEffectOpacity for current frame + if(iVisualData->iEffect->PrepareDrawL(aGc, displayRect)) + { + if(iEffectOpacity <= 0.f) + { + if(Clipping()) + { + aGc.PopClip(); + } + + // Draw foreground brushes (over the content). + DrawBrushes(aGc, EHuiBrushLayerForeground); + + // Undo local transformation. + Transform(aGc, EFalse); + EnterLocalProjection(aGc, EFalse); + return; + } + // Note that EHuiVisualFlagOpaqueHint improves performance a lot in cached effect drawing + TBool transparent = !(Flags() & EHuiVisualFlagOpaqueHint); + TBool refreshCache = Changed(); + didDrawEffect = iVisualData->iEffect->CachedDraw(aGc, displayRect, refreshCache, !transparent); + } } if (!didDrawEffect)