Added render-task to the touch event 82/295782/9
authorAdam Bialogonski <adam.b@samsung.com>
Mon, 13 Nov 2023 16:36:28 +0000 (16:36 +0000)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Wed, 15 Nov 2023 18:18:10 +0000 (18:18 +0000)
Change-Id: Ida661df52c894d39da7e345b157dcb2fe8529ae5

dali/internal/event/actors/actor-impl.cpp
dali/internal/event/events/touch-event-impl.h
dali/internal/event/events/touch-event-processor.cpp
dali/public-api/events/touch-event.cpp
dali/public-api/events/touch-event.h

index 99bd8e3..1574f07 100644 (file)
@@ -39,7 +39,6 @@
 #include <dali/internal/event/actors/actor-coords.h>
 #include <dali/internal/event/actors/actor-parent.h>
 #include <dali/internal/event/actors/actor-property-handler.h>
-#include <dali/internal/event/actors/camera-actor-impl.h>
 #include <dali/internal/event/common/event-thread-services.h>
 #include <dali/internal/event/common/property-helper.h>
 #include <dali/internal/event/common/scene-impl.h>
@@ -48,7 +47,6 @@
 #include <dali/internal/event/common/type-info-impl.h>
 #include <dali/internal/event/events/actor-gesture-data.h>
 #include <dali/internal/event/render-tasks/render-task-impl.h>
-#include <dali/internal/event/render-tasks/render-task-list-impl.h>
 #include <dali/internal/event/rendering/renderer-impl.h>
 #include <dali/internal/update/manager/update-manager.h>
 #include <dali/internal/update/nodes/node-messages.h>
index cbcc120..e59c597 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_TOUCH_EVENT_H
 
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
 #include <dali/public-api/events/point-state.h>
 #include <dali/public-api/events/touch-event.h>
 #include <dali/public-api/object/base-object.h>
+#include <dali/public-api/render-tasks/render-task.h>
 
 namespace Dali
 {
@@ -177,6 +178,11 @@ public:
    */
   MouseButton::Type GetMouseButton(std::size_t point) const;
 
+  Dali::RenderTask GetRenderTask() const
+  {
+    return mRenderTask;
+  }
+
   // Setters
 
   /**
@@ -185,6 +191,11 @@ public:
    */
   void AddPoint(const Integration::Point& point);
 
+  void SetRenderTask(Dali::RenderTask renderTask)
+  {
+    mRenderTask = renderTask;
+  }
+
 private:
   /**
    * @brief Virtual Destructor
@@ -194,8 +205,9 @@ private:
   ~TouchEvent() override = default;
 
 private:
-  std::vector<Integration::Point> mPoints;   ///< Container of the points for this touch event.
-  unsigned long                   mTime{0u}; ///< The time (in ms) that the touch event occurred.
+  std::vector<Integration::Point> mPoints;     ///< Container of the points for this touch event.
+  Dali::RenderTask                mRenderTask; ///< The render task used to generate this touch event.
+  unsigned long                   mTime{0u};   ///< The time (in ms) that the touch event occurred.
 };
 
 } // namespace Internal
index 1a2f635..1e86b4c 100644 (file)
@@ -61,13 +61,13 @@ const char* TOUCH_POINT_STATE[6] =
 bool ShouldEmitInterceptTouchEvent(const Actor& actorImpl, const Dali::TouchEvent& event)
 {
   PointState::Type state = event.GetState(0);
-  return actorImpl.GetInterceptTouchRequired() && (state!= PointState::MOTION || actorImpl.IsDispatchTouchMotion());
+  return actorImpl.GetInterceptTouchRequired() && (state != PointState::MOTION || actorImpl.IsDispatchTouchMotion());
 }
 
 bool ShouldEmitTouchEvent(const Actor& actorImpl, const Dali::TouchEvent& event)
 {
   PointState::Type state = event.GetState(0);
-  return actorImpl.GetTouchRequired() && (state!= PointState::MOTION || actorImpl.IsDispatchTouchMotion());
+  return actorImpl.GetTouchRequired() && (state != PointState::MOTION || actorImpl.IsDispatchTouchMotion());
 }
 
 Dali::Actor EmitInterceptTouchSignals(Dali::Actor actor, const Dali::TouchEvent& touchEvent)
@@ -146,12 +146,13 @@ Dali::Actor EmitTouchSignals(Dali::Actor actor, const Dali::TouchEvent& touchEve
   return consumedActor;
 }
 
-Dali::Actor AllocAndEmitTouchSignals(unsigned long time, Dali::Actor actor, const Integration::Point& point)
+Dali::Actor AllocAndEmitTouchSignals(unsigned long time, Dali::Actor actor, const Integration::Point& point, RenderTaskPtr renderTask)
 {
   TouchEventPtr    touchEvent(new TouchEvent(time));
   Dali::TouchEvent touchEventHandle(touchEvent.Get());
 
   touchEvent->AddPoint(point);
+  touchEvent->SetRenderTask(Dali::RenderTask(renderTask.Get()));
 
   return EmitTouchSignals(actor, touchEventHandle);
 }
@@ -166,6 +167,7 @@ Dali::Actor EmitTouchSignals(Actor* actor, RenderTask& renderTask, const TouchEv
   if(actor)
   {
     TouchEventPtr touchEventImpl = TouchEvent::Clone(*originalTouchEvent.Get());
+    touchEventImpl->SetRenderTask(Dali::RenderTask(&renderTask));
 
     Integration::Point& primaryPoint = touchEventImpl->GetPoint(0);
 
@@ -286,7 +288,7 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
       Dali::Actor lastPrimaryHitActorHandle(lastPrimaryHitActor);
       currentPoint.SetHitActor(lastPrimaryHitActorHandle);
 
-      consumingActor = AllocAndEmitTouchSignals(event.time, lastPrimaryHitActorHandle, currentPoint);
+      consumingActor = AllocAndEmitTouchSignals(event.time, lastPrimaryHitActorHandle, currentPoint, mLastRenderTask);
     }
 
     // If the last consumed actor was different to the primary hit actor then inform it as well (if it has not already been informed).
@@ -297,7 +299,7 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
     {
       Dali::Actor lastConsumedActorHandle(lastConsumedActor);
       currentPoint.SetHitActor(lastConsumedActorHandle);
-      AllocAndEmitTouchSignals(event.time, lastConsumedActorHandle, currentPoint);
+      AllocAndEmitTouchSignals(event.time, lastConsumedActorHandle, currentPoint, mLastRenderTask);
     }
 
     // Tell the touch-down consuming actor as well, if required
@@ -310,7 +312,7 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
       Dali::Actor touchDownConsumedActorHandle(touchDownConsumedActor);
 
       currentPoint.SetHitActor(touchDownConsumedActorHandle);
-      AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint);
+      AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint, mLastRenderTask);
     }
 
     Clear();
@@ -349,6 +351,7 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
 
       // Only set the currentRenderTask for the primary hit actor.
       currentRenderTask = hitTestResults.renderTask;
+      touchEventImpl->SetRenderTask(Dali::RenderTask(currentRenderTask.Get()));
     }
     else
     {
@@ -392,9 +395,9 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
         mInterceptedTouchActor.SetActor(&GetImplementation(interceptedActor));
         // If the child is being touched, INTERRUPTED is sent.
         if(mLastPrimaryHitActor.GetActor() &&
-          mLastPrimaryHitActor.GetActor() != interceptedActor &&
-          mLastRenderTask &&
-          mLastPrimaryPointState != PointState::FINISHED)
+           mLastPrimaryHitActor.GetActor() != interceptedActor &&
+           mLastRenderTask &&
+           mLastPrimaryPointState != PointState::FINISHED)
         {
           EmitTouchSignals(mLastPrimaryHitActor.GetActor(), *mLastRenderTask.Get(), touchEventImpl, PointState::INTERRUPTED);
           mTouchDownConsumedActor.SetActor(nullptr);
@@ -550,7 +553,7 @@ bool TouchEventProcessor::ProcessTouchEvent(const Integration::TouchEvent& event
           currentPoint.SetHitActor(touchDownConsumedActorHandle);
           currentPoint.SetState(PointState::INTERRUPTED);
 
-          AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint);
+          AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint, nullptr /* Not Required for this use case */);
         }
 
         mTouchDownConsumedActor.SetActor(nullptr);
index a222e9f..16a1527 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -108,6 +108,11 @@ MouseButton::Type TouchEvent::GetMouseButton(std::size_t point) const
   return GetImplementation(*this).GetMouseButton(point);
 }
 
+RenderTask TouchEvent::GetRenderTask() const
+{
+  return GetImplementation(*this).GetRenderTask();
+}
+
 TouchEvent::TouchEvent(Internal::TouchEvent* internal)
 : BaseHandle(internal)
 {
index 81e73b1..ad65bd1 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOUCH_EVENT_H
 
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@
 #include <dali/public-api/events/point-state.h>
 #include <dali/public-api/math/degree.h>
 #include <dali/public-api/object/base-handle.h>
+#include <dali/public-api/render-tasks/render-task.h>
 
 namespace Dali
 {
@@ -266,6 +267,14 @@ public:
    */
   MouseButton::Type GetMouseButton(std::size_t point) const;
 
+  /**
+   * @brief Retrieves the render-task that was used to generate this touch-event.
+   *
+   * @SINCE_2_3.0
+   * @return The render-task used to generate this touch-event.
+   */
+  RenderTask GetRenderTask() const;
+
 public: // Not intended for application developers
   /// @cond internal
   /**