Make ProcessorController can use PostProcess 39/270339/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 28 Jan 2022 08:10:20 +0000 (17:10 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Fri, 28 Jan 2022 09:23:36 +0000 (18:23 +0900)
Make ProcessorController::Process also be called in PostProcess time.
Also, make Awake function didn't have effort during ProcessEvent running.

Change-Id: I47638bc605f513be01f9c38d8faf1c5eccb377d1
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-csharp-binder/src/processor-controller.cpp
dali-csharp-binder/src/processor-controller.h

index cceb87c..cdb9592 100644 (file)
@@ -28,12 +28,14 @@ extern "C" {
 
 ProcessorController::ProcessorController()
 : mHandler(nullptr),
+  mPostHandler(nullptr),
   mKeepRenderingApplied(false)
 {
   {
     try
     {
       Dali::Adaptor::Get().RegisterProcessor(*this);
+      Dali::Adaptor::Get().RegisterProcessor(*this, true);
     }
     CALL_CATCH_EXCEPTION();
   }
@@ -45,6 +47,7 @@ ProcessorController::~ProcessorController()
     try
     {
       Dali::Adaptor::Get().UnregisterProcessor(*this);
+      Dali::Adaptor::Get().UnregisterProcessor(*this, true);
     }
     CALL_CATCH_EXCEPTION();
   }
@@ -52,8 +55,18 @@ ProcessorController::~ProcessorController()
 
 void ProcessorController::Process(bool postProcessor)
 {
-  mHandler();
-  mKeepRenderingApplied = false;
+  if(!postProcessor)
+  {
+    // We will ignore Awake events during Process running
+    mKeepRenderingApplied = true;
+    mHandler();
+  }
+  else
+  {
+    mPostHandler();
+    // Make awake events can be applied after PostProcess done.
+    mKeepRenderingApplied = false;
+  }
 }
 
 void ProcessorController::SetCallback(  ProcessorControllerProcessCallback callback )
@@ -61,10 +74,19 @@ void ProcessorController::SetCallback(  ProcessorControllerProcessCallback callb
   mHandler = callback;
 }
 
+void ProcessorController::SetPostCallback(  ProcessorControllerProcessCallback postCallback )
+{
+  mPostHandler = postCallback;
+}
+
 void ProcessorController::RemoveCallback(  ProcessorControllerProcessCallback callback )
 {
   mHandler = nullptr;
 }
+void ProcessorController::RemovePostCallback(  ProcessorControllerProcessCallback postCallback )
+{
+  mPostHandler = nullptr;
+}
 
 void ProcessorController::Awake()
 {
@@ -113,6 +135,16 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_SetCallback( void* j
   }
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_SetPostCallback( void* jarg1, ProcessorController::ProcessorControllerProcessCallback callback )
+{
+  ProcessorController* processorController = (ProcessorController *) jarg1;
+
+  if( processorController )
+  {
+    processorController->SetPostCallback( callback );
+  }
+}
+
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_RemoveCallback( void* jarg1, ProcessorController::ProcessorControllerProcessCallback callback )
 {
   ProcessorController* processorController = (ProcessorController *) jarg1;
@@ -123,6 +155,16 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_RemoveCallback( void
   }
 }
 
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_RemovePostCallback( void* jarg1, ProcessorController::ProcessorControllerProcessCallback callback )
+{
+  ProcessorController* processorController = (ProcessorController *) jarg1;
+
+  if( processorController )
+  {
+    processorController->RemovePostCallback( callback );
+  }
+}
+
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ProcessorController_Awake( void* jarg1 )
 {
   ProcessorController* processorController = (ProcessorController *) jarg1;
index ddeef5a..25ab994 100644 (file)
@@ -60,6 +60,12 @@ public:
   void SetCallback( ProcessorControllerProcessCallback callback );
 
    /**
+    * @brief Set the postcallback to be executed when dali-core calls the overriden Process(true) api.
+    * @param[in] postCallback, function to be called
+    */
+  void SetPostCallback( ProcessorControllerProcessCallback postCallback );
+
+   /**
     * @brief Remove callback on this ProcessorController.
     * The removed callback will not be called anymore.
     * @param[in] callback, function will be removed
@@ -67,13 +73,21 @@ public:
   void RemoveCallback( ProcessorControllerProcessCallback callback );
 
    /**
+    * @brief Remove postcallback on this ProcessorController.
+    * The removed callback will not be called anymore.
+    * @param[in] postCallback, function will be removed
+    */
+  void RemovePostCallback( ProcessorControllerProcessCallback postCallback );
+
+   /**
     * @brief Awake update thread so dali-core calls the overriden Process() api.
     */
   void Awake();
 
 private:
 
-  ProcessorControllerProcessCallback mHandler;
+  ProcessorControllerProcessCallback mHandler;              ///< PreProcessHandler before Relayout
+  ProcessorControllerProcessCallback mPostHandler;          ///< PostProcessHandler after Relayout
   bool                               mKeepRenderingApplied; ///< True if we call Stage::KeepRendering(0.0f). It need to avoid duplicated keep rendering call
 };