X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-effects-style.cpp;h=ea1b3cfcd67083550ff0862ed5b8b4bc311839c3;hp=7172f2329a131879d5bc11786115335fce92204e;hb=baef46c4babda42017ab2d5fbd362ae9e11be95b;hpb=aeef40d5dd70c7d878c7664986913ef2c6675a03 diff --git a/dali-toolkit/internal/text/text-effects-style.cpp b/dali-toolkit/internal/text/text-effects-style.cpp old mode 100644 new mode 100755 index 7172f23..ea1b3cf --- a/dali-toolkit/internal/text/text-effects-style.cpp +++ b/dali-toolkit/internal/text/text-effects-style.cpp @@ -35,7 +35,120 @@ namespace { const std::string COLOR_KEY( "color" ); const std::string OFFSET_KEY( "offset" ); -const std::string THICKNESS_KEY( "thickness" ); +const std::string WIDTH_KEY( "width" ); +const std::string HEIGHT_KEY( "height" ); +const std::string ENABLE_KEY( "enable" ); +const std::string TRUE_TOKEN( "true" ); +const std::string FALSE_TOKEN( "false" ); +} + +bool ParseShadowProperties( const Property::Map& shadowPropertiesMap, + bool& colorDefined, + Vector4& color, + bool& offsetDefined, + Vector2& offset ) +{ + const unsigned int numberOfItems = shadowPropertiesMap.Count(); + + // Parses and applies the style. + for( unsigned int index = 0u; index < numberOfItems; ++index ) + { + const KeyValuePair& valueGet = shadowPropertiesMap.GetKeyValue( index ); + + if( COLOR_KEY == valueGet.first.stringKey ) + { + /// Color key. + colorDefined = true; + + const std::string colorStr = valueGet.second.Get(); + + Text::ColorStringToVector4( colorStr.c_str(), colorStr.size(), color ); + } + else if( OFFSET_KEY == valueGet.first.stringKey ) + { + /// Offset key. + offsetDefined = true; + + const std::string offsetStr = valueGet.second.Get(); + + StringToVector2( offsetStr.c_str(), offsetStr.size(), offset ); + } + } + + return 0u == numberOfItems; +} + +bool ParseUnderlineProperties( const Property::Map& underlinePropertiesMap, + bool& enabled, + bool& colorDefined, + Vector4& color, + bool& heightDefined, + float& height ) +{ + const unsigned int numberOfItems = underlinePropertiesMap.Count(); + + // Parses and applies the style. + for( unsigned int index = 0u; index < numberOfItems; ++index ) + { + const KeyValuePair& valueGet = underlinePropertiesMap.GetKeyValue( index ); + + if( ENABLE_KEY == valueGet.first.stringKey ) + { + /// Enable key. + const std::string enableStr = valueGet.second.Get(); + enabled = Text::TokenComparison( TRUE_TOKEN, enableStr.c_str(), enableStr.size() ); + } + else if( COLOR_KEY == valueGet.first.stringKey ) + { + /// Color key. + colorDefined = true; + + const std::string colorStr = valueGet.second.Get(); + + Text::ColorStringToVector4( colorStr.c_str(), colorStr.size(), color ); + } + else if( HEIGHT_KEY == valueGet.first.stringKey ) + { + /// Height key. + heightDefined = true; + + const std::string heightStr = valueGet.second.Get(); + + height = StringToFloat( heightStr.c_str() ); + } + } + + return 0u == numberOfItems; +} + +bool ParseOutlineProperties( const Property::Map& underlinePropertiesMap, + bool& colorDefined, + Vector4& color, + bool& widthDefined, + float& width ) +{ + const unsigned int numberOfItems = underlinePropertiesMap.Count(); + + // Parses and applies the style. + for( unsigned int index = 0u; index < numberOfItems; ++index ) + { + const KeyValuePair& valueGet = underlinePropertiesMap.GetKeyValue( index ); + + if( COLOR_KEY == valueGet.first.stringKey ) + { + /// Color key. + colorDefined = true; + color = valueGet.second.Get(); + } + else if( WIDTH_KEY == valueGet.first.stringKey ) + { + /// Width key. + widthDefined = true; + width = valueGet.second.Get(); + } + } + + return 0u == numberOfItems; } bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& value, EffectStyle::Type type ) @@ -44,63 +157,60 @@ bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& va if( controller ) { - const std::string properties = value.Get< std::string >(); - switch( type ) { case EffectStyle::DEFAULT: { - // Stores the default underline's properties string to be recovered by the GetUnderlineProperties() function. - controller->SetDefaultUnderlineProperties( properties ); - break; - } - case EffectStyle::INPUT: - { - // Stores the input underline's properties string to be recovered by the GetUnderlineProperties() function. - controller->SetInputUnderlineProperties( properties ); - break; - } - } - - // Parses and applies the style. - Property::Map map; - ParsePropertyString( properties, map ); + const Property::Map& propertiesMap = value.Get(); - if( !map.Empty() ) - { - /// Color key - Property::Value* colorValue = map.Find( COLOR_KEY ); + bool enabled = false; + bool colorDefined = false; + Vector4 color; + bool heightDefined = false; + float height = 0.f; - Vector4 color; - const bool colorDefined = colorValue != NULL; - if( colorDefined ) - { - const std::string colorStr = colorValue->Get(); + bool empty = true; - ColorStringToVector4( colorStr.c_str(), colorStr.size(), color ); - } + if ( propertiesMap.Empty() ) + { + // Map empty so check if a string provided + const std::string propertyString = value.Get(); - /// Thickness key - Property::Value* thicknessValue = map.Find( THICKNESS_KEY ); + if ( !propertyString.empty() ) + { + Property::Map parsedStringMap; + Text::ParsePropertyString( propertyString, parsedStringMap ); - float thickness = 0.f; - const bool thicknessDefined = thicknessValue != NULL; - if( thicknessDefined ) - { - const std::string thicknessStr = thicknessValue->Get(); + empty = ParseUnderlineProperties( parsedStringMap, + enabled, + colorDefined, + color, + heightDefined, + height ); - thickness = StringToFloat( thicknessStr.c_str() ); - } + controller->UnderlineSetByString( !empty); + } + } + else + { + empty = ParseUnderlineProperties( propertiesMap, + enabled, + colorDefined, + color, + heightDefined, + height ); + + controller->UnderlineSetByString( false ); + } - switch( type ) - { - case EffectStyle::DEFAULT: + if( !empty ) { - if( !controller->IsUnderlineEnabled() ) + if( enabled != controller->IsUnderlineEnabled() ) { - controller->SetUnderlineEnabled( true ); + controller->SetUnderlineEnabled( enabled ); update = true; } + // Sets the default underline values. if( colorDefined && ( controller->GetUnderlineColor() != color ) ) { @@ -108,30 +218,32 @@ bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& va update = true; } - if( thicknessDefined && fabsf( controller->GetUnderlineHeight() - thickness ) > Math::MACHINE_EPSILON_1000 ) + if( heightDefined && ( fabsf( controller->GetUnderlineHeight() - height ) > Math::MACHINE_EPSILON_1000 ) ) { - controller->SetUnderlineHeight( thickness ); + controller->SetUnderlineHeight( height ); update = true; } } - case EffectStyle::INPUT: + else { - // Sets the input underline values. - // TODO: to be implemented. - break; + // Disable underline. + if( controller->IsUnderlineEnabled() ) + { + controller->SetUnderlineEnabled( false ); + update = true; + } } + break; } - } - else - { - // Disable underline. - if( controller->IsUnderlineEnabled() ) + case EffectStyle::INPUT: { - controller->SetUnderlineEnabled( false ); - update = true; + const std::string& underlineProperties = value.Get(); + + controller->SetInputUnderlineProperties( underlineProperties ); + break; } - } - } + } // switch + } // if( controller ) return update; } @@ -144,7 +256,44 @@ void GetUnderlineProperties( ControllerPtr controller, Property::Value& value, E { case EffectStyle::DEFAULT: { - value = controller->GetDefaultUnderlineProperties(); + const bool enabled = controller->IsUnderlineEnabled(); + const Vector4& color = controller->GetUnderlineColor(); + const float height = controller->GetUnderlineHeight(); + + if ( controller->IsUnderlineSetByString() ) + { + std::string underlineProperties = "{\"enable\":"; + const std::string enabledStr = enabled ? "true" : "false"; + underlineProperties += "\"" + enabledStr + "\","; + + std::string colorStr; + Vector4ToColorString( color, colorStr ); + underlineProperties += "\"color\":\"" + colorStr + "\","; + + std::string heightStr; + FloatToString( height, heightStr ); + underlineProperties += "\"height\":\"" + heightStr + "\"}"; + + value = underlineProperties; + } + else + { + Property::Map map; + + const std::string enabledStr = enabled ? TRUE_TOKEN : FALSE_TOKEN; + map.Insert( ENABLE_KEY, enabledStr ); + + std::string colorStr; + Vector4ToColorString( color, colorStr ); + map.Insert( COLOR_KEY, colorStr ); + + std::string heightStr; + FloatToString( height, heightStr ); + map.Insert( HEIGHT_KEY, heightStr ); + + value = map; + } + break; } case EffectStyle::INPUT: @@ -162,57 +311,48 @@ bool SetShadowProperties( ControllerPtr controller, const Property::Value& value if( controller ) { - const std::string properties = value.Get< std::string >(); - switch( type ) { case EffectStyle::DEFAULT: { - // Stores the default shadow's properties string to be recovered by the GetShadowProperties() function. - controller->SetDefaultShadowProperties( properties ); - break; - } - case EffectStyle::INPUT: - { - // Stores the input shadow's properties string to be recovered by the GetShadowProperties() function. - controller->SetInputShadowProperties( properties ); - break; - } - } + const Property::Map& propertiesMap = value.Get(); - // Parses and applies the style. - Property::Map map; - ParsePropertyString( properties, map ); + bool colorDefined = false; + Vector4 color; + bool offsetDefined = false; + Vector2 offset; - if( !map.Empty() ) - { - /// Color key - Property::Value* colorValue = map.Find( COLOR_KEY ); + bool empty = true; - Vector4 color; - const bool colorDefined = colorValue != NULL; - if( colorDefined ) - { - const std::string colorStr = colorValue->Get(); + if ( propertiesMap.Empty() ) + { + // Map empty so check if a string provided + const std::string propertyString = value.Get(); - ColorStringToVector4( colorStr.c_str(), colorStr.size(), color ); - } + Property::Map parsedStringMap; + Text::ParsePropertyString( propertyString, parsedStringMap ); - /// Offset key - Property::Value* offsetValue = map.Find( OFFSET_KEY ); + empty = ParseShadowProperties( parsedStringMap, + colorDefined, + color, + offsetDefined, + offset ); - Vector2 offset; - const bool offsetDefined = offsetValue != NULL; - if( offsetDefined ) - { - const std::string offsetStr = offsetValue->Get(); + controller->ShadowSetByString( !empty ); - StringOffsetToVector2( offsetStr, offset ); - } + } + else + { + empty = ParseShadowProperties( propertiesMap, + colorDefined, + color, + offsetDefined, + offset ); - switch( type ) - { - case EffectStyle::DEFAULT: + controller->ShadowSetByString( false ); + } + + if( !empty ) { // Sets the default shadow values. if( colorDefined && ( controller->GetShadowColor() != color ) ) @@ -227,15 +367,25 @@ bool SetShadowProperties( ControllerPtr controller, const Property::Value& value update = true; } } - case EffectStyle::INPUT: + else { - // Sets the input shadow values. - // TODO: to be implemented. - break; + // Disable shadow. + if( Vector2::ZERO != controller->GetShadowOffset() ) + { + controller->SetShadowOffset( Vector2::ZERO ); + } } + break; } - } - } + case EffectStyle::INPUT: + { + const std::string& shadowString = value.Get(); + + controller->SetInputShadowProperties( shadowString ); + break; + } + } // switch + } // if( controller ) return update; } @@ -248,7 +398,37 @@ void GetShadowProperties( ControllerPtr controller, Property::Value& value, Effe { case EffectStyle::DEFAULT: { - value = controller->GetDefaultShadowProperties(); + const Vector4& color = controller->GetShadowColor(); + const Vector2& offset = controller->GetShadowOffset(); + + if ( controller->IsShadowSetByString() ) + { + std::string shadowProperties = "{"; + + std::string colorStr; + Vector4ToColorString( color, colorStr ); + shadowProperties += "\"color\":\"" + colorStr + "\","; + + std::string offsetStr; + Vector2ToString( offset, offsetStr ); + shadowProperties += "\"offset\":\"" + offsetStr + "\"}"; + + value = shadowProperties; + } + else + { + Property::Map map; + + std::string colorStr; + Vector4ToColorString( color, colorStr ); + map.Insert( COLOR_KEY, colorStr ); + + std::string offsetStr; + Vector2ToString( offset, offsetStr ); + map.Insert( OFFSET_KEY, offsetStr ); + + value = map; + } break; } case EffectStyle::INPUT: @@ -314,24 +494,76 @@ bool SetOutlineProperties( ControllerPtr controller, const Property::Value& valu if( controller ) { - const std::string properties = value.Get< std::string >(); - switch( type ) { case EffectStyle::DEFAULT: { - // Stores the default outline's properties string to be recovered by the GetOutlineProperties() function. - controller->SetDefaultOutlineProperties( properties ); + const Property::Map& propertiesMap = value.Get(); + + bool colorDefined = false; + Vector4 color; + bool widthDefined = false; + float width = 0.f; + + bool empty = true; + + if ( propertiesMap.Empty() ) + { + // Map empty so check if a string provided + // This is purely to maintain backward compatibility, but we don't parse the string to be a property map. + const std::string propertyString = value.Get(); + + // Stores the default outline's properties string to be recovered by the GetOutlineProperties() function. + controller->SetDefaultOutlineProperties( propertyString ); + + controller->OutlineSetByString( true ); + } + else + { + empty = ParseOutlineProperties( propertiesMap, + colorDefined, + color, + widthDefined, + width ); + + controller->OutlineSetByString( false ); + } + + if( !empty ) + { + // Sets the default outline values. + if( colorDefined && ( controller->GetOutlineColor() != color ) ) + { + controller->SetOutlineColor( color ); + update = true; + } + + if( widthDefined && ( fabsf( controller->GetOutlineWidth() - width ) > Math::MACHINE_EPSILON_1000 ) ) + { + controller->SetOutlineWidth( width ); + update = true; + } + } + else + { + // Disable outline + if( fabsf( controller->GetOutlineWidth() ) > Math::MACHINE_EPSILON_1000 ) + { + controller->SetOutlineWidth( 0.0f ); + update = true; + } + } break; } case EffectStyle::INPUT: { - // Stores the input outline's properties string to be recovered by the GetOutlineProperties() function. - controller->SetInputOutlineProperties( properties ); + const std::string& outlineProperties = value.Get(); + + controller->SetInputOutlineProperties( outlineProperties ); break; } - } - } + } // switch + } // if( controller ) return update; } @@ -344,8 +576,30 @@ void GetOutlineProperties( ControllerPtr controller, Property::Value& value, Eff { case EffectStyle::DEFAULT: { - value = controller->GetDefaultOutlineProperties(); - break; + if ( controller->IsOutlineSetByString() ) + { + value = controller->GetDefaultOutlineProperties(); + break; + } + else + { + const Vector4& color = controller->GetOutlineColor(); + const float width = controller->GetOutlineWidth(); + + Property::Map map; + + std::string colorStr; + Vector4ToColorString( color, colorStr ); + map.Insert( COLOR_KEY, colorStr ); + + std::string widthStr; + FloatToString( width, widthStr ); + map.Insert( WIDTH_KEY, widthStr ); + + value = map; + + break; + } } case EffectStyle::INPUT: {