[dali_1.2.2] Merge branch 'devel/master'
[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::DoInitialize
68    */
69   virtual void DoInitialize( Actor& actor, const Property::Map& propertyMap );
70
71   /**
72    * @copydoc Visual::DoSetOnStage
73    */
74   virtual void DoSetOnStage( Actor& actor );
75
76   /**
77    * @copydoc Visual::CreatePropertyMap
78    */
79   virtual void DoCreatePropertyMap( Property::Map& map ) const;
80
81 public:
82
83   /**
84    * Set the color of the border.
85    * @param[in] color The border color.
86    */
87   void SetBorderColor( const Vector4& color);
88
89   /**
90    * Set the size of the border.
91    * @param[in] size The border size.
92    */
93   void SetBorderSize( float size );
94
95   /**
96    * Enable/Disable the anti-aliasing.
97    * @param[in] enable Whether the anti-aliasing be enabled or not.
98    */
99   void RequireAntiAliasing( bool antiAliasing );
100
101 private:
102
103   /**
104    * @brief Initialize the renderer with the geometry and shader from the cache, if not available, create and save to the cache for sharing.
105    */
106   void InitializeRenderer();
107
108   /**
109    * Request the border shader from the factory cache. If fail, create tha shader and add it to cache.
110    * @return The border shader.
111    */
112   Shader GetBorderShader();
113
114   /**
115    * Create the geometry which presents the border.
116    * @return The border geometry
117    */
118   Geometry CreateBorderGeometry();
119
120   // Undefined
121   BorderVisual( const BorderVisual& borderRenderer );
122
123   // Undefined
124   BorderVisual& operator=( const BorderVisual& borderRenderer );
125
126 private:
127
128   Vector4 mBorderColor;
129   float   mBorderSize;
130
131   Property::Index mBorderColorIndex;
132   Property::Index mBorderSizeIndex;
133
134   bool mAntiAliasing;
135 };
136
137 } // namespace Internal
138
139 } // namespace Toolkit
140
141 } // namespace Dali
142
143 #endif // DALI_TOOLKIT_INTERNAL_BORDER_VISUAL_H