X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fevents%2Fhit-test-algorithm-impl.h;h=bfe9cb007ff750faf808cd15eac8791b9004ddbf;hb=418d4f93f7158ef267ab389106f831033671c880;hp=f63c7b65794792f907f7d17b16daa0ed6184bb00;hpb=ce20e9f082e811130930d13c9e9edc1da4ce1013;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/events/hit-test-algorithm-impl.h b/dali/internal/event/events/hit-test-algorithm-impl.h index f63c7b6..bfe9cb0 100644 --- a/dali/internal/event/events/hit-test-algorithm-impl.h +++ b/dali/internal/event/events/hit-test-algorithm-impl.h @@ -1,24 +1,25 @@ -#ifndef __DALI_INTERNAL_HIT_TEST_ALGORITHM_H__ -#define __DALI_INTERNAL_HIT_TEST_ALGORITHM_H__ - -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +#ifndef DALI_INTERNAL_HIT_TEST_ALGORITHM_H +#define DALI_INTERNAL_HIT_TEST_ALGORITHM_H + +/* + * Copyright (c) 2016 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // INTERNAL INCLUDES -#include +#include #include namespace Dali @@ -27,6 +28,8 @@ namespace Dali namespace Internal { +class Layer; + /** * This namespace is provided for application developers to do hit test for the actors. */ @@ -43,15 +46,63 @@ struct Results }; /** + * Interface used by the hit-test-algorithm to determine whether the actor is hittable or whether + * we walk down its hierarchy. + */ +struct HitTestInterface +{ + /** + * Called by the hit-test algorithm to determine whether the actor is hittable or not. + * + * @param[in] actor Raw pointer to an Actor object. + * + * @return true if actor is hittable, false otherwise. + */ + virtual bool IsActorHittable( Actor* actor ) = 0; + + /** + * Called by the hit-test algorithm to determine whether the algorithm should descend the actor's + * hierarchy (and hit-test its children as well). + * + * @param[in] actor Raw pointer to an Actor object. + * + * @return true if we should descend the actor's hierarchy, false otherwise. + */ + virtual bool DescendActorHierarchy( Actor* actor ) = 0; + + /** + * Called by the hit-test algorithm to determine whether the layer specified consumes the hit + * regardless of whether an actor in the layer requires it or not. + * + * @note If true is returned, then no layers behind this layer will be hit-test. + * + * @param[in] layer Raw pointer to a Layer object. + * + * @return true if the layer should consume the hit, false otherwise. + */ + virtual bool DoesLayerConsumeHit( Layer* layer ) = 0; + +protected: + + /** + * Virtual destructor, no deletion through this interface + */ + virtual ~HitTestInterface(); + +}; + +/** * @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] stage The stage. * @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 * *

Hit Test Algorithm:

* @@ -65,26 +116,41 @@ void HitTest( Stage& stage, const Vector2& screenCoordinates, Dali::HitTestAlgor * first to determine if the ray is in the actor's proximity. * - If this is also successful, then a more accurate ray test is performed to see if we have a hit. * - * - 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. + * @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 ); +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&) + */ +bool HitTest( Stage& stage, const Vector2& screenCoordinates, Results& results ); /** * Hit test specific to a given RenderTask + * * @param[in] stage The stage. * @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[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 Internal } // namespace Dali -#endif // __DALI_INTERNAL_HIT_TEST_ALGORITHM_H__ +#endif // DALI_INTERNAL_HIT_TEST_ALGORITHM_H