#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>
#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>
#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.
#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
{
*/
MouseButton::Type GetMouseButton(std::size_t point) const;
+ Dali::RenderTask GetRenderTask() const
+ {
+ return mRenderTask;
+ }
+
// Setters
/**
*/
void AddPoint(const Integration::Point& point);
+ void SetRenderTask(Dali::RenderTask renderTask)
+ {
+ mRenderTask = renderTask;
+ }
+
private:
/**
* @brief Virtual Destructor
~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
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)
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);
}
if(actor)
{
TouchEventPtr touchEventImpl = TouchEvent::Clone(*originalTouchEvent.Get());
+ touchEventImpl->SetRenderTask(Dali::RenderTask(&renderTask));
Integration::Point& primaryPoint = touchEventImpl->GetPoint(0);
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).
{
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
Dali::Actor touchDownConsumedActorHandle(touchDownConsumedActor);
currentPoint.SetHitActor(touchDownConsumedActorHandle);
- AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint);
+ AllocAndEmitTouchSignals(event.time, touchDownConsumedActorHandle, currentPoint, mLastRenderTask);
}
Clear();
// Only set the currentRenderTask for the primary hit actor.
currentRenderTask = hitTestResults.renderTask;
+ touchEventImpl->SetRenderTask(Dali::RenderTask(currentRenderTask.Get()));
}
else
{
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);
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);
#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.
#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
{
*/
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
/**