Cleanup property system, remove 12 redundant std::maps and 114 std::strings being...
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / layer-impl.h
1 #ifndef __DALI_INTERNAL_LAYER_H__
2 #define __DALI_INTERNAL_LAYER_H__
3
4 /*
5  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/actors/layer.h>
23 #include <dali/internal/event/actors/actor-impl.h>
24 #include <dali/internal/event/actors/actor-declarations.h>
25
26 namespace Dali
27 {
28
29 namespace Internal
30 {
31
32 class LayerList;
33
34 namespace SceneGraph
35 {
36 class UpdateManager;
37 class Layer;
38 }
39
40 typedef Dali::ClippingBox ClippingBox;
41
42 class Layer : public Actor
43 {
44 public:
45
46   /**
47    * @copydoc Dali::Layer::ZValue(const Vector3&, float)
48    */
49   static float ZValue(const Vector3& position, float sortModifier)
50   {
51     // inlined so we avoid a function call when sorting renderers
52     return position.z + sortModifier;
53   }
54
55   /**
56    * Create a new Layer.
57    * @return A smart-pointer to the newly allocated Layer.
58    */
59   static LayerPtr New();
60
61   /**
62    * Create a new root layer; this is typically owned by the stage.
63    * @param[in] stage The owning stage.
64    * @param[in] layerList The layer will be added to this ordered list.
65    * @param[in] manager The update manager to install a root node with.
66    * @param[in] systemLevel True if using the SystemOverlay API; see Integration::GetSystemOverlay() for more details.
67    * @return A smart-pointer to the newly allocated Actor.
68    */
69   static LayerPtr NewRoot( Stage& stage, LayerList& layerList, SceneGraph::UpdateManager& manager, bool systemLevel );
70
71   /**
72    * @copydoc Dali::Internal::Actor::OnInitialize
73    */
74   void OnInitialize();
75
76   /**
77    * Query the current depth of the layer
78    */
79   unsigned int GetDepth() const;
80
81   /**
82    * @copydoc Dali::Layer::Raise
83    */
84   void Raise();
85
86   /**
87    * @copydoc Dali::Layer::Lower
88    */
89   void Lower();
90
91   /**
92    * @copydoc Dali::Layer::RaiseAbove
93    */
94   void RaiseAbove( const Internal::Layer& target );
95
96   /**
97    * @copydoc Dali::Layer::LowerBelow
98    */
99   void LowerBelow( const Internal::Layer& target );
100
101   /**
102    * @copydoc Dali::Layer::RaiseToTop
103    */
104   void RaiseToTop();
105
106   /**
107    * @copydoc Dali::Layer::LowerToBottom
108    */
109   void LowerToBottom();
110
111   /**
112    * @copydoc Dali::Layer::MoveAbove
113    */
114   void MoveAbove( const Internal::Layer& target );
115
116   /**
117    * @copydoc Dali::Layer::MoveAbove
118    */
119   void MoveBelow( const Internal::Layer& target );
120
121   /**
122    * @copydoc Dali::Layer::SetClipping()
123    */
124   void SetClipping(bool enabled);
125
126   /**
127    * @copydoc Dali::Layer::IsClipping()
128    */
129   bool IsClipping() const
130   {
131     return mIsClipping; // Actor-side has most up-to-date value
132   }
133
134   /**
135    * @copydoc Dali::Layer::SetClippingBox()
136    */
137   void SetClippingBox(int x, int y, int width, int height);
138
139   /**
140    * @copydoc Dali::Layer::GetClippingBox()
141    */
142   const Dali::ClippingBox& GetClippingBox() const
143   {
144     return mClippingBox; // Actor-side has most up-to-date value
145   }
146
147   /**
148    * @copydoc Dali::Layer::SetDepthTestDisabled()
149    */
150   void SetDepthTestDisabled( bool disable );
151
152   /**
153    * @copydoc Dali::Layer::IsDepthTestDisabled()
154    */
155   bool IsDepthTestDisabled() const;
156
157   /**
158    * @copydoc Dali::Layer::SetSortFunction()
159    */
160   void SetSortFunction(Dali::Layer::SortFunctionType function);
161
162   /**
163    * @copydoc Dali::Layer::SetTouchConsumed()
164    */
165   void SetTouchConsumed( bool consume );
166
167   /**
168    * @copydoc Dali::Layer::IsTouchConsumed()
169    */
170   bool IsTouchConsumed() const;
171
172   /**
173    * @copydoc Dali::Layer::SetHoverConsumed()
174    */
175   void SetHoverConsumed( bool consume );
176
177   /**
178    * @copydoc Dali::Layer::IsHoverConsumed()
179    */
180   bool IsHoverConsumed() const;
181
182   /**
183    * Helper function to get the scene object.
184    * This should only be called by Stage
185    * @return the scene object for the layer.
186    */
187   const SceneGraph::Layer& GetSceneLayerOnStage() const;
188
189   /**
190    * @copydoc Dali::Internal::Actor::DoAction()
191    */
192   static bool DoAction(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes);
193
194 public: // Default property extensions from ProxyObject
195   /**
196    * @copydoc Dali::Internal::ProxyObject::GetDefaultPropertyCount()
197    */
198   virtual unsigned int GetDefaultPropertyCount() const;
199
200   /**
201    * @copydoc Dali::Internal::ProxyObject::GetDefaultPropertyIndices()
202    */
203   virtual void GetDefaultPropertyIndices( Property::IndexContainer& indices ) const;
204
205   /**
206    * @copydoc Dali::Internal::ProxyObject::GetDefaultPropertyName()
207    */
208   virtual const char* GetDefaultPropertyName(Property::Index index) const;
209
210   /**
211    * @copydoc Dali::Internal::ProxyObject::GetDefaultPropertyIndex()
212    */
213   virtual Property::Index GetDefaultPropertyIndex(const std::string& name) const;
214
215   /**
216    * @copydoc Dali::Internal::ProxyObject::IsDefaultPropertyWritable()
217    */
218   virtual bool IsDefaultPropertyWritable(Property::Index index) const;
219
220   /**
221    * @copydoc Dali::Internal::ProxyObject::IsDefaultPropertyAnimatable()
222    */
223   virtual bool IsDefaultPropertyAnimatable(Property::Index index) const;
224
225   /**
226    * @copydoc Dali::Internal::ProxyObject::IsDefaultPropertyAConstraintInput()
227    */
228   virtual bool IsDefaultPropertyAConstraintInput( Property::Index index ) const;
229
230   /**
231    * @copydoc Dali::Internal::ProxyObject::GetDefaultPropertyType()
232    */
233   virtual Property::Type GetDefaultPropertyType(Property::Index index) const;
234
235   /**
236    * @copydoc Dali::Internal::ProxyObject::SetDefaultProperty()
237    */
238   virtual void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue);
239
240   /**
241    * @copydoc Dali::Internal::ProxyObject::GetDefaultProperty()
242    */
243   virtual Property::Value GetDefaultProperty( Property::Index index ) const;
244
245 protected:
246
247   /**
248    * Construct a new layer.
249    * @param[in] type Either Actor::LAYER or Actor::ROOT_LAYER if this is the root actor.
250    */
251   Layer( Actor::DerivedType type );
252
253   /**
254    * A reference counted object may only be deleted by calling Unreference()
255    */
256   virtual ~Layer();
257
258 private: // From Actor
259
260   /**
261    * From Actor; create a node to represent the layer in the scene-graph.
262    * @return A newly allocated layer node.
263    */
264   virtual SceneGraph::Node* CreateNode() const;
265
266   /**
267    * From Actor.
268    */
269   virtual void OnStageConnectionInternal();
270
271   /**
272    * From Actor.
273    */
274   virtual void OnStageDisconnectionInternal();
275
276 private:
277
278   LayerList* mLayerList; ///< Only valid when layer is on-stage
279
280   // These properties not animatable; the actor side has the most up-to-date values
281   ClippingBox mClippingBox;                     ///< The clipping box, in window coordinates
282   Dali::Layer::SortFunctionType mSortFunction;  ///< Used to sort semi-transparent geometry
283
284   bool mIsClipping:1;                           ///< True when clipping is enabled
285   bool mDepthTestDisabled:1;                    ///< Whether depth test is disabled.
286   bool mTouchConsumed:1;                        ///< Whether we should consume touch (including gesture).
287   bool mHoverConsumed:1;                        ///< Whether we should consume hover.
288
289 };
290
291 } // namespace Internal
292
293 // Helpers for public-api forwarding methods
294
295 inline Internal::Layer& GetImplementation(Dali::Layer& layer)
296 {
297   DALI_ASSERT_ALWAYS(layer && "Layer handle is empty");
298
299   BaseObject& handle = layer.GetBaseObject();
300
301   return static_cast<Internal::Layer&>(handle);
302 }
303
304 inline const Internal::Layer& GetImplementation(const Dali::Layer& layer)
305 {
306   DALI_ASSERT_ALWAYS(layer && "Layer handle is empty");
307
308   const BaseObject& handle = layer.GetBaseObject();
309
310   return static_cast<const Internal::Layer&>(handle);
311 }
312
313 } // namespace Dali
314
315
316 #endif //__DALI_INTERNAL_LAYER_H__