Fix text outline property related native TCT 12/153912/3
authorRichard Huang <r.huang@samsung.com>
Tue, 3 Oct 2017 09:49:36 +0000 (10:49 +0100)
committerRichard Huang <r.huang@samsung.com>
Wed, 4 Oct 2017 10:24:49 +0000 (11:24 +0100)
Change-Id: Ica80d4844165c7bb4fa30b1be1f0338e228fe8d4

automated-tests/src/dali-toolkit/utc-Dali-TextEditor.cpp
automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp
automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp
dali-toolkit/internal/text/text-controller-impl.h
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-controller.h
dali-toolkit/internal/text/text-effects-style.cpp

index 27de361..ba8ac99 100644 (file)
@@ -732,6 +732,13 @@ int UtcDaliTextEditorSetPropertyP(void)
   DALI_TEST_EQUALS( editor.GetProperty<std::string>( TextEditor::Property::INPUT_EMBOSS ), std::string("Emboss input properties"), TEST_LOCATION );
 
   // Check the outline property
   DALI_TEST_EQUALS( editor.GetProperty<std::string>( TextEditor::Property::INPUT_EMBOSS ), std::string("Emboss input properties"), TEST_LOCATION );
 
   // Check the outline property
+
+  // Test string type first
+  // This is purely to maintain backward compatibility, but we don't support string as the outline property type.
+  editor.SetProperty( TextEditor::Property::OUTLINE, "Outline properties" );
+  DALI_TEST_EQUALS( editor.GetProperty<std::string>( TextEditor::Property::OUTLINE ), std::string("Outline properties"), TEST_LOCATION );
+
+  // Then test the property map type
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
index 11d3eb6..00feb29 100644 (file)
@@ -829,6 +829,13 @@ int UtcDaliTextFieldSetPropertyP(void)
   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::INPUT_EMBOSS ), std::string("Emboss input properties"), TEST_LOCATION );
 
   // Check the outline property
   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::INPUT_EMBOSS ), std::string("Emboss input properties"), TEST_LOCATION );
 
   // Check the outline property
+
+  // Test string type first
+  // This is purely to maintain backward compatibility, but we don't support string as the outline property type.
+  field.SetProperty( TextField::Property::OUTLINE, "Outline properties" );
+  DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::OUTLINE ), std::string("Outline properties"), TEST_LOCATION );
+
+  // Then test the property map type
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
index 1130c39..ec4b100 100644 (file)
@@ -446,6 +446,13 @@ int UtcDaliToolkitTextLabelSetPropertyP(void)
   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::EMBOSS ), std::string("Emboss properties"), TEST_LOCATION );
 
   // Check the outline property
   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::EMBOSS ), std::string("Emboss properties"), TEST_LOCATION );
 
   // Check the outline property
+
+  // Test string type first
+  // This is purely to maintain backward compatibility, but we don't support string as the outline property type.
+  label.SetProperty( TextLabel::Property::OUTLINE, "Outline properties" );
+  DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::OUTLINE ), std::string("Outline properties"), TEST_LOCATION );
+
+  // Then test the property map type
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
   Property::Map outlineMapSet;
   Property::Map outlineMapGet;
 
index 23188f5..44d1a7d 100644 (file)
@@ -324,6 +324,7 @@ struct Controller::Impl
     mAutoScrollDirectionRTL( false ),
     mUnderlineSetByString( false ),
     mShadowSetByString( false ),
     mAutoScrollDirectionRTL( false ),
     mUnderlineSetByString( false ),
     mShadowSetByString( false ),
+    mOutlineSetByString( false ),
     mFontStyleSetByString( false ),
     mShouldClearFocusOnEscape( true )
   {
     mFontStyleSetByString( false ),
     mShouldClearFocusOnEscape( true )
   {
@@ -745,6 +746,7 @@ public:
 
   bool mUnderlineSetByString:1;            ///< Set when underline is set by string (legacy) instead of map
   bool mShadowSetByString:1;               ///< Set when shadow is set by string (legacy) instead of map
 
   bool mUnderlineSetByString:1;            ///< Set when underline is set by string (legacy) instead of map
   bool mShadowSetByString:1;               ///< Set when shadow is set by string (legacy) instead of map
+  bool mOutlineSetByString:1;              ///< Set when outline is set by string (legacy) instead of map
   bool mFontStyleSetByString:1;            ///< Set when font style is set by string (legacy) instead of map
   bool mShouldClearFocusOnEscape:1;        ///< Whether text control should clear key input focus
 };
   bool mFontStyleSetByString:1;            ///< Set when font style is set by string (legacy) instead of map
   bool mShouldClearFocusOnEscape:1;        ///< Whether text control should clear key input focus
 };
index 4cc9d90..4137326 100755 (executable)
@@ -1750,6 +1750,16 @@ void Controller::ShadowSetByString( bool setByString )
   mImpl->mShadowSetByString = setByString;
 }
 
   mImpl->mShadowSetByString = setByString;
 }
 
+bool Controller::IsOutlineSetByString()
+{
+  return mImpl->mOutlineSetByString;
+}
+
+void Controller::OutlineSetByString( bool setByString )
+{
+  mImpl->mOutlineSetByString = setByString;
+}
+
 bool Controller::IsFontStyleSetByString()
 {
   return mImpl->mFontStyleSetByString;
 bool Controller::IsFontStyleSetByString()
 {
   return mImpl->mFontStyleSetByString;
index b02bb68..fc75596 100755 (executable)
@@ -461,6 +461,18 @@ public: // Configure the text controller.
   void ShadowSetByString( bool setByString );
 
   /**
   void ShadowSetByString( bool setByString );
 
   /**
+   * @brief Query if outline settings were provided by string or map
+   * @return bool true if set by string
+   */
+  bool IsOutlineSetByString();
+
+  /**
+   * Set method outline setting were set by
+   * @param[in] bool, true if set by string
+   */
+  void OutlineSetByString( bool setByString );
+
+  /**
    * @brief Query if font style settings were provided by string or map
    * @return bool true if set by string
    */
    * @brief Query if font style settings were provided by string or map
    * @return bool true if set by string
    */
index 8b71d30..ea1b3cf 100755 (executable)
@@ -507,13 +507,26 @@ bool SetOutlineProperties( ControllerPtr controller, const Property::Value& valu
 
         bool empty = true;
 
 
         bool empty = true;
 
-        if ( !propertiesMap.Empty() )
+        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<std::string>();
+
+           // 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 );
         {
            empty = ParseOutlineProperties( propertiesMap,
                                            colorDefined,
                                            color,
                                            widthDefined,
                                            width );
+
+           controller->OutlineSetByString( false );
         }
 
         if( !empty )
         }
 
         if( !empty )
@@ -563,22 +576,30 @@ void GetOutlineProperties( ControllerPtr controller, Property::Value& value, Eff
     {
       case EffectStyle::DEFAULT:
       {
     {
       case EffectStyle::DEFAULT:
       {
-        const Vector4& color = controller->GetOutlineColor();
-        const float width = controller->GetOutlineWidth();
+        if ( controller->IsOutlineSetByString() )
+        {
+          value = controller->GetDefaultOutlineProperties();
+          break;
+        }
+        else
+        {
+          const Vector4& color = controller->GetOutlineColor();
+          const float width = controller->GetOutlineWidth();
 
 
-        Property::Map map;
+          Property::Map map;
 
 
-        std::string colorStr;
-        Vector4ToColorString( color, colorStr );
-        map.Insert( COLOR_KEY, colorStr );
+          std::string colorStr;
+          Vector4ToColorString( color, colorStr );
+          map.Insert( COLOR_KEY, colorStr );
 
 
-        std::string widthStr;
-        FloatToString( width, widthStr );
-        map.Insert( WIDTH_KEY, widthStr );
+          std::string widthStr;
+          FloatToString( width, widthStr );
+          map.Insert( WIDTH_KEY, widthStr );
 
 
-        value = map;
+          value = map;
 
 
-        break;
+          break;
+        }
       }
       case EffectStyle::INPUT:
       {
       }
       case EffectStyle::INPUT:
       {