uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp
branchRCL_3
changeset 3 d8a3531bc6b8
parent 0 15bf7259bb7c
child 5 433cbbb6a04b
--- a/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp	Tue Feb 02 07:56:43 2010 +0200
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp	Mon Feb 22 17:57:49 2010 +0200
@@ -47,6 +47,8 @@
 #include "huicanvastexturecache.h"
 #include "HuiFxEngine.h"
 
+#include "huisynchronizationobserver.h"
+
 #define HUI_HIRES_TIMER
 
 
@@ -1069,6 +1071,8 @@
             }
         }
 
+    DoSynchronize();
+        
     iCurrentDisplay = NULL; // informs the egosystem that the drawing is done.
     CHuiStatic::ReportNewFrame();
     
@@ -1762,3 +1766,65 @@
     {
     return iMemoryLevel;
     }
+
+EXPORT_C void CHuiEnv::Synchronize(TInt aId, MHuiSynchronizationObserver* aObserver)
+    {
+    iSynchObserver = aObserver;
+    iSynchId = aId;
+    
+    if ( aObserver )
+        {
+        ContinueRefresh();
+        }
+    }
+
+void CHuiEnv::DoSynchronize()
+    {
+    if ( !iSynchObserver )
+        {
+        return;
+        }
+
+    // Synchronize commands before signalling through P&S
+    for(TInt i = 0; i < iDisplays.Count(); ++i)
+        {          
+        if ( ( iDisplays[i]->DisplayType() != CHuiDisplay::EDisplayOffScreenBuffer ) 
+             && ( iDisplays[i]->ScreenBufferObserver() == NULL ) )
+            {
+            MakeCurrent(*iDisplays[i]);
+            iDisplays[i]->RenderSurface().Finish();
+            }
+        }
+
+    iSynchObserver->Synchronized( iSynchId );
+    iSynchObserver = NULL;
+    }
+
+void CHuiEnv::RemoveTheControlGroup(TInt aId)
+    {
+    TInt i;
+
+    for(i = 0; i < iLoadedGroups.Count(); ++i)
+        {
+        if(iLoadedGroups[i]->ResourceId() == aId)
+            {
+            // This is control group to delete.
+            CHuiControlGroup* group = iLoadedGroups[i];
+            CancelCommands(group);
+
+            for (TInt ii = iDisplays.Count()-1; ii>=0; ii--)
+                {
+                TInt index = iDisplays[ii]->Roster().Find(group);
+                if (index != KErrNotFound)
+                    {
+                    iDisplays[ii]->Roster().Hide(iDisplays[ii]->Roster().ControlGroup(index));
+                    }
+                }
+            
+            iLoadedGroups.Remove(i);
+            
+            }
+        }
+
+   
+    }
\ No newline at end of file