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 char* 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( DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[0] );
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",
125 return Dali::TextActor::New();
128 TypeRegistration mType( typeid(Dali::TextActor), typeid(Dali::RenderableActor), Create );
130 SignalConnectorType s1( mType, Dali::TextActor::SIGNAL_TEXT_LOADING_FINISHED, &TextActor::DoConnectSignal );
134 TextActorPtr TextActor::New( const Integration::TextArray& utfCodes, const TextActorParameters& parameters )
136 // first stage construction
137 TextActorPtr actor ( new TextActor( parameters.IsAutomaticFontDetectionEnabled() ) );
139 const TextStyle& style = parameters.GetTextStyle();
141 FontPointer fontPtr( Font::New(style.GetFontName(), style.GetFontStyle(), style.GetFontPointSize() ) );
143 // Second-phase construction
146 //create the attachment
147 actor->mTextAttachment = TextAttachment::New( *actor->mNode, Integration::TextArray(), fontPtr );
148 actor->Attach(*actor->mTextAttachment);
150 // Note: SetTextStyle() MUST be called before SetText(), to ensure
151 // that a single ResourceRequest for the glyphs is made. Calling
152 // them in the wrong order will issue two requests.
153 actor->SetTextStyle( style, DONT_REQUEST_NEW_TEXT );
155 actor->SetText( utfCodes );
160 TextActor::TextActor(bool fontDetection)
162 mLoadingState(Dali::ResourceLoading),
163 mUsingNaturalSize(true),
164 mInternalSetSize(false),
165 mFontDetection(fontDetection),
170 void TextActor::OnInitialize()
174 TextActor::~TextActor()
176 StopObservingTextLoads();
179 const std::string TextActor::GetText() const
181 const Integration::TextArray& utfCodes = mTextAttachment->GetText();
185 const std::size_t length = utfCodes.Count();
186 // minimize allocations for ascii strings
187 text.reserve( length );
189 for (unsigned int i = 0; i < length; ++i)
191 unsigned char utf8Data[4];
192 unsigned int utf8Length;
194 utf8Length = UTF8Write(utfCodes[i], utf8Data);
196 text.append(reinterpret_cast<const char*>(utf8Data), utf8Length);
202 Font* TextActor::GetFont() const
204 return &mTextAttachment->GetFont();
207 void TextActor::SetToNaturalSize()
209 // ignore size set by application
210 mUsingNaturalSize = true;
211 TextChanged(); // this will calculate natural size
214 void TextActor::StopObservingTextLoads()
218 mTextAttachment->GetFont().RemoveObserver( *this );
223 void TextActor::StartObservingTextLoads()
227 mTextAttachment->GetFont().AddObserver( *this );
232 void TextActor::SetText(const Integration::TextArray& utfCodes)
234 StopObservingTextLoads();
236 // assign the new text
237 mTextAttachment->SetText(utfCodes);
241 // first check if the provided font supports the text
243 if( !mTextAttachment->GetFont().AllGlyphsSupported(utfCodes) )
246 // @todo GetFamilyForText should return font name and style
247 const std::string fontName = Font::GetFamilyForText(utfCodes);
249 // use previous formatting
250 Internal::Font& font = mTextAttachment->GetFont();
252 Dali::Font fontNew = Dali::Font::New( Dali::FontParameters( fontName, font.GetStyle(), PointSize(font.GetPointSize() ) ) );
254 SetFont( GetImplementation(fontNew), DONT_REQUEST_NEW_TEXT );
261 void TextActor::SetFont(Font& font, TextRequestMode mode )
263 StopObservingTextLoads();
265 if( mode == REQUEST_NEW_TEXT )
268 mTextAttachment->SetFont( font );
270 // request text for new font
276 mTextAttachment->SetFont( font );
280 Vector3 TextActor::GetNaturalSize() const
282 Vector2 naturalSize( mTextAttachment->GetNaturalTextSize() );
283 return Vector3( naturalSize.width, naturalSize.height, CalculateSizeZ( naturalSize ) );
286 void TextActor::OnSizeSet(const Vector3& targetSize)
288 if( !mInternalSetSize )
290 // after size is once set by application we no longer use the natural size
291 mUsingNaturalSize = false;
295 void TextActor::OnSizeAnimation(Animation& animation, const Vector3& targetSize)
297 // after size has been animated by application we no longer use the natural size
298 mUsingNaturalSize = false;
301 RenderableAttachment& TextActor::GetRenderableAttachment() const
303 DALI_ASSERT_DEBUG( mTextAttachment );
304 return *mTextAttachment;
307 void TextActor::SetGradientColor( const Vector4& color )
309 mTextAttachment->SetGradient( color, mTextAttachment->GetGradientStartPoint(), mTextAttachment->GetGradientEndPoint() );
312 const Vector4& TextActor::GetGradientColor() const
314 return mTextAttachment->GetGradientColor();
317 void TextActor::SetGradientStartPoint( const Vector2& position )
319 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), position, mTextAttachment->GetGradientEndPoint() );
322 const Vector2& TextActor::GetGradientStartPoint() const
324 return mTextAttachment->GetGradientStartPoint();
327 void TextActor::SetGradientEndPoint( const Vector2& position )
329 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), mTextAttachment->GetGradientStartPoint(), position );
332 const Vector2& TextActor::GetGradientEndPoint() const
334 return mTextAttachment->GetGradientEndPoint();
337 void TextActor::SetGradient( const Vector4& color, const Vector2& startPoint, const Vector2& endPoint )
339 mTextAttachment->SetGradient( color, startPoint, endPoint );
342 void TextActor::SetTextStyle( const TextStyle& style, TextRequestMode mode )
345 const Font& font = mTextAttachment->GetFont();
347 // Determine the font name/style/size that Font would create.
348 // Then compare this to the existing font (which has been validated by Font).
350 std::string resolvedFontName = style.GetFontName();
351 std::string resolvedFontStyle = style.GetFontStyle();
352 float resolvedFontPointSize = style.GetFontPointSize();
353 bool resolvedFontFamilyDefault(false);
354 bool resolvedFontPointSizeDefault(false);
356 Font::ValidateFontRequest( resolvedFontName,
358 resolvedFontPointSize,
359 resolvedFontFamilyDefault,
360 resolvedFontPointSizeDefault );
362 // Now compare to existing font used to see if a font change is necessary.
363 if( ( font.GetName() != resolvedFontName ) ||
364 ( font.GetStyle() != resolvedFontStyle ) ||
365 ( fabsf(font.GetPointSize() - resolvedFontPointSize) >= GetRangedEpsilon(font.GetPointSize(), resolvedFontPointSize) ) )
367 // Create font with original request (so font can determine if family and/or point size is default)
368 SetFont( *(Font::New( style.GetFontName(), style.GetFontStyle(), style.GetFontPointSize() ) ), mode );
372 if( !style.IsTextColorDefault() )
374 SetTextColor( style.GetTextColor() );
378 mTextAttachment->ResetTextColor();
382 if( !style.IsItalicsDefault() )
384 SetItalics( style.IsItalicsEnabled() ? Radian( style.GetItalicsAngle() ) : Radian( 0.0f ) );
388 mTextAttachment->ResetItalics();
392 if( !style.IsUnderlineDefault() )
394 SetUnderline( style.IsUnderlineEnabled(), style.GetUnderlineThickness(), style.GetUnderlinePosition() );
398 mTextAttachment->ResetUnderline();
402 if( !style.IsShadowDefault() )
404 SetShadow( style.IsShadowEnabled(), style.GetShadowColor(), style.GetShadowOffset(), style.GetShadowSize() );
408 mTextAttachment->ResetShadow();
412 if( !style.IsGlowDefault() )
414 SetGlow( style.IsGlowEnabled(), style.GetGlowColor(), style.GetGlowIntensity() );
418 mTextAttachment->ResetGlow();
422 if( !style.IsSmoothEdgeDefault() )
424 SetSmoothEdge( style.GetSmoothEdge() );
428 mTextAttachment->ResetSmoothEdge();
432 if( !style.IsOutlineDefault() )
434 SetOutline( style.IsOutlineEnabled(), style.GetOutlineColor(), style.GetOutlineThickness() );
438 mTextAttachment->ResetOutline();
442 if( !style.IsFontWeightDefault() )
444 SetWeight( style.GetWeight() );
448 mTextAttachment->ResetWeight();
452 if( !style.IsGradientDefault() )
454 if( style.IsGradientEnabled() )
456 SetGradient( style.GetGradientColor(), style.GetGradientStartPoint(), style.GetGradientEndPoint() );
460 SetGradient( TextStyle::DEFAULT_GRADIENT_COLOR, TextStyle::DEFAULT_GRADIENT_START_POINT, TextStyle::DEFAULT_GRADIENT_END_POINT );
465 mTextAttachment->ResetGradient();
470 TextStyle TextActor::GetTextStyle() const
473 mTextAttachment->GetTextStyle( textStyle );
478 void TextActor::SetTextColor(const Vector4& color)
480 mTextAttachment->SetTextColor( color );
483 Vector4 TextActor::GetTextColor() const
485 return mTextAttachment->GetTextColor();
488 void TextActor::SetSmoothEdge( float smoothEdge )
490 mTextAttachment->SetSmoothEdge(smoothEdge);
493 void TextActor::SetOutline( bool enable, const Vector4& color, const Vector2& offset )
495 mTextAttachment->SetOutline(enable, color, offset);
498 void TextActor::SetGlow( bool enable, const Vector4& color, float intensity )
500 mTextAttachment->SetGlow(enable, color, intensity);
503 void TextActor::SetShadow( bool enable, const Vector4& color, const Vector2& offset, float size )
505 mTextAttachment->SetShadow(enable, color, offset, size);
508 void TextActor::SetItalics( Radian angle )
510 mTextAttachment->SetItalics( angle );
515 bool TextActor::GetItalics() const
517 return mTextAttachment->GetItalics();
520 Radian TextActor::GetItalicsAngle() const
522 return mTextAttachment->GetItalicsAngle();
525 void TextActor::SetUnderline( bool enable, float thickness, float position )
527 mTextAttachment->SetUnderline( enable, thickness, position );
532 bool TextActor::GetUnderline() const
534 return mTextAttachment->GetUnderline();
537 float TextActor::GetUnderlineThickness() const
539 return mTextAttachment->GetUnderlineThickness();
542 float TextActor::GetUnderlinePosition() const
544 return mTextAttachment->GetUnderlinePosition();
547 void TextActor::SetWeight( TextStyle::Weight weight )
549 mTextAttachment->SetWeight( weight );
552 TextStyle::Weight TextActor::GetWeight() const
554 return mTextAttachment->GetWeight();
557 void TextActor::SetFontDetectionAutomatic(bool value)
559 mFontDetection = value;
562 bool TextActor::IsFontDetectionAutomatic() const
564 return mFontDetection;
567 bool TextActor::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
569 bool connected( true );
570 TextActor* textActor = dynamic_cast<TextActor*>(object);
572 if( Dali::TextActor::SIGNAL_TEXT_LOADING_FINISHED == signalName )
574 textActor->TextAvailableSignal().Connect( tracker, functor );
578 // signalName does not match any signal
585 void TextActor::TextLoaded()
587 // if the text is loaded, trigger the loaded finished signal
588 CheckTextLoadState();
591 void TextActor::TextChanged()
593 // this will tell the text attachment to act on any text or font changes
594 mTextAttachment->TextChanged();
596 // check the loading state
597 bool loaded = CheckTextLoadState();
600 mLoadingState = Dali::ResourceLoading;
602 StartObservingTextLoads();
604 // the text natural size is calculated synchronously above, when TextChanged() is called
605 if (mUsingNaturalSize)
607 mInternalSetSize = true; // to know we're internally setting size
608 SetSize( mTextAttachment->GetNaturalTextSize() );
609 mInternalSetSize = false;
613 bool TextActor::CheckTextLoadState()
615 if( mTextAttachment->IsTextLoaded() )
617 mLoadingState = Dali::ResourceLoadingSucceeded;
619 StopObservingTextLoads();
621 // emit text available signal
623 mLoadingFinishedV2.Emit( Dali::TextActor( this ) );
632 unsigned int TextActor::GetDefaultPropertyCount() const
634 return RenderableActor::GetDefaultPropertyCount() + DEFAULT_TEXT_ACTOR_PROPERTY_COUNT;
637 void TextActor::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
639 RenderableActor::GetDefaultPropertyIndices( indices ); // RenderableActor class properties
641 indices.reserve( indices.size() + DEFAULT_TEXT_ACTOR_PROPERTY_COUNT );
643 int index = DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
644 for ( int i = 0; i < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT; ++i, ++index )
646 indices.push_back( index );
650 const char* TextActor::GetDefaultPropertyName( Property::Index index ) const
652 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
654 return RenderableActor::GetDefaultPropertyName(index) ;
658 index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
660 if ( ( index >= 0 ) && ( index < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT ) )
662 return DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[index];
671 Property::Index TextActor::GetDefaultPropertyIndex(const std::string& name) const
673 Property::Index index = Property::INVALID_INDEX;
675 // Look for name in default properties
676 for( int i = 0; i < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT; ++i )
678 if( 0 == strcmp( name.c_str(), DEFAULT_TEXT_ACTOR_PROPERTY_NAMES[ i ] ) ) // dont want to convert rhs to string
680 index = i + DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
685 // If not found, check in base class
686 if( Property::INVALID_INDEX == index )
688 index = RenderableActor::GetDefaultPropertyIndex( name );
694 bool TextActor::IsDefaultPropertyWritable( Property::Index index ) const
696 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
698 return RenderableActor::IsDefaultPropertyWritable(index) ;
706 bool TextActor::IsDefaultPropertyAnimatable( Property::Index index ) const
708 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
710 return RenderableActor::IsDefaultPropertyAnimatable(index) ;
718 bool TextActor::IsDefaultPropertyAConstraintInput( Property::Index index ) const
720 if( index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT )
722 return RenderableActor::IsDefaultPropertyAConstraintInput(index);
724 return true; // Our properties can be used as input to constraints.
727 Property::Type TextActor::GetDefaultPropertyType( Property::Index index ) const
729 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
731 return RenderableActor::GetDefaultPropertyType(index) ;
735 index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
737 if ( ( index >= 0 ) && ( index < DEFAULT_TEXT_ACTOR_PROPERTY_COUNT ) )
739 return DEFAULT_TEXT_ACTOR_PROPERTY_TYPES[index];
743 // index out-of-bounds
744 return Property::NONE;
749 void TextActor::SetDefaultProperty( Property::Index index, const Property::Value& propertyValue )
751 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
753 RenderableActor::SetDefaultProperty(index, propertyValue) ;
759 case Dali::TextActor::TEXT:
761 SetText( GetTextArray( Dali::Text( propertyValue.Get<std::string>() ) ) );
764 case Dali::TextActor::FONT:
766 SetFont(*Font::New(propertyValue.Get<std::string>(),
767 mTextAttachment->GetFont().GetStyle(),
768 PointSize(mTextAttachment->GetFont().GetPointSize())));
771 case Dali::TextActor::FONT_STYLE:
773 SetFont(*Font::New(mTextAttachment->GetFont().GetName(),
774 propertyValue.Get<std::string>(),
775 PointSize(mTextAttachment->GetFont().GetPointSize())));
778 case Dali::TextActor::OUTLINE_ENABLE:
782 mTextAttachment->GetOutlineParams( color, thickness );
783 mTextAttachment->SetOutline(propertyValue.Get<bool>(), color, thickness);
786 case Dali::TextActor::OUTLINE_COLOR:
790 mTextAttachment->GetOutlineParams( color, thickness );
791 mTextAttachment->SetOutline(mTextAttachment->GetOutline(), propertyValue.Get<Vector4>(), thickness);
794 case Dali::TextActor::OUTLINE_THICKNESS_WIDTH:
798 mTextAttachment->GetOutlineParams( color, thickness );
799 mTextAttachment->SetOutline(mTextAttachment->GetOutline(), color, propertyValue.Get<Vector2>());
802 case Dali::TextActor::SMOOTH_EDGE:
804 mTextAttachment->SetSmoothEdge( propertyValue.Get<float>());
807 case Dali::TextActor::GLOW_ENABLE:
811 mTextAttachment->GetGlowParams( color, intensity );
812 mTextAttachment->SetGlow(propertyValue.Get<bool>(), color, intensity);
815 case Dali::TextActor::GLOW_COLOR:
819 mTextAttachment->GetGlowParams( color, intensity );
820 mTextAttachment->SetGlow(mTextAttachment->GetGlow(), propertyValue.Get<Vector4>(), intensity);
823 case Dali::TextActor::GLOW_INTENSITY:
827 mTextAttachment->GetGlowParams( color, intensity );
828 mTextAttachment->SetGlow(mTextAttachment->GetGlow(), color, propertyValue.Get<float>());
831 case Dali::TextActor::SHADOW_ENABLE:
836 mTextAttachment->GetShadowParams( color, offset, size );
837 mTextAttachment->SetShadow(propertyValue.Get<bool>(), color, offset, size );
840 case Dali::TextActor::SHADOW_COLOR:
845 mTextAttachment->GetShadowParams( color, offset, size );
846 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), propertyValue.Get<Vector4>(), offset, size);
849 case Dali::TextActor::SHADOW_OFFSET:
854 mTextAttachment->GetShadowParams( color, offset, size );
855 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), color, propertyValue.Get<Vector2>(), size );
858 case Dali::TextActor::SHADOW_SIZE:
863 mTextAttachment->GetShadowParams( color, offset, size );
864 mTextAttachment->SetShadow(mTextAttachment->GetShadow(), color, offset, propertyValue.Get<float>());
867 case Dali::TextActor::ITALICS_ANGLE:
869 SetItalics(Radian(propertyValue.Get<float>())) ;
872 case Dali::TextActor::UNDERLINE:
874 SetUnderline(propertyValue.Get<bool>(), 0.f, 0.f ) ;
877 case Dali::TextActor::WEIGHT:
879 mTextAttachment->SetWeight(static_cast<TextStyle::Weight>(propertyValue.Get<int>())) ;
882 case Dali::TextActor::FONT_DETECTION_AUTOMATIC:
884 mFontDetection = propertyValue.Get<bool>() ;
887 case Dali::TextActor::GRADIENT_COLOR:
889 mTextAttachment->SetGradient( propertyValue.Get<Vector4>(), mTextAttachment->GetGradientStartPoint(), mTextAttachment->GetGradientEndPoint() );
892 case Dali::TextActor::GRADIENT_START_POINT:
894 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), propertyValue.Get<Vector2>(), mTextAttachment->GetGradientEndPoint() );
897 case Dali::TextActor::GRADIENT_END_POINT:
899 mTextAttachment->SetGradient( mTextAttachment->GetGradientColor(), mTextAttachment->GetGradientStartPoint(), propertyValue.Get<Vector2>() );
902 case Dali::TextActor::TEXT_COLOR:
904 mTextAttachment->SetTextColor( propertyValue.Get<Vector4>() );
909 DALI_LOG_WARNING("Unknown text set property (%d)\n", index);
917 Property::Value TextActor::GetDefaultProperty( Property::Index index ) const
919 Property::Value ret ;
920 if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
922 ret = RenderableActor::GetDefaultProperty(index) ;
928 case Dali::TextActor::TEXT:
933 case Dali::TextActor::FONT:
935 ret = mTextAttachment->GetFont().GetName();
938 case Dali::TextActor::FONT_STYLE:
940 ret = mTextAttachment->GetFont().GetStyle();
943 case Dali::TextActor::OUTLINE_ENABLE:
945 ret = mTextAttachment->GetOutline();
948 case Dali::TextActor::OUTLINE_COLOR:
952 mTextAttachment->GetOutlineParams( color, thickness );
956 case Dali::TextActor::OUTLINE_THICKNESS_WIDTH:
960 mTextAttachment->GetOutlineParams( color, thickness );
964 case Dali::TextActor::SMOOTH_EDGE:
966 ret = mTextAttachment->GetSmoothEdge();
969 case Dali::TextActor::GLOW_ENABLE:
971 ret = mTextAttachment->GetGlow();
974 case Dali::TextActor::GLOW_COLOR:
977 float intensity(0.0f);
978 mTextAttachment->GetGlowParams( color, intensity );
982 case Dali::TextActor::GLOW_INTENSITY:
985 float intensity(0.0f);
986 mTextAttachment->GetGlowParams( color, intensity );
990 case Dali::TextActor::SHADOW_ENABLE:
992 ret = mTextAttachment->GetShadow();
995 case Dali::TextActor::SHADOW_COLOR:
1000 mTextAttachment->GetShadowParams( color, offset, size );
1004 case Dali::TextActor::SHADOW_OFFSET:
1009 mTextAttachment->GetShadowParams( color, offset, size );
1013 case Dali::TextActor::SHADOW_SIZE:
1018 mTextAttachment->GetShadowParams( color, offset, size );
1022 case Dali::TextActor::ITALICS_ANGLE:
1024 ret = static_cast<float>(mTextAttachment->GetItalics()) ;
1027 case Dali::TextActor::UNDERLINE:
1029 ret = mTextAttachment->GetUnderline() ;
1032 case Dali::TextActor::WEIGHT:
1034 ret = static_cast<int>(mTextAttachment->GetWeight());
1037 case Dali::TextActor::FONT_DETECTION_AUTOMATIC:
1039 ret = mFontDetection;
1042 case Dali::TextActor::GRADIENT_COLOR:
1044 ret = mTextAttachment->GetGradientColor();
1047 case Dali::TextActor::GRADIENT_START_POINT:
1049 ret = mTextAttachment->GetGradientStartPoint();
1052 case Dali::TextActor::GRADIENT_END_POINT:
1054 ret = mTextAttachment->GetGradientEndPoint();
1057 case Dali::TextActor::TEXT_COLOR:
1059 ret = mTextAttachment->GetTextColor();
1064 DALI_LOG_WARNING("Unknown text set property (%d)\n", index);
1068 } // if from base class
1073 } // namespace Internal