Changed all property & signal names to lowerCamelCase
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / renderers / control-renderer-impl.h
index 86620f8..883d4d6 100644 (file)
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/base-object.h>
+#include <dali/public-api/images/image-operations.h>
+#include <dali/devel-api/rendering/shader.h>
 
+// INTERNAL INCLUDES
 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
 #include <dali-toolkit/devel-api/controls/renderer-factory/control-renderer.h>
+#include <dali-toolkit/internal/controls/renderers/renderer-factory-cache.h>
 
 namespace Dali
 {
@@ -34,12 +38,25 @@ namespace Toolkit
 namespace Internal
 {
 
-class RendererFactoryCache;
-
 /**
  * Base class for all Control rendering logic. A control may have multiple control renderers.
  *
  * Note: The control renderer responds to the the Actor::COLOR by blending it with the 'Multiply' operator.
+ *
+ * The following properties are optional
+ *
+ * | %Property Name          | Type             |
+ * |-------------------------|------------------|
+ * | customShader            | MAP              |
+ *
+ * where custom-shader is a map with the following properties:
+ * | %Property Name          | Type             |
+ * |-------------------------|------------------|
+ * | vertexShader            | STRING           |
+ * | fragmentShader          | STRING           |
+ * | subdivideGridX          | INT              |
+ * | subdivideGridY          | INT              |
+ * | shaderHints             | INT              |
  */
 class ControlRenderer : public BaseObject
 {
@@ -50,10 +67,10 @@ public:
    *  request the geometry and shader from the cache, if not available, create and save to the cache for sharing;
    *  record the property values.
    *
-   * @param[in] factoryCache A pointer pointing to the RendererFactoryCache object
+   * @param[in] actor The Actor the renderer is applied to if, empty if the renderer has not been applied to any Actor
    * @param[in] propertyMap The properties for the requested ControlRenderer object.
    */
-  virtual void Initialize( RendererFactoryCache& factoryCache, const Property::Map& propertyMap ) = 0;
+  void Initialize( Actor& actor, const Property::Map& propertyMap );
 
   /**
    * @copydoc Toolkit::ControlRenderer::SetSize
@@ -61,6 +78,16 @@ public:
   virtual void SetSize( const Vector2& size );
 
   /**
+   * @copydoc Toolkit::ControlRenderer::GetSize
+   */
+  const Vector2& GetSize() const;
+
+  /**
+   * @copydoc Toolkit::ControlRenderer::GetNaturalSize
+   */
+  virtual void GetNaturalSize( Vector2& naturalSize ) const;
+
+  /**
    * ToDo: Add this function to Toolkit::ControlRenderer when it is fully implemented.
    *
    * Set the clip rectangular of this renderer.
@@ -85,6 +112,11 @@ public:
   void SetDepthIndex( float index );
 
   /**
+   * @copydoc Toolkit::ControlRenderer::GetDepthIndex
+   */
+  float GetDepthIndex() const;
+
+  /**
    * @copydoc Toolkit::ControlRenderer::SetOnStage
    * @pre Impl->mGeometry must be created before this method is called
    */
@@ -98,14 +130,16 @@ public:
   /**
    * @copydoc Toolkit::ControlRenderer::CreatePropertyMap
    */
-  virtual void CreatePropertyMap( Property::Map& map ) const = 0;
+  void CreatePropertyMap( Property::Map& map ) const;
 
 protected:
 
   /**
    * @brief Constructor.
+   *
+   * @param[in] factoryCache A pointer pointing to the RendererFactoryCache object
    */
-  ControlRenderer();
+  ControlRenderer( RendererFactoryCache& factoryCache );
 
   /**
    * @brief A reference counted object may only be deleted by calling Unreference().
@@ -113,21 +147,52 @@ protected:
   virtual ~ControlRenderer();
 
 protected:
+  /**
+   * @brief Called by CreatePropertyMap() allowing sub classes to respond to the CreatePropertyMap event
+   *
+   * @param[out] map The renderer property map.
+   */
+  virtual void DoCreatePropertyMap( Property::Map& map ) const = 0;
+
+  /**
+   * @brief Called by Initialize() allowing sub classes to respond to the Initialize event
+   *
+   * @param[in] actor The Actor the renderer is applied to if, empty if the renderer has not been applied to any Actor
+   * @param[in] propertyMap The properties for the requested ControlRenderer object.
+   */
+  virtual void DoInitialize( Actor& actor, const Property::Map& propertyMap ) = 0;
+
+protected:
 
   /**
-   * Called by SetOnStage() allowing sub classes to respond to the SetOnStage event
+   * @brief Called by SetOnStage() allowing sub classes to respond to the SetOnStage event
    *
    * @param[in] actor The actor applying this renderer.
    */
   virtual void DoSetOnStage( Actor& actor );
 
   /**
-   * Called by SetOffStage() allowing sub classes to respond to the SetOffStage event
+   * @brief Called by SetOffStage() allowing sub classes to respond to the SetOffStage event
    *
    * @param[in] actor The actor applying this renderer.
    */
   virtual void DoSetOffStage( Actor& actor );
 
+protected:
+  /**
+   * @brief Gets the on stage state for this ControlRenderer
+   *
+   * @return Returns true if this ControlRenderer is on stage, false if it is off the stage
+   */
+  bool GetIsOnStage() const;
+
+  /**
+   * @brief Gets whether the Dali::Renderer is from a shared cache (and therefore any modifications will affect other users of that renderer)
+   *
+   * @return Returns true if the renderer is from shared cache, false otherwise
+   */
+  bool GetIsFromCache() const;
+
 private:
 
   // Undefined
@@ -137,9 +202,9 @@ private:
   ControlRenderer& operator=( const ControlRenderer& renderer );
 
 protected:
-
   struct Impl;
   Impl* mImpl;
+  RendererFactoryCache& mFactoryCache;
 };
 
 } // namespace Internal