/*
- * Copyright (c) 2019 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.
#endif
// INTERNAL INCLUDES
+#include <dali/integration-api/debug.h>
#include <dali/integration-api/render-controller.h>
#include <dali/internal/event/common/stage-impl.h>
-#include <dali/internal/event/events/pinch-gesture-detector-impl.h>
+#include <dali/internal/event/events/pan-gesture/pan-gesture-impl.h>
+#include <dali/internal/event/events/pinch-gesture/pinch-gesture-detector-impl.h>
#include <dali/internal/update/gestures/scene-graph-pan-gesture.h>
-#include <dali/public-api/events/pan-gesture.h>
-#include <dali/integration-api/debug.h>
-
namespace Dali
{
-
namespace Internal
{
-GestureEventProcessor::GestureEventProcessor( SceneGraph::UpdateManager& updateManager, Integration::RenderController& renderController )
+GestureEventProcessor::GestureEventProcessor(SceneGraph::UpdateManager& updateManager, Integration::RenderController& renderController)
: mLongPressGestureProcessor(),
- mPanGestureProcessor( updateManager ),
+ mPanGestureProcessor(updateManager),
mPinchGestureProcessor(),
mTapGestureProcessor(),
- mRenderController( renderController ),
+ mRotationGestureProcessor(),
+ mRenderController(renderController),
envOptionMinimumPanDistance(-1),
envOptionMinimumPanEvents(-1)
{
}
-GestureEventProcessor::~GestureEventProcessor()
-{
-}
+GestureEventProcessor::~GestureEventProcessor() = default;
-void GestureEventProcessor::ProcessTouchEvent( Scene& scene, const Integration::TouchEvent& event)
+void GestureEventProcessor::ProcessTouchEvent(Scene& scene, const Integration::TouchEvent& event)
{
mLongPressGestureProcessor.ProcessTouch(scene, event);
mPanGestureProcessor.ProcessTouch(scene, event);
mPinchGestureProcessor.ProcessTouch(scene, event);
mTapGestureProcessor.ProcessTouch(scene, event);
+ mRotationGestureProcessor.ProcessTouch(scene, event);
}
void GestureEventProcessor::AddGestureDetector(GestureDetector* gestureDetector, Scene& scene)
{
- switch (gestureDetector->GetType())
+ switch(gestureDetector->GetType())
{
- case Gesture::LongPress:
+ case GestureType::LONG_PRESS:
{
LongPressGestureDetector* longPress = static_cast<LongPressGestureDetector*>(gestureDetector);
mLongPressGestureProcessor.AddGestureDetector(longPress, scene);
break;
}
- case Gesture::Pan:
+ case GestureType::PAN:
{
PanGestureDetector* pan = static_cast<PanGestureDetector*>(gestureDetector);
mPanGestureProcessor.AddGestureDetector(pan, scene, envOptionMinimumPanDistance, envOptionMinimumPanEvents);
break;
}
- case Gesture::Pinch:
+ case GestureType::PINCH:
{
PinchGestureDetector* pinch = static_cast<PinchGestureDetector*>(gestureDetector);
mPinchGestureProcessor.AddGestureDetector(pinch, scene);
break;
}
- case Gesture::Tap:
+ case GestureType::TAP:
{
TapGestureDetector* tap = static_cast<TapGestureDetector*>(gestureDetector);
mTapGestureProcessor.AddGestureDetector(tap, scene);
break;
}
+
+ case GestureType::ROTATION:
+ {
+ RotationGestureDetector* rotation = static_cast<RotationGestureDetector*>(gestureDetector);
+ mRotationGestureProcessor.AddGestureDetector(rotation, scene);
+ break;
+ }
}
}
void GestureEventProcessor::RemoveGestureDetector(GestureDetector* gestureDetector)
{
- switch (gestureDetector->GetType())
+ switch(gestureDetector->GetType())
{
- case Gesture::LongPress:
+ case GestureType::LONG_PRESS:
{
LongPressGestureDetector* longPress = static_cast<LongPressGestureDetector*>(gestureDetector);
mLongPressGestureProcessor.RemoveGestureDetector(longPress);
break;
}
- case Gesture::Pan:
+ case GestureType::PAN:
{
PanGestureDetector* pan = static_cast<PanGestureDetector*>(gestureDetector);
mPanGestureProcessor.RemoveGestureDetector(pan);
break;
}
- case Gesture::Pinch:
+ case GestureType::PINCH:
{
PinchGestureDetector* pinch = static_cast<PinchGestureDetector*>(gestureDetector);
mPinchGestureProcessor.RemoveGestureDetector(pinch);
break;
}
- case Gesture::Tap:
+ case GestureType::TAP:
{
TapGestureDetector* tap = static_cast<TapGestureDetector*>(gestureDetector);
mTapGestureProcessor.RemoveGestureDetector(tap);
break;
}
+
+ case GestureType::ROTATION:
+ {
+ RotationGestureDetector* rotation = static_cast<RotationGestureDetector*>(gestureDetector);
+ mRotationGestureProcessor.RemoveGestureDetector(rotation);
+ break;
+ }
}
}
void GestureEventProcessor::GestureDetectorUpdated(GestureDetector* gestureDetector)
{
- switch (gestureDetector->GetType())
+ switch(gestureDetector->GetType())
{
- case Gesture::LongPress:
+ case GestureType::LONG_PRESS:
{
LongPressGestureDetector* longPress = static_cast<LongPressGestureDetector*>(gestureDetector);
mLongPressGestureProcessor.GestureDetectorUpdated(longPress);
break;
}
- case Gesture::Pan:
+ case GestureType::PAN:
{
PanGestureDetector* pan = static_cast<PanGestureDetector*>(gestureDetector);
mPanGestureProcessor.GestureDetectorUpdated(pan);
break;
}
- case Gesture::Pinch:
+ case GestureType::PINCH:
{
PinchGestureDetector* pinch = static_cast<PinchGestureDetector*>(gestureDetector);
mPinchGestureProcessor.GestureDetectorUpdated(pinch);
break;
}
- case Gesture::Tap:
+ case GestureType::TAP:
{
TapGestureDetector* tap = static_cast<TapGestureDetector*>(gestureDetector);
mTapGestureProcessor.GestureDetectorUpdated(tap);
break;
}
- }
-}
-
-void GestureEventProcessor::SetGestureProperties( const Gesture& gesture )
-{
- bool requestUpdate = false;
-
- switch ( gesture.type )
- {
- case Gesture::Pan:
- {
- const PanGesture& pan = static_cast< const PanGesture& >( gesture );
- requestUpdate = mPanGestureProcessor.SetPanGestureProperties( pan );
- break;
- }
- case Gesture::LongPress:
- case Gesture::Pinch:
- case Gesture::Tap:
+ case GestureType::ROTATION:
{
- DALI_ASSERT_DEBUG( false && "Gesture type does not have scene object\n" );
+ // Nothing to do
break;
}
}
+}
+
+void GestureEventProcessor::SetGestureProperties(const Dali::Gesture& gesture)
+{
+ DALI_ASSERT_DEBUG(gesture.GetType() == GestureType::PAN && "Only PanGesture has a scene object\n");
- if( requestUpdate )
+ const Dali::PanGesture& pan = static_cast<const Dali::PanGesture&>(gesture);
+ if(mPanGestureProcessor.SetPanGestureProperties(pan))
{
// We may not be updating so we need to ask the render controller for an update.
- mRenderController.RequestUpdate( false );
+ mRenderController.RequestUpdate();
}
}
updateRequired |= mPanGestureProcessor.NeedsUpdate();
updateRequired |= mPinchGestureProcessor.NeedsUpdate();
updateRequired |= mTapGestureProcessor.NeedsUpdate();
+ updateRequired |= mRotationGestureProcessor.NeedsUpdate();
return updateRequired;
}
mPanGestureProcessor.SetPredictionMode(mode);
}
-void GestureEventProcessor::SetPanGesturePredictionAmount( uint32_t amount )
+void GestureEventProcessor::SetPanGesturePredictionAmount(uint32_t amount)
{
mPanGestureProcessor.SetPredictionAmount(amount);
}
-void GestureEventProcessor::SetPanGestureMaximumPredictionAmount( uint32_t amount )
+void GestureEventProcessor::SetPanGestureMaximumPredictionAmount(uint32_t amount)
{
mPanGestureProcessor.SetMaximumPredictionAmount(amount);
}
-void GestureEventProcessor::SetPanGestureMinimumPredictionAmount( uint32_t amount )
+void GestureEventProcessor::SetPanGestureMinimumPredictionAmount(uint32_t amount)
{
mPanGestureProcessor.SetMinimumPredictionAmount(amount);
}
-void GestureEventProcessor::SetPanGesturePredictionAmountAdjustment( uint32_t amount )
+void GestureEventProcessor::SetPanGesturePredictionAmountAdjustment(uint32_t amount)
{
mPanGestureProcessor.SetPredictionAmountAdjustment(amount);
}
-void GestureEventProcessor::SetPanGestureSmoothingMode( int32_t mode )
+void GestureEventProcessor::SetPanGestureSmoothingMode(int32_t mode)
{
mPanGestureProcessor.SetSmoothingMode(mode);
}
-void GestureEventProcessor::SetPanGestureSmoothingAmount( float amount )
+void GestureEventProcessor::SetPanGestureSmoothingAmount(float amount)
{
mPanGestureProcessor.SetSmoothingAmount(amount);
}
-void GestureEventProcessor::SetPanGestureUseActualTimes( bool value )
+void GestureEventProcessor::SetPanGestureUseActualTimes(bool value)
{
- mPanGestureProcessor.SetUseActualTimes( value );
+ mPanGestureProcessor.SetUseActualTimes(value);
}
-void GestureEventProcessor::SetPanGestureInterpolationTimeRange( int32_t value )
+void GestureEventProcessor::SetPanGestureInterpolationTimeRange(int32_t value)
{
- mPanGestureProcessor.SetInterpolationTimeRange( value );
+ mPanGestureProcessor.SetInterpolationTimeRange(value);
}
-void GestureEventProcessor::SetPanGestureScalarOnlyPredictionEnabled( bool value )
+void GestureEventProcessor::SetPanGestureScalarOnlyPredictionEnabled(bool value)
{
- mPanGestureProcessor.SetScalarOnlyPredictionEnabled( value );
+ mPanGestureProcessor.SetScalarOnlyPredictionEnabled(value);
}
-void GestureEventProcessor::SetPanGestureTwoPointPredictionEnabled( bool value )
+void GestureEventProcessor::SetPanGestureTwoPointPredictionEnabled(bool value)
{
- mPanGestureProcessor.SetTwoPointPredictionEnabled( value );
+ mPanGestureProcessor.SetTwoPointPredictionEnabled(value);
}
-void GestureEventProcessor::SetPanGestureTwoPointInterpolatePastTime( int value )
+void GestureEventProcessor::SetPanGestureTwoPointInterpolatePastTime(int value)
{
- mPanGestureProcessor.SetTwoPointInterpolatePastTime( value );
+ mPanGestureProcessor.SetTwoPointInterpolatePastTime(value);
}
-void GestureEventProcessor::SetPanGestureTwoPointVelocityBias( float value )
+void GestureEventProcessor::SetPanGestureTwoPointVelocityBias(float value)
{
- mPanGestureProcessor.SetTwoPointVelocityBias( value );
+ mPanGestureProcessor.SetTwoPointVelocityBias(value);
}
-void GestureEventProcessor::SetPanGestureTwoPointAccelerationBias( float value )
+void GestureEventProcessor::SetPanGestureTwoPointAccelerationBias(float value)
{
- mPanGestureProcessor.SetTwoPointAccelerationBias( value );
+ mPanGestureProcessor.SetTwoPointAccelerationBias(value);
}
-void GestureEventProcessor::SetPanGestureMultitapSmoothingRange( int32_t value )
+void GestureEventProcessor::SetPanGestureMultitapSmoothingRange(int32_t value)
{
- mPanGestureProcessor.SetMultitapSmoothingRange( value );
+ mPanGestureProcessor.SetMultitapSmoothingRange(value);
}
-void GestureEventProcessor::SetPanGestureMinimumDistance( int32_t value )
+void GestureEventProcessor::SetPanGestureMinimumDistance(int32_t value)
{
- envOptionMinimumPanDistance = value;
+ envOptionMinimumPanDistance = value;
}
-void GestureEventProcessor::SetPanGestureMinimumPanEvents( int32_t value )
+void GestureEventProcessor::SetPanGestureMinimumPanEvents(int32_t value)
{
envOptionMinimumPanEvents = value;
}
-void GestureEventProcessor::SetPinchGestureMinimumDistance( float value)
+void GestureEventProcessor::SetPinchGestureMinimumDistance(float value)
+{
+ mPinchGestureProcessor.SetMinimumPinchDistance(value);
+}
+
+void GestureEventProcessor::SetPinchGestureMinimumTouchEvents(uint32_t value)
+{
+ mPinchGestureProcessor.SetMinimumTouchEvents(value);
+}
+
+void GestureEventProcessor::SetPinchGestureMinimumTouchEventsAfterStart(uint32_t value)
+{
+ mPinchGestureProcessor.SetMinimumTouchEventsAfterStart(value);
+}
+
+void GestureEventProcessor::SetRotationGestureMinimumTouchEvents(uint32_t value)
+{
+ mRotationGestureProcessor.SetMinimumTouchEvents(value);
+}
+
+void GestureEventProcessor::SetRotationGestureMinimumTouchEventsAfterStart(uint32_t value)
{
- mPinchGestureProcessor.SetMinimumPinchDistance( value );
+ mRotationGestureProcessor.SetMinimumTouchEventsAfterStart(value);
+}
+
+void GestureEventProcessor::SetLongPressMinimumHoldingTime(uint32_t value)
+{
+ mLongPressGestureProcessor.SetMinimumHoldingTime(value);
+}
+
+uint32_t GestureEventProcessor::GetLongPressMinimumHoldingTime() const
+{
+ return mLongPressGestureProcessor.GetMinimumHoldingTime();
}
const PanGestureProcessor& GestureEventProcessor::GetPanGestureProcessor()
return mPanGestureProcessor;
}
+void GestureEventProcessor::SetTapMaximumAllowedTime(uint32_t time)
+{
+ mTapGestureProcessor.SetMaximumAllowedTime(time);
+}
+
+void GestureEventProcessor::SetTapRecognizerTime(uint32_t time)
+{
+ mTapGestureProcessor.SetRecognizerTime(time);
+}
+
} // namespace Internal
} // namespace Dali