uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp
branchRCL_3
changeset 19 e5af45d51884
parent 18 1801340c26a2
child 20 31fccae4f8a7
--- 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);
-    }