Cleanup platform abstraction API (to allow removal of dead code from Adaptor)
[platform/core/uifw/dali-core.git] / dali / internal / common / core-impl.cpp
index 7a00e62..94d90c2 100644 (file)
 #include <dali/internal/render/common/performance-monitor.h>
 #include <dali/internal/render/common/render-manager.h>
 #include <dali/internal/update/common/discard-queue.h>
-#include <dali/internal/common/event-to-update.h>
 #include <dali/internal/update/resources/resource-manager.h>
 #include <dali/internal/event/images/image-factory.h>
-#include <dali/internal/event/modeling/model-factory.h>
 #include <dali/internal/event/common/thread-local-storage.h>
 #include <dali/internal/event/effects/shader-factory.h>
 #include <dali/internal/update/touch/touch-resampler.h>
 #include <dali/internal/event/common/type-registry-impl.h>
 #include <dali/internal/event/render-tasks/render-task-list-impl.h>
+#include <dali/internal/event/size-negotiation/relayout-controller-impl.h>
 
 #include <dali/internal/render/gl-resources/texture-cache.h>
 #include <dali/internal/render/gl-resources/context.h>
@@ -94,7 +93,6 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
   mResourcePostProcessQueue(),
   mNotificationManager(NULL),
   mImageFactory(NULL),
-  mModelFactory(NULL),
   mShaderFactory(NULL),
   mIsActive(true),
   mProcessingEvent(false)
@@ -119,10 +117,10 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
   RenderQueue& renderQueue = mRenderManager->GetRenderQueue();
   TextureCache& textureCache = mRenderManager->GetTextureCache();
 
-  ResourcePolicy::Discardable discardPolicy = ResourcePolicy::DISCARD;
+  ResourcePolicy::Discardable discardPolicy = ResourcePolicy::OWNED_DISCARD;
   if( dataRetentionPolicy == ResourcePolicy::DALI_RETAINS_ALL_DATA )
   {
-    discardPolicy = ResourcePolicy::RETAIN;
+    discardPolicy = ResourcePolicy::OWNED_RETAIN;
   }
   textureCache.SetDiscardBitmapsPolicy(discardPolicy);
 
@@ -150,18 +148,23 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform,
                                        textureCache,
                                       *mTouchResampler );
 
-  mResourceClient = new ResourceClient( *mResourceManager, *mUpdateManager, dataRetentionPolicy );
+  mRenderManager->SetShaderSaver( *mUpdateManager );
 
   mStage = IntrusivePtr<Stage>( Stage::New( *mAnimationPlaylist, *mPropertyNotificationManager, *mUpdateManager, *mNotificationManager ) );
 
+  // This must be called after stage is created but before stage initialization
+  mRelayoutController = IntrusivePtr< RelayoutController >( new RelayoutController( mRenderController ) );
+
   mStage->Initialize();
 
+  mResourceClient = new ResourceClient( *mResourceManager, *mStage );
+
   mGestureEventProcessor = new GestureEventProcessor(*mStage, gestureManager, mRenderController);
   mEventProcessor = new EventProcessor(*mStage, *mNotificationManager, *mGestureEventProcessor);
 
   mImageFactory = new ImageFactory( *mResourceClient );
-  mModelFactory = new ModelFactory(*mResourceClient);
-  mShaderFactory = new ShaderFactory(*mResourceClient);
+  mShaderFactory = new ShaderFactory();
+  mUpdateManager->SetShaderSaver( *mShaderFactory );
   mShaderFactory->LoadDefaultShaders();
 
   GetImplementation(Dali::TypeRegistry::Get()).CallInitFunctions();
@@ -182,7 +185,14 @@ Core::~Core()
   // clear the thread local storage first
   // allows core to be created / deleted many times in the same thread (how TET cases work).
   // Do this before mStage.Reset() so Stage::IsInstalled() returns false
-  ThreadLocalStorage::Get().Remove();
+  ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+  if( tls )
+  {
+    tls->Remove();
+  }
+
+  // Stop relayout requests being raised on stage destruction
+  mRelayoutController.Reset();
 
   // Clean-up stage - remove default camera and root layer
   mStage->Uninitialize();
@@ -194,7 +204,6 @@ Core::~Core()
   delete mGestureEventProcessor;
   delete mNotificationManager;
   delete mImageFactory;
-  delete mModelFactory;
   delete mShaderFactory;
   delete mResourceClient;
   delete mResourceManager;
@@ -228,14 +237,14 @@ void Core::ContextDestroyed()
   mRenderManager->ContextDestroyed();
 }
 
-void Core::SurfaceResized(unsigned int width, unsigned int height)
+void Core::SurfaceResized( unsigned int width, unsigned int height )
 {
-  mStage->SetSize(width, height);
+  mStage->SetSize( width, height );
+  mRelayoutController->SetStageSize( width, height );
 }
 
-void Core::SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical)
+void Core::SetDpi( unsigned int dpiHorizontal, unsigned int dpiVertical )
 {
-  mPlatform.SetDpi( dpiHorizontal, dpiVertical );
   mStage->SetDpi( Vector2( dpiHorizontal , dpiVertical) );
 }
 
@@ -291,6 +300,8 @@ void Core::Resume()
 void Core::SceneCreated()
 {
   mStage->EmitSceneCreatedSignal();
+
+  mRelayoutController->OnApplicationSceneCreated();
 }
 
 void Core::QueueEvent( const Integration::Event& event )
@@ -309,11 +320,10 @@ void Core::ProcessEvents()
   }
 
   mProcessingEvent = true;
-
-  EventToUpdate& eventToUpdate = mUpdateManager->GetEventToUpdate();
+  mRelayoutController->SetProcessingCoreEvents( true );
 
   // Signal that any messages received will be flushed soon
-  eventToUpdate.EventProcessingStarted();
+  mUpdateManager->EventProcessingStarted();
 
   mEventProcessor->ProcessEvents();
 
@@ -325,11 +335,14 @@ void Core::ProcessEvents()
     // Emit signal here to start size negotiation and control relayout.
     mStage->EmitEventProcessingFinishedSignal();
 
+    // Run the size negotiation after event processing finished signal
+    mRelayoutController->Relayout();
+
     // Flush discard queue for image factory
     mImageFactory->FlushReleaseQueue();
 
     // Flush any queued messages for the update-thread
-    const bool messagesToProcess = eventToUpdate.FlushQueue();
+    const bool messagesToProcess = mUpdateManager->FlushQueue();
 
     // Check if the touch or gestures require updates.
     const bool touchNeedsUpdate = mTouchResampler->NeedsUpdate();
@@ -342,6 +355,8 @@ void Core::ProcessEvents()
     }
   }
 
+  mRelayoutController->SetProcessingCoreEvents( false );
+
   // ProcessEvents() may now be called again
   mProcessingEvent = false;
 }
@@ -421,11 +436,6 @@ ImageFactory& Core::GetImageFactory()
   return *(mImageFactory);
 }
 
-ModelFactory& Core::GetModelFactory()
-{
-  return *(mModelFactory);
-}
-
 ShaderFactory& Core::GetShaderFactory()
 {
   return *(mShaderFactory);
@@ -436,6 +446,11 @@ GestureEventProcessor& Core::GetGestureEventProcessor()
   return *(mGestureEventProcessor);
 }
 
+RelayoutController& Core::GetRelayoutController()
+{
+  return *(mRelayoutController.Get());
+}
+
 void Core::CreateThreadLocalStorage()
 {
   // a pointer to the ThreadLocalStorage object will be stored in TLS