X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-font-style.cpp;h=117268ac31e6d4d32efa8d036664736eda816290;hp=b3b9e848d051052aad7b04f6e0c067b560ea946a;hb=646440beeb663fc5efcccadeba73dd46016ed1b3;hpb=63f9b5207c2794cdc460d587723be89585872a51 diff --git a/dali-toolkit/internal/text/text-font-style.cpp b/dali-toolkit/internal/text/text-font-style.cpp index b3b9e84..117268a 100644 --- a/dali-toolkit/internal/text/text-font-style.cpp +++ b/dali-toolkit/internal/text/text-font-style.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -22,375 +22,452 @@ #include // INTERNAL INCLUDES -#include #include +#include namespace Dali { - namespace Toolkit { - namespace Text { - namespace { -const std::string STYLE_KEY( "style" ); -const std::string WEIGHT_KEY( "weight" ); -const std::string WIDTH_KEY( "width" ); -const std::string SLANT_KEY( "slant" ); -const std::string FAMILY_KEY( "family" ); -const std::string TYPE_KEY( "type" ); - -const std::string SYSTEM_TOKEN( "system" ); +const std::string STYLE_KEY("style"); +const std::string WEIGHT_KEY("weight"); +const std::string WIDTH_KEY("width"); +const std::string SLANT_KEY("slant"); +const std::string FAMILY_KEY("family"); +const std::string TYPE_KEY("type"); -#if defined(DEBUG_ENABLED) -Debug::Filter* gLogFilter = Debug::Filter::New(Debug::Concise, true, "LOG_TEXT_CONTROLS"); -#endif +const std::string SYSTEM_TOKEN("system"); } // namespace -void SetFontFamilyProperty( ControllerPtr controller, const Property::Value& value ) +void SetFontFamilyProperty(ControllerPtr controller, const Property::Value& value) { - if( controller ) + if(controller) { const std::string fontFamilyValue = value.Get(); - if( fontFamilyValue.empty() ) + if(fontFamilyValue.empty()) { // Resets the default's font family name. - controller->SetDefaultFontFamily( "" ); + controller->SetDefaultFontFamily(""); return; } Property::Map map; - ParsePropertyString( fontFamilyValue, map ); + ParsePropertyString(fontFamilyValue, map); - if( map.Empty() ) + if(map.Empty()) { // There is no map. The font has been passed as a font's family name with no format. - controller->SetDefaultFontFamily( fontFamilyValue ); + controller->SetDefaultFontFamily(fontFamilyValue); } else { /// Family key - Property::Value* familyValue = map.Find( FAMILY_KEY ); + Property::Value* familyValue = map.Find(FAMILY_KEY); std::string fontFamilyName; - if( NULL != familyValue ) + if(NULL != familyValue) { fontFamilyName = familyValue->Get(); } /// Type key - Property::Value* typeValue = map.Find( TYPE_KEY ); + Property::Value* typeValue = map.Find(TYPE_KEY); std::string typeStr; - if( NULL != typeValue ) + if(NULL != typeValue) { typeStr = typeValue->Get(); } - if( TokenComparison( SYSTEM_TOKEN, typeStr.c_str(), typeStr.size() ) ) + if(TokenComparison(SYSTEM_TOKEN, typeStr.c_str(), typeStr.size())) { - controller->UpdateAfterFontChange( fontFamilyName ); + controller->UpdateAfterFontChange(fontFamilyName); } else { - controller->SetDefaultFontFamily( fontFamilyName ); + controller->SetDefaultFontFamily(fontFamilyName); } } } } -void SetFontStyleProperty( ControllerPtr controller, const Property::Value& value, FontStyle::Type type ) +void SetFontStyleProperty(ControllerPtr controller, const Property::Value& value, FontStyle::Type type) { - if( controller ) + if(controller) { - const std::string style = value.Get< std::string >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "Text Control %p FONT_STYLE %s\n", controller.Get(), style.c_str() ); - - // Parses and applies the style. Property::Map map; - ParsePropertyString( style, map ); + if(Property::STRING == value.GetType()) + { + const std::string& fontStyleProperties = value.Get(); + + ParsePropertyString(fontStyleProperties, map); + controller->FontStyleSetByString(true); + } + else + { + map = value.Get(); + controller->FontStyleSetByString(false); + } - if( !map.Empty() ) + if(!map.Empty()) { /// Weight key - Property::Value* weightValue = map.Find( WEIGHT_KEY ); + Property::Value* weightValue = map.Find(WEIGHT_KEY); - FontWeight weight = TextAbstraction::FontWeight::NONE; + FontWeight weight = TextAbstraction::FontWeight::NONE; const bool weightDefined = weightValue != NULL; - if( weightDefined ) + if(weightDefined) { const std::string weightStr = weightValue->Get(); - Scripting::GetEnumeration< FontWeight >( weightStr.c_str(), - FONT_WEIGHT_STRING_TABLE, - FONT_WEIGHT_STRING_TABLE_COUNT, - weight ); + Scripting::GetEnumeration(weightStr.c_str(), + FONT_WEIGHT_STRING_TABLE, + FONT_WEIGHT_STRING_TABLE_COUNT, + weight); } /// Width key - Property::Value* widthValue = map.Find( WIDTH_KEY ); + Property::Value* widthValue = map.Find(WIDTH_KEY); - FontWidth width = TextAbstraction::FontWidth::NONE; + FontWidth width = TextAbstraction::FontWidth::NONE; const bool widthDefined = widthValue != NULL; - if( widthDefined ) + if(widthDefined) { const std::string widthStr = widthValue->Get(); - Scripting::GetEnumeration< FontWidth >( widthStr.c_str(), - FONT_WIDTH_STRING_TABLE, - FONT_WIDTH_STRING_TABLE_COUNT, - width ); + Scripting::GetEnumeration(widthStr.c_str(), + FONT_WIDTH_STRING_TABLE, + FONT_WIDTH_STRING_TABLE_COUNT, + width); } /// Slant key - Property::Value* slantValue = map.Find( SLANT_KEY ); + Property::Value* slantValue = map.Find(SLANT_KEY); - FontSlant slant = TextAbstraction::FontSlant::NONE; + FontSlant slant = TextAbstraction::FontSlant::NONE; const bool slantDefined = slantValue != NULL; - if( slantDefined ) + if(slantDefined) { const std::string slantStr = slantValue->Get(); - Scripting::GetEnumeration< FontSlant >( slantStr.c_str(), - FONT_SLANT_STRING_TABLE, - FONT_SLANT_STRING_TABLE_COUNT, - slant ); + Scripting::GetEnumeration(slantStr.c_str(), + FONT_SLANT_STRING_TABLE, + FONT_SLANT_STRING_TABLE_COUNT, + slant); } - switch( type ) + switch(type) { case FontStyle::DEFAULT: { // Sets the default font's style values. - if( !weightDefined || - ( weightDefined && ( controller->GetDefaultFontWeight() != weight ) ) ) + if(!weightDefined || + (weightDefined && (controller->GetDefaultFontWeight() != weight))) { - controller->SetDefaultFontWeight( weight ); + controller->SetDefaultFontWeight(weight); } - if( !widthDefined || - ( widthDefined && ( controller->GetDefaultFontWidth() != width ) ) ) + if(!widthDefined || + (widthDefined && (controller->GetDefaultFontWidth() != width))) { - controller->SetDefaultFontWidth( width ); + controller->SetDefaultFontWidth(width); } - if( !slantDefined || - ( slantDefined && ( controller->GetDefaultFontSlant() != slant ) ) ) + if(!slantDefined || + (slantDefined && (controller->GetDefaultFontSlant() != slant))) { - controller->SetDefaultFontSlant( slant ); + controller->SetDefaultFontSlant(slant); } break; } case FontStyle::INPUT: { // Sets the input font's style values. - if( !weightDefined || - ( weightDefined && ( controller->GetInputFontWeight() != weight ) ) ) + if(!weightDefined || + (weightDefined && (controller->GetInputFontWeight() != weight))) + { + controller->SetInputFontWeight(weight); + } + + if(!widthDefined || + (widthDefined && (controller->GetInputFontWidth() != width))) + { + controller->SetInputFontWidth(width); + } + + if(!slantDefined || + (slantDefined && (controller->GetInputFontSlant() != slant))) + { + controller->SetInputFontSlant(slant); + } + break; + } + case FontStyle::PLACEHOLDER: + { + // Sets the placeholder text font's style values. + if(!weightDefined || + (weightDefined && (controller->GetPlaceholderTextFontWeight() != weight))) { - controller->SetInputFontWeight( weight ); + controller->SetPlaceholderTextFontWeight(weight); } - if( !widthDefined || - ( widthDefined && ( controller->GetInputFontWidth() != width ) ) ) + if(!widthDefined || + (widthDefined && (controller->GetPlaceholderTextFontWidth() != width))) { - controller->SetInputFontWidth( width ); + controller->SetPlaceholderTextFontWidth(width); } - if( !slantDefined || - ( slantDefined && ( controller->GetInputFontSlant() != slant ) ) ) + if(!slantDefined || + (slantDefined && (controller->GetPlaceholderTextFontSlant() != slant))) { - controller->SetInputFontSlant( slant ); + controller->SetPlaceholderTextFontSlant(slant); } break; } } // switch - } // map not empty + } // map not empty else { - switch( type ) + switch(type) { case FontStyle::DEFAULT: { - controller->SetDefaultFontWeight( TextAbstraction::FontWeight::NONE ); - controller->SetDefaultFontWidth( TextAbstraction::FontWidth::NONE ); - controller->SetDefaultFontSlant( TextAbstraction::FontSlant::NONE ); + controller->SetDefaultFontWeight(TextAbstraction::FontWeight::NONE); + controller->SetDefaultFontWidth(TextAbstraction::FontWidth::NONE); + controller->SetDefaultFontSlant(TextAbstraction::FontSlant::NONE); break; } case FontStyle::INPUT: { - controller->SetInputFontWeight( TextAbstraction::FontWeight::NONE ); - controller->SetInputFontWidth( TextAbstraction::FontWidth::NONE ); - controller->SetInputFontSlant( TextAbstraction::FontSlant::NONE ); + controller->SetInputFontWeight(TextAbstraction::FontWeight::NONE); + controller->SetInputFontWidth(TextAbstraction::FontWidth::NONE); + controller->SetInputFontSlant(TextAbstraction::FontSlant::NONE); + break; + } + case FontStyle::PLACEHOLDER: + { + controller->SetPlaceholderTextFontWeight(TextAbstraction::FontWeight::NONE); + controller->SetPlaceholderTextFontWidth(TextAbstraction::FontWidth::NONE); + controller->SetPlaceholderTextFontSlant(TextAbstraction::FontSlant::NONE); break; } } // switch - } // map.Empty() - } // controller + } // map.Empty() + } // controller } -void GetFontStyleProperty( ControllerPtr controller, Property::Value& value, FontStyle::Type type ) +void GetFontStyleProperty(ControllerPtr controller, Property::Value& value, FontStyle::Type type) { - if( controller ) + if(controller) { - const bool isDefaultStyle = FontStyle::DEFAULT == type; + const bool isSetbyString = controller->IsFontStyleSetByString(); - bool weightDefined = false; - bool widthDefined = false; - bool slantDefined = false; - FontWeight weight = TextAbstraction::FontWeight::NONE; - FontWidth width = TextAbstraction::FontWidth::NONE; - FontSlant slant = TextAbstraction::FontSlant::NONE; + bool weightDefined = false; + bool widthDefined = false; + bool slantDefined = false; + FontWeight weight = TextAbstraction::FontWeight::NONE; + FontWidth width = TextAbstraction::FontWidth::NONE; + FontSlant slant = TextAbstraction::FontSlant::NONE; - if( isDefaultStyle ) + switch(type) { - weightDefined = controller->IsDefaultFontWeightDefined(); - widthDefined = controller->IsDefaultFontWidthDefined(); - slantDefined = controller->IsDefaultFontSlantDefined(); - - if( weightDefined ) + case FontStyle::DEFAULT: { - weight = controller->GetDefaultFontWeight(); - } + weightDefined = controller->IsDefaultFontWeightDefined(); + widthDefined = controller->IsDefaultFontWidthDefined(); + slantDefined = controller->IsDefaultFontSlantDefined(); - if( widthDefined ) - { - width = controller->GetDefaultFontWidth(); - } + if(weightDefined) + { + weight = controller->GetDefaultFontWeight(); + } - if( slantDefined ) - { - slant = controller->GetDefaultFontSlant(); - } - } - else - { - weightDefined = controller->IsInputFontWeightDefined(); - widthDefined = controller->IsInputFontWidthDefined(); - slantDefined = controller->IsInputFontSlantDefined(); + if(widthDefined) + { + width = controller->GetDefaultFontWidth(); + } - if( weightDefined ) - { - weight = controller->GetInputFontWeight(); + if(slantDefined) + { + slant = controller->GetDefaultFontSlant(); + } + break; } - - if( widthDefined ) + case FontStyle::INPUT: { - width = controller->GetInputFontWidth(); - } + weightDefined = controller->IsInputFontWeightDefined(); + widthDefined = controller->IsInputFontWidthDefined(); + slantDefined = controller->IsInputFontSlantDefined(); + + if(weightDefined) + { + weight = controller->GetInputFontWeight(); + } - if( slantDefined ) + if(widthDefined) + { + width = controller->GetInputFontWidth(); + } + + if(slantDefined) + { + slant = controller->GetInputFontSlant(); + } + break; + } + case FontStyle::PLACEHOLDER: { - slant = controller->GetInputFontSlant(); + // The type is FontStyle::PLACEHOLDER + weightDefined = controller->IsPlaceholderTextFontWeightDefined(); + widthDefined = controller->IsPlaceholderTextFontWidthDefined(); + slantDefined = controller->IsPlaceholderTextFontSlantDefined(); + + if(weightDefined) + { + weight = controller->GetPlaceholderTextFontWeight(); + } + + if(widthDefined) + { + width = controller->GetPlaceholderTextFontWidth(); + } + + if(slantDefined) + { + slant = controller->GetPlaceholderTextFontSlant(); + } + break; } } - if( weightDefined || widthDefined || slantDefined ) + if(!isSetbyString) { - std::string styleString("{"); - if( weightDefined ) + Property::Map map; + + if(weightDefined) { - if( TextAbstraction::FontWeight::NONE != weight ) + if(TextAbstraction::FontWeight::NONE != weight) { - const std::string weightStr( GetEnumerationName( weight, - FONT_WEIGHT_STRING_TABLE, - FONT_WEIGHT_STRING_TABLE_COUNT ) ); + const std::string weightStr(GetEnumerationName(weight, + FONT_WEIGHT_STRING_TABLE, + FONT_WEIGHT_STRING_TABLE_COUNT)); - styleString += "\"weight\":\"" + weightStr + "\""; - } - else - { - weightDefined = false; + map.Insert(WEIGHT_KEY, weightStr); } } - if( widthDefined ) + if(widthDefined) { - if( TextAbstraction::FontWidth::NONE != width ) + if(TextAbstraction::FontWidth::NONE != width) { - const std::string widthStr( GetEnumerationName( width, - FONT_WIDTH_STRING_TABLE, - FONT_WIDTH_STRING_TABLE_COUNT ) ); + const std::string widthStr(GetEnumerationName(width, + FONT_WIDTH_STRING_TABLE, + FONT_WIDTH_STRING_TABLE_COUNT)); - if( weightDefined ) - { - styleString += ","; - } - styleString += "\"width\":\"" + widthStr + "\""; + map.Insert(WIDTH_KEY, widthStr); } - else + } + + if(slantDefined) + { + if(TextAbstraction::FontSlant::NONE != slant) { - widthDefined = false; + const std::string slantStr(GetEnumerationName(slant, + FONT_SLANT_STRING_TABLE, + FONT_SLANT_STRING_TABLE_COUNT)); + + map.Insert(SLANT_KEY, slantStr); } } - if( slantDefined ) + value = map; + } // SetbyMAP + else + { + std::string fontStyleProperties = "{"; + + if(weightDefined) { - if( TextAbstraction::FontSlant::NONE != slant ) + if(TextAbstraction::FontWeight::NONE != weight) { - const std::string slantStr( GetEnumerationName( slant, - FONT_SLANT_STRING_TABLE, - FONT_SLANT_STRING_TABLE_COUNT ) ); + const std::string weightStr(GetEnumerationName(weight, + FONT_WEIGHT_STRING_TABLE, + FONT_WEIGHT_STRING_TABLE_COUNT)); - if( weightDefined || widthDefined ) - { - styleString += ","; - } - styleString += "\"slant\":\"" + slantStr + "\""; + fontStyleProperties += "\"weight\":\"" + weightStr + "\","; } - else + } + + if(widthDefined) + { + if(TextAbstraction::FontWidth::NONE != width) { - slantDefined = false; + const std::string widthStr(GetEnumerationName(width, + FONT_WIDTH_STRING_TABLE, + FONT_WIDTH_STRING_TABLE_COUNT)); + fontStyleProperties += "\"width\":\"" + widthStr + "\","; } } - if( weightDefined || widthDefined || slantDefined ) + if(slantDefined) { - styleString += "}"; + if(TextAbstraction::FontSlant::NONE != slant) + { + const std::string slantStr(GetEnumerationName(slant, + FONT_SLANT_STRING_TABLE, + FONT_SLANT_STRING_TABLE_COUNT)); + + fontStyleProperties += "\"slant\":\"" + slantStr + "\""; + } } - else + + // If last character is comma, it will be removed. + if((*fontStyleProperties.rbegin()) == ',') { - styleString.clear(); + fontStyleProperties = fontStyleProperties.substr(0, fontStyleProperties.size() - 1); } + fontStyleProperties += "}"; - value = styleString; - } - } + value = fontStyleProperties; + } // SetbyString + } // controller } -FontWeight StringToWeight( const char* const weightStr ) +FontWeight StringToWeight(const char* const weightStr) { FontWeight weight = TextAbstraction::FontWeight::NORMAL; - Scripting::GetEnumeration( weightStr, - FONT_WEIGHT_STRING_TABLE, - FONT_WEIGHT_STRING_TABLE_COUNT, - weight ); + Scripting::GetEnumeration(weightStr, + FONT_WEIGHT_STRING_TABLE, + FONT_WEIGHT_STRING_TABLE_COUNT, + weight); return weight; } -FontWidth StringToWidth( const char* const widthStr ) +FontWidth StringToWidth(const char* const widthStr) { FontWidth width = TextAbstraction::FontWidth::NORMAL; - Scripting::GetEnumeration( widthStr, - FONT_WIDTH_STRING_TABLE, - FONT_WIDTH_STRING_TABLE_COUNT, - width ); + Scripting::GetEnumeration(widthStr, + FONT_WIDTH_STRING_TABLE, + FONT_WIDTH_STRING_TABLE_COUNT, + width); return width; } -FontSlant StringToSlant( const char* const slantStr ) +FontSlant StringToSlant(const char* const slantStr) { FontSlant slant = TextAbstraction::FontSlant::NORMAL; - Scripting::GetEnumeration( slantStr, - FONT_SLANT_STRING_TABLE, - FONT_SLANT_STRING_TABLE_COUNT, - slant ); + Scripting::GetEnumeration(slantStr, + FONT_SLANT_STRING_TABLE, + FONT_SLANT_STRING_TABLE_COUNT, + slant); return slant; }