--- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Thu Aug 19 10:48:02 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue Aug 31 16:07:35 2010 +0300
@@ -290,7 +290,7 @@
if (iCanvasVisualData->iCommandSetType == ECommandBufferWs || iCanvasVisualData->iCommandSetType == ECommandBufferAlf)
{
- TRAPD(err, iCanvasVisualData->iCanvasPainter->HandleBufferL(aDisplayRect, aAction, *this, aGc, DisplayRect().iTl.Round()));
+ TRAPD(err, iCanvasVisualData->iCanvasPainter->HandleBufferL(aDisplayRect, aAction, *this, aGc, DisplayRect().iTl.Round()));
if (err)
{
HUI_DEBUG2(_L("CHuiCanvasVisual::HandleBufferL returned:%d command type was: %d"), err,iCanvasVisualData->iCommandSetType);
@@ -350,7 +350,8 @@
if (Effect())
{
TBool hasStoredContent = (IsDelayedEffectSource() || Freezed()) && (StoredRenderBuffer() || iCanvasVisualData->iStoredRenderBuffer);
- TBool semiTranparentEffectActive = iEffectOpacity < 1.f;
+
+ TBool semiTranparentEffectActive = Effect()->IsSemitransparent();
if ((iOpacity.Now() <= EPSILON && !semiTranparentEffectActive))
{
return ETrue;
@@ -395,7 +396,7 @@
}
// Optimization
- if (!EffectActive() && CanSkipDrawing())
+ if (CanSkipDrawing())
{
return;
}
@@ -449,10 +450,14 @@
// Flag to know what we did
TBool didDrawEffect = EFalse;
- TBool drawChildren = ETrue; // only if didDrawEffect holds
if (EffectActive())
{
+ // Note that EHuiVisualFlagOpaqueHint improves performance a lot in cached effect drawing
+ TBool transparent = EFalse;
+ transparent |= (!(Flags() & EHuiVisualFlagOpaqueHint)); // Does not have opaque hint -> always transparent
+ transparent |= iOpacity.Now() < 1.0f; // Opacity less than 1.0f -> always transparent
+
TBool refreshCache = EFalse;
TBool layer = EFalse;
if (EffectIsAppliedToChildren())
@@ -474,40 +479,8 @@
{
refreshCache |= Display()->RosterImpl().NativeAppsContentChanged();
}
- Effectable()->EffectSetOpacityAdditive(0.0f, ETrue);
+ didDrawEffect = Effect()->CachedDraw(aGc, area, refreshCache, !transparent, iCanvasVisualData->iPaintedRegion,layer );
- // PrepareDraw will update iEffectOpacity to correct opacity for this effect frame
- if(Effect()->PrepareDrawL(aGc, area))
- {
- // let's still check if effect is making visual fully transparent
- if(!CanSkipDrawing())
- {
- // Note that EHuiVisualFlagOpaqueHint improves performance a lot in cached effect drawing
- TBool transparent = EFalse;
-
- // This is special case, only child below group visual.
- // Workaround - can be removed once opaque & transparent visual hierarchies are handled better.
- if ( !Layout() && Count() == 1 )
- {
- const CHuiVisual* visual = &Visual(0);
-
- transparent |= (!(visual->Flags() & EHuiVisualFlagOpaqueHint)); // Does not have opaque hint -> always transparent
- transparent |= visual->iOpacity.Now() < 1.0f; // Opacity less than 1.0f -> always transparent
- transparent |= visual->Effect() && !visual->LoadingEffect() && (visual->iEffectOpacity < 1.0f); // effect opacity is less than 1.0f
- }
-
- transparent |= (!(Flags() & EHuiVisualFlagOpaqueHint)); // Does not have opaque hint -> always transparent
- transparent |= iOpacity.Now() < 1.0f; // Opacity less than 1.0f -> always transparent
- transparent |= iEffectOpacity < 1.0f; // effect opacity is less than 1.0f
-
- didDrawEffect = Effect()->CachedDraw(aGc, area, refreshCache, !transparent, iCanvasVisualData->iPaintedRegion, layer );
- }
- else
- {
- didDrawEffect = ETrue;
- drawChildren = EFalse;
- }
- }
}
if ( !didDrawEffect )
@@ -525,12 +498,12 @@
// Draw all children
DrawCanvasChildren(aGc, 0, 0);
}
- else if (didDrawEffect && drawChildren && !EffectIsAppliedToChildren())
+ else if (didDrawEffect && !EffectIsAppliedToChildren())
{
// Draw all children
DrawCanvasChildren(aGc, 0, 0);
}
- else if (didDrawEffect && drawChildren && EffectIsAppliedToChildren())
+ else if (didDrawEffect && EffectIsAppliedToChildren())
{
// Draw only children which do not want to have parent effect applied to them
DrawCanvasChildren(aGc, EHuiCanvasFlagExcludeFromParentEffect, 0);
@@ -1365,11 +1338,7 @@
CHuiCanvasGc& gc = CanvasGc();
CHuiCanvasVisual* visual = NULL;
TBool transparent = EffectiveOpacity() < 1.0f;
- if(EffectActive())
- {
- transparent |= iEffectOpacity < 1.0f;
- }
- gc.SetDrawMode((THuiCanvasDrawMode)aCanvasDrawMode);
+ gc.SetDrawMode((THuiCanvasDrawMode)aCanvasDrawMode);
if (transparent)
{
gc.EnableEffectiveOpacity(ETrue);
@@ -1415,10 +1384,6 @@
THuiRealPoint dest_point = DisplayRect().iTl;
CHuiCanvasRenderBuffer *stored = StoredRenderBuffer();
TBool transparent = EffectiveOpacity() < 1.0f;
- if(EffectActive())
- {
- transparent |= iEffectOpacity < 1.0f;
- }
CHuiCanvasVisual* visual = NULL;
gc.SetDrawMode((THuiCanvasDrawMode)aCanvasDrawMode);
if (transparent)
@@ -1634,34 +1599,3 @@
return rosterFrozen || inactive;
}
-
-TBool CHuiCanvasVisual::EffectReadyToDrawNextFrame() const
- {
- // if the visual is drawn ans a external content it is probably already inactive
- if (Flags() & EHuiVisualFlagDrawOnlyAsExternalContent)
- {
- if (Display() && Display()->RosterImpl().IsDrawingExternalContent())
- {
- return ETrue;
- }
- }
-
- // other checks to
- TBool rdyToDraw = EFalse;
- if(Display()->RosterImpl().AlfEventWindow() == this)
- {
- rdyToDraw |= ETrue;
- }
-
- rdyToDraw |= (IsDelayedEffectSource() || Freezed()) &&
- (StoredRenderBuffer() || iCanvasVisualData->iStoredRenderBuffer);
- rdyToDraw |= (Effect()->EffectFlags() & KHuiFxEnableBackgroundInAllLayers);
- rdyToDraw |= EffectIsAppliedToChildren();
- rdyToDraw |= IsExternalContentDrawingEnabled() || IsExternalContentDrawingEnabled(ETrue);
- rdyToDraw |= IsBackgroundDrawingEnabled();
-
- rdyToDraw |= HasCommandBuffers(ETrue);
-
- // visual must be active (seen) and have content
- return (!(Flags() & EHuiVisualFlagInactive) && rdyToDraw);
- }