Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f );
Dali::HitTestAlgorithm::Results results;
- Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction );
- DALI_TEST_CHECK( !results.actor);
+ DALI_TEST_CHECK( !results.actor );
+ DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
+ // miss expected, results not changed
+ DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
+ DALI_TEST_CHECK( !results.actor );
DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
screenCoordinates.x = stageSize.x * 0.265f;
screenCoordinates.y = stageSize.y * 0.33f;
results.actor = Actor();
results.actorCoordinates = Vector2::ZERO;
- Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction );
- DALI_TEST_CHECK( results.actor == offscreenActor);
+ // hit expected, results changed
+ DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
+ DALI_TEST_CHECK( results.actor == offscreenActor );
DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
screenCoordinates.x = stageSize.x * 0.435f;
screenCoordinates.y = stageSize.y * 0.52f;
- Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction );
- DALI_TEST_CHECK( results.actor == offscreenActor);
- DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
+ // hit expected, results changed
+ DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
+ DALI_TEST_CHECK( results.actor == offscreenActor );
+ const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale;
+ DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
screenCoordinates.x = stageSize.x * 0.65f;
screenCoordinates.y = stageSize.y * 0.95f;
- Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction );
- DALI_TEST_CHECK( !results.actor);
- DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
+ // miss expected, results not changed
+ DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
+ DALI_TEST_CHECK( results.actor == offscreenActor );
+ DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
END_TEST;
}
} // unnamed namespace
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func )
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func )
{
+ bool wasHit( false );
// Hit-test the regular on-stage actors
RenderTaskList& taskList = stage.GetRenderTaskList();
LayerList& layerList = stage.GetLayerList();
{
results.actor = hitTestResults.actor;
results.actorCoordinates = hitTestResults.actorCoordinates;
+ wasHit = true;
}
+ return wasHit;
}
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results, HitTestInterface& hitTestInterface )
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results, HitTestInterface& hitTestInterface )
{
- bool hit = false;
+ bool wasHit( false );
// Hit-test the system-overlay actors first
SystemOverlay* systemOverlay = stage.GetSystemOverlayInternal();
RenderTaskList& overlayTaskList = systemOverlay->GetOverlayRenderTasks();
LayerList& overlayLayerList = systemOverlay->GetLayerList();
- hit = HitTestForEachRenderTask( overlayLayerList, overlayTaskList, screenCoordinates, results, hitTestInterface );
+ wasHit = HitTestForEachRenderTask( overlayLayerList, overlayTaskList, screenCoordinates, results, hitTestInterface );
}
// Hit-test the regular on-stage actors
- if ( !hit )
+ if ( !wasHit )
{
RenderTaskList& taskList = stage.GetRenderTaskList();
LayerList& layerList = stage.GetLayerList();
- HitTestForEachRenderTask( layerList, taskList, screenCoordinates, results, hitTestInterface );
+ wasHit = HitTestForEachRenderTask( layerList, taskList, screenCoordinates, results, hitTestInterface );
}
+ return wasHit;
}
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results )
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results )
{
ActorTouchableCheck actorTouchableCheck;
- HitTest( stage, screenCoordinates, results, actorTouchableCheck );
+ return HitTest( stage, screenCoordinates, results, actorTouchableCheck );
}
-void HitTest( Stage& stage, RenderTask& renderTask, const Vector2& screenCoordinates,
+bool HitTest( Stage& stage, RenderTask& renderTask, const Vector2& screenCoordinates,
Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func )
{
+ bool wasHit( false );
Results hitTestResults;
+
HitTestFunctionWrapper hitTestFunctionWrapper( func );
if ( HitTestRenderTask( stage.GetLayerList(), renderTask, screenCoordinates, hitTestResults, hitTestFunctionWrapper ) )
{
results.actor = hitTestResults.actor;
results.actorCoordinates = hitTestResults.actorCoordinates;
+ wasHit = true;
}
+ return wasHit;
}
} // namespace HitTestAlgorithm
/**
* @copydoc Dali::HitTestAlgorithm::HitTest(Stage stage, const Vector2& screenCoordinates, Results& results, HitTestFunction func )
*/
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func );
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func );
/**
* Given screen coordinates, this method returns the hit actor & the local coordinates relative to the actor etc.
* @param[in] screenCoordinates The screen coordinates.
* @param[out] results The results of the hit-test.
* @param[in] hitTestInterface Used to determine whether the actor is hit or whether we walk down its hierarchy
+ * @return true if something was hit
*
* <h3>Hit Test Algorithm:</h3>
*
* @note Currently, we prefer a child hit over a parent (regardless of the distance from the
* camera) unless the parent is a RenderableActor but this is subject to change.
*/
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results, HitTestInterface& hitTestInterface );
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results, HitTestInterface& hitTestInterface );
/**
* Default HitTest where we check if a touch is required.
* @param[in] stage The stage.
* @param[in] screenCoordinates The screen coordinates.
* @param[out] results The results of the hit-test.
+ * @return true if something was hit
*
* @see HitTest(Stage&, const Vector2&, Results&, HitTestInterface&)
*/
-void HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results );
+bool HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results );
/**
* Hit test specific to a given RenderTask
* @param[in] screenCoordinates The screen coordinates.
* @param[out] results The results of the hit-test.
* @param[in] func The function to use in the hit-test algorithm.
+ * @return true if something was hit
*/
-void HitTest( Stage& stage, RenderTask& renderTask, const Vector2& screenCoordinates,
+bool HitTest( Stage& stage, RenderTask& renderTask, const Vector2& screenCoordinates,
Dali::HitTestAlgorithm::Results& results, Dali::HitTestAlgorithm::HitTestFunction func );
} // namespace HitTestAlgorithm
namespace HitTestAlgorithm
{
-void HitTest( Stage stage, const Vector2& screenCoordinates, Results& results, HitTestFunction func )
+bool HitTest( Stage stage, const Vector2& screenCoordinates, Results& results, HitTestFunction func )
{
- Internal::HitTestAlgorithm::HitTest( GetImplementation(stage), screenCoordinates, results, func );
+ return Internal::HitTestAlgorithm::HitTest( GetImplementation(stage), screenCoordinates, results, func );
}
-void HitTest( RenderTask& renderTask, const Vector2& screenCoordinates, Results& results, HitTestFunction func )
+bool HitTest( RenderTask& renderTask, const Vector2& screenCoordinates, Results& results, HitTestFunction func )
{
Stage stage = Stage::GetCurrent();
- Internal::HitTestAlgorithm::HitTest( GetImplementation( stage ), GetImplementation(renderTask), screenCoordinates, results, func );
+ return Internal::HitTestAlgorithm::HitTest( GetImplementation( stage ), GetImplementation(renderTask), screenCoordinates, results, func );
}
} // namespace HitTestAlgorithm
*
* @param[in] stage The stage.
* @param[in] screenCoordinates The screen coordinates.
- * @param[out] results The results of the hit-test.
+ * @param[out] results The results of the hit-test, only modified if something is hit
* @param[in] func The function to use in the hit-test algorithm.
+ * @return true if something was hit
*/
-DALI_IMPORT_API void HitTest( Stage stage, const Vector2& screenCoordinates, Results& results, HitTestFunction func );
+DALI_IMPORT_API bool HitTest( Stage stage, const Vector2& screenCoordinates, Results& results, HitTestFunction func );
/**
* @brief Hit test specific to a given RenderTask.
*
* @param[in] renderTask The render task for hit test
* @param[in] screenCoordinates The screen coordinates.
- * @param[out] results The results of the hit-test.
+ * @param[out] results The results of the hit-test, only modified if something is hit
* @param[in] func The function to use in the hit-test algorithm.
+ * @return true if something was hit
*/
-DALI_IMPORT_API void HitTest( RenderTask& renderTask, const Vector2& screenCoordinates, Results& results, HitTestFunction func );
+DALI_IMPORT_API bool HitTest( RenderTask& renderTask, const Vector2& screenCoordinates, Results& results, HitTestFunction func );
} // namespace HitTestAlgorithm