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/event/actors/text-actor-impl.h>
22 #include <dali/public-api/object/type-registry.h>
23 #include <dali/public-api/text/text-actor-parameters.h>
24 #include <dali/internal/event/actor-attachments/text-attachment-impl.h>
25 #include <dali/internal/event/common/property-index-ranges.h>
26 #include <dali/internal/event/text/font-impl.h>
27 #include <dali/internal/event/text/utf8-impl.h>
28 #include <dali/internal/event/text/text-impl.h>
29 #include <dali/integration-api/platform-abstraction.h>
30 #include <dali/integration-api/debug.h>
31 #include <dali/internal/common/core-impl.h>
36 const Property::Index TextActor::TEXT = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
37 const Property::Index TextActor::FONT = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 1;
38 const Property::Index TextActor::FONT_STYLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 2;
39 const Property::Index TextActor::OUTLINE_ENABLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 3;
40 const Property::Index TextActor::OUTLINE_COLOR = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 4;
41 const Property::Index TextActor::OUTLINE_THICKNESS_WIDTH = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 5;
42 const Property::Index TextActor::SMOOTH_EDGE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 6;
43 const Property::Index TextActor::GLOW_ENABLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 7;
44 const Property::Index TextActor::GLOW_COLOR = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 8;
45 const Property::Index TextActor::GLOW_INTENSITY = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 9;
46 const Property::Index TextActor::SHADOW_ENABLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 10;
47 const Property::Index TextActor::SHADOW_COLOR = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 11;
48 const Property::Index TextActor::SHADOW_OFFSET = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 12;
49 const Property::Index TextActor::ITALICS_ANGLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 13;
50 const Property::Index TextActor::UNDERLINE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 14;
51 const Property::Index TextActor::WEIGHT = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 15;
52 const Property::Index TextActor::FONT_DETECTION_AUTOMATIC = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 16;
53 const Property::Index TextActor::GRADIENT_COLOR = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 17;
54 const Property::Index TextActor::GRADIENT_START_POINT = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 18;
55 const Property::Index TextActor::GRADIENT_END_POINT = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 19;
56 const Property::Index TextActor::SHADOW_SIZE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 20;
57 const Property::Index TextActor::TEXT_COLOR = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 21;
62 const std::string DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[] =
69 "outline-thickness-width",
80 "font-detection-automatic",
82 "gradient-start-point",
87 const int DEFAULT_TEXT_ACTOR_PROPERTY_COUNT = sizeof( DEFAULT_TEXT_ACTOR_PROPERTY_NAMES ) / sizeof( std::string );
89 const Property::Type DEFAULT_TEXT_ACTOR_PROPERTY_TYPES[DEFAULT_TEXT_ACTOR_PROPERTY_COUNT] =
91 Property::STRING, // "text"
92 Property::STRING, // "font"
93 Property::STRING, // "font-style"
94 Property::BOOLEAN, // "outline-enable"
95 Property::VECTOR4, // "outline-color"
96 Property::VECTOR2, // "outline-thickness-width"
97 Property::FLOAT, // "smooth-edge"
98 Property::BOOLEAN, // "glow-enable"
99 Property::VECTOR4, // "glow-color"
100 Property::FLOAT, // "glow-intensity"
101 Property::BOOLEAN, // "shadow-enable"
102 Property::VECTOR4, // "shadow-color"
103 Property::VECTOR2, // "shadow-offset"
104 Property::FLOAT, // "italics-angle"
105 Property::BOOLEAN, // "underline"
106 Property::INTEGER, // "weight"
107 Property::BOOLEAN, // "font-detection-automatic"
108 Property::VECTOR4, // "gradient-color",
109 Property::VECTOR2, // "gradient-start-point",
110 Property::VECTOR2, // "gradient-end-point"
111 Property::FLOAT, // "shadow-size"
112 Property::VECTOR4, // "text-color",
119 bool TextActor::mFirstInstance = true;
120 Actor::DefaultPropertyLookup* TextActor::mDefaultTextActorPropertyLookup = NULL;
127 return Dali::TextActor::New();
130 TypeRegistration mType( typeid(Dali::TextActor), typeid(Dali::RenderableActor), Create );
132 SignalConnectorType s1( mType, Dali::TextActor::SIGNAL_TEXT_LOADING_FINISHED, &TextActor::DoConnectSignal );
136 TextActorPtr TextActor::New( const Integration::TextArray& utfCodes, const TextActorParameters& parameters )
138 // first stage construction
139 TextActorPtr actor ( new TextActor( parameters.IsAutomaticFontDetectionEnabled() ) );
141 const TextStyle& style = parameters.GetTextStyle();
143 FontPointer fontPtr( Font::New(style.GetFontName(), style.GetFontStyle(), style.GetFontPointSize() ) );
145 // Second-phase construction
148 //create the attachment
149 actor->mTextAttachment = TextAttachment::New( *actor->mNode, Integration::TextArray(), fontPtr );
151 // Note: SetTextStyle() MUST be called before SetText(), to ensure
152 // that a single ResourceRequest for the glyphs is made. Calling
153 // them in the wrong order will issue two requests.
154 actor->SetTextStyle( style, DONT_REQUEST_NEW_TEXT );
156 actor->SetText( utfCodes );
161 TextActor::TextActor(bool fontDetection)
163 mLoadingState(Dali::ResourceLoading),
164 mUsingNaturalSize(true),
165 mInternalSetSize(false),
166 mFontDetection(fontDetection),
171 void TextActor::OnInitialize()
173 if(TextActor::mFirstInstance)
175 mDefaultTextActorPropertyLookup = new DefaultPropertyLookup();
176 const int start = DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
177 for ( int i = 0; i < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT; ++i )
179 (*mDefaultTextActorPropertyLookup)[DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[i]] = i + start;
181 TextActor::mFirstInstance = false ;
185 TextActor::~TextActor()
187 StopObservingTextLoads();
190 const std::string TextActor::GetText() const
192 const Integration::TextArray& utfCodes = mTextAttachment->GetText();
196 const std::size_t length = utfCodes.Count();
197 // minimize allocations for ascii strings
198 text.reserve( length );
200 for (unsigned int i = 0; i < length; ++i)
202 unsigned char utf8Data[4];
203 unsigned int utf8Length;
205 utf8Length = UTF8Write(utfCodes[i], utf8Data);
207 text.append(reinterpret_cast<const char*>(utf8Data), utf8Length);
213 Font* TextActor::GetFont() const
215 return &mTextAttachment->GetFont();
218 void TextActor::SetToNaturalSize()
220 // ignore size set by application
221 mUsingNaturalSize = true;
222 TextChanged(); // this will calculate natural size
225 void TextActor::StopObservingTextLoads()
229 mTextAttachment->GetFont().RemoveObserver( *this );
234 void TextActor::StartObservingTextLoads()
238 mTextAttachment->GetFont().AddObserver( *this );
243 void TextActor::SetText(const Integration::TextArray& utfCodes)
245 StopObservingTextLoads();
247 // assign the new text
248 mTextAttachment->SetText(utfCodes);
252 // first check if the provided font supports the text
254 if( !mTextAttachment->GetFont().AllGlyphsSupported(utfCodes) )
257 // @todo GetFamilyForText should return font name and style
258 const std::string fontName = Font::GetFamilyForText(utfCodes);
260 // use previous formatting
261 Internal::Font& font = mTextAttachment->GetFont();
263 Dali::Font fontNew = Dali::Font::New( Dali::FontParameters( fontName, font.GetStyle(), PointSize(font.GetPointSize() ) ) );
265 SetFont( GetImplementation(fontNew), DONT_REQUEST_NEW_TEXT );
272 void TextActor::SetFont(Font& font, TextRequestMode mode )
274 StopObservingTextLoads();
276 if( mode == REQUEST_NEW_TEXT )
279 mTextAttachment->SetFont( font );
281 // request text for new font
287 mTextAttachment->SetFont( font );
291 Vector3 TextActor::GetNaturalSize() const
293 Vector2 naturalSize( mTextAttachment->GetNaturalTextSize() );
294 return Vector3( naturalSize.width, naturalSize.height, CalculateSizeZ( naturalSize ) );
297 void TextActor::OnSizeSet(const Vector3& targetSize)
299 if( !mInternalSetSize )
301 // after size is once set by application we no longer use the natural size
302 mUsingNaturalSize = false;
306 void TextActor::OnSizeAnimation(Animation& animation, const Vector3& targetSize)
308 // after size has been animated by application we no longer use the natural size
309 mUsingNaturalSize = false;
312 RenderableAttachment& TextActor::GetRenderableAttachment() const
314 DALI_ASSERT_DEBUG( mTextAttachment );
315 return *mTextAttachment;
318 void TextActor::SetGradientColor( const Vector4& color )
320 mTextAttachment->SetGradient( color, mTextAttachment->GetGradientStartPoint(), mTextAttachment->GetGradientEndPoint() );
323 const Vector4& TextActor::GetGradientColor() const
325 return mTextAttachment->GetGradientColor();
328 void TextActor::SetGradientStartPoint( const Vector2& position )
330 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), position, mTextAttachment->GetGradientEndPoint() );
333 const Vector2& TextActor::GetGradientStartPoint() const
335 return mTextAttachment->GetGradientStartPoint();
338 void TextActor::SetGradientEndPoint( const Vector2& position )
340 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), mTextAttachment->GetGradientStartPoint(), position );
343 const Vector2& TextActor::GetGradientEndPoint() const
345 return mTextAttachment->GetGradientEndPoint();
348 void TextActor::SetGradient( const Vector4& color, const Vector2& startPoint, const Vector2& endPoint )
350 mTextAttachment->SetGradient( color, startPoint, endPoint );
353 void TextActor::SetTextStyle( const TextStyle& style, TextRequestMode mode )
356 const Font& font = mTextAttachment->GetFont();
358 // Determine the font name/style/size that Font would create.
359 // Then compare this to the existing font (which has been validated by Font).
361 std::string resolvedFontName = style.GetFontName();
362 std::string resolvedFontStyle = style.GetFontStyle();
363 float resolvedFontPointSize = style.GetFontPointSize();
364 bool resolvedFontFamilyDefault(false);
365 bool resolvedFontPointSizeDefault(false);
367 Font::ValidateFontRequest( resolvedFontName,
369 resolvedFontPointSize,
370 resolvedFontFamilyDefault,
371 resolvedFontPointSizeDefault );
373 // Now compare to existing font used to see if a font change is necessary.
374 if( ( font.GetName() != resolvedFontName ) ||
375 ( font.GetStyle() != resolvedFontStyle ) ||
376 ( fabsf(font.GetPointSize() - resolvedFontPointSize) >= GetRangedEpsilon(font.GetPointSize(), resolvedFontPointSize) ) )
378 // Create font with original request (so font can determine if family and/or point size is default)
379 SetFont( *(Font::New( style.GetFontName(), style.GetFontStyle(), style.GetFontPointSize() ) ), mode );
383 if( !style.IsTextColorDefault() )
385 SetTextColor( style.GetTextColor() );
389 mTextAttachment->ResetTextColor();
393 if( !style.IsItalicsDefault() )
395 SetItalics( style.IsItalicsEnabled() ? Radian( style.GetItalicsAngle() ) : Radian( 0.0f ) );
399 mTextAttachment->ResetItalics();
403 if( !style.IsUnderlineDefault() )
405 SetUnderline( style.IsUnderlineEnabled(), style.GetUnderlineThickness(), style.GetUnderlinePosition() );
409 mTextAttachment->ResetUnderline();
413 if( !style.IsShadowDefault() )
415 SetShadow( style.IsShadowEnabled(), style.GetShadowColor(), style.GetShadowOffset(), style.GetShadowSize() );
419 mTextAttachment->ResetShadow();
423 if( !style.IsGlowDefault() )
425 SetGlow( style.IsGlowEnabled(), style.GetGlowColor(), style.GetGlowIntensity() );
429 mTextAttachment->ResetGlow();
433 if( !style.IsSmoothEdgeDefault() )
435 SetSmoothEdge( style.GetSmoothEdge() );
439 mTextAttachment->ResetSmoothEdge();
443 if( !style.IsOutlineDefault() )
445 SetOutline( style.IsOutlineEnabled(), style.GetOutlineColor(), style.GetOutlineThickness() );
449 mTextAttachment->ResetOutline();
453 if( !style.IsFontWeightDefault() )
455 SetWeight( style.GetWeight() );
459 mTextAttachment->ResetWeight();
463 if( !style.IsGradientDefault() )
465 if( style.IsGradientEnabled() )
467 SetGradient( style.GetGradientColor(), style.GetGradientStartPoint(), style.GetGradientEndPoint() );
471 SetGradient( TextStyle::DEFAULT_GRADIENT_COLOR, TextStyle::DEFAULT_GRADIENT_START_POINT, TextStyle::DEFAULT_GRADIENT_END_POINT );
476 mTextAttachment->ResetGradient();
480 TextStyle TextActor::GetTextStyle() const
483 mTextAttachment->GetTextStyle( textStyle );
488 void TextActor::SetTextColor(const Vector4& color)
490 mTextAttachment->SetTextColor( color );
493 Vector4 TextActor::GetTextColor() const
495 return mTextAttachment->GetTextColor();
498 void TextActor::SetSmoothEdge( float smoothEdge )
500 mTextAttachment->SetSmoothEdge(smoothEdge);
503 void TextActor::SetOutline( bool enable, const Vector4& color, const Vector2& offset )
505 mTextAttachment->SetOutline(enable, color, offset);
508 void TextActor::SetGlow( bool enable, const Vector4& color, float intensity )
510 mTextAttachment->SetGlow(enable, color, intensity);
513 void TextActor::SetShadow( bool enable, const Vector4& color, const Vector2& offset, float size )
515 mTextAttachment->SetShadow(enable, color, offset, size);
518 void TextActor::SetItalics( Radian angle )
520 mTextAttachment->SetItalics( angle );
525 bool TextActor::GetItalics() const
527 return mTextAttachment->GetItalics();
530 Radian TextActor::GetItalicsAngle() const
532 return mTextAttachment->GetItalicsAngle();
535 void TextActor::SetUnderline( bool enable, float thickness, float position )
537 mTextAttachment->SetUnderline( enable, thickness, position );
542 bool TextActor::GetUnderline() const
544 return mTextAttachment->GetUnderline();
547 float TextActor::GetUnderlineThickness() const
549 return mTextAttachment->GetUnderlineThickness();
552 float TextActor::GetUnderlinePosition() const
554 return mTextAttachment->GetUnderlinePosition();
557 void TextActor::SetWeight( TextStyle::Weight weight )
559 mTextAttachment->SetWeight( weight );
562 TextStyle::Weight TextActor::GetWeight() const
564 return mTextAttachment->GetWeight();
567 void TextActor::SetFontDetectionAutomatic(bool value)
569 mFontDetection = value;
572 bool TextActor::IsFontDetectionAutomatic() const
574 return mFontDetection;
577 bool TextActor::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
579 bool connected( true );
580 TextActor* textActor = dynamic_cast<TextActor*>(object);
582 if( Dali::TextActor::SIGNAL_TEXT_LOADING_FINISHED == signalName )
584 textActor->TextAvailableSignal().Connect( tracker, functor );
588 // signalName does not match any signal
595 void TextActor::TextLoaded()
597 // if the text is loaded, trigger the loaded finished signal
598 CheckTextLoadState();
601 void TextActor::TextChanged()
603 // this will tell the text attachment to act on any text or font changes
604 mTextAttachment->TextChanged();
606 // check the loading state
607 bool loaded = CheckTextLoadState();
610 mLoadingState = Dali::ResourceLoading;
612 StartObservingTextLoads();
614 // the text natural size is calculated synchronously above, when TextChanged() is called
615 if (mUsingNaturalSize)
617 mInternalSetSize = true; // to know we're internally setting size
618 SetSize( mTextAttachment->GetNaturalTextSize() );
619 mInternalSetSize = false;
623 bool TextActor::CheckTextLoadState()
625 if( mTextAttachment->IsTextLoaded() )
627 mLoadingState = Dali::ResourceLoadingSucceeded;
629 StopObservingTextLoads();
631 // emit text available signal
633 mLoadingFinishedV2.Emit( Dali::TextActor( this ) );
642 unsigned int TextActor::GetDefaultPropertyCount() const
644 return RenderableActor::GetDefaultPropertyCount() + DEFAULT_TEXT_ACTOR_PROPERTY_COUNT;
647 void TextActor::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
649 RenderableActor::GetDefaultPropertyIndices( indices ); // RenderableActor class properties
651 indices.reserve( indices.size() + DEFAULT_TEXT_ACTOR_PROPERTY_COUNT );
653 int index = DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
654 for ( int i = 0; i < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT; ++i, ++index )
656 indices.push_back( index );
660 const std::string& TextActor::GetDefaultPropertyName( Property::Index index ) const
662 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
664 return RenderableActor::GetDefaultPropertyName(index) ;
668 index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
670 if ( ( index >= 0 ) && ( index < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT ) )
672 return DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[index];
676 // index out-of-bounds
677 static const std::string INVALID_PROPERTY_NAME;
678 return INVALID_PROPERTY_NAME;
683 Property::Index TextActor::GetDefaultPropertyIndex(const std::string& name) const
685 Property::Index index = Property::INVALID_INDEX;
687 DALI_ASSERT_DEBUG( NULL != mDefaultTextActorPropertyLookup );
689 // Look for name in current class' default properties
690 DefaultPropertyLookup::const_iterator result = mDefaultTextActorPropertyLookup->find( name );
691 if ( mDefaultTextActorPropertyLookup->end() != result )
693 index = result->second;
697 // If not found, check in base class
698 index = RenderableActor::GetDefaultPropertyIndex( name );
704 bool TextActor::IsDefaultPropertyWritable( Property::Index index ) const
706 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
708 return RenderableActor::IsDefaultPropertyWritable(index) ;
716 bool TextActor::IsDefaultPropertyAnimatable( Property::Index index ) const
718 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
720 return RenderableActor::IsDefaultPropertyAnimatable(index) ;
728 bool TextActor::IsDefaultPropertyAConstraintInput( Property::Index index ) const
730 if( index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT )
732 return RenderableActor::IsDefaultPropertyAConstraintInput(index);
734 return true; // Our properties can be used as input to constraints.
737 Property::Type TextActor::GetDefaultPropertyType( Property::Index index ) const
739 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
741 return RenderableActor::GetDefaultPropertyType(index) ;
745 index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
747 if ( ( index >= 0 ) && ( index < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT ) )
749 return DEFAULT_TEXT_ACTOR_PROPERTY_TYPES[index];
753 // index out-of-bounds
754 return Property::NONE;
759 void TextActor::SetDefaultProperty( Property::Index index, const Property::Value& propertyValue )
761 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
763 RenderableActor::SetDefaultProperty(index, propertyValue) ;
769 case Dali::TextActor::TEXT:
771 SetText( GetTextArray( Dali::Text( propertyValue.Get<std::string>() ) ) );
774 case Dali::TextActor::FONT:
776 SetFont(*Font::New(propertyValue.Get<std::string>(),
777 mTextAttachment->GetFont().GetStyle(),
778 PointSize(mTextAttachment->GetFont().GetPointSize())));
781 case Dali::TextActor::FONT_STYLE:
783 SetFont(*Font::New(mTextAttachment->GetFont().GetName(),
784 propertyValue.Get<std::string>(),
785 PointSize(mTextAttachment->GetFont().GetPointSize())));
788 case Dali::TextActor::OUTLINE_ENABLE:
792 mTextAttachment->GetOutlineParams( color, thickness );
793 mTextAttachment->SetOutline(propertyValue.Get<bool>(), color, thickness);
796 case Dali::TextActor::OUTLINE_COLOR:
800 mTextAttachment->GetOutlineParams( color, thickness );
801 mTextAttachment->SetOutline(mTextAttachment->GetOutline(), propertyValue.Get<Vector4>(), thickness);
804 case Dali::TextActor::OUTLINE_THICKNESS_WIDTH:
808 mTextAttachment->GetOutlineParams( color, thickness );
809 mTextAttachment->SetOutline(mTextAttachment->GetOutline(), color, propertyValue.Get<Vector2>());
812 case Dali::TextActor::SMOOTH_EDGE:
814 mTextAttachment->SetSmoothEdge( propertyValue.Get<float>());
817 case Dali::TextActor::GLOW_ENABLE:
821 mTextAttachment->GetGlowParams( color, intensity );
822 mTextAttachment->SetGlow(propertyValue.Get<bool>(), color, intensity);
825 case Dali::TextActor::GLOW_COLOR:
829 mTextAttachment->GetGlowParams( color, intensity );
830 mTextAttachment->SetGlow(mTextAttachment->GetGlow(), propertyValue.Get<Vector4>(), intensity);
833 case Dali::TextActor::GLOW_INTENSITY:
837 mTextAttachment->GetGlowParams( color, intensity );
838 mTextAttachment->SetGlow(mTextAttachment->GetGlow(), color, propertyValue.Get<float>());
841 case Dali::TextActor::SHADOW_ENABLE:
846 mTextAttachment->GetShadowParams( color, offset, size );
847 mTextAttachment->SetShadow(propertyValue.Get<bool>(), color, offset, size );
850 case Dali::TextActor::SHADOW_COLOR:
855 mTextAttachment->GetShadowParams( color, offset, size );
856 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), propertyValue.Get<Vector4>(), offset, size);
859 case Dali::TextActor::SHADOW_OFFSET:
864 mTextAttachment->GetShadowParams( color, offset, size );
865 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), color, propertyValue.Get<Vector2>(), size );
868 case Dali::TextActor::SHADOW_SIZE:
873 mTextAttachment->GetShadowParams( color, offset, size );
874 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), color, offset, propertyValue.Get<float>());
877 case Dali::TextActor::ITALICS_ANGLE:
879 SetItalics(Radian(propertyValue.Get<float>())) ;
882 case Dali::TextActor::UNDERLINE:
884 SetUnderline(propertyValue.Get<bool>(), 0.f, 0.f ) ;
887 case Dali::TextActor::WEIGHT:
889 mTextAttachment->SetWeight(static_cast<TextStyle::Weight>(propertyValue.Get<int>())) ;
892 case Dali::TextActor::FONT_DETECTION_AUTOMATIC:
894 mFontDetection = propertyValue.Get<bool>() ;
897 case Dali::TextActor::GRADIENT_COLOR:
899 mTextAttachment->SetGradient( propertyValue.Get<Vector4>(), mTextAttachment->GetGradientStartPoint(), mTextAttachment->GetGradientEndPoint() );
902 case Dali::TextActor::GRADIENT_START_POINT:
904 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), propertyValue.Get<Vector2>(), mTextAttachment->GetGradientEndPoint() );
907 case Dali::TextActor::GRADIENT_END_POINT:
909 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), mTextAttachment->GetGradientStartPoint(), propertyValue.Get<Vector2>() );
912 case Dali::TextActor::TEXT_COLOR:
914 mTextAttachment->SetTextColor( propertyValue.Get<Vector4>() );
919 DALI_LOG_WARNING("Unknown text set property (%d)\n", index);
927 Property::Value TextActor::GetDefaultProperty( Property::Index index ) const
929 Property::Value ret ;
930 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
932 ret = RenderableActor::GetDefaultProperty(index) ;
938 case Dali::TextActor::TEXT:
943 case Dali::TextActor::FONT:
945 ret = mTextAttachment->GetFont().GetName();
948 case Dali::TextActor::FONT_STYLE:
950 ret = mTextAttachment->GetFont().GetStyle();
953 case Dali::TextActor::OUTLINE_ENABLE:
955 ret = mTextAttachment->GetOutline();
958 case Dali::TextActor::OUTLINE_COLOR:
962 mTextAttachment->GetOutlineParams( color, thickness );
966 case Dali::TextActor::OUTLINE_THICKNESS_WIDTH:
970 mTextAttachment->GetOutlineParams( color, thickness );
974 case Dali::TextActor::SMOOTH_EDGE:
976 ret = mTextAttachment->GetSmoothEdge();
979 case Dali::TextActor::GLOW_ENABLE:
981 ret = mTextAttachment->GetGlow();
984 case Dali::TextActor::GLOW_COLOR:
987 float intensity(0.0f);
988 mTextAttachment->GetGlowParams( color, intensity );
992 case Dali::TextActor::GLOW_INTENSITY:
995 float intensity(0.0f);
996 mTextAttachment->GetGlowParams( color, intensity );
1000 case Dali::TextActor::SHADOW_ENABLE:
1002 ret = mTextAttachment->GetShadow();
1005 case Dali::TextActor::SHADOW_COLOR:
1010 mTextAttachment->GetShadowParams( color, offset, size );
1014 case Dali::TextActor::SHADOW_OFFSET:
1019 mTextAttachment->GetShadowParams( color, offset, size );
1023 case Dali::TextActor::SHADOW_SIZE:
1028 mTextAttachment->GetShadowParams( color, offset, size );
1032 case Dali::TextActor::ITALICS_ANGLE:
1034 ret = static_cast<float>(mTextAttachment->GetItalics()) ;
1037 case Dali::TextActor::UNDERLINE:
1039 ret = mTextAttachment->GetUnderline() ;
1042 case Dali::TextActor::WEIGHT:
1044 ret = static_cast<int>(mTextAttachment->GetWeight());
1047 case Dali::TextActor::FONT_DETECTION_AUTOMATIC:
1049 ret = mFontDetection;
1052 case Dali::TextActor::GRADIENT_COLOR:
1054 ret = mTextAttachment->GetGradientColor();
1057 case Dali::TextActor::GRADIENT_START_POINT:
1059 ret = mTextAttachment->GetGradientStartPoint();
1062 case Dali::TextActor::GRADIENT_END_POINT:
1064 ret = mTextAttachment->GetGradientEndPoint();
1067 case Dali::TextActor::TEXT_COLOR:
1069 ret = mTextAttachment->GetTextColor();
1074 DALI_LOG_WARNING("Unknown text set property (%d)\n", index);
1078 } // if from base class
1083 } // namespace Internal