X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-effects-style.cpp;h=2bf1398406f4ebaa6a1ec5d34128ba2fdeb401f0;hb=e4c8362431523550a745b190c67c0c8e3f25ac4d;hp=38145dc5ed4a4b6c2fb57a0100a5c9db588e6167;hpb=fa834a987e844fb79531954c882581624aef0e68;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/text-effects-style.cpp b/dali-toolkit/internal/text/text-effects-style.cpp index 38145dc..2bf1398 100644 --- a/dali-toolkit/internal/text/text-effects-style.cpp +++ b/dali-toolkit/internal/text/text-effects-style.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,14 @@ // FILE HEADER #include +// EXTERNAL INCLUDES +#include + // INTERNAL INCLUDES #include -#include +#include #include +#include namespace Dali { @@ -31,14 +35,16 @@ namespace Text { namespace { -const std::string COLOR_KEY("color"); -const std::string OFFSET_KEY("offset"); -const std::string BLUR_RADIUS_KEY("blurRadius"); -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"); +const char* COLOR_KEY = "color"; +const char* OFFSET_KEY = "offset"; +const char* BLUR_RADIUS_KEY = "blurRadius"; +const char* WIDTH_KEY = "width"; +const char* HEIGHT_KEY = "height"; +const char* ENABLE_KEY = "enable"; +const char* TYPE_KEY = "type"; +const char* DASH_WIDTH_KEY = "dashWidth"; +const char* DASH_GAP_KEY = "dashGap"; +const char* TRUE_TOKEN = "true"; } // namespace bool ParseShadowProperties(const Property::Map& shadowPropertiesMap, @@ -106,12 +112,18 @@ bool ParseShadowProperties(const Property::Map& shadowPropertiesMap, return 0u == numberOfItems; } -bool ParseUnderlineProperties(const Property::Map& underlinePropertiesMap, - bool& enabled, - bool& colorDefined, - Vector4& color, - bool& heightDefined, - float& height) +bool ParseUnderlineProperties(const Property::Map& underlinePropertiesMap, + bool& enabled, + bool& colorDefined, + Vector4& color, + bool& heightDefined, + float& height, + bool& typeDefined, + Text::Underline::Type& type, + bool& dashWidthDefined, + float& dashWidth, + bool& dashGapDefined, + float& dashGap) { const unsigned int numberOfItems = underlinePropertiesMap.Count(); @@ -163,6 +175,51 @@ bool ParseUnderlineProperties(const Property::Map& underlinePropertiesMap, height = valueGet.second.Get(); } } + else if((DevelText::Underline::Property::TYPE == valueGet.first.indexKey) || (TYPE_KEY == valueGet.first.stringKey)) + { + /// Underline Type key. + typeDefined = true; + + if(valueGet.second.GetType() == Dali::Property::STRING) + { + const std::string typeStr = valueGet.second.Get(); + Text::UnderlineTypeStringToTypeValue(typeStr.c_str(), typeStr.size(), type); + } + else + { + type = valueGet.second.Get(); + } + } + else if((DevelText::Underline::Property::DASH_WIDTH == valueGet.first.indexKey) || (DASH_WIDTH_KEY == valueGet.first.stringKey)) + { + /// Dashed Underline Width key. + dashWidthDefined = true; + + if(valueGet.second.GetType() == Dali::Property::STRING) + { + const std::string dashWidthStr = valueGet.second.Get(); + dashWidth = StringToFloat(dashWidthStr.c_str()); + } + else + { + dashWidth = valueGet.second.Get(); + } + } + else if((DevelText::Underline::Property::DASH_GAP == valueGet.first.indexKey) || (DASH_GAP_KEY == valueGet.first.stringKey)) + { + /// Dashed Underline Gap key. + dashGapDefined = true; + + if(valueGet.second.GetType() == Dali::Property::STRING) + { + const std::string dashGapStr = valueGet.second.Get(); + dashGap = StringToFloat(dashGapStr.c_str()); + } + else + { + dashGap = valueGet.second.Get(); + } + } } return 0u == numberOfItems; @@ -299,11 +356,17 @@ bool SetUnderlineProperties(ControllerPtr controller, const Property::Value& val { const Property::Map& propertiesMap = value.Get(); - bool enabled = false; - bool colorDefined = false; - Vector4 color; - bool heightDefined = false; - float height = 0.f; + bool enabled = false; + bool colorDefined = false; + Vector4 color; + bool heightDefined = false; + float height = 0.f; + bool typeDefined = false; + Text::Underline::Type type; + bool dashWidthDefined = false; + float dashWidth = 2.0f; + bool dashGapDefined = false; + float dashGap = 1.0f; bool empty = true; @@ -322,7 +385,13 @@ bool SetUnderlineProperties(ControllerPtr controller, const Property::Value& val colorDefined, color, heightDefined, - height); + height, + typeDefined, + type, + dashWidthDefined, + dashWidth, + dashGapDefined, + dashGap); controller->UnderlineSetByString(!empty); } @@ -334,7 +403,13 @@ bool SetUnderlineProperties(ControllerPtr controller, const Property::Value& val colorDefined, color, heightDefined, - height); + height, + typeDefined, + type, + dashWidthDefined, + dashWidth, + dashGapDefined, + dashGap); controller->UnderlineSetByString(false); } @@ -359,6 +434,24 @@ bool SetUnderlineProperties(ControllerPtr controller, const Property::Value& val controller->SetUnderlineHeight(height); update = true; } + + if(typeDefined && (controller->GetUnderlineType() != type)) + { + controller->SetUnderlineType(type); + update = true; + } + + if(dashWidthDefined && (fabsf(controller->GetDashedUnderlineWidth() - dashWidth) > Math::MACHINE_EPSILON_1000)) + { + controller->SetDashedUnderlineWidth(dashWidth); + update = true; + } + + if(dashGapDefined && (fabsf(controller->GetDashedUnderlineGap() - dashGap) > Math::MACHINE_EPSILON_1000)) + { + controller->SetDashedUnderlineGap(dashGap); + update = true; + } } else { @@ -392,9 +485,12 @@ void GetUnderlineProperties(ControllerPtr controller, Property::Value& value, Ef { case EffectStyle::DEFAULT: { - const bool enabled = controller->IsUnderlineEnabled(); - const Vector4& color = controller->GetUnderlineColor(); - const float height = controller->GetUnderlineHeight(); + const bool enabled = controller->IsUnderlineEnabled(); + const Vector4& color = controller->GetUnderlineColor(); + const float height = controller->GetUnderlineHeight(); + const Text::Underline::Type type = controller->GetUnderlineType(); + const float dashWidth = controller->GetDashedUnderlineWidth(); + const float dashGap = controller->GetDashedUnderlineGap(); if(controller->IsUnderlineSetByString()) { @@ -408,7 +504,19 @@ void GetUnderlineProperties(ControllerPtr controller, Property::Value& value, Ef std::string heightStr; FloatToString(height, heightStr); - underlineProperties += "\"height\":\"" + heightStr + "\"}"; + underlineProperties += "\"height\":\"" + heightStr + "\","; + + std::string typeStr; + typeStr = GetUnderlineTypeToString(type); + underlineProperties += "\"type\":\"" + typeStr + "\","; + + std::string dashWidthStr; + FloatToString(dashWidth, dashWidthStr); + underlineProperties += "\"dashWidth\":\"" + dashWidthStr + "\","; + + std::string dashGapStr; + FloatToString(dashGap, dashGapStr); + underlineProperties += "\"dashGap\":\"" + dashGapStr + "\"}"; value = underlineProperties; } @@ -419,6 +527,9 @@ void GetUnderlineProperties(ControllerPtr controller, Property::Value& value, Ef map.Insert(ENABLE_KEY, enabled); map.Insert(COLOR_KEY, color); map.Insert(HEIGHT_KEY, height); + map.Insert(TYPE_KEY, type); + map.Insert(DASH_WIDTH_KEY, dashWidth); + map.Insert(DASH_GAP_KEY, dashGap); value = map; } @@ -501,7 +612,7 @@ bool SetShadowProperties(ControllerPtr controller, const Property::Value& value, update = true; } - if(blurRadiusDefined && (controller->GetShadowBlurRadius() != blurRadius)) + if(blurRadiusDefined && (!Dali::Equals(controller->GetShadowBlurRadius(), blurRadius))) { controller->SetShadowBlurRadius(blurRadius); update = true; @@ -866,11 +977,11 @@ bool SetStrikethroughProperties(ControllerPtr controller, const Property::Value& Text::ParsePropertyString(propertyString, parsedStringMap); empty = ParseStrikethroughProperties(parsedStringMap, - enabled, - colorDefined, - color, - heightDefined, - height); + enabled, + colorDefined, + color, + heightDefined, + height); controller->StrikethroughSetByString(!empty); } @@ -947,7 +1058,7 @@ void GetStrikethroughProperties(ControllerPtr controller, Property::Value& value if(controller->IsStrikethroughSetByString()) { std::string strikethroughProperties = "{\"enable\":"; - const std::string enabledStr = enabled ? "true" : "false"; + const std::string enabledStr = enabled ? "true" : "false"; strikethroughProperties += "\"" + enabledStr + "\","; std::string colorStr; @@ -982,6 +1093,17 @@ void GetStrikethroughProperties(ControllerPtr controller, Property::Value& value } } +Underline::Type StringToUnderlineType(const char* const underlineTypeStr) +{ + Underline::Type underlineType = Text::Underline::SOLID; + Scripting::GetEnumeration(underlineTypeStr, + UNDERLINE_TYPE_STRING_TABLE, + UNDERLINE_TYPE_STRING_TABLE_COUNT, + underlineType); + + return underlineType; +} + } // namespace Text } // namespace Toolkit