X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Text-Shaping.cpp;h=272db3182f0ac90a916637f5a81cdd59ac289cc6;hp=7b319fb6c90ee95589ac5b13286848b3a5399b89;hb=fbd8d4da2506b57b46a71c5d113f4cb86f23c731;hpb=dda9d7ca30d6f5c42759647df03a13e52c76228a diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.cpp old mode 100644 new mode 100755 index 7b319fb..272db31 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.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. @@ -17,11 +17,12 @@ #include #include +#include #include #include #include -#include +#include using namespace Dali; using namespace Toolkit; @@ -44,6 +45,7 @@ using namespace Text; namespace { +const std::string DEFAULT_FONT_DIR( "/resources/fonts" ); struct GlyphInfoData { @@ -55,6 +57,8 @@ struct GlyphInfoData float yBearing; ///< The distance from the baseline to the topmost border of the glyph float advance; ///< The distance to move the cursor for this glyph float scaleFactor; ///< The scaling applied (fixed-size fonts only) + bool isItalicRequired; ///< Whether the italic style is required. + bool isBoldRequired; ///< Whether the bold style is required. }; bool IsEqualGlyph ( const GlyphInfoData& glyphData, const GlyphInfo& glyph ) @@ -83,7 +87,7 @@ bool IsEqualGlyph ( const GlyphInfoData& glyphData, const GlyphInfo& glyph ) { return false; } - if( fabsf( glyphData.advance - glyph.advance ) > Math::MACHINE_EPSILON_1000 ) + if( fabsf( glyphData.advance - floor(glyph.advance) ) > Math::MACHINE_EPSILON_1000 ) { return false; } @@ -91,6 +95,14 @@ bool IsEqualGlyph ( const GlyphInfoData& glyphData, const GlyphInfo& glyph ) { return false; } + if( glyphData.isItalicRequired != glyph.isItalicRequired ) + { + return false; + } + if( glyphData.isBoldRequired != glyph.isBoldRequired ) + { + return false; + } return true; } @@ -107,27 +119,35 @@ struct ShapeInfoData Length* charactersPerGlyph; ///< The characters per glyph. uint32_t expectedNumberOfNewParagraphGlyphs; ///< The expected number of glyphs. GlyphIndex* newParagraphGlyphs; ///< Indices to the new paragraphs glyphs. + bool markupProcessorEnabled; //< Enable markup processor to use markup text. + Vector fontDescriptions; ///< Fonts which is used for text. }; bool ShapeInfoTest( const ShapeInfoData& data ) { // 1) Create the model. - LogicalModelPtr logicalModel; - VisualModelPtr visualModel; + ModelPtr textModel; MetricsPtr metrics; Size textArea(100.f, 60.f); Size layoutSize; const Vector fontDescriptions; const LayoutOptions options; + CreateTextModel( data.text, textArea, - fontDescriptions, + data.fontDescriptions, options, layoutSize, - logicalModel, - visualModel, - metrics ); + textModel, + metrics, + data.markupProcessorEnabled, + LineWrap::WORD, + false, + Toolkit::DevelText::EllipsisPosition::END ); + + LogicalModelPtr logicalModel = textModel->mLogicalModel; + VisualModelPtr visualModel = textModel->mVisualModel; // 2) Clear the model. @@ -223,6 +243,33 @@ bool ShapeInfoTest( const ShapeInfoData& data ) if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) ) { std::cout << " different glyph info, index : " << index << std::endl; + + const GlyphInfo& glyphInfo = glyphs[index]; + std::cout << " fontId : " << glyphInfo.fontId << std::endl; + std::cout << " index : " << glyphInfo.index << std::endl; + std::cout << " width : " << glyphInfo.width << std::endl; + std::cout << " height : " << glyphInfo.height << std::endl; + std::cout << " xBearing : " << glyphInfo.xBearing << std::endl; + std::cout << " yBearing : " << glyphInfo.yBearing << std::endl; + std::cout << " advance : " << floor(glyphInfo.advance) << std::endl; + std::cout << " scaleFactor : " << glyphInfo.scaleFactor << std::endl; + std::cout << " isItalicRequired : " << glyphInfo.isItalicRequired << std::endl; + std::cout << " isBoldRequired : " << glyphInfo.isBoldRequired << std::endl; + + std::cout << " Expected : " << std::endl; + const GlyphInfoData& expectedGlyphInfo = data.glyphs[index]; + std::cout << " fontId : " << expectedGlyphInfo.fontId << std::endl; + std::cout << " index : " << expectedGlyphInfo.index << std::endl; + std::cout << " width : " << expectedGlyphInfo.width << std::endl; + std::cout << " height : " << expectedGlyphInfo.height << std::endl; + std::cout << " xBearing : " << expectedGlyphInfo.xBearing << std::endl; + std::cout << " yBearing : " << expectedGlyphInfo.yBearing << std::endl; + std::cout << " advance : " << expectedGlyphInfo.advance << std::endl; + std::cout << " scaleFactor : " << expectedGlyphInfo.scaleFactor << std::endl; + std::cout << " isItalicRequired : " << expectedGlyphInfo.isItalicRequired << std::endl; + std::cout << " isBoldRequired : " << expectedGlyphInfo.isBoldRequired << std::endl; + + return false; } } @@ -263,6 +310,62 @@ bool ShapeInfoTest( const ShapeInfoData& data ) return true; } +void LoadTextShapeFonts() +{ + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.SetDpi( 96u, 96u ); + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName( pathNamePtr ); + free( pathNamePtr ); + + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" ); + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/noto/NotoSansMalayalam-Regular.ttf" ); +} + +void LoadSoftwareStylingFonts() +{ + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.SetDpi( 96u, 96u ); + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName( pathNamePtr ); + free( pathNamePtr ); + + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Regular.ttf" ); + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Bold.ttf" ); + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Italic.ttf" ); + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-BoldItalic.ttf" ); +} + +void LoadEmojiFonts() +{ + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.ClearCache(); + fontClient.SetDpi( 96u, 96u ); + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName( pathNamePtr ); + free( pathNamePtr ); + + + TextAbstraction::FontDescription fontDescriptionText; + fontDescriptionText.path = ""; + fontDescriptionText.family = "DejaVuSans"; + fontDescriptionText.width = TextAbstraction::FontWidth::NONE; + fontDescriptionText.weight = TextAbstraction::FontWeight::NORMAL; + fontDescriptionText.slant = TextAbstraction::FontSlant::NONE; + fontClient.GetFontId(fontDescriptionText, TextAbstraction::FontClient::DEFAULT_POINT_SIZE); + + TextAbstraction::FontDescription fontDescriptionEmoji; + fontDescriptionEmoji.path = ""; + fontDescriptionEmoji.family = "NotoColorEmoji"; + fontDescriptionEmoji.width = TextAbstraction::FontWidth::NONE; + fontDescriptionEmoji.weight = TextAbstraction::FontWeight::NORMAL; + fontDescriptionEmoji.slant = TextAbstraction::FontSlant::NONE; + fontClient.GetFontId(fontDescriptionEmoji, TextAbstraction::FontClient::DEFAULT_POINT_SIZE); +} + } // namespace ////////////////////////////////////////////////////////// @@ -273,17 +376,17 @@ int UtcDaliTextShape(void) struct GlyphInfoData glyphs02[] = { - { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, + { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 312u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, }; CharacterIndex characterIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u }; @@ -291,23 +394,23 @@ int UtcDaliTextShape(void) struct GlyphInfoData glyphs03[] = { - { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, + { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 312u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, }; CharacterIndex characterIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u }; @@ -316,18 +419,18 @@ int UtcDaliTextShape(void) struct GlyphInfoData glyphs04[] = { - { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 123u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 150u, 0.f, 0.f, 0.f, 0.f, 14.f, 0.f }, - { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 151u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f }, - { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 2u, 147u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, + { 2u, 67u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 2u, 27u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, + { 2u, 59u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 2u, 67u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 2u, 55u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f }, + { 2u, 59u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 2u, 67u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 2u, 56u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f }, + { 2u, 59u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 2u, 67u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 2u, 52u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, + { 2u, 59u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, }; CharacterIndex characterIndices04[] = { 0u, 0u, 0u, 2u, 2u, 2u, 4u, 4u, 4u, 6u, 6u, 6u }; @@ -335,79 +438,79 @@ int UtcDaliTextShape(void) struct GlyphInfoData glyphs05[] = { - { 1u, 47u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 87u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 87u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, + { 1u, 280u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 312u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 310u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 313u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 315u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 306u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 312u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 313u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 314u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 314u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 84u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 5034u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 69u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 311u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 315u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 403u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 308u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 296u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 313u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, - { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 70u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, - { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, - { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, - { 1u, 70u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, - { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f }, - { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f }, - { 1u, 17u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, + { 1u, 310u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 309u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 313u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 313u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 312u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 297u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 315u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 308u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 298u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 303u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 295u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 308u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f }, + { 1u, 299u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f }, + { 1u, 297u, 0.f, 0.f, 0.f, 0.f, 7.f, 0.f }, + { 1u, 315u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f }, + { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f }, + { 1u, 4u, 0.f, 0.f, 0.f, 0.f, 3.f, 0.f }, { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f }, }; @@ -431,6 +534,160 @@ int UtcDaliTextShape(void) CharacterIndex newParagraphGlyphs06[] = { 49u }; CharacterIndex newParagraphGlyphs07[] = { 73u }; + Vector fontDescriptions01; + Vector fontDescriptions02; + Vector fontDescriptions03; + Vector fontDescriptions04; + Vector fontDescriptions05; + Vector fontDescriptions06; + + const std::string fontFamily( "TizenSans" ); + const std::string fontFamilyMalayalam( "Noto Sans Malayalam" ); + + FontDescriptionRun fontDescriptionRun01 = + { + { + 0u, + 11u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun01.familyLength = fontFamily.size(); + fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength]; + memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength ); + + fontDescriptions01.PushBack( fontDescriptionRun01 ); + + FontDescriptionRun fontDescriptionRun02 = + { + { + 0u, + 17u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun02.familyLength = fontFamily.size(); + fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength]; + memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength ); + + fontDescriptions02.PushBack( fontDescriptionRun02 ); + + FontDescriptionRun fontDescriptionRun03 = + { + { + 0u, + 8u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun03.familyLength = fontFamilyMalayalam.size(); + fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength]; + memcpy( fontDescriptionRun03.familyName, fontFamilyMalayalam.c_str(), fontDescriptionRun03.familyLength ); + + fontDescriptions03.PushBack( fontDescriptionRun03 ); + + FontDescriptionRun fontDescriptionRun04 = + { + { + 0u, + 75u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun04.familyLength = fontFamily.size(); + fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength]; + memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength ); + + fontDescriptions04.PushBack( fontDescriptionRun04 ); + + FontDescriptionRun fontDescriptionRun05 = + { + { + 0u, + 75u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun05.familyLength = fontFamily.size(); + fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength]; + memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength ); + + fontDescriptions05.PushBack( fontDescriptionRun05 ); + + FontDescriptionRun fontDescriptionRun06 = + { + { + 0u, + 75u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun06.familyLength = fontFamily.size(); + fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength]; + memcpy( fontDescriptionRun06.familyName, fontFamily.c_str(), fontDescriptionRun06.familyLength ); + + fontDescriptions06.PushBack( fontDescriptionRun06 ); + struct ShapeInfoData data[] = { { @@ -439,11 +696,12 @@ int UtcDaliTextShape(void) 0u, 0u, 0u, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, 0u, - NULL + nullptr, + false, }, { "Latin script", @@ -455,7 +713,9 @@ int UtcDaliTextShape(void) characterIndices02, charactersPerGlyph02, 0u, - NULL + nullptr, + false, + fontDescriptions01 }, { "Latin script. Some paragraphs.", @@ -467,7 +727,9 @@ int UtcDaliTextShape(void) characterIndices03, charactersPerGlyph03, 2u, - newParagraphGlyphs03 + newParagraphGlyphs03, + false, + fontDescriptions02 }, { "Malayalam script. More glyphs than characters.", @@ -479,7 +741,9 @@ int UtcDaliTextShape(void) characterIndices04, charactersPerGlyph04, 0u, - NULL + nullptr, + false, + fontDescriptions03 }, { "Latin script with some paragraphs. Update initial paragraph.", @@ -491,7 +755,9 @@ int UtcDaliTextShape(void) characterIndices05, charactersPerGlyph05, 1u, - newParagraphGlyphs05 + newParagraphGlyphs05, + false, + fontDescriptions04, }, { "Latin script with some paragraphs. Update mid paragraph.", @@ -503,7 +769,9 @@ int UtcDaliTextShape(void) characterIndices05, charactersPerGlyph05, 1u, - newParagraphGlyphs06 + newParagraphGlyphs06, + false, + fontDescriptions05 }, { "Latin script with some paragraphs. Update final paragraph.", @@ -515,7 +783,9 @@ int UtcDaliTextShape(void) characterIndices05, charactersPerGlyph05, 1u, - newParagraphGlyphs07 + newParagraphGlyphs07, + false, + fontDescriptions06 }, }; const unsigned int numberOfTests = 7u; @@ -523,6 +793,341 @@ int UtcDaliTextShape(void) for( unsigned int index = 0u; index < numberOfTests; ++index ) { ToolkitTestApplication application; + LoadTextShapeFonts(); + + if( !ShapeInfoTest( data[index] ) ) + { + tet_result(TET_FAIL); + } + } + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextSoftwareStyling(void) +{ + tet_infoline(" UtcDaliTextSoftwareStyling"); + + struct GlyphInfoData glyphs01[] = + { + { 4u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true }, + { 4u, 39u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f, true, true }, + { 4u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true }, + { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true }, + }; + struct GlyphInfoData glyphs02[] = + { + { 1u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false, false }, + { 2u, 39u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false, true }, + { 3u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, false }, + { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true }, + }; + + CharacterIndex characterIndices[] = { 0u, 1u, 2u, 3u }; + Length charactersPerGlyph[] = { 1u, 1u, 1u, 1u }; + + Vector fontDescriptions01; + Vector fontDescriptions02; + + const std::string fontFamily( "Roboto" ); + + FontDescriptionRun fontDescriptionRun01 = + { + { + 0u, + 4u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::BOLD, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::ITALIC, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + true, + false, + true, + false + }; + fontDescriptionRun01.familyLength = fontFamily.size(); + fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength]; + memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength ); + + fontDescriptions01.PushBack(fontDescriptionRun01); + + FontDescriptionRun fontDescriptionRun02 = + { + { + 0u, + 1u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + false, + false + }; + fontDescriptionRun02.familyLength = fontFamily.size(); + fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength]; + memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength ); + + FontDescriptionRun fontDescriptionRun03 = + { + { + 1u, + 1u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::BOLD, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::NONE, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + true, + false, + false, + false + }; + fontDescriptionRun03.familyLength = fontFamily.size(); + fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength]; + memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength ); + + FontDescriptionRun fontDescriptionRun04 = + { + { + 2u, + 1u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::NONE, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::ITALIC, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + false, + false, + true, + false + }; + fontDescriptionRun04.familyLength = fontFamily.size(); + fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength]; + memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength ); + + FontDescriptionRun fontDescriptionRun05 = + { + { + 3u, + 1u + }, + nullptr, + 0u, + TextAbstraction::FontWeight::BOLD, + TextAbstraction::FontWidth::NONE, + TextAbstraction::FontSlant::ITALIC, + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + true, + true, + false, + true, + false + }; + fontDescriptionRun05.familyLength = fontFamily.size(); + fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength]; + memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength ); + + fontDescriptions02.PushBack(fontDescriptionRun02); + fontDescriptions02.PushBack(fontDescriptionRun03); + fontDescriptions02.PushBack(fontDescriptionRun04); + fontDescriptions02.PushBack(fontDescriptionRun05); + + + struct ShapeInfoData data[] = + { + { + "Latin script. Characters have same font description", + "ABCD", + 0u, + 4u, + 4u, + glyphs01, + characterIndices, + charactersPerGlyph, + 0u, + nullptr, + false, + fontDescriptions01 + }, + { + "Latin script. Each character has different font description.", + "ABCD", + 0u, + 4u, + 4u, + glyphs02, + characterIndices, + charactersPerGlyph, + 0u, + nullptr, + false, + fontDescriptions02 + } + }; + + const unsigned int numberOfTests = 2u; + + for( unsigned int index = 0u; index < numberOfTests; ++index ) + { + ToolkitTestApplication application; + LoadSoftwareStylingFonts(); + + if( !ShapeInfoTest( data[index] ) ) + { + tet_result(TET_FAIL); + } + } + + tet_result(TET_PASS); + END_TEST; +} + + +int UtcDaliTextShapeEmojiSequences(void) +{ + + ToolkitTestApplication application; + + tet_infoline(" UtcDaliTextShapeEmojiSequences"); + + const std::string colorFontFamily( "NotoColorEmoji" ); + const std::string textFontFamily( "DejaVuSans" ); + + LoadEmojiFonts(); + + //Common attributes for font Descriptions + CharacterRun characterRun = {0u, 2u}; + FontWeight weight = TextAbstraction::FontWeight::NORMAL; + FontWidth width = TextAbstraction::FontWidth::NORMAL; + FontSlant slant = TextAbstraction::FontSlant::ITALIC; + PointSize26Dot6 size = TextAbstraction::FontClient::DEFAULT_POINT_SIZE; + + bool familyDefined = true; + bool weightDefined = false; + bool widthDefined = false; + bool slantDefined = false; + bool sizeDefined = false; + + + // variation selector 16 (Emoji) + struct GlyphInfoData glyphsVS16[] = + { + { 2u, 74u, 0.f, 0.f, 0.f, 0.f, 39.0f, 0.f, false, false }, + }; + CharacterIndex characterIndicesVS16[] = { 0u, 1u}; + Length charactersPerGlyphVS16[] = { 2u }; + + + + // variation selector 15 (Text) + struct GlyphInfoData glyphsVS15[] = + { + { 1u, 3842u, 0.f, 0.f, 0.f, 0.f, 14.0f, 0.f, false, false }, + { 1u, 8203u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, false, false }, + }; + CharacterIndex characterIndicesVS15[] = { 0u, 0u}; + Length charactersPerGlyphVS15[] = { 0u, 2u }; + + //Font Descriptions + Vector fontDescriptionsColorVS16 = + CreateSingleFontDescription (characterRun, colorFontFamily, weight, width, + slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined); + + Vector fontDescriptionsColorVS15 = + CreateSingleFontDescription (characterRun, colorFontFamily, weight, width, + slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined); + + Vector fontDescriptionsTextVS16 = + CreateSingleFontDescription (characterRun, textFontFamily, weight, width, + slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined); + + Vector fontDescriptionsTextVS15 = + CreateSingleFontDescription (characterRun, textFontFamily, weight, width, + slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined); + + + struct ShapeInfoData data[] = + { + { + "EMOJI Sequence: Color Font with VS16", + "☪️", + 0u, + 2u, + 1u, + glyphsVS16, + characterIndicesVS16, + charactersPerGlyphVS16, + 0u, + nullptr, + true, + fontDescriptionsColorVS16 + }, + { + "EMOJI Sequence: Color Font with VS15", + "☪︎", + 0u, + 2u, + 2u, + glyphsVS15, + characterIndicesVS15, + charactersPerGlyphVS15, + 0u, + nullptr, + true, + fontDescriptionsColorVS15 + }, + { + "EMOJI Sequence: Text Font with VS16", + "☪️", + 0u, + 2u, + 1u, + glyphsVS16, + characterIndicesVS16, + charactersPerGlyphVS16, + 0u, + nullptr, + true, + fontDescriptionsTextVS16 + }, + { + "EMOJI Sequence: Text Font with VS15", + "☪︎", + 0u, + 2u, + 2u, + glyphsVS15, + characterIndicesVS15, + charactersPerGlyphVS15, + 0u, + nullptr, + true, + fontDescriptionsTextVS15 + }, + }; + + const unsigned int numberOfTests = 4u; + + for( unsigned int index = 0u; index < numberOfTests; ++index ) + { + tet_infoline( data[index].description.c_str()); if( !ShapeInfoTest( data[index] ) ) { tet_result(TET_FAIL);