Add SetProperty and GetProperty to Visuals.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / border / border-visual.h
1 #ifndef DALI_TOOLKIT_INTERNAL_BORDER_VISUAL_H
2 #define DALI_TOOLKIT_INTERNAL_BORDER_VISUAL_H
3
4 /*
5  * Copyright (c) 2016 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 // EXTERNAL INCLUDES
22 #include <dali/public-api/rendering/geometry.h>
23
24 // INTERNAL INCLUDES
25 #include <dali-toolkit/internal/visuals/visual-base-impl.h>
26
27 namespace Dali
28 {
29
30 namespace Toolkit
31 {
32
33 namespace Internal
34 {
35
36 /**
37  * The visual which renders a solid color to the control's quad border fixed to a specified size.
38  *
39  * The following properties are required for create a BorderRender
40  *
41  * | %Property Name  | Type        |
42  * |-----------------|-------------|
43  * | borderColor     | VECTOR4     |
44  * | borderSize      | FLOAT       |
45  * | antiAliasing    | BOOLEAN     |
46  */
47
48 class BorderVisual : public Visual::Base
49 {
50 public:
51
52   /**
53    * @brief Constructor.
54    *
55    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
56    */
57   BorderVisual( VisualFactoryCache& factoryCache );
58
59   /**
60    * @brief A reference counted object may only be deleted by calling Unreference().
61    */
62   virtual ~BorderVisual();
63
64 protected:
65
66   /**
67    * @copydoc Visual::Base::DoInitialize
68    */
69   virtual void DoInitialize( Actor& actor, const Property::Map& propertyMap );
70
71   /**
72    * @copydoc Visual::Base::DoSetOnStage
73    */
74   virtual void DoSetOnStage( Actor& actor );
75
76   /**
77    * @copydoc Visual::Base::CreatePropertyMap
78    */
79   virtual void DoCreatePropertyMap( Property::Map& map ) const;
80
81   /**
82    * @copydoc Visual::Base::DoSetProperty
83    */
84   virtual void DoSetProperty( Dali::Property::Index index, const Dali::Property::Value& propertyValue );
85
86   /**
87    * @copydoc Visual::Base::DoGetProperty
88    */
89   virtual Dali::Property::Value DoGetProperty( Dali::Property::Index index );
90
91 public:
92
93   /**
94    * Set the color of the border.
95    * @param[in] color The border color.
96    */
97   void SetBorderColor( const Vector4& color);
98
99   /**
100    * Set the size of the border.
101    * @param[in] size The border size.
102    */
103   void SetBorderSize( float size );
104
105   /**
106    * Enable/Disable the anti-aliasing.
107    * @param[in] enable Whether the anti-aliasing be enabled or not.
108    */
109   void RequireAntiAliasing( bool antiAliasing );
110
111 private:
112
113   /**
114    * @brief Initialize the renderer with the geometry and shader from the cache, if not available, create and save to the cache for sharing.
115    */
116   void InitializeRenderer();
117
118   /**
119    * Request the border shader from the factory cache. If fail, create tha shader and add it to cache.
120    * @return The border shader.
121    */
122   Shader GetBorderShader();
123
124   /**
125    * Create the geometry which presents the border.
126    * @return The border geometry
127    */
128   Geometry CreateBorderGeometry();
129
130   // Undefined
131   BorderVisual( const BorderVisual& borderRenderer );
132
133   // Undefined
134   BorderVisual& operator=( const BorderVisual& borderRenderer );
135
136 private:
137
138   Vector4 mBorderColor;
139   float   mBorderSize;
140
141   Property::Index mBorderColorIndex;
142   Property::Index mBorderSizeIndex;
143
144   bool mAntiAliasing;
145 };
146
147 } // namespace Internal
148
149 } // namespace Toolkit
150
151 } // namespace Dali
152
153 #endif // DALI_TOOLKIT_INTERNAL_BORDER_VISUAL_H