/*
- * Copyright (c) 2019 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.
#include <iostream>
#include <stdlib.h>
+#include <unistd.h>
#include <dali-toolkit/internal/text/shaper.h>
#include <dali-toolkit-test-suite-utils.h>
namespace
{
+const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
struct GlyphInfoData
{
{
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;
}
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<FontDescriptionRun> 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<FontDescriptionRun> fontDescriptions;
const LayoutOptions options;
+
CreateTextModel( data.text,
textArea,
data.fontDescriptions,
options,
layoutSize,
- logicalModel,
- visualModel,
+ textModel,
metrics,
- false );
+ data.markupProcessorEnabled,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.f );
+
+ LogicalModelPtr logicalModel = textModel->mLogicalModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Clear the model.
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;
}
}
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
//////////////////////////////////////////////////////////
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 };
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 };
struct GlyphInfoData glyphs04[] =
{
- { 2u, 1733u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1693u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
- { 2u, 1725u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1733u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1721u, 0.f, 0.f, 0.f, 0.f, 20.f, 0.f },
- { 2u, 1725u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1733u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1722u, 0.f, 0.f, 0.f, 0.f, 18.f, 0.f },
- { 2u, 1725u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1733u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
- { 2u, 1718u, 0.f, 0.f, 0.f, 0.f, 14.f, 0.f },
- { 2u, 1725u, 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, 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 };
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, 5039u, 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 },
};
CharacterIndex newParagraphGlyphs06[] = { 49u };
CharacterIndex newParagraphGlyphs07[] = { 73u };
+ Vector<FontDescriptionRun> fontDescriptions01;
+ Vector<FontDescriptionRun> fontDescriptions02;
+ Vector<FontDescriptionRun> fontDescriptions03;
+ Vector<FontDescriptionRun> fontDescriptions04;
+ Vector<FontDescriptionRun> fontDescriptions05;
+ Vector<FontDescriptionRun> 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[] =
{
{
0u,
0u,
0u,
- NULL,
- NULL,
- NULL,
+ nullptr,
+ nullptr,
+ nullptr,
0u,
- NULL
+ nullptr,
+ false,
},
{
"Latin script",
characterIndices02,
charactersPerGlyph02,
0u,
- NULL
+ nullptr,
+ false,
+ fontDescriptions01
},
{
"Latin script. Some paragraphs.",
characterIndices03,
charactersPerGlyph03,
2u,
- newParagraphGlyphs03
+ newParagraphGlyphs03,
+ false,
+ fontDescriptions02
},
{
"Malayalam script. More glyphs than characters.",
characterIndices04,
charactersPerGlyph04,
0u,
- NULL
+ nullptr,
+ false,
+ fontDescriptions03
},
{
"Latin script with some paragraphs. Update initial paragraph.",
characterIndices05,
charactersPerGlyph05,
1u,
- newParagraphGlyphs05
+ newParagraphGlyphs05,
+ false,
+ fontDescriptions04,
},
{
"Latin script with some paragraphs. Update mid paragraph.",
characterIndices05,
charactersPerGlyph05,
1u,
- newParagraphGlyphs06
+ newParagraphGlyphs06,
+ false,
+ fontDescriptions05
},
{
"Latin script with some paragraphs. Update final paragraph.",
characterIndices05,
charactersPerGlyph05,
1u,
- newParagraphGlyphs07
+ newParagraphGlyphs07,
+ false,
+ fontDescriptions06
},
};
const unsigned int numberOfTests = 7u;
for( unsigned int index = 0u; index < numberOfTests; ++index )
{
ToolkitTestApplication application;
+ LoadTextShapeFonts();
+
if( !ShapeInfoTest( data[index] ) )
{
tet_result(TET_FAIL);
struct GlyphInfoData glyphs01[] =
{
- { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
- { 2u, 12298, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
- { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
+ { 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[] =
{
- { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, false },
- { 2u, 12298, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, true },
- { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, false },
+ { 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 };
- Length charactersPerGlyph[] = { 1u, 1u, 1u };
+ CharacterIndex characterIndices[] = { 0u, 1u, 2u, 3u };
+ Length charactersPerGlyph[] = { 1u, 1u, 1u, 1u };
Vector<FontDescriptionRun> fontDescriptions01;
Vector<FontDescriptionRun> fontDescriptions02;
+ const std::string fontFamily( "Roboto" );
+
FontDescriptionRun fontDescriptionRun01 =
{
{
0u,
- 3u
+ 4u
},
- NULL,
+ nullptr,
0u,
TextAbstraction::FontWeight::BOLD,
TextAbstraction::FontWidth::NONE,
TextAbstraction::FontSlant::ITALIC,
TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- false,
+ 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
},
- NULL,
+ nullptr,
0u,
TextAbstraction::FontWeight::NONE,
TextAbstraction::FontWidth::NONE,
TextAbstraction::FontSlant::NONE,
TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- false,
+ 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
},
- NULL,
+ nullptr,
0u,
TextAbstraction::FontWeight::BOLD,
TextAbstraction::FontWidth::NONE,
TextAbstraction::FontSlant::NONE,
TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- false,
+ 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
},
- NULL,
+ 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[] =
{
{
- "Chiness script. Characters have same font description",
- "未取得",
+ "Latin script. Characters have same font description",
+ "ABCD",
0u,
- 3u,
- 3u,
+ 4u,
+ 4u,
glyphs01,
characterIndices,
charactersPerGlyph,
0u,
- NULL,
+ nullptr,
+ false,
fontDescriptions01
},
{
- "Chiness script. Each character has different font description.",
- "未取得",
+ "Latin script. Each character has different font description.",
+ "ABCD",
0u,
- 3u,
- 3u,
+ 4u,
+ 4u,
glyphs02,
characterIndices,
charactersPerGlyph,
0u,
- NULL,
+ nullptr,
+ false,
fontDescriptions02
}
};
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<FontDescriptionRun> fontDescriptionsColorVS16 =
+ CreateSingleFontDescription (characterRun, colorFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> fontDescriptionsColorVS15 =
+ CreateSingleFontDescription (characterRun, colorFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> fontDescriptionsTextVS16 =
+ CreateSingleFontDescription (characterRun, textFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> 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);