Merge "Prevent Image visuals creating a renderer and putting it on stage even if...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / text-effects-style.cpp
index 1578329..44302d7 100644 (file)
@@ -38,66 +38,121 @@ const std::string OFFSET_KEY( "offset" );
 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 SetUnderlineProperties( ControllerPtr controller, const Property::Value& value, EffectStyle::Type type )
+bool ParseShadowProperties( const Property::Map& shadowPropertiesMap,
+                            bool& colorDefined,
+                            Vector4& color,
+                            bool& offsetDefined,
+                            Vector2& offset )
 {
-  bool update = false;
+  const unsigned int numberOfItems = shadowPropertiesMap.Count();
 
-  if( controller )
+  // Parses and applies the style.
+  for( unsigned int index = 0u; index < numberOfItems; ++index )
   {
-    const std::string properties = value.Get<std::string>();
+    const KeyValuePair& valueGet = shadowPropertiesMap.GetKeyValue( index );
+
+    if( COLOR_KEY == valueGet.first.stringKey )
+    {
+      /// Color key.
+      colorDefined = true;
 
-    // Parses and applies the style.
-    Property::Map map;
-    ParsePropertyString( properties, map );
+      const std::string colorStr = valueGet.second.Get<std::string>();
 
-    if( !map.Empty() )
+      Text::ColorStringToVector4( colorStr.c_str(), colorStr.size(), color );
+    }
+    else if( OFFSET_KEY == valueGet.first.stringKey )
     {
-      /// Enable key.
-      Property::Value* enableValue = map.Find( ENABLE_KEY );
+      /// Offset key.
+      offsetDefined = true;
 
-      bool enabled = false;
-      const bool enabledDefined = enableValue != NULL;
-      if( enabledDefined )
-      {
-        const std::string enableStr = enableValue->Get<std::string>();
-        enabled = TokenComparison( TRUE_TOKEN, enableStr.c_str(), enableStr.size() );
-      }
+      const std::string offsetStr = valueGet.second.Get<std::string>();
 
-      /// Color key.
-      Property::Value* colorValue = map.Find( COLOR_KEY );
+      StringToVector2( offsetStr.c_str(), offsetStr.size(), offset );
+    }
+  }
 
-      Vector4 color;
-      const bool colorDefined = colorValue != NULL;
-      if( colorDefined )
-      {
-        const std::string colorStr = colorValue->Get<std::string>();
+  return 0u == numberOfItems;
+}
 
-        ColorStringToVector4( colorStr.c_str(), colorStr.size(), color );
-      }
+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<std::string>();
+      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<std::string>();
+
+      Text::ColorStringToVector4( colorStr.c_str(), colorStr.size(), color );
+    }
+    else if( HEIGHT_KEY == valueGet.first.stringKey )
+    {
       /// Height key.
-      Property::Value* heightValue = map.Find( HEIGHT_KEY );
+      heightDefined = true;
 
-      float height = 0.f;
-      const bool heightDefined = heightValue != NULL;
-      if( heightDefined )
-      {
-        const std::string heightStr = heightValue->Get<std::string>();
+      const std::string heightStr = valueGet.second.Get<std::string>();
 
-        height = StringToFloat( heightStr.c_str() );
-      }
+      height = StringToFloat( heightStr.c_str() );
+    }
+  }
+
+  return 0u == numberOfItems;
+}
 
-      switch( type )
+bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& value, EffectStyle::Type type )
+{
+  bool update = false;
+
+  if( controller )
+  {
+    switch( type )
+    {
+      case EffectStyle::DEFAULT:
       {
-        case EffectStyle::DEFAULT:
+        const Property::Map& propertiesMap = value.Get<Property::Map>();
+
+        bool enabled = false;
+        bool colorDefined = false;
+        Vector4 color;
+        bool heightDefined = false;
+        float height = 0.f;
+
+        const bool empty = ParseUnderlineProperties( propertiesMap,
+                                                     enabled,
+                                                     colorDefined,
+                                                     color,
+                                                     heightDefined,
+                                                     height );
+
+        if( !empty )
         {
           if( enabled != controller->IsUnderlineEnabled() )
           {
             controller->SetUnderlineEnabled( enabled );
             update = true;
           }
+
           // Sets the default underline values.
           if( colorDefined && ( controller->GetUnderlineColor() != color ) )
           {
@@ -105,26 +160,13 @@ bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& va
             update = true;
           }
 
-          if( heightDefined && fabsf( controller->GetUnderlineHeight() - height ) > Math::MACHINE_EPSILON_1000 )
+          if( heightDefined && ( fabsf( controller->GetUnderlineHeight() - height ) > Math::MACHINE_EPSILON_1000 ) )
           {
             controller->SetUnderlineHeight( height );
             update = true;
           }
-          break;
         }
-        case EffectStyle::INPUT:
-        {
-          // Sets the input underline values.
-          // TODO: to be implemented.
-          break;
-        }
-      }
-    }
-    else
-    {
-      switch( type )
-      {
-        case EffectStyle::DEFAULT:
+        else
         {
           // Disable underline.
           if( controller->IsUnderlineEnabled() )
@@ -132,18 +174,18 @@ bool SetUnderlineProperties( ControllerPtr controller, const Property::Value& va
             controller->SetUnderlineEnabled( false );
             update = true;
           }
-          break;
-        }
-        case EffectStyle::INPUT:
-        {
-          // Sets the input underline values.
-          // TODO: to be implemented.
-          controller->SetInputUnderlineProperties( properties );
-          break;
         }
+        break;
       }
-    }
-  }
+      case EffectStyle::INPUT:
+      {
+        const std::string& underlineProperties = value.Get<std::string>();
+
+        controller->SetInputUnderlineProperties( underlineProperties );
+        break;
+      }
+    } // switch
+  } // if( controller )
 
   return update;
 }
@@ -160,19 +202,20 @@ void GetUnderlineProperties( ControllerPtr controller, Property::Value& value, E
         const Vector4& color = controller->GetUnderlineColor();
         const float height = controller->GetUnderlineHeight();
 
-        std::string underlineProperties = "{\"enable\":";
-        const std::string enabledStr = enabled ? "true" : "false";
-        underlineProperties += "\"" + enabledStr + "\",";
+        Property::Map map;
+
+        const std::string enabledStr = enabled ? TRUE_TOKEN : FALSE_TOKEN;
+        map.Insert( ENABLE_KEY, enabledStr );
 
         std::string colorStr;
         Vector4ToColorString( color, colorStr );
-        underlineProperties += "\"color\":\"" + colorStr + "\",";
+        map.Insert( COLOR_KEY, colorStr );
 
         std::string heightStr;
         FloatToString( height, heightStr );
-        underlineProperties += "\"height\":\"" + heightStr + "\"}";
+        map.Insert( HEIGHT_KEY, heightStr );
 
-        value = underlineProperties;
+        value = map;
         break;
       }
       case EffectStyle::INPUT:
@@ -190,41 +233,24 @@ bool SetShadowProperties( ControllerPtr controller, const Property::Value& value
 
   if( controller )
   {
-    const std::string properties = value.Get< std::string >();
-
-    // Parses and applies the style.
-    Property::Map map;
-    ParsePropertyString( properties, map );
-
-    if( !map.Empty() )
+    switch( type )
     {
-      /// Color key
-      Property::Value* colorValue = map.Find( COLOR_KEY );
-
-      Vector4 color;
-      const bool colorDefined = colorValue != NULL;
-      if( colorDefined )
+      case EffectStyle::DEFAULT:
       {
-        const std::string colorStr = colorValue->Get<std::string>();
+        const Property::Map& propertiesMap = value.Get<Property::Map>();
 
-        ColorStringToVector4( colorStr.c_str(), colorStr.size(), color );
-      }
-
-      /// Offset key
-      Property::Value* offsetValue = map.Find( OFFSET_KEY );
-
-      Vector2 offset;
-      const bool offsetDefined = offsetValue != NULL;
-      if( offsetDefined )
-      {
-        const std::string offsetStr = offsetValue->Get<std::string>();
+        bool colorDefined = false;
+        Vector4 color;
+        bool offsetDefined = false;
+        Vector2 offset;
 
-        StringToVector2( offsetStr.c_str(), offsetStr.size(), offset );
-      }
+        const bool empty = ParseShadowProperties( propertiesMap,
+                                                  colorDefined,
+                                                  color,
+                                                  offsetDefined,
+                                                  offset );
 
-      switch( type )
-      {
-        case EffectStyle::DEFAULT:
+        if( !empty )
         {
           // Sets the default shadow values.
           if( colorDefined && ( controller->GetShadowColor() != color ) )
@@ -238,39 +264,26 @@ bool SetShadowProperties( ControllerPtr controller, const Property::Value& value
             controller->SetShadowOffset( offset );
             update = true;
           }
-          break;
         }
-        case EffectStyle::INPUT:
-        {
-          // Sets the input shadow values.
-          // TODO: to be implemented.
-          break;
-        }
-      }
-    }
-    else
-    {
-      switch( type )
-      {
-        case EffectStyle::DEFAULT:
+        else
         {
           // Disable shadow.
           if( Vector2::ZERO != controller->GetShadowOffset() )
           {
             controller->SetShadowOffset( Vector2::ZERO );
           }
-          break;
-        }
-        case EffectStyle::INPUT:
-        {
-          // Sets the input shadow values.
-          // TODO: to be implemented.
-          controller->SetInputShadowProperties( properties );
-          break;
         }
+        break;
       }
-    }
-  }
+      case EffectStyle::INPUT:
+      {
+        const std::string& shadowString = value.Get<std::string>();
+
+        controller->SetInputShadowProperties( shadowString );
+        break;
+      }
+    } // switch
+  } // if( controller )
 
   return update;
 }
@@ -286,17 +299,17 @@ void GetShadowProperties( ControllerPtr controller, Property::Value& value, Effe
         const Vector4& color = controller->GetShadowColor();
         const Vector2& offset = controller->GetShadowOffset();
 
-        std::string shadowProperties = "{";
+        Property::Map map;
 
         std::string colorStr;
         Vector4ToColorString( color, colorStr );
-        shadowProperties += "\"color\":\"" + colorStr + "\",";
+        map.Insert( COLOR_KEY, colorStr );
 
         std::string offsetStr;
         Vector2ToString( offset, offsetStr );
-        shadowProperties += "\"offset\":\"" + offsetStr + "\"}";
+        map.Insert( OFFSET_KEY, offsetStr );
 
-        value = shadowProperties;
+        value = map;
         break;
       }
       case EffectStyle::INPUT: