X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmulti-language-helper-functions.cpp;h=3fad598e279ab8225c7cc2a3fb36ce7c11120018;hp=06b0f102934512fe85c056e4b4e8db000bb89de9;hb=528aa3699cd51dab5115bca1aaebb65d4bc67c15;hpb=24d1c5037a28d3b8e9094dbb65630687e079705a diff --git a/dali-toolkit/internal/text/multi-language-helper-functions.cpp b/dali-toolkit/internal/text/multi-language-helper-functions.cpp index 06b0f10..3fad598 100644 --- a/dali-toolkit/internal/text/multi-language-helper-functions.cpp +++ b/dali-toolkit/internal/text/multi-language-helper-functions.cpp @@ -31,21 +31,23 @@ namespace Text { void MergeFontDescriptions( const Vector& fontDescriptions, - Vector& fontIds, const TextAbstraction::FontDescription& defaultFontDescription, TextAbstraction::PointSize26Dot6 defaultPointSize, - CharacterIndex startIndex, - Length numberOfCharacters ) + CharacterIndex characterIndex, + TextAbstraction::FontDescription& fontDescription, + TextAbstraction::PointSize26Dot6& fontPointSize, + bool& isDefaultFont ) { - // Get the handle to the font client. - TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + // Initialize with the default font's point size. + fontPointSize = defaultPointSize; - // Pointer to the font id buffer. - FontId* fontIdsBuffer = fontIds.Begin(); + // Initialize with the style parameters of the default font's style. + fontDescription = defaultFontDescription; - // Used to temporarily store the style per character. - TextAbstraction::FontDescription fontDescription; - TextAbstraction::PointSize26Dot6 fontSize; + // Initialize as a default font. + isDefaultFont = true; + + Length runIndex = 0u; Length familyIndex = 0u; Length weightIndex = 0u; @@ -53,119 +55,88 @@ void MergeFontDescriptions( const Vector& fontDescriptions, Length slantIndex = 0u; Length sizeIndex = 0u; - // Traverse all the characters. - const CharacterIndex lastCharacterPlusOne = startIndex + numberOfCharacters; - for( CharacterIndex index = startIndex; index < lastCharacterPlusOne; ++index ) + bool familyOverriden = false; + bool weightOverriden = false; + bool widthOverriden = false; + bool slantOverriden = false; + bool sizeOverriden = false; + + // Traverse all the font descriptions. + const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin(); + for( Vector::ConstIterator it = fontDescriptionsBuffer, + endIt = fontDescriptions.End(); + it != endIt; + ++it, ++runIndex ) { - bool defaultFont = true; - - Length runIndex = 0u; - - bool familyOverriden = false; - bool weightOverriden = false; - bool widthOverriden = false; - bool slantOverriden = false; - bool sizeOverriden = false; - - // Traverse all the font descriptions. - const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin(); - for( Vector::ConstIterator it = fontDescriptionsBuffer, - endIt = fontDescriptions.End(); - it != endIt; - ++it, ++runIndex ) + // Check whether the character's font is modified by the current font description. + const FontDescriptionRun& fontRun = *it; + if( ( characterIndex >= fontRun.characterRun.characterIndex ) && + ( characterIndex < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) ) { - // Check whether the character's font is modified by the current font description. - const FontDescriptionRun& fontRun = *it; - if( ( index >= fontRun.characterRun.characterIndex ) && - ( index < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) ) + if( fontRun.familyDefined ) { - if( fontRun.familyDefined ) - { - defaultFont = false; - familyOverriden = true; - familyIndex = runIndex; - } - if( fontRun.weightDefined ) - { - defaultFont = false; - weightOverriden = true; - weightIndex = runIndex; - } - if( fontRun.widthDefined ) - { - defaultFont = false; - widthOverriden = true; - widthIndex = runIndex; - } - if( fontRun.slantDefined ) - { - defaultFont = false; - slantOverriden = true; - slantIndex = runIndex; - } - if( fontRun.sizeDefined ) - { - defaultFont = false; - sizeOverriden = true; - sizeIndex = runIndex; - } + isDefaultFont = false; + familyOverriden = true; + familyIndex = runIndex; } - } - - // Get the font id if is not the default font. - if( !defaultFont ) - { - if( familyOverriden ) + if( fontRun.weightDefined ) { - const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex ); - fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength ); // TODO Could use move constructor when switch to c++11. + isDefaultFont = false; + weightOverriden = true; + weightIndex = runIndex; } - else + if( fontRun.widthDefined ) { - fontDescription.family = defaultFontDescription.family; + isDefaultFont = false; + widthOverriden = true; + widthIndex = runIndex; } - - if( weightOverriden ) + if( fontRun.slantDefined ) { - const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex ); - fontDescription.weight = fontRun.weight; + isDefaultFont = false; + slantOverriden = true; + slantIndex = runIndex; } - else + if( fontRun.sizeDefined ) { - fontDescription.weight = defaultFontDescription.weight; + isDefaultFont = false; + sizeOverriden = true; + sizeIndex = runIndex; } + } + } - if( widthOverriden ) - { - const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex ); - fontDescription.width = fontRun.width; - } - else - { - fontDescription.width = defaultFontDescription.width; - } + // Get the font's description if is not the default font. + if( !isDefaultFont ) + { + if( familyOverriden ) + { + const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex ); + fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength ); + } - if( slantOverriden ) - { - const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex ); - fontDescription.slant = fontRun.slant; - } - else - { - fontDescription.slant = defaultFontDescription.slant; - } + if( weightOverriden ) + { + const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex ); + fontDescription.weight = fontRun.weight; + } - if( sizeOverriden ) - { - const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex ); - fontSize = fontRun.size; - } - else - { - fontSize = defaultPointSize; - } + if( widthOverriden ) + { + const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex ); + fontDescription.width = fontRun.width; + } - *( fontIdsBuffer + index - startIndex ) = fontClient.GetFontId( fontDescription, fontSize ); + if( slantOverriden ) + { + const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex ); + fontDescription.slant = fontRun.slant; + } + + if( sizeOverriden ) + { + const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex ); + fontPointSize = fontRun.size; } } }