Reduce CC of TouchEventProcessor::ProcessTouchEvent
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / layer-impl.h
index 22a74be..d65ee7c 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_INTERNAL_LAYER_H__
-#define __DALI_INTERNAL_LAYER_H__
+#ifndef DALI_INTERNAL_LAYER_H
+#define DALI_INTERNAL_LAYER_H
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
  */
 
 // INTERNAL INCLUDES
-#include <dali/public-api/actors/layer.h>
-#include <dali/internal/event/actors/actor-impl.h>
 #include <dali/internal/event/actors/actor-declarations.h>
+#include <dali/internal/event/actors/actor-impl.h>
+#include <dali/public-api/actors/layer.h>
 
 namespace Dali
 {
-
 namespace Internal
 {
-
 class LayerList;
 
 namespace SceneGraph
 {
 class UpdateManager;
 class Layer;
-}
+} // namespace SceneGraph
 
-typedef Dali::ClippingBox ClippingBox;
+using ClippingBox = Dali::ClippingBox;
 
-class Layer : public Actor
+class Layer : public Actor, public ConnectionTracker
 {
 public:
-
   /**
-   * @brief This sort function sorts translucent actors according to the Z-value in view space.
-   *
-   * This is useful for 2D user interfaces.
+   * @copydoc Dali::Layer::ZValue(const Vector3&, float)
    *
    * This is the default sorting function.
+   * It is useful for 2D user interfaces, and it's used to sort translucent renderers.
+   *
+   * Only the Z signed distance from the camera is considererd, lower values will be drawn on top.
    *
-   * We return a negative z value as in our translation, a low z means that it should
-   * be sorted further away and a high z means that it should be closer.
    * @param[in] position     position of actor in view space
-   * @param[in] sortModifier additional sort modifer
    * @return depth
    */
-  static float ZValue(const Vector3& position, float sortModifier)
+  static float ZValue(const Vector3& position)
   {
     // inlined so we avoid a function call when sorting renderers
-    return position.z + sortModifier;
+    return position.z;
   }
 
   /**
@@ -71,16 +66,14 @@ public:
   /**
    * Create a new root layer; this is typically owned by the stage.
    * @param[in] layerList The layer will be added to this ordered list.
-   * @param[in] manager The update manager to install a root node with.
-   * @param[in] systemLevel True if using the SystemOverlay API; see Integration::GetSystemOverlay() for more details.
    * @return A smart-pointer to the newly allocated Actor.
    */
-  static LayerPtr NewRoot( LayerList& layerList, SceneGraph::UpdateManager& manager, bool systemLevel );
+  static LayerPtr NewRoot(LayerList& layerList);
 
   /**
    * @copydoc Dali::Internal::Actor::OnInitialize
    */
-  void OnInitialize();
+  void OnInitialize() override;
 
   /**
    * Query the current depth of the layer
@@ -100,12 +93,12 @@ public:
   /**
    * @copydoc Dali::Layer::RaiseAbove
    */
-  void RaiseAbove( const Internal::Layer& target );
+  void RaiseAbove(const Internal::Layer& target);
 
   /**
    * @copydoc Dali::Layer::LowerBelow
    */
-  void LowerBelow( const Internal::Layer& target );
+  void LowerBelow(const Internal::Layer& target);
 
   /**
    * @copydoc Dali::Layer::RaiseToTop
@@ -120,12 +113,12 @@ public:
   /**
    * @copydoc Dali::Layer::MoveAbove
    */
-  void MoveAbove( const Internal::Layer& target );
+  void MoveAbove(const Internal::Layer& target);
 
   /**
    * @copydoc Dali::Layer::MoveAbove
    */
-  void MoveBelow( const Internal::Layer& target );
+  void MoveBelow(const Internal::Layer& target);
 
   /**
    * @copydoc Dali::Layer::SetClipping()
@@ -154,9 +147,22 @@ public:
   }
 
   /**
+   * @copydoc Dali::Layer::SetBehavior()
+   */
+  void SetBehavior(Dali::Layer::Behavior behavior);
+
+  /**
+   * @copydoc Dali::Layer::GetBehavior()
+   */
+  Dali::Layer::Behavior GetBehavior() const
+  {
+    return mBehavior;
+  }
+
+  /**
    * @copydoc Dali::Layer::SetDepthTestDisabled()
    */
-  void SetDepthTestDisabled( bool disable );
+  void SetDepthTestDisabled(bool disable);
 
   /**
    * @copydoc Dali::Layer::IsDepthTestDisabled()
@@ -171,7 +177,7 @@ public:
   /**
    * @copydoc Dali::Layer::SetTouchConsumed()
    */
-  void SetTouchConsumed( bool consume );
+  void SetTouchConsumed(bool consume);
 
   /**
    * @copydoc Dali::Layer::IsTouchConsumed()
@@ -181,7 +187,7 @@ public:
   /**
    * @copydoc Dali::Layer::SetHoverConsumed()
    */
-  void SetHoverConsumed( bool consume );
+  void SetHoverConsumed(bool consume);
 
   /**
    * @copydoc Dali::Layer::IsHoverConsumed()
@@ -190,111 +196,78 @@ public:
 
   /**
    * Helper function to get the scene object.
-   * This should only be called by Stage
+   *
    * @return the scene object for the layer.
    */
-  const SceneGraph::Layer& GetSceneLayerOnStage() const;
+  const SceneGraph::Layer& GetSceneGraphLayer() const;
 
   /**
    * @copydoc Dali::Internal::Actor::DoAction()
    */
-  static bool DoAction(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes);
+  static bool DoAction(BaseObject* object, const std::string& actionName, const Property::Map& attributes);
 
 public: // Default property extensions from Object
   /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyCount()
-   */
-  virtual unsigned int GetDefaultPropertyCount() const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndices()
-   */
-  virtual void GetDefaultPropertyIndices( Property::IndexContainer& indices ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyName()
-   */
-  virtual const char* GetDefaultPropertyName(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndex()
-   */
-  virtual Property::Index GetDefaultPropertyIndex(const std::string& name) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyWritable()
-   */
-  virtual bool IsDefaultPropertyWritable(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyAnimatable()
-   */
-  virtual bool IsDefaultPropertyAnimatable(Property::Index index) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyAConstraintInput()
-   */
-  virtual bool IsDefaultPropertyAConstraintInput( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyType()
+   * @copydoc Dali::Internal::Object::SetDefaultProperty()
    */
-  virtual Property::Type GetDefaultPropertyType(Property::Index index) const;
+  void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue) override;
 
   /**
-   * @copydoc Dali::Internal::Object::SetDefaultProperty()
+   * @copydoc Dali::Internal::Object::GetDefaultProperty()
    */
-  virtual void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue);
+  Property::Value GetDefaultProperty(Property::Index index) const override;
 
   /**
    * @copydoc Dali::Internal::Object::GetDefaultProperty()
    */
-  virtual Property::Value GetDefaultProperty( Property::Index index ) const;
+  Property::Value GetDefaultPropertyCurrentValue(Property::Index index) const override;
 
 protected:
-
   /**
    * Construct a new layer.
    * @param[in] type Either Actor::LAYER or Actor::ROOT_LAYER if this is the root actor.
+   * @param[in] layer the scene graph layer
    */
-  Layer( Actor::DerivedType type );
+  Layer(Actor::DerivedType type, const SceneGraph::Layer& layer);
 
   /**
    * A reference counted object may only be deleted by calling Unreference()
    */
-  virtual ~Layer();
+  ~Layer() override;
 
 private: // From Actor
-
-  /**
-   * From Actor; create a node to represent the layer in the scene-graph.
-   * @return A newly allocated layer node.
-   */
-  virtual SceneGraph::Node* CreateNode() const;
-
   /**
    * From Actor.
    */
-  virtual void OnStageConnectionInternal();
+  void OnSceneConnectionInternal() override;
 
   /**
    * From Actor.
    */
-  virtual void OnStageDisconnectionInternal();
+  void OnSceneDisconnectionInternal() override;
 
 private:
+  /**
+   * @brief Callback when Layer is touched
+   *
+   * @param[in] actor Layer touched
+   * @param[in] touch Touch information
+   * @return True if the touch is consumed.
+   */
+  bool OnTouched(Dali::Actor actor, const Dali::TouchEvent& touch);
 
-  LayerList* mLayerList; ///< Only valid when layer is on-stage
+  LayerList* mLayerList; ///< Only valid when layer is on-scene
 
   // These properties not animatable; the actor side has the most up-to-date values
-  ClippingBox mClippingBox;                     ///< The clipping box, in window coordinates
-  Dali::Layer::SortFunctionType mSortFunction;  ///< Used to sort semi-transparent geometry
+  ClippingBox                   mClippingBox;  ///< The clipping box, in window coordinates
+  Dali::Layer::SortFunctionType mSortFunction; ///< Used to sort semi-transparent geometry
 
-  bool mIsClipping:1;                           ///< True when clipping is enabled
-  bool mDepthTestDisabled:1;                    ///< Whether depth test is disabled.
-  bool mTouchConsumed:1;                        ///< Whether we should consume touch (including gesture).
-  bool mHoverConsumed:1;                        ///< Whether we should consume hover.
+  Dali::Layer::Behavior mBehavior; ///< Behavior of the layer
 
+  bool mIsClipping : 1;        ///< True when clipping is enabled
+  bool mDepthTestDisabled : 1; ///< Whether depth test is disabled.
+  bool mTouchConsumed : 1;     ///< Whether we should consume touch (including gesture).
+  bool mHoverConsumed : 1;     ///< Whether we should consume hover.
 };
 
 } // namespace Internal
@@ -321,5 +294,4 @@ inline const Internal::Layer& GetImplementation(const Dali::Layer& layer)
 
 } // namespace Dali
 
-
-#endif //__DALI_INTERNAL_LAYER_H__
+#endif // DALI_INTERNAL_LAYER_H