uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp
branchRCL_3
changeset 12 f93c875b566e
parent 10 7c5dd702d6d3
child 13 3a60ebea00d0
--- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp	Tue May 11 17:03:00 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp	Tue May 25 13:39:57 2010 +0300
@@ -543,8 +543,6 @@
         return;
         }
     
-    // this was moved here because otherwise background clear did never end up to effect canvas buffers
-    display->DoBackgroundClear();
     
     TInt visualCount = 0;
     TInt entryCount = iEntries.Count();
@@ -553,7 +551,14 @@
         {
         CHuiRosterEntry& entry = *iEntries[j]; 
         CHuiControlGroup& group = entry.ControlGroup();
-
+        CHuiControl& control = group.Control(0);
+        
+        // skip all  alf client session drawing
+        if(control.Role() == EHuiSessionContainer )
+            {
+            continue;
+            }
+        
         // Init model matrix always for every group
         //aGc.LoadIdentity(EHuiGcMatrixModel);        
         aGc.Push(EHuiGcMatrixModel);
@@ -711,6 +716,121 @@
         }
     }
 
+void CHuiRosterImpl::SetAlfEventWindow(CHuiVisual* aVisual)
+    {
+    iAlfEventWindowVisual = aVisual;
+    }
+
+const CHuiVisual* CHuiRosterImpl::AlfEventWindow()
+    {
+    return iAlfEventWindowVisual;
+    }
+
+TBool CHuiRosterImpl::NativeAppsContentChanged()
+    {
+    // if we have multiple frames where alf content was changed, skip every other frame
+	// this should be only used if whole alf content has effect (is faded)
+    TBool alfContentChanged = iDisplay->AlfContentChanged();
+    if(!iPreviousAlfContentDrawn && alfContentChanged)
+        {
+        iPreviousAlfContentDrawn = ETrue;
+        }
+    else
+        {
+        iPreviousAlfContentDrawn = EFalse;
+        }
+    return iPreviousAlfContentDrawn;
+    }
+
+
+void CHuiRosterImpl::DrawNativeAppsContent(CHuiGc &aGc, CHuiDisplay* aDisplay) const
+    {
+    TInt i = 0;
+    TInt j = 0;
+
+    CHuiDisplay* display = aDisplay ? aDisplay : iDisplay;
+    
+    ASSERT(display!=NULL);
+
+    TBool clearDone = EFalse;
+    
+    TInt visualCount = 0;
+    TInt entryCount = iEntries.Count();
+    // Draw the visuals tree in the display.
+    for(j = 0; j < entryCount; ++j)
+        {
+        CHuiRosterEntry& entry = *iEntries[j]; 
+        CHuiControlGroup& group = entry.ControlGroup();
+        CHuiControl& control = group.Control(0);
+        // skip all but alf client session drawing
+        if(control.Role() != EHuiSessionContainer )
+            {
+            continue;
+            }
+        
+        // skip inactive
+        CHuiLayout* hostContainer = control.ContainerLayout( NULL );
+        if(hostContainer->Flags() & EHuiVisualFlagInactive )
+            {
+            continue;
+            }
+        
+        // Init model matrix always for every group
+        //aGc.LoadIdentity(EHuiGcMatrixModel);        
+        aGc.Push(EHuiGcMatrixModel);
+        
+        // Set up display-specifc transformations i.e. camera transformations       
+        display->Transformation().Execute(EHuiGcMatrixModel, aGc);
+        
+        // Set up a group-specific transformation.
+        if(group.IsTransformed())
+            {
+            group.Transformation().Execute(EHuiGcMatrixModel, aGc);
+            }
+        
+        // Draw visuals
+        visualCount = entry.iRootVisuals.Count();
+        for(i = 0; i < visualCount; ++i)
+            {
+            CHuiVisual* visual = entry.iRootVisuals[i];
+            //Ignore inactive visuals
+            if ( visual->Flags()& EHuiVisualFlagInactive || visual->LoadingEffect() )
+                {
+                continue; 
+                }
+            
+            if(!clearDone)
+                {
+                // only do clear if we really draw some alf native content
+                display->DoBackgroundClear();
+                clearDone = ETrue;
+                }
+            
+            visual->Draw(aGc);
+            
+            }       
+
+        if( display->DrawVisualOutline() != CHuiDisplay::EDrawVisualOutlineNone )
+            {           
+            for(i = 0; i < visualCount; ++i)
+                {   
+                // Draw Visual Outline depending on central repository setting
+                // and visual flag value
+                const TBool drawOutline =
+                    ( entry.iRootVisuals[i]->Flags() & EHuiVisualFlagEnableDebugMode ) ||  
+                    ( display->DrawVisualOutline() == CHuiDisplay::EDrawVisualOutlineAllVisuals );
+                
+                DrawBoundaries( aGc, entry.iRootVisuals[i], drawOutline );        
+                }
+            }
+        
+        aGc.Pop(EHuiGcMatrixModel);        
+        }
+    }
+
+
+
+
 void CHuiRosterImpl::DrawBoundaries( CHuiGc& aGc, CHuiVisual* aVisual, TBool aDrawOutline ) const
 	{
     if( aDrawOutline )
@@ -995,8 +1115,8 @@
         if(iDisplay)
             {
             iDisplay->AddDirtyRegion(iRect);
+            iDisplay->SetAlfContentChanged(ETrue);
             }
-        
         SetChanged(EFalse);
         return;
         }
@@ -1019,7 +1139,28 @@
            		{
            		continue; 
            		}
+            
+             CHuiControlGroup& group = entry.ControlGroup();
+             CHuiControl& control = group.Control(0);
+             
+             if(control.Role() == EHuiSessionContainer )
+                 {
+                 if (iDisplay)
+                     {
+                     iDisplay->ScanningAlfContent(ETrue);
+                     }
+                 
+                 }
+             
             entry.iRootVisuals[i]->ReportChanged();
+            
+            if(control.Role() == EHuiSessionContainer )
+                {
+                if(iDisplay)
+                    {
+                    iDisplay->ScanningAlfContent(EFalse);
+                    }
+                }
             }
         }
     }