2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/common/text-parameters.h>
22 #include <dali/public-api/text/text-style.h>
30 TextParameters::TextParameters()
35 TextParameters::~TextParameters()
37 // destroy all containers.
38 if ( mFlags & OUTLINE_EXISTS )
40 OutlineAttributes* attrPtr = reinterpret_cast<OutlineAttributes*>( *( mParameters.Begin() + ( mFlags & TEXT_PARAMETER_MASK ) ) );
43 if ( mFlags & GLOW_EXISTS )
45 GlowAttributes* attrPtr = reinterpret_cast<GlowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GLOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
48 if ( mFlags & DROP_SHADOW_EXISTS )
50 DropShadowAttributes* attrPtr = reinterpret_cast<DropShadowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> DROP_SHADOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
53 if ( mFlags & GRADIENT_EXISTS )
55 GradientAttributes* attrPtr = reinterpret_cast<GradientAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GRADIENT_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
60 void TextParameters::SetOutline( bool enable, const Vector4& color, const Vector2& thickness )
62 if ( mFlags & OUTLINE_EXISTS )
64 OutlineAttributes* attrPtr = reinterpret_cast<OutlineAttributes*>( *( mParameters.Begin() + ( mFlags & TEXT_PARAMETER_MASK ) ) );
65 attrPtr->mOutlineColor = color;
66 attrPtr->mOutlineThickness = thickness;
70 OutlineAttributes* attr = new OutlineAttributes();
71 attr->mOutlineColor = color;
72 attr->mOutlineThickness = thickness;
73 mFlags |= ( ( mFlags & ~OUTLINE_INDEX ) | ( mParameters.Size() & TEXT_PARAMETER_MASK ) | OUTLINE_EXISTS );
74 mParameters.PushBack( reinterpret_cast<char*>( attr ) );
79 mFlags |= OUTLINE_ENABLED;
83 mFlags &= ~OUTLINE_ENABLED;
87 void TextParameters::SetGlow( bool enable, const Vector4& color, float intensity )
89 if ( mFlags & GLOW_EXISTS )
91 GlowAttributes* attrPtr = reinterpret_cast<GlowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GLOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
92 attrPtr->mGlowColor = color;
93 attrPtr->mGlowIntensity = intensity;
97 GlowAttributes* attr = new GlowAttributes();
98 attr->mGlowColor = color;
99 attr->mGlowIntensity = intensity;
100 mFlags |= ( ( mFlags & ~GLOW_INDEX ) | ( ( mParameters.Size() & TEXT_PARAMETER_MASK ) << GLOW_INDEX_SHIFT ) | GLOW_EXISTS );
101 mParameters.PushBack( reinterpret_cast<char*>( attr ) );
106 mFlags |= GLOW_ENABLED;
110 mFlags &= ~GLOW_ENABLED;
114 void TextParameters::SetShadow( bool enable, const Vector4& color, const Vector2& offset, float size )
116 if ( mFlags & DROP_SHADOW_EXISTS )
118 DropShadowAttributes* attrPtr = reinterpret_cast<DropShadowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> DROP_SHADOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
119 attrPtr->mDropShadowColor = color;
120 attrPtr->mDropShadowOffset = offset;
121 attrPtr->mDropShadowSize = size;
125 DropShadowAttributes* attr = new DropShadowAttributes();
126 attr->mDropShadowColor = color;
127 attr->mDropShadowOffset = offset;
128 attr->mDropShadowSize = size;
129 mFlags |= ( ( mFlags & ~DROP_SHADOW_INDEX ) | ( ( mParameters.Size() & TEXT_PARAMETER_MASK ) << DROP_SHADOW_INDEX_SHIFT ) | DROP_SHADOW_EXISTS );
130 mParameters.PushBack( reinterpret_cast<char*>( attr ) );
135 mFlags |= DROP_SHADOW_ENABLED;
139 mFlags &= ~DROP_SHADOW_ENABLED;
143 void TextParameters::SetGradient( const Vector4& color, const Vector2& start, const Vector2& end )
145 if ( mFlags & GRADIENT_EXISTS )
147 GradientAttributes* attrPtr = reinterpret_cast<GradientAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GRADIENT_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
148 attrPtr->mGradientColor = color;
149 attrPtr->mGradientStartPoint = start;
150 attrPtr->mGradientEndPoint = end;
154 GradientAttributes* attr = new GradientAttributes();
155 attr->mGradientColor = color;
156 attr->mGradientStartPoint = start;
157 attr->mGradientEndPoint = end;
158 mFlags |= ( ( mFlags & ~GRADIENT_INDEX ) | ( ( mParameters.Size() & TEXT_PARAMETER_MASK ) << GRADIENT_INDEX_SHIFT ) | GRADIENT_EXISTS );
159 mParameters.PushBack( reinterpret_cast<char*>( attr ) );
164 mFlags |= GRADIENT_ENABLED;
168 mFlags &=~GRADIENT_ENABLED;
172 const Vector4& TextParameters::GetOutlineColor() const
174 if ( mFlags & OUTLINE_ENABLED )
176 const OutlineAttributes* attrPtr = reinterpret_cast<OutlineAttributes*>( *( mParameters.Begin() + ( mFlags & TEXT_PARAMETER_MASK ) ) );
177 return attrPtr->mOutlineColor;
181 return TextStyle::DEFAULT_OUTLINE_COLOR;
185 const Vector2& TextParameters::GetOutlineThickness() const
187 if ( mFlags & OUTLINE_EXISTS )
189 const OutlineAttributes* attrPtr = reinterpret_cast<OutlineAttributes*>( *( mParameters.Begin() + ( mFlags & TEXT_PARAMETER_MASK ) ) );
190 return attrPtr->mOutlineThickness;
194 return TextStyle::DEFAULT_OUTLINE_THICKNESS;
198 const Vector4& TextParameters::GetGlowColor() const
200 if ( mFlags & GLOW_EXISTS )
202 const GlowAttributes* attrPtr = reinterpret_cast<GlowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GLOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
203 return attrPtr->mGlowColor;
207 return TextStyle::DEFAULT_GLOW_COLOR;
211 float TextParameters::GetGlowIntensity() const
213 if ( mFlags & GLOW_EXISTS )
215 const GlowAttributes* attrPtr = reinterpret_cast<GlowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GLOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
216 return attrPtr->mGlowIntensity;
220 return TextStyle::DEFAULT_GLOW_INTENSITY;
224 const Vector4& TextParameters::GetDropShadowColor() const
226 if ( mFlags & DROP_SHADOW_EXISTS )
228 const DropShadowAttributes* attrPtr = reinterpret_cast<DropShadowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> DROP_SHADOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
229 return attrPtr->mDropShadowColor;
233 return TextStyle::DEFAULT_SHADOW_COLOR;
237 const Vector2& TextParameters::GetDropShadowOffset() const
239 if ( mFlags & DROP_SHADOW_EXISTS )
242 const DropShadowAttributes* attrPtr = reinterpret_cast<DropShadowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> DROP_SHADOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
243 return attrPtr->mDropShadowOffset;
247 return TextStyle::DEFAULT_SHADOW_OFFSET;
251 float TextParameters::GetDropShadowSize() const
253 if ( mFlags & DROP_SHADOW_EXISTS )
255 const DropShadowAttributes* attrPtr = reinterpret_cast<DropShadowAttributes*>( *( mParameters.Begin() + ( ( mFlags >> DROP_SHADOW_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
256 return attrPtr->mDropShadowSize;
260 return TextStyle::DEFAULT_SHADOW_SIZE;
264 const Vector4& TextParameters::GetGradientColor() const
266 if ( mFlags & GRADIENT_EXISTS )
268 const GradientAttributes* attrPtr = reinterpret_cast<GradientAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GRADIENT_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
269 return attrPtr->mGradientColor;
273 return TextStyle::DEFAULT_GRADIENT_COLOR;
277 const Vector2& TextParameters::GetGradientStartPoint() const
279 if ( mFlags & GRADIENT_EXISTS )
281 const GradientAttributes* attrPtr = reinterpret_cast<GradientAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GRADIENT_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
282 return attrPtr->mGradientStartPoint;
286 return TextStyle::DEFAULT_GRADIENT_START_POINT;
290 const Vector2& TextParameters::GetGradientEndPoint() const
292 if ( mFlags & GRADIENT_EXISTS )
294 const GradientAttributes* attrPtr = reinterpret_cast<GradientAttributes*>( *( mParameters.Begin() + ( ( mFlags >> GRADIENT_INDEX_SHIFT ) & TEXT_PARAMETER_MASK ) ) );
295 return attrPtr->mGradientEndPoint;
299 return TextStyle::DEFAULT_GRADIENT_END_POINT;
303 } // namespace Internal