utc-Dali-VisualUrl.cpp
utc-Dali-Text-Hyphen-Wrapping.cpp
utc-Dali-Text-Ellipsis.cpp
+ utc-Dali-Text-CharacterSpacing.cpp
)
IF(ELDBUS_AVAILABLE)
LineWrap::Mode wrapMode,
bool ellipsisEnabled,
DevelText::EllipsisPosition::Type ellipsisPosition,
- float lineSpacing)
+ float lineSpacing,
+ float characterSpacing)
{
textModel = Model::New(); ///< Pointer to the text's model.
LogicalModelPtr logicalModel = textModel->mLogicalModel;
visualModel->CreateGlyphsPerCharacterTable(0u, 0u, characterCount);
visualModel->CreateCharacterToGlyphTable(0u, 0u, characterCount);
+ visualModel->SetCharacterSpacing(characterSpacing);
+
const Length numberOfGlyphs = glyphs.Count();
// 8) Get the glyph metrics
#define DALI_TOOLKIT_TEXT_UTILS_H
/*
- * 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.
namespace Dali
{
-
namespace Toolkit
{
-
namespace Text
{
-
/**
* @brief Some layout options.
*/
struct LayoutOptions
{
LayoutOptions()
- : align{ true }
- {}
+ : align{true}
+ {
+ }
- bool align : 1; ///< Whether to align the lines.
+ bool align : 1; ///< Whether to align the lines.
};
/**
* @param[in] ellipsisEnabled Whether the ellipsis layout option is enabled.
* @param[in] ellipsisPosition Where is the location the text elide.
* @param[in] lineSpacing The height of the line in points.
+ * @param[in] characterSpacing The spacing between the characters.
*/
-void CreateTextModel( const std::string& text,
- const Size& textArea,
- const Vector<FontDescriptionRun>& fontDescriptions,
- const LayoutOptions& options,
- Size& layoutSize,
- ModelPtr& textModel,
- MetricsPtr& metrics,
- bool markupProcessorEnabled,
- LineWrap::Mode wrapMode,
- bool ellipsisEnabled,
- DevelText::EllipsisPosition::Type ellipsisPosition,
- float lineSpacing);
+void CreateTextModel(const std::string& text,
+ const Size& textArea,
+ const Vector<FontDescriptionRun>& fontDescriptions,
+ const LayoutOptions& options,
+ Size& layoutSize,
+ ModelPtr& textModel,
+ MetricsPtr& metrics,
+ bool markupProcessorEnabled,
+ LineWrap::Mode wrapMode,
+ bool ellipsisEnabled,
+ DevelText::EllipsisPosition::Type ellipsisPosition,
+ float lineSpacing,
+ float characterSpacing);
/**
* @brief Configures the text @p controller similarly to the one configured by the text-label.
*
* @param[in,out] The text controller to configure.
*/
-void ConfigureTextLabel( ControllerPtr controller );
+void ConfigureTextLabel(ControllerPtr controller);
/**
* @brief Configures the text @p controller similarly to the one configured by the text-field.
*
* @param[in,out] The text controller to configure.
*/
-void ConfigureTextField( ControllerPtr controller );
+void ConfigureTextField(ControllerPtr controller);
/**
* @brief Configures the text @p controller similarly to the one configured by the text-editor.
*
* @param[in,out] The text controller to configure.
*/
-void ConfigureTextEditor( ControllerPtr controller );
-
+void ConfigureTextEditor(ControllerPtr controller);
/**
* @brief Creates one FontDescriptionRun then add it to FontDescription list.
* @return vector contains one FontDescriptionRun.
*/
Vector<FontDescriptionRun> CreateSingleFontDescription(
- const CharacterRun& characterRun,
- const std::string fontFamilyName,
- const FontWeight weight,
- const FontWidth width,
- const FontSlant slant,
- const PointSize26Dot6 size,
- const bool familyDefined,
- const bool weightDefined,
- const bool widthDefined,
- const bool slantDefined,
- const bool sizeDefined);
+ const CharacterRun& characterRun,
+ const std::string fontFamilyName,
+ const FontWeight weight,
+ const FontWidth width,
+ const FontSlant slant,
+ const PointSize26Dot6 size,
+ const bool familyDefined,
+ const bool weightDefined,
+ const bool widthDefined,
+ const bool slantDefined,
+ const bool sizeDefined);
} // namespace Text
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
+#include <iostream>
-#include <dali/devel-api/text-abstraction/bidirectional-support.h>
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/internal/text/bidirectional-support.h>
#include <dali-toolkit/internal/text/character-set-conversion.h>
#include <dali-toolkit/internal/text/text-run-container.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
+#include <dali/devel-api/text-abstraction/bidirectional-support.h>
#include <toolkit-text-utils.h>
using namespace Dali;
namespace
{
-
struct SetBidirectionalInfoData
{
std::string description; ///< Description of the test.
bool markupProcessorEnabled; ///< Enable markup processor to use markup text.
};
-bool SetBidirectionalInfoTest( const SetBidirectionalInfoData& data )
+bool SetBidirectionalInfoTest(const SetBidirectionalInfoData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
// Create the model.
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Clear the bidirectional paragraph info data.
Vector<BidirectionalParagraphInfoRun>& bidirectionalInfo = logicalModel->mBidirectionalParagraphInfo;
- if( 0u != data.numberOfCharacters )
+ if(0u != data.numberOfCharacters)
{
- ClearCharacterRuns( data.startIndex,
- data.startIndex + data.numberOfCharacters - 1u,
- bidirectionalInfo );
+ ClearCharacterRuns(data.startIndex,
+ data.startIndex + data.numberOfCharacters - 1u,
+ bidirectionalInfo);
}
// 3) Call the SetBidirectionalInfo() function.
- SetBidirectionalInfo( logicalModel->mText,
- logicalModel->mScriptRuns,
- logicalModel->mLineBreakInfo,
- data.startIndex,
- data.numberOfCharacters,
- bidirectionalInfo );
+ SetBidirectionalInfo(logicalModel->mText,
+ logicalModel->mScriptRuns,
+ logicalModel->mLineBreakInfo,
+ data.startIndex,
+ data.numberOfCharacters,
+ bidirectionalInfo);
// 4) Compare with the expected results.
TextAbstraction::BidirectionalSupport bidirectionalSupport = TextAbstraction::BidirectionalSupport::Get();
- if( data.numberOfParagraphs != bidirectionalInfo.Count() )
+ if(data.numberOfParagraphs != bidirectionalInfo.Count())
{
// Different number of expected bidirectional paragraphs.
std::cout << " Different number of bidi paragraphs : " << bidirectionalInfo.Count() << ", expected : " << data.numberOfParagraphs << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.numberOfParagraphs; ++index )
+ for(unsigned int index = 0u; index < data.numberOfParagraphs; ++index)
{
const BidirectionalParagraphInfoRun& run = bidirectionalInfo[index];
- const CharacterDirection direction = bidirectionalSupport.GetParagraphDirection( run.bidirectionalInfoIndex );
- if( direction != data.directions[index] )
+ const CharacterDirection direction = bidirectionalSupport.GetParagraphDirection(run.bidirectionalInfoIndex);
+ if(direction != data.directions[index])
{
std::cout << " Different direction" << std::endl;
std::cout << " paragraph : " << index << std::endl;
return false;
}
- if( run.characterRun.characterIndex != data.indices[index] )
+ if(run.characterRun.characterIndex != data.indices[index])
{
std::cout << " Different index" << std::endl;
std::cout << " paragraph : " << index << std::endl;
std::cout << " expected, index : " << data.indices[index] << ", num chars : " << data.numberOfParagraphCharacters[index] << ", direction : " << data.directions[index] << std::endl;
return false;
}
- if( run.characterRun.numberOfCharacters != data.numberOfParagraphCharacters[index] )
+ if(run.characterRun.numberOfCharacters != data.numberOfParagraphCharacters[index])
{
std::cout << " Different number of characters" << std::endl;
std::cout << " paragraph : " << index << std::endl;
return true;
}
-bool GetMirroredTextTest( const GetMirroredTextData& data )
+bool GetMirroredTextTest(const GetMirroredTextData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
// Create the model.
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Call the GetMirroredText() function for the whole text
Vector<Character> mirroredText;
- bool mirrored = false;
- mirrored = GetMirroredText( logicalModel->mText,
- logicalModel->mCharacterDirections,
- logicalModel->mBidirectionalParagraphInfo,
- 0u,
- logicalModel->mText.Count(),
- mirroredText );
+ bool mirrored = false;
+ mirrored = GetMirroredText(logicalModel->mText,
+ logicalModel->mCharacterDirections,
+ logicalModel->mBidirectionalParagraphInfo,
+ 0u,
+ logicalModel->mText.Count(),
+ mirroredText);
// 3) Call the GetMirroredText() function for the given index + number of characters
- mirrored = GetMirroredText( logicalModel->mText,
- logicalModel->mCharacterDirections,
- logicalModel->mBidirectionalParagraphInfo,
- data.startIndex,
- data.numberOfCharacters,
- mirroredText );
+ mirrored = GetMirroredText(logicalModel->mText,
+ logicalModel->mCharacterDirections,
+ logicalModel->mBidirectionalParagraphInfo,
+ data.startIndex,
+ data.numberOfCharacters,
+ mirroredText);
// 4) Compare the results.
// Convert to utf8
std::string mirroredString;
- Utf32ToUtf8( mirroredText.Begin(),
- mirroredText.Count(),
- mirroredString );
+ Utf32ToUtf8(mirroredText.Begin(),
+ mirroredText.Count(),
+ mirroredString);
- if( !mirrored && ( mirroredString != data.text ) )
+ if(!mirrored && (mirroredString != data.text))
{
std::cout << " No mirrored text and mirroredString != data.text." << std::endl;
std::cout << " mirrored string : [" << mirroredString << "]" << std::endl;
return false;
}
- if( mirrored && ( mirroredString == data.text ) )
+ if(mirrored && (mirroredString == data.text))
{
std::cout << " Mirrored text and mirroredString == data.text." << std::endl;
std::cout << " mirrored string : [" << mirroredString << "]" << std::endl;
return false;
}
- if( mirrored && ( mirroredString != data.mirroredText ) )
+ if(mirrored && (mirroredString != data.mirroredText))
{
std::cout << " Mirrored text and mirroredString != data.mirroredText." << std::endl;
std::cout << " mirrored string : [" << mirroredString << "]" << std::endl;
return true;
}
-bool GetCharactersDirectionTest( const GetCharactersDirectionData& data )
+bool GetCharactersDirectionTest(const GetCharactersDirectionData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
// Create the model.
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- data.markupProcessorEnabled,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ data.markupProcessorEnabled,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
Vector<BidirectionalParagraphInfoRun>& bidirectionalInfo = logicalModel->mBidirectionalParagraphInfo;
// 2) Clear the direction info data.
Vector<CharacterDirection>& directions = logicalModel->mCharacterDirections;
- if( directions.Count() >= data.startIndex + data.numberOfCharacters )
+ if(directions.Count() >= data.startIndex + data.numberOfCharacters)
{
- directions.Erase( directions.Begin() + data.startIndex,
- directions.Begin() + data.startIndex + data.numberOfCharacters );
+ directions.Erase(directions.Begin() + data.startIndex,
+ directions.Begin() + data.startIndex + data.numberOfCharacters);
}
// 3) Call GetCharactersDirection() function.
- GetCharactersDirection( bidirectionalInfo,
- logicalModel->mText.Count(),
- data.startIndex,
- data.numberOfCharacters,
- directions );
+ GetCharactersDirection(bidirectionalInfo,
+ logicalModel->mText.Count(),
+ data.startIndex,
+ data.numberOfCharacters,
+ directions);
- for( unsigned int index = 0u; index < logicalModel->mText.Count(); ++index )
+ for(unsigned int index = 0u; index < logicalModel->mText.Count(); ++index)
{
- if( data.directions[index] != directions[index] )
+ if(data.directions[index] != directions[index])
{
return false;
}
{
tet_infoline(" UtcDaliSetBidirectionalInfo");
- unsigned int indices01[] = {};
+ unsigned int indices01[] = {};
unsigned int numberOfCharacters01[] = {};
- bool direction01[] = {};
- unsigned int indices02[] = {};
+ bool direction01[] = {};
+ unsigned int indices02[] = {};
unsigned int numberOfCharacters02[] = {};
- bool direction02[] = {};
- unsigned int indices03[] = { 17u, 48u };
- unsigned int numberOfCharacters03[] = { 14u, 14u };
- bool direction03[] = { true, true };
- unsigned int indices04[] = { 17u, 31u, 79u };
- unsigned int numberOfCharacters04[] = { 14u, 48u, 31u };
- bool direction04[] = { true, false, true };
- unsigned int indices05[] = { 17u, 41u, 117u };
- unsigned int numberOfCharacters05[] = { 24u, 76u, 49u };
- bool direction05[] = { true, false, true };
- unsigned int indices06[] = { 17u, 48u };
- unsigned int numberOfCharacters06[] = { 14u, 14u };
- bool direction06[] = { true, true };
- unsigned int indices07[] = { 17u, 31u, 79u };
- unsigned int numberOfCharacters07[] = { 14u, 48u, 31u };
- bool direction07[] = { true, false, true };
- unsigned int indices08[] = { 17u, 41u, 117u };
- unsigned int numberOfCharacters08[] = { 24u, 76u, 49u };
- bool direction08[] = { true, false, true };
+ bool direction02[] = {};
+ unsigned int indices03[] = {17u, 48u};
+ unsigned int numberOfCharacters03[] = {14u, 14u};
+ bool direction03[] = {true, true};
+ unsigned int indices04[] = {17u, 31u, 79u};
+ unsigned int numberOfCharacters04[] = {14u, 48u, 31u};
+ bool direction04[] = {true, false, true};
+ unsigned int indices05[] = {17u, 41u, 117u};
+ unsigned int numberOfCharacters05[] = {24u, 76u, 49u};
+ bool direction05[] = {true, false, true};
+ unsigned int indices06[] = {17u, 48u};
+ unsigned int numberOfCharacters06[] = {14u, 14u};
+ bool direction06[] = {true, true};
+ unsigned int indices07[] = {17u, 31u, 79u};
+ unsigned int numberOfCharacters07[] = {14u, 48u, 31u};
+ bool direction07[] = {true, false, true};
+ unsigned int indices08[] = {17u, 41u, 117u};
+ unsigned int numberOfCharacters08[] = {24u, 76u, 49u};
+ bool direction08[] = {true, false, true};
struct SetBidirectionalInfoData data[] =
- {
{
- "Zero characters",
- "",
- 0u,
- 0u,
- 0u,
- indices01,
- numberOfCharacters01,
- direction01
- },
- {
- "Some left to right paragraphs",
- "Hello world\ndemo\n\n",
- 0u,
- 18u,
- 0u,
- indices02,
- numberOfCharacters02,
- direction02
- },
- {
- "A mix of left to right and right to left paragraphs.",
- "Hello world demo\nمرحبا بالعالم\nhello world demo\nمرحبا بالعالم\nhello world demo",
- 0u,
- 78u,
- 2u,
- indices03,
- numberOfCharacters03,
- direction03
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text.",
- "Hello world demo\nمرحبا بالعالم\nhello world demo مرحبا بالعالم hello world demo\nمرحبا hello world demo بالعالم\nhello world demo",
- 0u,
- 126u,
- 3u,
- indices04,
- numberOfCharacters04,
- direction04
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts.",
- "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
- 0u,
- 182u,
- 3u,
- indices05,
- numberOfCharacters05,
- direction05
- },
- {
- "A mix of left to right and right to left paragraphs. Updates a left to right paragraph.",
- "Hello world demo\nمرحبا بالعالم\nhello world demo\nمرحبا بالعالم\nhello world demo",
- 31u,
- 17u,
- 2u,
- indices06,
- numberOfCharacters06,
- direction06
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text.",
- "Hello world demo\nمرحبا بالعالم\nhello world demo مرحبا بالعالم hello world demo\nمرحبا hello world demo بالعالم\nhello world demo",
- 0u,
- 126u,
- 3u,
- indices07,
- numberOfCharacters07,
- direction07
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates initial paragraphs.",
- "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
- 0u,
- 41u,
- 3u,
- indices08,
- numberOfCharacters08,
- direction08
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates mid paragraphs.",
- "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
- 41u,
- 76u,
- 3u,
- indices08,
- numberOfCharacters08,
- direction08
- },
- {
- "A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates from character 85",
- "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
- 117u,
- 65u,
- 3u,
- indices08,
- numberOfCharacters08,
- direction08
- },
- };
+ {"Zero characters",
+ "",
+ 0u,
+ 0u,
+ 0u,
+ indices01,
+ numberOfCharacters01,
+ direction01},
+
+ {"Some left to right paragraphs",
+ "Hello world\ndemo\n\n",
+ 0u,
+ 18u,
+ 0u,
+ indices02,
+ numberOfCharacters02,
+ direction02},
+
+ {"A mix of left to right and right to left paragraphs.",
+ "Hello world demo\nمرحبا بالعالم\nhello world demo\nمرحبا بالعالم\nhello world demo",
+ 0u,
+ 78u,
+ 2u,
+ indices03,
+ numberOfCharacters03,
+ direction03},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text.",
+ "Hello world demo\nمرحبا بالعالم\nhello world demo مرحبا بالعالم hello world demo\nمرحبا hello world demo بالعالم\nhello world demo",
+ 0u,
+ 126u,
+ 3u,
+ indices04,
+ numberOfCharacters04,
+ direction04},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts.",
+ "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
+ 0u,
+ 182u,
+ 3u,
+ indices05,
+ numberOfCharacters05,
+ direction05},
+
+ {"A mix of left to right and right to left paragraphs. Updates a left to right paragraph.",
+ "Hello world demo\nمرحبا بالعالم\nhello world demo\nمرحبا بالعالم\nhello world demo",
+ 31u,
+ 17u,
+ 2u,
+ indices06,
+ numberOfCharacters06,
+ direction06},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text.",
+ "Hello world demo\nمرحبا بالعالم\nhello world demo مرحبا بالعالم hello world demo\nمرحبا hello world demo بالعالم\nhello world demo",
+ 0u,
+ 126u,
+ 3u,
+ indices07,
+ numberOfCharacters07,
+ direction07},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates initial paragraphs.",
+ "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
+ 0u,
+ 41u,
+ 3u,
+ indices08,
+ numberOfCharacters08,
+ direction08},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates mid paragraphs.",
+ "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
+ 41u,
+ 76u,
+ 3u,
+ indices08,
+ numberOfCharacters08,
+ direction08},
+
+ {"A mix of left to right and right to left paragraphs. Paragraphs also contain a mix of bidirectional text and a mix of right to left scripts. Updates from character 85",
+ "Hello world demo\nمرحبا שלום עולם بالعالم\nhello world שלום بالعالم עולם demo مرحبا שלום עולם بالعالم hello world demo\nمرحبا hello שלום بالعالم עולם world demo بالعالم\nhello world demo",
+ 117u,
+ 65u,
+ 3u,
+ indices08,
+ numberOfCharacters08,
+ direction08},
+ };
const unsigned int numberOfTests = 10u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !SetBidirectionalInfoTest( data[index] ) )
+ if(!SetBidirectionalInfoTest(data[index]))
{
tet_result(TET_FAIL);
}
tet_infoline(" UtcDaliGetMirroredText");
struct GetMirroredTextData data[] =
- {
{
- "Zero characters.",
- "",
- 0u,
- 0u,
- ""
- },
- {
- "Left to right characters only.",
- "Hello world\nhello world demo.",
- 0u,
- 29u,
- "Hello world\nhello world demo."
- },
- {
- "Right to left characters but with no characters to mirror.",
- "שלום עולם\nمرحبا بالعالم",
- 0u,
- 23u,
- "שלום עולם\nمرحبا بالعالم"
- },
- {
- "Right to left characters with some characters to mirror.",
- "שלום עולם\n(مرحبا بالعالم)",
- 0u,
- 25u,
- "שלום עולם\n)مرحبا بالعالم("
- },
- {
- "Right to left characters with some characters to mirror. Update last paragraph.",
- "שלום עולם\n(مرحبا بالعالم)",
- 10u,
- 15u,
- "שלום עולם\n)مرحبا بالعالم("
- },
- {
- "Mix of bidirectional text. With more paragraphs.",
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
- 0u,
- 239u,
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום( עולם\nשלום مرحبا بالعالم עולם )hello( مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום )hello) world demo )עולם(\nשלום )مرحبا بالعالم עולם( )hello("
- },
- {
- "Mix of bidirectional text. With more paragraphs. Update middle paragraphs.",
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
- 29u,
- 38u,
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום( עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)"
- },
- {
- "Mix of bidirectional text. With more paragraphs. Update middle paragraphs (2).",
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
- 67u,
- 100u,
- "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם )hello( مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)"
- },
- };
+ {"Zero characters.",
+ "",
+ 0u,
+ 0u,
+ ""},
+
+ {"Left to right characters only.",
+ "Hello world\nhello world demo.",
+ 0u,
+ 29u,
+ "Hello world\nhello world demo."},
+
+ {"Right to left characters but with no characters to mirror.",
+ "שלום עולם\nمرحبا بالعالم",
+ 0u,
+ 23u,
+ "שלום עולם\nمرحبا بالعالم"},
+
+ {"Right to left characters with some characters to mirror.",
+ "שלום עולם\n(مرحبا بالعالم)",
+ 0u,
+ 25u,
+ "שלום עולם\n)مرحبا بالعالم("},
+
+ {"Right to left characters with some characters to mirror. Update last paragraph.",
+ "שלום עולם\n(مرحبا بالعالم)",
+ 10u,
+ 15u,
+ "שלום עולם\n)مرحبا بالعالم("},
+
+ {"Mix of bidirectional text. With more paragraphs.",
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
+ 0u,
+ 239u,
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום( עולם\nשלום مرحبا بالعالم עולם )hello( مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום )hello) world demo )עולם(\nשלום )مرحبا بالعالم עולם( )hello("},
+
+ {"Mix of bidirectional text. With more paragraphs. Update middle paragraphs.",
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
+ 29u,
+ 38u,
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום( עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)"},
+
+ {"Mix of bidirectional text. With more paragraphs. Update middle paragraphs (2).",
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם (hello) مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)",
+ 67u,
+ 100u,
+ "Hello world demo\nhello world\nhello world (مرحبا بالعالم שלום) עולם\nשלום مرحبا بالعالم עולם )hello( مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום (hello) world demo (עולם)\nשלום (مرحبا بالعالم עולם) (hello)"},
+ };
const unsigned int numberOfTests = 8u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetMirroredTextTest( data[index] ) )
+ if(!GetMirroredTextTest(data[index]))
{
tet_result(TET_FAIL);
}
bool directions01[] = {};
bool directions02[] = {
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false };
+ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
bool directions03[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true };
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true};
bool directions04[] = {
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, true, true, true, true, true, true,
- true, true, true, false, true, true, true, true, true, true,
- true, true, true, true, false, false, false, false, false, false,
- false, false, false, false, false };
+ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false};
bool directions05[] = {
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, false, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, false,
- false, false, false, false, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, false,
- false, false, false, false, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, false, false, false, false,
- false, false, false, false, false, false, false, false, false, false,
- false, false, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, false, false, false, false, false };
-
- bool directions06[] = {
- true, true, true, true, true, true, true, true, true, true,
- false, false, false, false, false, false, false, false, false, false,
- false, false, false, false, false, false };
+ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false};
+
+ bool directions06[] = {
+ true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
struct GetCharactersDirectionData data[] =
- {
- {
- "Zero characters",
- "",
- 0u,
- 0u,
- directions01,
- false
- },
{
- "Left to right characters only",
- "Hello world\nhello world demo",
- 0u,
- 28u,
- directions02,
- false
- },
- {
- "Right to left characters only",
- "שלום עולם\nשלום עולם",
- 0u,
- 19u,
- directions03,
- false
- },
- {
- "Mix of bidirectional text",
- "Hello world\nhello world שלום עולם\nשלום עולם hello world",
- 0u,
- 55u,
- directions04,
- false
- },
- {
- "Mix of bidirectional text. With more paragraphs.",
- "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
- 0u,
- 227u,
- directions05,
- false
- },
- {
- "Mix of bidirectional text. With more paragraphs. Update first paragraph.",
- "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
- 0u,
- 17u,
- directions05,
- false
- },
- {
- "Mix of bidirectional text. With more paragraphs. Update from character 29",
- "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
- 29u,
- 134u,
- directions05,
- false
- },
- {
- "Mix of bidirectional text. With more paragraphs. Update from character 163",
- "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
- " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
- 163u,
- 35u,
- directions05,
- false
- },
- {
- "Mix of bidirectional text. With brackets and LRM",
- "שלום עולם ‎(hello)[world]‎",
- 0u,
- 26u,
- directions06,
- true
- }
- };
+ {"Zero characters",
+ "",
+ 0u,
+ 0u,
+ directions01,
+ false},
+
+ {"Left to right characters only",
+ "Hello world\nhello world demo",
+ 0u,
+ 28u,
+ directions02,
+ false},
+
+ {"Right to left characters only",
+ "שלום עולם\nשלום עולם",
+ 0u,
+ 19u,
+ directions03,
+ false},
+
+ {"Mix of bidirectional text",
+ "Hello world\nhello world שלום עולם\nשלום עולם hello world",
+ 0u,
+ 55u,
+ directions04,
+ false},
+
+ {"Mix of bidirectional text. With more paragraphs.",
+ "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
+ 0u,
+ 227u,
+ directions05,
+ false},
+
+ {"Mix of bidirectional text. With more paragraphs. Update first paragraph.",
+ "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
+ 0u,
+ 17u,
+ directions05,
+ false},
+
+ {"Mix of bidirectional text. With more paragraphs. Update from character 29",
+ "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
+ 29u,
+ 134u,
+ directions05,
+ false},
+
+ {"Mix of bidirectional text. With more paragraphs. Update from character 163",
+ "Hello world demo\nhello world\nhello world مرحبا بالعالم שלום עולם\nשלום مرحبا بالعالم עולם hello مرحبا بالعالم world"
+ " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello",
+ 163u,
+ 35u,
+ directions05,
+ false},
+
+ {"Mix of bidirectional text. With brackets and LRM",
+ "שלום עולם ‎(hello)[world]‎",
+ 0u,
+ 26u,
+ directions06,
+ true}};
+
const unsigned int numberOfTests = 9u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetCharactersDirectionTest( data[index] ) )
+ if(!GetCharactersDirectionTest(data[index]))
{
tet_result(TET_FAIL);
}
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
#include <unistd.h>
+#include <iostream>
#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/internal/text/text-run-container.h>
#include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/internal/text/text-run-container.h>
#include <toolkit-text-utils.h>
-
using namespace Dali;
using namespace Toolkit;
using namespace Text;
namespace
{
-const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
struct CreateParagraphData
{
struct GetLogicalCharacterIndexData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- Size textArea; ///< The text area.
- unsigned int numberOfIndices; ///< The number of characters to set.
- unsigned int* visualToLogical; ///< The expected visual to logical conversion table.
- unsigned int* cachedBidiLine; ///< The cached bidi line index for each character.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ Size textArea; ///< The text area.
+ unsigned int numberOfIndices; ///< The number of characters to set.
+ unsigned int* visualToLogical; ///< The expected visual to logical conversion table.
+ unsigned int* cachedBidiLine; ///< The cached bidi line index for each character.
};
struct GetLogicalCursorIndexData
unsigned int* cachedBidiLine; ///< The cached bidi line index for each character.
};
-bool CreateParagraphTest( const CreateParagraphData& data )
+bool CreateParagraphTest(const CreateParagraphData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Clear the paragraphs.
Vector<ParagraphRun>& paragraphs = logicalModel->mParagraphInfo;
- ClearCharacterRuns( data.index,
- data.index + data.numberOfCharacters - 1u,
- paragraphs );
+ ClearCharacterRuns(data.index,
+ data.index + data.numberOfCharacters - 1u,
+ paragraphs);
// 3) Call the LogicalModel::CreateParagraphInfo() method
- logicalModel->CreateParagraphInfo( data.index,
- data.numberOfCharacters );
+ logicalModel->CreateParagraphInfo(data.index,
+ data.numberOfCharacters);
// 4) Compare the results.
- if( data.numberOfParagraphs != paragraphs.Count() )
+ if(data.numberOfParagraphs != paragraphs.Count())
{
std::cout << " Different number of paragraphs : " << paragraphs.Count() << ", expected : " << data.numberOfParagraphs << std::endl;
return false;
}
unsigned int index = 0u;
- for( Vector<ParagraphRun>::ConstIterator it = paragraphs.Begin(),
- endIt = paragraphs.End();
- it != endIt;
- ++it, ++index )
+ for(Vector<ParagraphRun>::ConstIterator it = paragraphs.Begin(),
+ endIt = paragraphs.End();
+ it != endIt;
+ ++it, ++index)
{
- const ParagraphRun& paragraph( *it );
+ const ParagraphRun& paragraph(*it);
- if( data.indices[index] != paragraph.characterRun.characterIndex )
+ if(data.indices[index] != paragraph.characterRun.characterIndex)
{
std::cout << " Different character index for paragraph : " << index << ", " << paragraph.characterRun.characterIndex << ", expected : " << data.indices[index] << std::endl;
return false;
}
- if( data.numberOfCharactersPerParagraph[index] != paragraph.characterRun.numberOfCharacters )
+ if(data.numberOfCharactersPerParagraph[index] != paragraph.characterRun.numberOfCharacters)
{
std::cout << " Different number of characters for paragraph : " << index << ", " << paragraph.characterRun.numberOfCharacters << ", expected : " << data.numberOfCharactersPerParagraph[index] << std::endl;
return false;
return true;
}
-bool FindParagraphTest( const FindParagraphData& data )
+bool FindParagraphTest(const FindParagraphData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Find the paragraphs.
Vector<ParagraphRunIndex> paragraphs;
- logicalModel->FindParagraphs( data.index, data.numberOfCharacters, paragraphs );
+ logicalModel->FindParagraphs(data.index, data.numberOfCharacters, paragraphs);
// 3) compare the results.
- if( data.numberOfParagraphs != paragraphs.Count() )
+ if(data.numberOfParagraphs != paragraphs.Count())
{
return false;
}
unsigned int index = 0u;
- for( Vector<ParagraphRunIndex>::ConstIterator it = paragraphs.Begin(),
- endIt = paragraphs.End();
- it != endIt;
- ++it, ++index )
+ for(Vector<ParagraphRunIndex>::ConstIterator it = paragraphs.Begin(),
+ endIt = paragraphs.End();
+ it != endIt;
+ ++it, ++index)
{
const ParagraphRunIndex paragraphIndex = *it;
- if( paragraphIndex != data.paragraphs[index] )
+ if(paragraphIndex != data.paragraphs[index])
{
return false;
}
return true;
}
-bool FetchBidirectionalLineInfoTest( const FetchBidirectionalLineInfoData& data )
+bool FetchBidirectionalLineInfoTest(const FetchBidirectionalLineInfoData& data)
{
std::cout << " testing : " << data.description << std::endl;
// Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea( 100.f, 300.f );
- Size layoutSize;
+ Size textArea(100.f, 300.f);
+ Size layoutSize;
// Create the model with the whole text.
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
- const bool fetched = logicalModel->FetchBidirectionalLineInfo( data.characterIndex[index] );
+ const bool fetched = logicalModel->FetchBidirectionalLineInfo(data.characterIndex[index]);
- if( fetched != data.fetched[index] )
+ if(fetched != data.fetched[index])
{
std::cout << " Different fetched result : " << fetched << ", expected : " << data.fetched[index] << std::endl;
return false;
}
- if( fetched )
+ if(fetched)
{
- if( logicalModel->mBidirectionalLineIndex != data.bidiLineIndex[index] )
+ if(logicalModel->mBidirectionalLineIndex != data.bidiLineIndex[index])
{
std::cout << " Different bidi line index : " << logicalModel->mBidirectionalLineIndex << ", expected : " << data.bidiLineIndex << std::endl;
return false;
return true;
}
-bool GetLogicalCharacterIndexTest( const GetLogicalCharacterIndexData& data )
+bool GetLogicalCharacterIndexTest(const GetLogicalCharacterIndexData& data)
{
std::cout << " testing : " << data.description << std::endl;
// Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size layoutSize;
+ Size layoutSize;
// Create the model with the whole text.
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- data.textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0u; index < data.numberOfIndices; ++index )
+ for(unsigned int index = 0u; index < data.numberOfIndices; ++index)
{
// Check the current cached bidi line index. (Check it before call the GetLogicalCharacterIndex() method )
- if( data.cachedBidiLine[index] != logicalModel->mBidirectionalLineIndex )
+ if(data.cachedBidiLine[index] != logicalModel->mBidirectionalLineIndex)
{
std::cout << " index : " << index << ", different cached bidi index : " << logicalModel->mBidirectionalLineIndex << ", expected : " << data.cachedBidiLine[index] << std::endl;
return false;
}
- const bool fetched = logicalModel->FetchBidirectionalLineInfo( index );
- const Character logicalIndex = fetched ? logicalModel->GetLogicalCharacterIndex( index ) : index;
+ const bool fetched = logicalModel->FetchBidirectionalLineInfo(index);
+ const Character logicalIndex = fetched ? logicalModel->GetLogicalCharacterIndex(index) : index;
- if( data.visualToLogical[index] != logicalIndex )
+ if(data.visualToLogical[index] != logicalIndex)
{
std::cout << " visual index : " << index << ", different logical index : " << logicalIndex << ", expected : " << data.visualToLogical[index] << std::endl;
return false;
return true;
}
-bool GetLogicalCursorIndexTest( const GetLogicalCursorIndexData& data )
+bool GetLogicalCursorIndexTest(const GetLogicalCursorIndexData& data)
{
- tet_printf( " testing : %s\n", data.description.c_str() );
+ tet_printf(" testing : %s\n", data.description.c_str());
// Load some fonts.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 96u, 96u );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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 + "/tizen/TizenSansHebrewRegular.ttf" );
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf");
// Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size layoutSize;
+ Size layoutSize;
// Create the model with the whole text.
Vector<FontDescriptionRun> fontDescriptionRuns;
- if( 0u != data.numberOfFonts )
+ if(0u != data.numberOfFonts)
{
- fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
- data.fontDescriptions,
- data.fontDescriptions + data.numberOfFonts );
+ fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
+ data.fontDescriptions,
+ data.fontDescriptions + data.numberOfFonts);
}
const LayoutOptions options;
- CreateTextModel( data.text,
- data.textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0u; index < data.numberOfIndices; ++index )
+ for(unsigned int index = 0u; index < data.numberOfIndices; ++index)
{
- const bool fetched = logicalModel->FetchBidirectionalLineInfo( data.characterIndex[index] );
- tet_printf(" fetched %d, line index %d, expected line index %d\n", fetched, logicalModel->mBidirectionalLineIndex, data.cachedBidiLine[index] );
+ const bool fetched = logicalModel->FetchBidirectionalLineInfo(data.characterIndex[index]);
+ tet_printf(" fetched %d, line index %d, expected line index %d\n", fetched, logicalModel->mBidirectionalLineIndex, data.cachedBidiLine[index]);
- if( logicalModel->mBidirectionalLineIndex != data.cachedBidiLine[index] )
+ if(logicalModel->mBidirectionalLineIndex != data.cachedBidiLine[index])
{
- tet_printf( " test : %d, different cached line index : %d, expected : %d\n", index, logicalModel->mBidirectionalLineIndex, data.cachedBidiLine[index] );
+ tet_printf(" test : %d, different cached line index : %d, expected : %d\n", index, logicalModel->mBidirectionalLineIndex, data.cachedBidiLine[index]);
return false;
}
const CharacterIndex visualCharacterIndex = data.visualCursorIndex[index];
- const CharacterIndex logicalCursorIndex = fetched ? logicalModel->GetLogicalCursorIndex( visualCharacterIndex ) : visualCharacterIndex;
+ const CharacterIndex logicalCursorIndex = fetched ? logicalModel->GetLogicalCursorIndex(visualCharacterIndex) : visualCharacterIndex;
tet_printf(" visual index %d, logical index %d\n", visualCharacterIndex, logicalCursorIndex);
- if( logicalCursorIndex != data.logicalCursorIndex[index] )
+ if(logicalCursorIndex != data.logicalCursorIndex[index])
{
- tet_printf( " test : %d, visual index : %d, different logical cursor index :%d, expected : %d\n", index, visualCharacterIndex, logicalCursorIndex, data.logicalCursorIndex[index] );
+ tet_printf(" test : %d, visual index : %d, different logical cursor index :%d, expected : %d\n", index, visualCharacterIndex, logicalCursorIndex, data.logicalCursorIndex[index]);
return false;
}
}
{
tet_infoline(" UtcDaliCreateParagraph");
- unsigned int paragraphsIndices01[] = { 0u };
- unsigned int paragraphsNumberOfCharacters01[] = { 0u };
- unsigned int paragraphsIndices02[] = { 0u, 12u, 17u };
- unsigned int paragraphsNumberOfCharacters02[] = { 12u, 5u, 1u };
- unsigned int paragraphsIndices03[] = { 0u, 12u, 17u, 34u };
- unsigned int paragraphsNumberOfCharacters03[] = { 12u, 5u, 17u ,1u };
+ unsigned int paragraphsIndices01[] = {0u};
+ unsigned int paragraphsNumberOfCharacters01[] = {0u};
+ unsigned int paragraphsIndices02[] = {0u, 12u, 17u};
+ unsigned int paragraphsNumberOfCharacters02[] = {12u, 5u, 1u};
+ unsigned int paragraphsIndices03[] = {0u, 12u, 17u, 34u};
+ unsigned int paragraphsNumberOfCharacters03[] = {12u, 5u, 17u, 1u};
struct CreateParagraphData data[] =
- {
- {
- "Zero characters",
- "",
- 0u,
- 0u,
- 0u,
- paragraphsIndices01,
- paragraphsNumberOfCharacters01,
- },
{
- "Some paragraphs",
- "Hello world\ndemo\n\n",
- 0u,
- 18u,
- 3u,
- paragraphsIndices02,
- paragraphsNumberOfCharacters02,
- },
- {
- "Some paragraphs. Update the initial paragraphs.",
- "Hello world\ndemo\nhello world demo\n\n",
- 0u,
- 17u,
- 4u,
- paragraphsIndices03,
- paragraphsNumberOfCharacters03,
- },
- {
- "Some paragraphs. Update the mid paragraphs.",
- "Hello world\ndemo\nhello world demo\n\n",
- 12u,
- 5u,
- 4u,
- paragraphsIndices03,
- paragraphsNumberOfCharacters03,
- },
- {
- "Some paragraphs. Update the final paragraphs.",
- "Hello world\ndemo\nhello world demo\n\n",
- 17u,
- 18u,
- 4u,
- paragraphsIndices03,
- paragraphsNumberOfCharacters03,
- },
- };
+ {
+ "Zero characters",
+ "",
+ 0u,
+ 0u,
+ 0u,
+ paragraphsIndices01,
+ paragraphsNumberOfCharacters01,
+ },
+ {
+ "Some paragraphs",
+ "Hello world\ndemo\n\n",
+ 0u,
+ 18u,
+ 3u,
+ paragraphsIndices02,
+ paragraphsNumberOfCharacters02,
+ },
+ {
+ "Some paragraphs. Update the initial paragraphs.",
+ "Hello world\ndemo\nhello world demo\n\n",
+ 0u,
+ 17u,
+ 4u,
+ paragraphsIndices03,
+ paragraphsNumberOfCharacters03,
+ },
+ {
+ "Some paragraphs. Update the mid paragraphs.",
+ "Hello world\ndemo\nhello world demo\n\n",
+ 12u,
+ 5u,
+ 4u,
+ paragraphsIndices03,
+ paragraphsNumberOfCharacters03,
+ },
+ {
+ "Some paragraphs. Update the final paragraphs.",
+ "Hello world\ndemo\nhello world demo\n\n",
+ 17u,
+ 18u,
+ 4u,
+ paragraphsIndices03,
+ paragraphsNumberOfCharacters03,
+ },
+ };
const unsigned int numberOfTests = 5u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !CreateParagraphTest( data[index] ) )
+ if(!CreateParagraphTest(data[index]))
{
tet_result(TET_FAIL);
}
tet_infoline(" UtcDaliFindParagraph");
unsigned int paragraphs01[] = {};
- unsigned int paragraphs02[] = { 0u, 1u, 2u };
- unsigned int paragraphs03[] = { 0u };
- unsigned int paragraphs04[] = { 1u };
- unsigned int paragraphs05[] = { 0u, 1u, 2u };
+ unsigned int paragraphs02[] = {0u, 1u, 2u};
+ unsigned int paragraphs03[] = {0u};
+ unsigned int paragraphs04[] = {1u};
+ unsigned int paragraphs05[] = {0u, 1u, 2u};
struct FindParagraphData data[] =
- {
- {
- "Zero characters",
- "",
- 0u,
- 100u,
- 0u,
- paragraphs01,
- },
- {
- "Some paragraphs",
- "Hello world\ndemo\n\n",
- 0u,
- 18u,
- 3u,
- paragraphs02
- },
{
- "Some paragraphs",
- "Hello world\ndemo\n\n",
- 0u,
- 12u,
- 1u,
- paragraphs03
- },
- {
- "Some paragraphs",
- "Hello world\ndemo\n\n",
- 12u,
- 5u,
- 1u,
- paragraphs04
- },
- {
- "Some paragraphs",
- "Hello world\ndemo\n\n",
- 3u,
- 15u,
- 3u,
- paragraphs05
- },
- };
+ {
+ "Zero characters",
+ "",
+ 0u,
+ 100u,
+ 0u,
+ paragraphs01,
+ },
+ {"Some paragraphs",
+ "Hello world\ndemo\n\n",
+ 0u,
+ 18u,
+ 3u,
+ paragraphs02},
+ {"Some paragraphs",
+ "Hello world\ndemo\n\n",
+ 0u,
+ 12u,
+ 1u,
+ paragraphs03},
+ {"Some paragraphs",
+ "Hello world\ndemo\n\n",
+ 12u,
+ 5u,
+ 1u,
+ paragraphs04},
+ {"Some paragraphs",
+ "Hello world\ndemo\n\n",
+ 3u,
+ 15u,
+ 3u,
+ paragraphs05},
+ };
const unsigned int numberOfTests = 5u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !FindParagraphTest( data[index] ) )
+ if(!FindParagraphTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliFetchBidirectionalLineInfo");
- unsigned int logicalIndex01[] = { 0u };
- bool fetched01[] = { false };
- unsigned int bidiLine01[] = { 0u };
+ unsigned int logicalIndex01[] = {0u};
+ bool fetched01[] = {false};
+ unsigned int bidiLine01[] = {0u};
- unsigned int logicalIndex02[] = { 3u };
- bool fetched02[] = { false };
- unsigned int bidiLine02[] = { 0u };
+ unsigned int logicalIndex02[] = {3u};
+ bool fetched02[] = {false};
+ unsigned int bidiLine02[] = {0u};
- unsigned int logicalIndex03[] = { 0u, 11u, 12u, 21u, 22u, 33u, 34u, 43u, 44u, 54u};
- bool fetched03[] = { false, false, true, true, false, false, true, true, false, false };
- unsigned int bidiLine03[] = { 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 0u, 0u };
+ unsigned int logicalIndex03[] = {0u, 11u, 12u, 21u, 22u, 33u, 34u, 43u, 44u, 54u};
+ bool fetched03[] = {false, false, true, true, false, false, true, true, false, false};
+ unsigned int bidiLine03[] = {0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 0u, 0u};
struct FetchBidirectionalLineInfoData data[] =
- {
- {
- "Void text",
- "",
- 1u,
- logicalIndex01,
- fetched01,
- bidiLine01
- },
{
- "LTR text",
- "Hello world",
- 1u,
- logicalIndex02,
- fetched02,
- bidiLine02
- },
- {
- "Bidi text",
- "Hello world\nשלום עולם\nhello world\nשלום עולם\nhello world",
- 10u,
- logicalIndex03,
- fetched03,
- bidiLine03
- }
- };
+ {"Void text",
+ "",
+ 1u,
+ logicalIndex01,
+ fetched01,
+ bidiLine01},
+ {"LTR text",
+ "Hello world",
+ 1u,
+ logicalIndex02,
+ fetched02,
+ bidiLine02},
+ {"Bidi text",
+ "Hello world\nשלום עולם\nhello world\nשלום עולם\nhello world",
+ 10u,
+ logicalIndex03,
+ fetched03,
+ bidiLine03}};
const unsigned int numberOfTests = 3u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !FetchBidirectionalLineInfoTest( data[index] ) )
+ if(!FetchBidirectionalLineInfoTest(data[index]))
{
tet_result(TET_FAIL);
}
tet_infoline(" UtcDaliSetVisualToLogicalMap");
unsigned int visualToLogical01[] = {};
- unsigned int cachedBidiLine01[] = {};
- unsigned int visualToLogical02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
- unsigned int cachedBidiLine02[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u };
- unsigned int visualToLogical03[] = { 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u };
- unsigned int cachedBidiLine03[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u };
-
- unsigned int visualToLogical04[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u };
- unsigned int cachedBidiLine04[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u };
-
-// size 300, 300
-// LO H e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d \n
-// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
-// VO H e l l o _ w o r l d , _ م ل ا ع ل ا ب _ ا ب ح ر م , _ h e l l o _ w o r l d \n
-// 0 1 2 3 4 5 6 7 8 9 10 11 12 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27 28 29 30 31 32 33 34 35 36 37 38 39
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م _ , h e l l o _ w o r l d _ , م ل ا ع ل ا ب _ ا ب ح ر م
-// 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 55 56 57 58 59 60 61 62 63 64 65 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 82 83 84 85 86 87 88 89 90 91 92 93 94 95
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م
-// 95 94 93 92 91 90 89 88 87 86 85 84 83 82
-
-
-// LO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
-// VO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
-
- unsigned int visualToLogical05[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u };
- unsigned int cachedBidiLine05[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u };
-
-// size 300, 300
-// LO H e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م , _
-// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
-// VO H e l l o _ w o r l d , _ م ل ا ع ل ا ب _ ا ب ح ر م , _
-// 0 1 2 3 4 5 6 7 8 9 10 11 12 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27
-
-// LO h e l l o _ w o r l d \n
-// 28 29 30 31 32 33 34 35 36 37 38 39
-// VO h e l l o _ w o r l d \n
-// 28 29 30 31 32 33 34 35 36 37 38 39
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d , _
-// 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
-// VO _ , h e l l o _ w o r l d _ , م ل ا ع ل ا ب _ ا ب ح ر م
-// 67 66 55 56 57 58 59 60 61 62 63 64 65 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 68 69 70 71 72 73 74 75 76 77 78 79 80 81
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م
-// 81 80 79 78 77 76 75 74 73 72 71 70 69 68
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 82 83 84 85 86 87 88 89 90 91 92 93 94 95
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م
-// 95 94 93 92 91 90 89 88 87 86 85 84 83 82
-
-
-// LO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
-// VO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
-
- unsigned int visualToLogical06[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u };
- unsigned int cachedBidiLine06[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u,
- 2u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u,
- 3u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u,
- 4u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u,
- 5u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u,
- 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u };
-
-// size 100, 600
-// LO H e l l o _ w o r l d , _
-// 0 1 2 3 4 5 6 7 8 9 10 11 12
-// VO H e l l o _ w o r l d , _
-// 0 1 2 3 4 5 6 7 8 9 10 11 12
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م , _
-// 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
-// VO م ل ا ع ل ا ب _ ا ب ح ر م , _
-// 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27
-
-// LO h e l l o _ w o r l d \n
-// 28 29 30 31 32 33 34 35 36 37 38 39
-// VO h e l l o _ w o r l d \n
-// 28 29 30 31 32 33 34 35 36 37 38 39
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م , _
-// 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
-// VO _ , م ل ا ع ل ا ب _ ا ب ح ر م
-// 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
-
-// LO h e l l o _ w o r l d , _
-// 55 56 57 58 59 60 61 62 63 64 65 66 67
-// VO _ , h e l l o _ w o r l d
-// 67 66 55 56 57 58 59 60 61 62 63 64 65
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 68 69 70 71 72 73 74 75 76 77 78 79 80 81
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م
-// 81 80 79 78 77 76 75 74 73 72 71 70 69 68
-
-// LO م ر ح ب ا _ ب ا ل ع ا ل م \n
-// 82 83 84 85 86 87 88 89 90 91 92 93 94 95
-// VO \n م ل ا ع ل ا ب _ ا ب ح ر م
-// 95 94 93 92 91 90 89 88 87 86 85 84 83 82
-
-
-// LO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
-// VO h e l l o _ w o r l d
-// 96 97 98 99 100 101 102 103 104 105 106
+ unsigned int cachedBidiLine01[] = {};
+ unsigned int visualToLogical02[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u};
+ unsigned int cachedBidiLine02[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
+ unsigned int visualToLogical03[] = {12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u};
+ unsigned int cachedBidiLine03[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
+
+ unsigned int visualToLogical04[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u};
+ unsigned int cachedBidiLine04[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u};
+
+ // size 300, 300
+ // LO H e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d \n
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
+ // VO H e l l o _ w o r l d , _ م ل ا ع ل ا ب _ ا ب ح ر م , _ h e l l o _ w o r l d \n
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27 28 29 30 31 32 33 34 35 36 37 38 39
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م _ , h e l l o _ w o r l d _ , م ل ا ع ل ا ب _ ا ب ح ر م
+ // 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 55 56 57 58 59 60 61 62 63 64 65 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 82 83 84 85 86 87 88 89 90 91 92 93 94 95
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م
+ // 95 94 93 92 91 90 89 88 87 86 85 84 83 82
+
+ // LO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
+ // VO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
+
+ unsigned int visualToLogical05[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u};
+ unsigned int cachedBidiLine05[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u};
+
+ // size 300, 300
+ // LO H e l l o _ w o r l d , _ م ر ح ب ا _ ب ا ل ع ا ل م , _
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+ // VO H e l l o _ w o r l d , _ م ل ا ع ل ا ب _ ا ب ح ر م , _
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27
+
+ // LO h e l l o _ w o r l d \n
+ // 28 29 30 31 32 33 34 35 36 37 38 39
+ // VO h e l l o _ w o r l d \n
+ // 28 29 30 31 32 33 34 35 36 37 38 39
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م , _ h e l l o _ w o r l d , _
+ // 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
+ // VO _ , h e l l o _ w o r l d _ , م ل ا ع ل ا ب _ ا ب ح ر م
+ // 67 66 55 56 57 58 59 60 61 62 63 64 65 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 68 69 70 71 72 73 74 75 76 77 78 79 80 81
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م
+ // 81 80 79 78 77 76 75 74 73 72 71 70 69 68
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 82 83 84 85 86 87 88 89 90 91 92 93 94 95
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م
+ // 95 94 93 92 91 90 89 88 87 86 85 84 83 82
+
+ // LO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
+ // VO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
+
+ unsigned int visualToLogical06[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 25u, 24u, 23u, 22u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u, 43u, 42u, 41u, 40u, 67u, 66u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 81u, 80u, 79u, 78u, 77u, 76u, 75u, 74u, 73u, 72u, 71u, 70u, 69u, 68u, 95u, 94u, 93u, 92u, 91u, 90u, 89u, 88u, 87u, 86u, 85u, 84u, 83u, 82u, 96u, 97u, 98u, 99u, 100u, 101u, 102u, 103u, 104u, 105u, 106u};
+ unsigned int cachedBidiLine06[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u};
+
+ // size 100, 600
+ // LO H e l l o _ w o r l d , _
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+ // VO H e l l o _ w o r l d , _
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م , _
+ // 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+ // VO م ل ا ع ل ا ب _ ا ب ح ر م , _
+ // 25 24 23 22 21 20 19 18 17 16 15 14 13 26 27
+
+ // LO h e l l o _ w o r l d \n
+ // 28 29 30 31 32 33 34 35 36 37 38 39
+ // VO h e l l o _ w o r l d \n
+ // 28 29 30 31 32 33 34 35 36 37 38 39
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م , _
+ // 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
+ // VO _ , م ل ا ع ل ا ب _ ا ب ح ر م
+ // 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
+
+ // LO h e l l o _ w o r l d , _
+ // 55 56 57 58 59 60 61 62 63 64 65 66 67
+ // VO _ , h e l l o _ w o r l d
+ // 67 66 55 56 57 58 59 60 61 62 63 64 65
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 68 69 70 71 72 73 74 75 76 77 78 79 80 81
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م
+ // 81 80 79 78 77 76 75 74 73 72 71 70 69 68
+
+ // LO م ر ح ب ا _ ب ا ل ع ا ل م \n
+ // 82 83 84 85 86 87 88 89 90 91 92 93 94 95
+ // VO \n م ل ا ع ل ا ب _ ا ب ح ر م
+ // 95 94 93 92 91 90 89 88 87 86 85 84 83 82
+
+ // LO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
+ // VO h e l l o _ w o r l d
+ // 96 97 98 99 100 101 102 103 104 105 106
struct GetLogicalCharacterIndexData data[] =
- {
- {
- "Zero characters text",
- "",
- Size( 300.f, 300.f ),
- 0u,
- visualToLogical01,
- cachedBidiLine01
- },
- {
- "Left to right text only",
- "Hello world",
- Size( 300.f, 300.f ),
- 11u,
- visualToLogical02,
- cachedBidiLine02
- },
{
- "Right to left text only",
- "مرحبا بالعالم",
- Size( 300.f, 300.f ),
- 13u,
- visualToLogical03,
- cachedBidiLine03
- },
- {
- "Mix of left to right and right to left text.",
- "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
- Size( 300.f, 300.f ),
- 107u,
- visualToLogical04,
- cachedBidiLine04
- },
- {
- "Mix of left to right and right to left text.",
- "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
- Size( 200.f, 400.f ),
- 107u,
- visualToLogical05,
- cachedBidiLine05
- },
- {
- "Mix of left to right and right to left text.",
- "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
- Size( 100.f, 600.f ),
- 107u,
- visualToLogical06,
- cachedBidiLine06
- },
- };
+ {"Zero characters text",
+ "",
+ Size(300.f, 300.f),
+ 0u,
+ visualToLogical01,
+ cachedBidiLine01},
+ {"Left to right text only",
+ "Hello world",
+ Size(300.f, 300.f),
+ 11u,
+ visualToLogical02,
+ cachedBidiLine02},
+ {"Right to left text only",
+ "مرحبا بالعالم",
+ Size(300.f, 300.f),
+ 13u,
+ visualToLogical03,
+ cachedBidiLine03},
+ {"Mix of left to right and right to left text.",
+ "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
+ Size(300.f, 300.f),
+ 107u,
+ visualToLogical04,
+ cachedBidiLine04},
+ {"Mix of left to right and right to left text.",
+ "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
+ Size(200.f, 400.f),
+ 107u,
+ visualToLogical05,
+ cachedBidiLine05},
+ {"Mix of left to right and right to left text.",
+ "Hello world, مرحبا بالعالم, hello world\nمرحبا بالعالم, hello world, مرحبا بالعالم\nمرحبا بالعالم\nhello world",
+ Size(100.f, 600.f),
+ 107u,
+ visualToLogical06,
+ cachedBidiLine06},
+ };
const unsigned int numberOfTests = 6u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetLogicalCharacterIndexTest( data[index] ) )
+ if(!GetLogicalCharacterIndexTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliGetLogicalCursorIndex");
- const std::string fontFamily( "TizenSans" );
- const std::string fontFamilyHebrew( "TizenSansHebrew" );
+ const std::string fontFamily("TizenSans");
+ const std::string fontFamilyHebrew("TizenSansHebrew");
-
-
- unsigned int visualIndex01[] = { 10u };
- unsigned int characterIndex01[] = { 0u };
- unsigned int logicalIndex01[] = { 10u };
- unsigned int bidirectionalLineIndex01[] = { 0u };
+ unsigned int visualIndex01[] = {10u};
+ unsigned int characterIndex01[] = {0u};
+ unsigned int logicalIndex01[] = {10u};
+ unsigned int bidirectionalLineIndex01[] = {0u};
// 0 11
// Hello world \n
// Set a known font description
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 0u;
+ fontDescriptionRun02.characterRun.characterIndex = 0u;
fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
- fontDescriptionRun02.familyLength = fontFamily.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontFamily.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns02;
- fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
+ fontDescriptionRuns02.PushBack(fontDescriptionRun02);
- unsigned int visualIndex02[] = { 0u, 16u, 11u, 12u };
- unsigned int characterIndex02[] = { 0u, 0u, 0u, 0u };
- unsigned int logicalIndex02[] = { 0u, 16u, 11u, 12u };
- unsigned int bidirectionalLineIndex02[] = { 0u, 0u, 0u, 0u };
+ unsigned int visualIndex02[] = {0u, 16u, 11u, 12u};
+ unsigned int characterIndex02[] = {0u, 0u, 0u, 0u};
+ unsigned int logicalIndex02[] = {0u, 16u, 11u, 12u};
+ unsigned int bidirectionalLineIndex02[] = {0u, 0u, 0u, 0u};
-// LO H e l l o _ w o r l d \n
-// 0 1 2 3 4 5 6 7 8 9 10 11 12
-// VO H e l l o _ w o r l d \n
+ // LO H e l l o _ w o r l d \n
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+ // VO H e l l o _ w o r l d \n
-// LO ש ל ו ם _ ע ו ל ם \n
-// 12 13 14 15 16 17 18 19 20 21 22
-// VO \n ם ל ו ע _ ם ו ל ש
+ // LO ש ל ו ם _ ע ו ל ם \n
+ // 12 13 14 15 16 17 18 19 20 21 22
+ // VO \n ם ל ו ע _ ם ו ל ש
-// LO h e l l o _ w o r l d _ ש ל ו ם _ ע ו ל ם \n
-// 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
-// VO h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש \n
-
-// LO ש ל ו ם _ ע ו ל ם _ h e l l o _ w o r l d \n
-// 44 45 46 47 48 49 50 51 52 52 54 55 56 57 58 59 60 61 62 63 64 65 66
-// VO \n h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש
+ // LO h e l l o _ w o r l d _ ש ל ו ם _ ע ו ל ם \n
+ // 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
+ // VO h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש \n
+ // LO ש ל ו ם _ ע ו ל ם _ h e l l o _ w o r l d \n
+ // 44 45 46 47 48 49 50 51 52 52 54 55 56 57 58 59 60 61 62 63 64 65 66
+ // VO \n h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש
// Set a known font description
FontDescriptionRun fontDescriptionRun0301;
- fontDescriptionRun0301.characterRun.characterIndex = 0u;
+ fontDescriptionRun0301.characterRun.characterIndex = 0u;
fontDescriptionRun0301.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun0301.familyLength = fontFamily.size();
- fontDescriptionRun0301.familyName = new char[fontDescriptionRun0301.familyLength];
- memcpy( fontDescriptionRun0301.familyName, fontFamily.c_str(), fontDescriptionRun0301.familyLength );
+ fontDescriptionRun0301.familyLength = fontFamily.size();
+ fontDescriptionRun0301.familyName = new char[fontDescriptionRun0301.familyLength];
+ memcpy(fontDescriptionRun0301.familyName, fontFamily.c_str(), fontDescriptionRun0301.familyLength);
fontDescriptionRun0301.familyDefined = true;
fontDescriptionRun0301.weightDefined = false;
- fontDescriptionRun0301.widthDefined = false;
- fontDescriptionRun0301.slantDefined = false;
- fontDescriptionRun0301.sizeDefined = false;
+ fontDescriptionRun0301.widthDefined = false;
+ fontDescriptionRun0301.slantDefined = false;
+ fontDescriptionRun0301.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun0302;
- fontDescriptionRun0302.characterRun.characterIndex = 12u;
+ fontDescriptionRun0302.characterRun.characterIndex = 12u;
fontDescriptionRun0302.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun0302.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0302.familyName = new char[fontDescriptionRun0302.familyLength];
- memcpy( fontDescriptionRun0302.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0302.familyLength );
+ fontDescriptionRun0302.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0302.familyName = new char[fontDescriptionRun0302.familyLength];
+ memcpy(fontDescriptionRun0302.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0302.familyLength);
fontDescriptionRun0302.familyDefined = true;
fontDescriptionRun0302.weightDefined = false;
- fontDescriptionRun0302.widthDefined = false;
- fontDescriptionRun0302.slantDefined = false;
- fontDescriptionRun0302.sizeDefined = false;
+ fontDescriptionRun0302.widthDefined = false;
+ fontDescriptionRun0302.slantDefined = false;
+ fontDescriptionRun0302.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun0303;
- fontDescriptionRun0303.characterRun.characterIndex = 22u;
+ fontDescriptionRun0303.characterRun.characterIndex = 22u;
fontDescriptionRun0303.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun0303.familyLength = fontFamily.size();
- fontDescriptionRun0303.familyName = new char[fontDescriptionRun0303.familyLength];
- memcpy( fontDescriptionRun0303.familyName, fontFamily.c_str(), fontDescriptionRun0303.familyLength );
+ fontDescriptionRun0303.familyLength = fontFamily.size();
+ fontDescriptionRun0303.familyName = new char[fontDescriptionRun0303.familyLength];
+ memcpy(fontDescriptionRun0303.familyName, fontFamily.c_str(), fontDescriptionRun0303.familyLength);
fontDescriptionRun0303.familyDefined = true;
fontDescriptionRun0303.weightDefined = false;
- fontDescriptionRun0303.widthDefined = false;
- fontDescriptionRun0303.slantDefined = false;
- fontDescriptionRun0303.sizeDefined = false;
+ fontDescriptionRun0303.widthDefined = false;
+ fontDescriptionRun0303.slantDefined = false;
+ fontDescriptionRun0303.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun0304;
- fontDescriptionRun0304.characterRun.characterIndex = 34u;
+ fontDescriptionRun0304.characterRun.characterIndex = 34u;
fontDescriptionRun0304.characterRun.numberOfCharacters = 20u;
- fontDescriptionRun0304.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0304.familyName = new char[fontDescriptionRun0304.familyLength];
- memcpy( fontDescriptionRun0304.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0304.familyLength );
+ fontDescriptionRun0304.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0304.familyName = new char[fontDescriptionRun0304.familyLength];
+ memcpy(fontDescriptionRun0304.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0304.familyLength);
fontDescriptionRun0304.familyDefined = true;
fontDescriptionRun0304.weightDefined = false;
- fontDescriptionRun0304.widthDefined = false;
- fontDescriptionRun0304.slantDefined = false;
- fontDescriptionRun0304.sizeDefined = false;
+ fontDescriptionRun0304.widthDefined = false;
+ fontDescriptionRun0304.slantDefined = false;
+ fontDescriptionRun0304.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun0305;
- fontDescriptionRun0305.characterRun.characterIndex = 54u;
+ fontDescriptionRun0305.characterRun.characterIndex = 54u;
fontDescriptionRun0305.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun0305.familyLength = fontFamily.size();
- fontDescriptionRun0305.familyName = new char[fontDescriptionRun0305.familyLength];
- memcpy( fontDescriptionRun0305.familyName, fontFamily.c_str(), fontDescriptionRun0305.familyLength );
+ fontDescriptionRun0305.familyLength = fontFamily.size();
+ fontDescriptionRun0305.familyName = new char[fontDescriptionRun0305.familyLength];
+ memcpy(fontDescriptionRun0305.familyName, fontFamily.c_str(), fontDescriptionRun0305.familyLength);
fontDescriptionRun0305.familyDefined = true;
fontDescriptionRun0305.weightDefined = false;
- fontDescriptionRun0305.widthDefined = false;
- fontDescriptionRun0305.slantDefined = false;
- fontDescriptionRun0305.sizeDefined = false;
+ fontDescriptionRun0305.widthDefined = false;
+ fontDescriptionRun0305.slantDefined = false;
+ fontDescriptionRun0305.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns03;
- fontDescriptionRuns03.PushBack( fontDescriptionRun0301 );
- fontDescriptionRuns03.PushBack( fontDescriptionRun0302 );
- fontDescriptionRuns03.PushBack( fontDescriptionRun0303 );
- fontDescriptionRuns03.PushBack( fontDescriptionRun0304 );
- fontDescriptionRuns03.PushBack( fontDescriptionRun0305 );
-
- unsigned int visualIndex03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u,
- 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 22u,
- 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 43u,
- 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 66u };
+ fontDescriptionRuns03.PushBack(fontDescriptionRun0301);
+ fontDescriptionRuns03.PushBack(fontDescriptionRun0302);
+ fontDescriptionRuns03.PushBack(fontDescriptionRun0303);
+ fontDescriptionRuns03.PushBack(fontDescriptionRun0304);
+ fontDescriptionRuns03.PushBack(fontDescriptionRun0305);
- unsigned int characterIndex03[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u,
- 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u,
- 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u};
+ unsigned int visualIndex03[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 43u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 66u};
- unsigned int logicalIndex03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u,
- 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 12u,
- 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 42u, 41u, 40u, 39u, 38u, 37u, 36u, 35u, 43u,
- 65u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u };
+ unsigned int characterIndex03[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 12u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u};
- unsigned int bidirectionalLineIndex03[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u };
+ unsigned int logicalIndex03[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 21u, 20u, 19u, 18u, 17u, 16u, 15u, 14u, 13u, 12u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 42u, 41u, 40u, 39u, 38u, 37u, 36u, 35u, 43u, 65u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 54u, 53u, 52u, 51u, 50u, 49u, 48u, 47u, 46u, 45u, 44u};
+ unsigned int bidirectionalLineIndex03[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u};
-// LO ש ל ו ם _ ע ו ל ם \n
-// 0 1 2 3 4 5 6 7 8 9 10
-// VO \n ם ל ו ע _ ם ו ל ש
+ // LO ש ל ו ם _ ע ו ל ם \n
+ // 0 1 2 3 4 5 6 7 8 9 10
+ // VO \n ם ל ו ע _ ם ו ל ש
-// h e l l o _ w o r l d \n
-// LO 10 11 12 13 14 15 16 17 18 19 20 21 22
-// h e l l o _ w o r l d \n
+ // h e l l o _ w o r l d \n
+ // LO 10 11 12 13 14 15 16 17 18 19 20 21 22
+ // h e l l o _ w o r l d \n
-// ש ל ו ם _ ע ו ל ם _ h e l l o _ w o r l d \n
-// LO 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
-// \n h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש
+ // ש ל ו ם _ ע ו ל ם _ h e l l o _ w o r l d \n
+ // LO 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
+ // \n h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש
-// h e l l o _ w o r l d _ ש ל ו ם _ ע ו ל ם \n
-// LO 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
-// h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש \n
+ // h e l l o _ w o r l d _ ש ל ו ם _ ע ו ל ם \n
+ // LO 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
+ // h e l l o _ w o r l d _ ם ל ו ע _ ם ו ל ש \n
// Set a known font description
FontDescriptionRun fontDescriptionRun0401;
- fontDescriptionRun0401.characterRun.characterIndex = 0u;
+ fontDescriptionRun0401.characterRun.characterIndex = 0u;
fontDescriptionRun0401.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun0401.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0401.familyName = new char[fontDescriptionRun0401.familyLength];
- memcpy( fontDescriptionRun0401.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0401.familyLength );
+ fontDescriptionRun0401.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0401.familyName = new char[fontDescriptionRun0401.familyLength];
+ memcpy(fontDescriptionRun0401.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0401.familyLength);
fontDescriptionRun0401.familyDefined = true;
fontDescriptionRun0401.weightDefined = false;
- fontDescriptionRun0401.widthDefined = false;
- fontDescriptionRun0401.slantDefined = false;
- fontDescriptionRun0401.sizeDefined = false;
+ fontDescriptionRun0401.widthDefined = false;
+ fontDescriptionRun0401.slantDefined = false;
+ fontDescriptionRun0401.sizeDefined = false;
FontDescriptionRun fontDescriptionRun0402;
- fontDescriptionRun0402.characterRun.characterIndex = 10u;
+ fontDescriptionRun0402.characterRun.characterIndex = 10u;
fontDescriptionRun0402.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun0402.familyLength = fontFamily.size();
- fontDescriptionRun0402.familyName = new char[fontDescriptionRun0402.familyLength];
- memcpy( fontDescriptionRun0402.familyName, fontFamily.c_str(), fontDescriptionRun0402.familyLength );
+ fontDescriptionRun0402.familyLength = fontFamily.size();
+ fontDescriptionRun0402.familyName = new char[fontDescriptionRun0402.familyLength];
+ memcpy(fontDescriptionRun0402.familyName, fontFamily.c_str(), fontDescriptionRun0402.familyLength);
fontDescriptionRun0402.familyDefined = true;
fontDescriptionRun0402.weightDefined = false;
- fontDescriptionRun0402.widthDefined = false;
- fontDescriptionRun0402.slantDefined = false;
- fontDescriptionRun0402.sizeDefined = false;
+ fontDescriptionRun0402.widthDefined = false;
+ fontDescriptionRun0402.slantDefined = false;
+ fontDescriptionRun0402.sizeDefined = false;
FontDescriptionRun fontDescriptionRun0403;
- fontDescriptionRun0403.characterRun.characterIndex = 22u;
+ fontDescriptionRun0403.characterRun.characterIndex = 22u;
fontDescriptionRun0403.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun0403.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0403.familyName = new char[fontDescriptionRun0403.familyLength];
- memcpy( fontDescriptionRun0403.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0403.familyLength );
+ fontDescriptionRun0403.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0403.familyName = new char[fontDescriptionRun0403.familyLength];
+ memcpy(fontDescriptionRun0403.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0403.familyLength);
fontDescriptionRun0403.familyDefined = true;
fontDescriptionRun0403.weightDefined = false;
- fontDescriptionRun0403.widthDefined = false;
- fontDescriptionRun0403.slantDefined = false;
- fontDescriptionRun0403.sizeDefined = false;
+ fontDescriptionRun0403.widthDefined = false;
+ fontDescriptionRun0403.slantDefined = false;
+ fontDescriptionRun0403.sizeDefined = false;
FontDescriptionRun fontDescriptionRun0404;
- fontDescriptionRun0404.characterRun.characterIndex = 32u;
+ fontDescriptionRun0404.characterRun.characterIndex = 32u;
fontDescriptionRun0404.characterRun.numberOfCharacters = 24u;
- fontDescriptionRun0404.familyLength = fontFamily.size();
- fontDescriptionRun0404.familyName = new char[fontDescriptionRun0404.familyLength];
- memcpy( fontDescriptionRun0404.familyName, fontFamily.c_str(), fontDescriptionRun0404.familyLength );
+ fontDescriptionRun0404.familyLength = fontFamily.size();
+ fontDescriptionRun0404.familyName = new char[fontDescriptionRun0404.familyLength];
+ memcpy(fontDescriptionRun0404.familyName, fontFamily.c_str(), fontDescriptionRun0404.familyLength);
fontDescriptionRun0404.familyDefined = true;
fontDescriptionRun0404.weightDefined = false;
- fontDescriptionRun0404.widthDefined = false;
- fontDescriptionRun0404.slantDefined = false;
- fontDescriptionRun0404.sizeDefined = false;
+ fontDescriptionRun0404.widthDefined = false;
+ fontDescriptionRun0404.slantDefined = false;
+ fontDescriptionRun0404.sizeDefined = false;
FontDescriptionRun fontDescriptionRun0405;
- fontDescriptionRun0405.characterRun.characterIndex = 56u;
+ fontDescriptionRun0405.characterRun.characterIndex = 56u;
fontDescriptionRun0405.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun0405.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0405.familyName = new char[fontDescriptionRun0405.familyLength];
- memcpy( fontDescriptionRun0405.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0405.familyLength );
+ fontDescriptionRun0405.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0405.familyName = new char[fontDescriptionRun0405.familyLength];
+ memcpy(fontDescriptionRun0405.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0405.familyLength);
fontDescriptionRun0405.familyDefined = true;
fontDescriptionRun0405.weightDefined = false;
- fontDescriptionRun0405.widthDefined = false;
- fontDescriptionRun0405.slantDefined = false;
- fontDescriptionRun0405.sizeDefined = false;
+ fontDescriptionRun0405.widthDefined = false;
+ fontDescriptionRun0405.slantDefined = false;
+ fontDescriptionRun0405.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns04;
- fontDescriptionRuns04.PushBack( fontDescriptionRun0401 );
- fontDescriptionRuns04.PushBack( fontDescriptionRun0402 );
- fontDescriptionRuns04.PushBack( fontDescriptionRun0403 );
- fontDescriptionRuns04.PushBack( fontDescriptionRun0404 );
- fontDescriptionRuns04.PushBack( fontDescriptionRun0405 );
-
- unsigned int visualIndex04[] = { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u,
- 10u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u,
- 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 43u, 44u,
- 44u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u };
-
- unsigned int characterIndex04[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u,
- 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u,
- 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u };
-
- unsigned int logicalIndex04[] = { 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u,
- 10u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u,
- 43u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 32u, 31u, 30u, 29u, 28u, 27u, 26u, 25u, 24u, 23u, 22u,
- 44u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 64u, 63u, 62u, 61u, 60u, 59u, 58u, 57u, 65u };
-
- unsigned int bidirectionalLineIndex04[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u };
-
-// LO A B C D E F G H I J K
-// 0 1 2 3 4 5 6 7 8 9 10 11
-// LO L M N
-// 11 12 13 14
+ fontDescriptionRuns04.PushBack(fontDescriptionRun0401);
+ fontDescriptionRuns04.PushBack(fontDescriptionRun0402);
+ fontDescriptionRuns04.PushBack(fontDescriptionRun0403);
+ fontDescriptionRuns04.PushBack(fontDescriptionRun0404);
+ fontDescriptionRuns04.PushBack(fontDescriptionRun0405);
+
+ unsigned int visualIndex04[] = {1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 10u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 43u, 44u, 44u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u};
+
+ unsigned int characterIndex04[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 22u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u, 44u};
+
+ unsigned int logicalIndex04[] = {9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u, 10u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 43u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 40u, 41u, 42u, 32u, 31u, 30u, 29u, 28u, 27u, 26u, 25u, 24u, 23u, 22u, 44u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 64u, 63u, 62u, 61u, 60u, 59u, 58u, 57u, 65u};
+
+ unsigned int bidirectionalLineIndex04[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u};
+
+ // LO A B C D E F G H I J K
+ // 0 1 2 3 4 5 6 7 8 9 10 11
+ // LO L M N
+ // 11 12 13 14
// Set a known font description
FontDescriptionRun fontDescriptionRun0501;
- fontDescriptionRun0501.characterRun.characterIndex = 0u;
+ fontDescriptionRun0501.characterRun.characterIndex = 0u;
fontDescriptionRun0501.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun0501.familyLength = fontFamily.size();
- fontDescriptionRun0501.familyName = new char[fontDescriptionRun0501.familyLength];
- memcpy( fontDescriptionRun0501.familyName, fontFamily.c_str(), fontDescriptionRun0501.familyLength );
+ fontDescriptionRun0501.familyLength = fontFamily.size();
+ fontDescriptionRun0501.familyName = new char[fontDescriptionRun0501.familyLength];
+ memcpy(fontDescriptionRun0501.familyName, fontFamily.c_str(), fontDescriptionRun0501.familyLength);
fontDescriptionRun0501.familyDefined = true;
fontDescriptionRun0501.weightDefined = false;
- fontDescriptionRun0501.widthDefined = false;
- fontDescriptionRun0501.slantDefined = false;
- fontDescriptionRun0501.sizeDefined = false;
+ fontDescriptionRun0501.widthDefined = false;
+ fontDescriptionRun0501.slantDefined = false;
+ fontDescriptionRun0501.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns05;
- fontDescriptionRuns05.PushBack( fontDescriptionRun0501 );
-
- unsigned int visualIndex05[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u,
- 11u, 12u, 13u, 14u };
+ fontDescriptionRuns05.PushBack(fontDescriptionRun0501);
- unsigned int characterIndex05[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 11u, 11u, 11u, 11u };
+ unsigned int visualIndex05[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u};
- unsigned int logicalIndex05[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u,
- 11u, 12u, 13u, 14u };
+ unsigned int characterIndex05[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 11u, 11u, 11u, 11u};
- unsigned int bidirectionalLineIndex05[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 0u, 0u, 0u, 0u };
+ unsigned int logicalIndex05[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u};
-// LO ק ר א ט ו ן ם פ ש ד ג כ
-// 0 1 2 3 4 5 6 7 8 9 10 11 12
-// VO כ ג ד ש פ ם ן ו ט א ר ק
+ unsigned int bidirectionalLineIndex05[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
-// LO ע י ח ל
-// 12 13 14 15 16
-// VO ל ח י ע
+ // LO ק ר א ט ו ן ם פ ש ד ג כ
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12
+ // VO כ ג ד ש פ ם ן ו ט א ר ק
+ // LO ע י ח ל
+ // 12 13 14 15 16
+ // VO ל ח י ע
// Set a known font description
FontDescriptionRun fontDescriptionRun0601;
- fontDescriptionRun0601.characterRun.characterIndex = 0u;
+ fontDescriptionRun0601.characterRun.characterIndex = 0u;
fontDescriptionRun0601.characterRun.numberOfCharacters = 16u;
- fontDescriptionRun0601.familyLength = fontFamilyHebrew.size();
- fontDescriptionRun0601.familyName = new char[fontDescriptionRun0601.familyLength];
- memcpy( fontDescriptionRun0601.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0601.familyLength );
+ fontDescriptionRun0601.familyLength = fontFamilyHebrew.size();
+ fontDescriptionRun0601.familyName = new char[fontDescriptionRun0601.familyLength];
+ memcpy(fontDescriptionRun0601.familyName, fontFamilyHebrew.c_str(), fontDescriptionRun0601.familyLength);
fontDescriptionRun0601.familyDefined = true;
fontDescriptionRun0601.weightDefined = false;
- fontDescriptionRun0601.widthDefined = false;
- fontDescriptionRun0601.slantDefined = false;
- fontDescriptionRun0601.sizeDefined = false;
+ fontDescriptionRun0601.widthDefined = false;
+ fontDescriptionRun0601.slantDefined = false;
+ fontDescriptionRun0601.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns06;
- fontDescriptionRuns06.PushBack( fontDescriptionRun0601 );
-
- unsigned int visualIndex06[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u,
- 12u, 13u, 14u, 15u, 16u };
-
- unsigned int characterIndex06[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 12u, 12u, 12u, 12u, 12u };
-
- unsigned int logicalIndex06[] = { 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u,
- 16u, 15u, 14u, 13u, 12u };
-
- unsigned int bidirectionalLineIndex06[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
- 1u, 1u, 1u, 1u, 1u, };
+ fontDescriptionRuns06.PushBack(fontDescriptionRun0601);
+
+ unsigned int visualIndex06[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 12u, 13u, 14u, 15u, 16u};
+
+ unsigned int characterIndex06[] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 12u, 12u, 12u, 12u, 12u};
+
+ unsigned int logicalIndex06[] = {12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u, 16u, 15u, 14u, 13u, 12u};
+
+ unsigned int bidirectionalLineIndex06[] = {
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 0u,
+ 1u,
+ 1u,
+ 1u,
+ 1u,
+ 1u,
+ };
struct GetLogicalCursorIndexData data[] =
- {
- {
- "Zero characters text",
- "",
- Size( 300.f, 300.f ),
- 0u,
- nullptr,
- 1u,
- visualIndex01,
- characterIndex01,
- logicalIndex01,
- bidirectionalLineIndex01,
- },
- {
- "All left to right text 01.",
- "Hello world\ndemo",
- Size( 300.f, 300.f ),
- 1u,
- fontDescriptionRuns02.Begin(),
- 4u,
- visualIndex02,
- characterIndex02,
- logicalIndex02,
- bidirectionalLineIndex02,
- },
- {
- "bidirectional text 01.",
- "Hello world\nשלום עולם\nhello world שלום עולם\nשלום עולם hello world\n",
- Size( 300.f, 300.f ),
- 5u,
- fontDescriptionRuns03.Begin(),
- 65u,
- visualIndex03,
- characterIndex03,
- logicalIndex03,
- bidirectionalLineIndex03,
- },
- {
- "bidirectional text 02.",
- "שלום עולם\nhello world\nשלום עולם hello world\nhello world שלום עולם\n",
- Size( 300.f, 300.f ),
- 5u,
- fontDescriptionRuns04.Begin(),
- 65u,
- visualIndex04,
- characterIndex04,
- logicalIndex04,
- bidirectionalLineIndex04,
- },
{
- "long line 01.",
- "ABCDEFGHIJKLMN",
- Size( 100.f, 300.f ),
- 1u,
- fontDescriptionRuns05.Begin(),
- 13u,
- visualIndex05,
- characterIndex05,
- logicalIndex05,
- bidirectionalLineIndex05,
- },
- {
- "bidirectional text 03.",
- "קראטוןםפשדגכעיחל",
- Size( 100.f, 300.f ),
- 1u,
- fontDescriptionRuns06.Begin(),
- 18u,
- visualIndex06,
- characterIndex06,
- logicalIndex06,
- bidirectionalLineIndex06,
- },
- };
+ {
+ "Zero characters text",
+ "",
+ Size(300.f, 300.f),
+ 0u,
+ nullptr,
+ 1u,
+ visualIndex01,
+ characterIndex01,
+ logicalIndex01,
+ bidirectionalLineIndex01,
+ },
+ {
+ "All left to right text 01.",
+ "Hello world\ndemo",
+ Size(300.f, 300.f),
+ 1u,
+ fontDescriptionRuns02.Begin(),
+ 4u,
+ visualIndex02,
+ characterIndex02,
+ logicalIndex02,
+ bidirectionalLineIndex02,
+ },
+ {
+ "bidirectional text 01.",
+ "Hello world\nשלום עולם\nhello world שלום עולם\nשלום עולם hello world\n",
+ Size(300.f, 300.f),
+ 5u,
+ fontDescriptionRuns03.Begin(),
+ 65u,
+ visualIndex03,
+ characterIndex03,
+ logicalIndex03,
+ bidirectionalLineIndex03,
+ },
+ {
+ "bidirectional text 02.",
+ "שלום עולם\nhello world\nשלום עולם hello world\nhello world שלום עולם\n",
+ Size(300.f, 300.f),
+ 5u,
+ fontDescriptionRuns04.Begin(),
+ 65u,
+ visualIndex04,
+ characterIndex04,
+ logicalIndex04,
+ bidirectionalLineIndex04,
+ },
+ {
+ "long line 01.",
+ "ABCDEFGHIJKLMN",
+ Size(100.f, 300.f),
+ 1u,
+ fontDescriptionRuns05.Begin(),
+ 13u,
+ visualIndex05,
+ characterIndex05,
+ logicalIndex05,
+ bidirectionalLineIndex05,
+ },
+ {
+ "bidirectional text 03.",
+ "קראטוןםפשדגכעיחל",
+ Size(100.f, 300.f),
+ 1u,
+ fontDescriptionRuns06.Begin(),
+ 18u,
+ visualIndex06,
+ characterIndex06,
+ logicalIndex06,
+ bidirectionalLineIndex06,
+ },
+ };
const unsigned int numberOfTests = 6u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetLogicalCursorIndexTest( data[index] ) )
+ if(!GetLogicalCursorIndexTest(data[index]))
{
tet_printf("Test %d failed : [%s]\n", index, data[index].description.c_str());
tet_result(TET_FAIL);
--- /dev/null
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <iostream>
+
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/internal/text/layouts/layout-engine.h>
+#include <dali-toolkit/internal/text/layouts/layout-parameters.h>
+#include <dali-toolkit/internal/text/text-run-container.h>
+#include <toolkit-text-utils.h>
+
+using namespace Dali;
+using namespace Toolkit;
+using namespace Text;
+
+// Tests the LayoutEngine methods.
+
+//////////////////////////////////////////////////////////
+
+namespace
+{
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
+
+struct LayoutTextData
+{
+ std::string description;
+ std::string text;
+ Size textArea;
+ unsigned int numberOfFonts;
+ FontDescriptionRun* fontDescriptions;
+ Size layoutSize;
+ unsigned int totalNumberOfGlyphs;
+ float* positions;
+ unsigned int numberOfLines;
+ LineRun* lines;
+ Layout::Engine::Type layout;
+ unsigned int startIndex;
+ unsigned int numberOfGlyphs;
+ bool ellipsis : 1;
+ bool updated : 1;
+ float characterSpacing;
+};
+
+void Print(const LineRun& line)
+{
+ std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
+ std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
+ std::cout << " width : " << floor(line.width) << std::endl;
+ std::cout << " ascender : " << line.ascender << std::endl;
+ std::cout << " descender : " << line.descender << std::endl;
+ std::cout << " extraLength : " << line.extraLength << std::endl;
+ std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
+ std::cout << " direction : " << line.direction << std::endl;
+ std::cout << " ellipsis : " << line.ellipsis << std::endl;
+}
+
+bool LayoutTextTest(const LayoutTextData& data)
+{
+ // Load some fonts.
+ 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 + "/tizen/TizenSansHebrewRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf");
+
+ // 1) Create the model.
+ ModelPtr textModel;
+ MetricsPtr metrics;
+ Size layoutSize;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ if(0u != data.numberOfFonts)
+ {
+ fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
+ data.fontDescriptions,
+ data.fontDescriptions + data.numberOfFonts);
+ }
+
+ LayoutOptions options;
+ options.align = false;
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ data.characterSpacing);
+
+ LogicalModelPtr logicalModel = textModel->mLogicalModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
+
+ // 2) Clear the layout.
+ Vector<LineRun>& lines = visualModel->mLines;
+
+ const Length numberOfCharacters = logicalModel->mText.Count();
+ const bool isLastNewParagraph = (0u == numberOfCharacters) ? false : TextAbstraction::IsNewParagraph(*(logicalModel->mText.Begin() + (numberOfCharacters - 1u)));
+ const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
+ const bool removeLastLine = isLastNewParagraph && (lastGlyphIndex + 1u == visualModel->mGlyphs.Count());
+
+ LineIndex startRemoveIndex = 0u;
+
+ if(0u != lines.Count())
+ {
+ startRemoveIndex = lines.Count();
+ LineIndex endRemoveIndex = startRemoveIndex;
+ ClearGlyphRuns(data.startIndex,
+ lastGlyphIndex + (removeLastLine ? 1u : 0u),
+ lines,
+ startRemoveIndex,
+ endRemoveIndex);
+
+ // Update the character runs of the lines.
+ const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
+ const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
+ const CharacterIndex startCharacterIndex = *(glyphsToCharactersBuffer + data.startIndex);
+ const CharacterIndex lastCharacterIndex = *(glyphsToCharactersBuffer + lastGlyphIndex) + *(charactersPerGlyph + lastGlyphIndex) - 1u;
+ ClearCharacterRuns(startCharacterIndex,
+ lastCharacterIndex + (removeLastLine ? 1u : 0u),
+ lines,
+ startRemoveIndex,
+ endRemoveIndex);
+
+ lines.Erase(lines.Begin() + startRemoveIndex,
+ lines.Begin() + endRemoveIndex);
+ }
+
+ Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
+
+ glyphPositions.Erase(glyphPositions.Begin() + data.startIndex,
+ glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs);
+
+ // 3) Layout
+ Layout::Engine engine;
+ engine.SetMetrics(metrics);
+ engine.SetLayout(data.layout);
+
+ textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
+ textModel->mLineWrapMode = LineWrap::WORD;
+ textModel->mIgnoreSpacesAfterText = true;
+ //textModel->mMatchSystemLanguageDirection = false;
+ Layout::Parameters layoutParameters(data.textArea,
+ textModel);
+
+ layoutParameters.isLastNewParagraph = isLastNewParagraph;
+
+ // The initial glyph and the number of glyphs to layout.
+ layoutParameters.startGlyphIndex = data.startIndex;
+ layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
+ layoutParameters.startLineIndex = startRemoveIndex;
+ layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
+
+ layoutSize = Vector2::ZERO;
+
+ bool isAutoScroll = false;
+ const bool updated = engine.LayoutText(layoutParameters,
+ layoutSize,
+ data.ellipsis,
+ isAutoScroll,
+ DevelText::EllipsisPosition::END);
+
+ // 4) Compare the results.
+
+ if(updated != data.updated)
+ {
+ std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
+ return false;
+ }
+
+ if(layoutSize != data.layoutSize)
+ {
+ std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
+ return false;
+ }
+
+ for(unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index)
+ {
+ const Vector2& position = *(glyphPositions.Begin() + index);
+
+ if(fabsf(std::round(position.x) - std::round(*(data.positions + 2u * index))) > Math::MACHINE_EPSILON_1000)
+ {
+ std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *(data.positions + 2u * index) << std::endl;
+ return false;
+ }
+ if(fabsf(position.y - *(data.positions + 2u * index + 1u)) > Math::MACHINE_EPSILON_1000)
+ {
+ std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *(data.positions + 2u * index + 1u) << std::endl;
+ return false;
+ }
+ }
+
+ if(lines.Count() != data.numberOfLines)
+ {
+ std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
+ return false;
+ }
+
+ for(unsigned int index = 0u; index < data.numberOfLines; ++index)
+ {
+ const LineRun& line = *(lines.Begin() + index);
+ const LineRun& expectedLine = *(data.lines + index);
+
+ if(line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+ if(line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(line.characterRun.characterIndex != expectedLine.characterRun.characterIndex)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+ if(line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(fabsf(floor(line.width) - expectedLine.width) > Math::MACHINE_EPSILON_1)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(fabsf(line.ascender - expectedLine.ascender) > Math::MACHINE_EPSILON_1)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(fabsf(line.descender - expectedLine.descender) > Math::MACHINE_EPSILON_1)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(fabsf(line.extraLength - expectedLine.extraLength) > Math::MACHINE_EPSILON_1)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ if(line.ellipsis != expectedLine.ellipsis)
+ {
+ std::cout << " Different line info for line : " << index << std::endl;
+ Print(line);
+ std::cout << " expected" << std::endl;
+ Print(expectedLine);
+ return false;
+ }
+
+ // Do not compare the alignment offset as it's not calculated in the layout.
+ // Do not compare the line direction as it's not set in the layout.
+ }
+
+ return true;
+}
+
+////////////////////////////////////////////////////////
+
+} // namespace
+
+//////////////////////////////////////////////////////////
+//
+// UtcDaliTextCharacterSpacingSingleLineTextArea1
+// UtcDaliTextCharacterSpacingSingleLineTextArea2
+// UtcDaliTextCharacterSpacingSingleLineTextArea3
+// UtcDaliTextCharacterSpacingMultilineText1
+// UtcDaliTextCharacterSpacingMultilineText2
+//
+//////////////////////////////////////////////////////////
+
+int UtcDaliTextCharacterSpacingSingleLineTextArea1(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextCharacterSpacingSingleLineTextArea1");
+
+ // Will layout the text in single line as it can be scrolled.
+
+ const std::string fontFamily("TizenSans");
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.numberOfCharacters = 11u;
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
+ fontDescriptionRun.familyDefined = true;
+ fontDescriptionRun.weightDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(1.f, 1.f);
+
+ //******* characterSpacing = 0.0f *******//
+ float positions[] = {
+ 0.f, -12.f, 10.f, -9.f, 19.875f, -13.f, 23.8906f, -13.f, 26.9062f, -9.f, 36.1875f, -0.f, 40.1875f, -9.f, 52.1562f, -9.f, 62.4375f, -9.f, 68.5f, -13.f, 71.5156f, -13.f};
+ Size layoutSize(81.f, 20.f);
+ //************************************//
+
+ struct LineRun line =
+ {
+ {0u, 11u},
+ {0u, 11u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ Vector<LineRun> lines;
+ lines.PushBack(line);
+
+ LayoutTextData data =
+ {
+ "Layout text in a small area",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 11u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 11u,
+ false,
+ true,
+ 0.0f};
+
+ if(!LayoutTextTest(data))
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+int UtcDaliTextCharacterSpacingSingleLineTextArea2(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextCharacterSpacingSingleLineTextArea2");
+
+ // Will layout the text in single line as it can be scrolled.
+
+ const std::string fontFamily("TizenSans");
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.numberOfCharacters = 11u;
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
+ fontDescriptionRun.familyDefined = true;
+ fontDescriptionRun.weightDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(1.f, 1.f);
+
+ //******* characterSpacing = 2.0f *******//
+ float positions[] = {
+ 0.f, -12.f, 12.f, -9.f, 23.875f, -13.f, 29.8906f, -13.f, 34.9062f, -9.f, 46.1875f, -0.f, 52.1875f, -9.f, 66.1562f, -9.f, 78.4375f, -9.f, 86.5f, -13.f, 91.5156f, -13.f};
+ Size layoutSize(101.f, 20.f);
+ //************************************//
+
+ struct LineRun line =
+ {
+ {0u, 11u},
+ {0u, 11u},
+ 101.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ Vector<LineRun> lines;
+ lines.PushBack(line);
+
+ LayoutTextData data =
+ {
+ "Layout text in a small area",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 11u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 11u,
+ false,
+ true,
+ 2.0f};
+
+ if(!LayoutTextTest(data))
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+int UtcDaliTextCharacterSpacingSingleLineTextArea3(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextCharacterSpacingSingleLineTextArea3");
+
+ // Will layout the text in single line as it can be scrolled.
+
+ const std::string fontFamily("TizenSans");
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.numberOfCharacters = 11u;
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
+ fontDescriptionRun.familyDefined = true;
+ fontDescriptionRun.weightDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(1.f, 1.f);
+
+ //******* characterSpacing = 4.0f *******//
+ float positions[] = {
+ 0.f, -12.f, 14.f, -9.f, 27.875f, -13.f, 35.8906f, -13.f, 42.9062f, -9.f, 56.1875f, -0.f, 64.1875f, -9.f, 80.1562f, -9.f, 94.4375f, -9.f, 104.5f, -13.f, 111.5156f, -13.f};
+ Size layoutSize(121.f, 20.f);
+ //************************************//
+
+ struct LineRun line =
+ {
+ {0u, 11u},
+ {0u, 11u},
+ 121.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ Vector<LineRun> lines;
+ lines.PushBack(line);
+
+ LayoutTextData data =
+ {
+ "Layout text in a small area",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 11u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 11u,
+ false,
+ true,
+ 4.0f};
+
+ if(!LayoutTextTest(data))
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+int UtcDaliTextCharacterSpacingMultilineText1(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextCharacterSpacingMultilineText1");
+
+ // Layout some lines of left to right text.
+
+ const std::string fontFamily("TizenSans");
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun1;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
+ fontDescriptionRun1.familyDefined = true;
+ fontDescriptionRun1.weightDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
+
+ FontDescriptionRun fontDescriptionRun2;
+ fontDescriptionRun2.characterRun.characterIndex = 18u;
+ fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
+ fontDescriptionRun2.familyLength = fontFamily.size();
+ fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
+ memcpy(fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength);
+ fontDescriptionRun2.familyDefined = true;
+ fontDescriptionRun2.weightDefined = false;
+ fontDescriptionRun2.widthDefined = false;
+ fontDescriptionRun2.slantDefined = false;
+ fontDescriptionRun2.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
+ fontDescriptionRuns.PushBack(fontDescriptionRun2);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(98.f, 97.f);
+ float positions[] =
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f, 0.f, -12.f, 7.92188f, -9.f, 18.f, -9.f, 27.2031f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f, 0.f, -12.f, 11.1562f, -12.f, 15.f, -12.f, 26.f, -9.f, 36.4844f, -9.f, 42.f, -9.f, 52.5469f, -9.f, 61.6875f, -11.f, 67.9688f, -0.f, 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 18.0469f, -9.f, 27.8906f, -9.f, 36.f, -0.f, 41.3281f, -9.f, 51.125f, -12.f, 57.f, -0.f, 62.f, -11.f, 68.1406f, -9.f, 77.7031f, -9.f, 87.f, -11.f, 94.4531f, -2.f};
+ struct LineRun line0 =
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line1 =
+ {
+ {12u, 6u},
+ {12u, 6u},
+ 44.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line2 =
+ {
+ {18u, 7u},
+ {18u, 7u},
+ 54.f,
+ 15.f,
+ -4.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line3 =
+ {
+ {25u, 9u},
+ {25u, 10u},
+ 68.f,
+ 15.f,
+ -4.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line4 =
+ {
+ {34u, 14u},
+ {35u, 14u},
+ 98.f,
+ 15.f,
+ -4.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ Vector<LineRun> lines;
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
+ lines.PushBack(line3);
+ lines.PushBack(line4);
+
+ LayoutTextData data =
+ {
+ "Layout simple multiline text",
+ "Hello world demo.\n"
+ "Layout different lines of text.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 48u,
+ positions,
+ 5u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 48u,
+ false,
+ true,
+ 0.0f};
+
+ if(!LayoutTextTest(data))
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+int UtcDaliTextCharacterSpacingMultilineText2(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextCharacterSpacingMultilineText2");
+
+ // Layout some lines of left to right text.
+
+ const std::string fontFamily("TizenSans");
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun1;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
+ fontDescriptionRun1.familyDefined = true;
+ fontDescriptionRun1.weightDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
+
+ FontDescriptionRun fontDescriptionRun2;
+ fontDescriptionRun2.characterRun.characterIndex = 18u;
+ fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
+ fontDescriptionRun2.familyLength = fontFamily.size();
+ fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
+ memcpy(fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength);
+ fontDescriptionRun2.familyDefined = true;
+ fontDescriptionRun2.weightDefined = false;
+ fontDescriptionRun2.widthDefined = false;
+ fontDescriptionRun2.slantDefined = false;
+ fontDescriptionRun2.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
+ fontDescriptionRuns.PushBack(fontDescriptionRun2);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(82.f, 136.f);
+ float positions[] =
+ {
+ 0.f, -12.f, 12.f, -9.f, 24.f, -13.f, 30.f, -13.f, 35.f, -9.f, 46.f, -0.f, 0.f, -9.f, 13.9688f, -9.f, 26.25f, -9.f, 34.3125f, -13.f, 39.3281f, -13.f, 50.6406f, -0.f, 0.f, -13.f, 11.3125f, -9.f, 22.7031f, -9.f, 37.5625, -9.f, 48.8438f, -2.f, 54.8125, -12.f, 0.f, -12.f, 9.92188f, -9.f, 21.7344, -9.f, 33.2031f, -9.f, 46.f, -9.f, 57.1406f, -11.f, 65.4219f, -0.f, 0.f, -12.f, 13.1562f, -12.f, 18.6094f, -12.f, 31.6406f, -9.f, 44.4844f, -9.f, 51.7031f, -9.f, 64.5469f, -9.f, 75.6875f, -11.f, 83.9688, -0.f, 0.f, -12.f, 6.45312f, -12.f, 12.9062f, -9.f, 24.0469f, -9.f, 35.8906f, -9.f, 46.2344f, -0.f, 53.3281f, -9.f, 65.125f, -12.f, 72.7656f, -0.f, 0.f, -11.f, 8.28125f, -9.f, 19.8438f, -9.f, 31.3125f, -11.f, 40.5938f, -2.f};
+ struct LineRun line0 =
+ {
+ {0u, 6u},
+ {0u, 6u},
+ 44.f,
+ 15.f,
+ -5.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line1 =
+ {
+ {6u, 6u},
+ {6u, 6u},
+ 49.f,
+ 15.f,
+ -5.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line2 =
+ {
+ {12u, 6u},
+ {12u, 6u},
+ 52.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line3 =
+ {
+ {18u, 7u},
+ {18u, 7u},
+ 64.f,
+ 15.f,
+ -4.f,
+ 8.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line4 =
+ {
+ {25u, 9u},
+ {25u, 10u},
+ 82.f,
+ 15.f,
+ -4.f,
+ 8.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line5 =
+ {
+ {34u, 9u},
+ {35u, 9u},
+ 72.f,
+ 15.f,
+ -4.f,
+ 8.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ struct LineRun line6 =
+ {
+ {43u, 5u},
+ {44u, 5u},
+ 44.f,
+ 15.f,
+ -4.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
+ Vector<LineRun> lines;
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
+ lines.PushBack(line3);
+ lines.PushBack(line4);
+ lines.PushBack(line5);
+ lines.PushBack(line6);
+
+ LayoutTextData data =
+ {
+ "Layout simple multiline text",
+ "Hello world demo.\n"
+ "Layout different lines of text.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 48u,
+ positions,
+ 7u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 48u,
+ false,
+ true,
+ 2.0f};
+
+ if(!LayoutTextTest(data))
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
#include <unistd.h>
+#include <iostream>
#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/internal/text/cursor-helper-functions.h>
#include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/internal/text/cursor-helper-functions.h>
#include <toolkit-text-utils.h>
-
using namespace Dali;
using namespace Toolkit;
using namespace Text;
namespace
{
- const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
- const unsigned int DEFAULT_FONT_SIZE = 1152u;
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
+const unsigned int DEFAULT_FONT_SIZE = 1152u;
struct GetClosestLineData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- unsigned int numberOfTests; ///< The number of tests.
- float* visualY; ///< The visual 'y' position for each test.
- LineIndex* lineIndex; ///< The expected line index for each test.
- bool* isLineHit; ///< The expected line hit value for each test.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ unsigned int numberOfTests; ///< The number of tests.
+ float* visualY; ///< The visual 'y' position for each test.
+ LineIndex* lineIndex; ///< The expected line index for each test.
+ bool* isLineHit; ///< The expected line hit value for each test.
};
struct GetClosestCursorIndexData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- unsigned int numberOfTests; ///< The number of tests.
- float* visualX; ///< The visual 'x' position for each test.
- float* visualY; ///< The visual 'y' position for each test.
- CharacterHitTest::Mode* mode; ///< The type of hit test.
- CharacterIndex* logicalIndex; ///< The expected logical cursor index for each test.
- bool* isCharacterHit; ///< The expected character hit value for each test.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ unsigned int numberOfTests; ///< The number of tests.
+ float* visualX; ///< The visual 'x' position for each test.
+ float* visualY; ///< The visual 'y' position for each test.
+ CharacterHitTest::Mode* mode; ///< The type of hit test.
+ CharacterIndex* logicalIndex; ///< The expected logical cursor index for each test.
+ bool* isCharacterHit; ///< The expected character hit value for each test.
};
struct GetCursorPositionData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- unsigned int numberOfTests; ///< The number of tests.
- CharacterIndex* logicalIndex; ///< The logical cursor index for each test.
- float* visualX; ///< The expected visual 'x' position for each test.
- float* visualY; ///< The expected visual 'y' position for each test.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ unsigned int numberOfTests; ///< The number of tests.
+ CharacterIndex* logicalIndex; ///< The logical cursor index for each test.
+ float* visualX; ///< The expected visual 'x' position for each test.
+ float* visualY; ///< The expected visual 'y' position for each test.
};
struct FindSelectionIndicesData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- unsigned int numberOfTests; ///< The number of tests.
- float* visualX; ///< The visual 'x' position for each test.
- float* visualY; ///< The visual 'y' position for each test.
- bool* found; ///< Whether selection indices are found.
- CharacterIndex* startIndex; ///< The expected start cursor index for each test.
- CharacterIndex* endIndex; ///< The expected end cursor index for each test.
- CharacterIndex* noTextHitIndex; ///< The expected character index when there is no hit.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ unsigned int numberOfTests; ///< The number of tests.
+ float* visualX; ///< The visual 'x' position for each test.
+ float* visualY; ///< The visual 'y' position for each test.
+ bool* found; ///< Whether selection indices are found.
+ CharacterIndex* startIndex; ///< The expected start cursor index for each test.
+ CharacterIndex* endIndex; ///< The expected end cursor index for each test.
+ CharacterIndex* noTextHitIndex; ///< The expected character index when there is no hit.
};
struct PrimaryCursorHeightData
{
- std::string description; ///< Description of the test.
- std::string text; ///< Input text.
- unsigned int numberOfTests; ///< The number of tests.
- CharacterIndex* logicalIndex; ///< The logical cursor index for each test.
- float* heights; ///< The expected primary cursor height for each test.
+ std::string description; ///< Description of the test.
+ std::string text; ///< Input text.
+ unsigned int numberOfTests; ///< The number of tests.
+ CharacterIndex* logicalIndex; ///< The logical cursor index for each test.
+ float* heights; ///< The expected primary cursor height for each test.
};
-bool GetClosestLineTest( const GetClosestLineData& data )
+bool GetClosestLineTest(const GetClosestLineData& data)
{
std::cout << " testing : " << data.description << std::endl;
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(400.f, 600.f);
- Size layoutSize;
+ Size textArea(400.f, 600.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
- bool isLineHit = false;
- const LineIndex lineIndex = GetClosestLine( visualModel,
- data.visualY[index],
- isLineHit );
+ bool isLineHit = false;
+ const LineIndex lineIndex = GetClosestLine(visualModel,
+ data.visualY[index],
+ isLineHit);
- if( lineIndex != data.lineIndex[index] )
+ if(lineIndex != data.lineIndex[index])
{
std::cout << " test " << index << " failed. Different line index : " << lineIndex << ", expected : " << data.lineIndex[index] << std::endl;
return false;
}
- if( isLineHit != data.isLineHit[index] )
+ if(isLineHit != data.isLineHit[index])
{
std::cout << " test " << index << " failed. Different line hit value : " << isLineHit << ", expected : " << data.isLineHit[index] << std::endl;
return false;
return true;
}
-bool GetClosestCursorIndexTest( const GetClosestCursorIndexData& data )
+bool GetClosestCursorIndexTest(const GetClosestCursorIndexData& data)
{
std::cout << " testing : " << data.description << std::endl;
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(400.f, 600.f);
- Size layoutSize;
+ Size textArea(400.f, 600.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
- bool isCharacterHit = false;
- const CharacterIndex logicalCursorIndex = GetClosestCursorIndex( visualModel,
- logicalModel,
- metrics,
- data.visualX[index],
- data.visualY[index],
- data.mode[index],
- isCharacterHit );
-
- if( logicalCursorIndex != data.logicalIndex[index] )
+ bool isCharacterHit = false;
+ const CharacterIndex logicalCursorIndex = GetClosestCursorIndex(visualModel,
+ logicalModel,
+ metrics,
+ data.visualX[index],
+ data.visualY[index],
+ data.mode[index],
+ isCharacterHit);
+
+ if(logicalCursorIndex != data.logicalIndex[index])
{
std::cout << " test " << index << " failed. Different logical cursor index : " << logicalCursorIndex << ", expected : " << data.logicalIndex[index] << std::endl;
return false;
}
- if( isCharacterHit != data.isCharacterHit[index] )
+ if(isCharacterHit != data.isCharacterHit[index])
{
std::cout << " test " << index << " failed. Different character hit value : " << isCharacterHit << ", expected : " << data.isCharacterHit[index] << std::endl;
return false;
return true;
}
-bool GetCursorPositionTest( const GetCursorPositionData& data )
+bool GetCursorPositionTest(const GetCursorPositionData& data)
{
std::cout << " testing : " << data.description << std::endl;
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(400.f, 600.f);
- Size layoutSize;
+ Size textArea(400.f, 600.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
GetCursorPositionParameters parameters;
- parameters.visualModel = visualModel;
+ parameters.visualModel = visualModel;
parameters.logicalModel = logicalModel;
- parameters.metrics = metrics;
- parameters.isMultiline = true;
+ parameters.metrics = metrics;
+ parameters.isMultiline = true;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
CursorInfo cursorInfo;
parameters.logical = data.logicalIndex[index];
- GetCursorPosition( parameters,
- 0.f,// Since this test case is not testing the primary cursor height, the default font line height can be set to 0.f.
- cursorInfo );
+ GetCursorPosition(parameters,
+ 0.f, // Since this test case is not testing the primary cursor height, the default font line height can be set to 0.f.
+ cursorInfo);
- if( floor(cursorInfo.primaryPosition.x) != data.visualX[index] )
+ if(floor(cursorInfo.primaryPosition.x) != data.visualX[index])
{
std::cout << " test " << index << " failed. Different 'x' cursor position : " << cursorInfo.primaryPosition.x << ", expected : " << data.visualX[index] << std::endl;
return false;
}
- if( floor(cursorInfo.primaryPosition.y) != data.visualY[index] )
+ if(floor(cursorInfo.primaryPosition.y) != data.visualY[index])
{
std::cout << " test " << index << " failed. Different 'y' cursor position : " << cursorInfo.primaryPosition.y << ", expected : " << data.visualY[index] << std::endl;
return false;
return true;
}
-bool FindSelectionIndicesTest( const FindSelectionIndicesData& data )
+bool FindSelectionIndicesTest(const FindSelectionIndicesData& data)
{
std::cout << " testing : " << data.description << std::endl;
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(400.f, 600.f);
- Size layoutSize;
+ Size textArea(400.f, 600.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
- CharacterIndex startIndex = 0;
- CharacterIndex endIndex = 0;
+ CharacterIndex startIndex = 0;
+ CharacterIndex endIndex = 0;
CharacterIndex noTextHitIndex = 0;
- const bool found = FindSelectionIndices( visualModel,
- logicalModel,
- metrics,
- data.visualX[index],
- data.visualY[index],
- startIndex,
- endIndex,
- noTextHitIndex );
-
- if( found != data.found[index] )
- {
- std::cout << " test " << index << " failed. Different found value : " << found << ", expected : " << data.found[index] << std::endl;
+ const bool found = FindSelectionIndices(visualModel,
+ logicalModel,
+ metrics,
+ data.visualX[index],
+ data.visualY[index],
+ startIndex,
+ endIndex,
+ noTextHitIndex);
+
+ if(found != data.found[index])
+ {
+ std::cout << " test " << index << " failed. Different found value : " << found << ", expected : " << data.found[index] << std::endl;
return false;
}
- if( startIndex != data.startIndex[index] )
+ if(startIndex != data.startIndex[index])
{
std::cout << " test " << index << " failed. Different start index : " << startIndex << ", expected : " << data.startIndex[index] << std::endl;
return false;
}
- if( endIndex != data.endIndex[index] )
+ if(endIndex != data.endIndex[index])
{
std::cout << " test " << index << " failed. Different end index : " << endIndex << ", expected : " << data.endIndex[index] << std::endl;
return false;
}
- if( noTextHitIndex != data.noTextHitIndex[index] )
+ if(noTextHitIndex != data.noTextHitIndex[index])
{
std::cout << " test " << index << " failed. Different no text hit index : " << noTextHitIndex << ", expected : " << data.noTextHitIndex[index] << std::endl;
return false;
return true;
}
-bool PrimaryCursorHeightTest( const PrimaryCursorHeightData& data )
+bool PrimaryCursorHeightTest(const PrimaryCursorHeightData& data)
{
std::cout << " testing : " << data.description << std::endl;
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(400.f, 600.f);
- Size layoutSize;
+ Size textArea(400.f, 600.f);
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- const std::string fontFamily( "DejaVuSans" );
+ const std::string fontFamily("DejaVuSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 13u;
- fontDescriptionRun1.familyLength = fontFamily.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = true;
- fontDescriptionRun1.size = 768u;//Font size = 12.0f (768/64 = 12)
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = true;
+ fontDescriptionRun1.size = 768u; //Font size = 12.0f (768/64 = 12)
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 50.f );
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 50.0f, // lineSpacing
+ 50.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
GetCursorPositionParameters parameters;
- parameters.visualModel = visualModel;
+ parameters.visualModel = visualModel;
parameters.logicalModel = logicalModel;
- parameters.metrics = metrics;
- parameters.isMultiline = true;
+ parameters.metrics = metrics;
+ parameters.isMultiline = true;
- for( unsigned int index = 0; index < data.numberOfTests; ++index )
+ for(unsigned int index = 0; index < data.numberOfTests; ++index)
{
CursorInfo cursorInfo;
parameters.logical = data.logicalIndex[index];
// Load some fonts.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 93u, 93u );
+ fontClient.SetDpi(93u, 93u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ char* pathNamePtr = get_current_dir_name();
+ const std::string pathName(pathNamePtr);
+ free(pathNamePtr);
- FontId fontID = fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf" );
+ FontId fontID = fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf");
Text::FontMetrics fontMetrics;
- MetricsPtr mMetrics = Metrics::New(fontClient);
+ MetricsPtr mMetrics = Metrics::New(fontClient);
mMetrics->GetFontMetrics(fontID, fontMetrics);
float defaultFontLineHeight = (fontMetrics.ascender - fontMetrics.descender);
- GetCursorPosition( parameters,
- defaultFontLineHeight,
- cursorInfo );
+ GetCursorPosition(parameters,
+ defaultFontLineHeight,
+ cursorInfo);
- if( floor(cursorInfo.primaryCursorHeight) != data.heights[index] )
+ if(floor(cursorInfo.primaryCursorHeight) != data.heights[index])
{
std::cout << " test " << index << " failed. Different primaryCursorHeight : " << cursorInfo.primaryCursorHeight << ", expected : " << data.heights[index] << std::endl;
return false;
{
tet_infoline(" UtcDaliGetClosestLine");
- float visualY01[] = { -4.f, 3.f, 1000.f };
- LineIndex lineIndices01[] = { 0, 0, 0 };
- bool isLineHit01[] = { false, false, false };
+ float visualY01[] = {-4.f, 3.f, 1000.f};
+ LineIndex lineIndices01[] = {0, 0, 0};
+ bool isLineHit01[] = {false, false, false};
- float visualY02[] = { -4.f, 3.f, 1000.f };
- LineIndex lineIndices02[] = { 0, 0, 0 };
- bool isLineHit02[] = { false, true, false };
+ float visualY02[] = {-4.f, 3.f, 1000.f};
+ LineIndex lineIndices02[] = {0, 0, 0};
+ bool isLineHit02[] = {false, true, false};
- float visualY03[] = { -4.f, 11.f, 30.f, 51.f, 68.f, 87.f, 109.f, 130.f };
- LineIndex lineIndices03[] = { 0, 0, 1u, 2u, 3u, 4u, 5u, 5u };
- bool isLineHit03[] = { false, true, true, true, true, true, true, false };
+ float visualY03[] = {-4.f, 11.f, 30.f, 51.f, 68.f, 87.f, 109.f, 130.f};
+ LineIndex lineIndices03[] = {0, 0, 1u, 2u, 3u, 4u, 5u, 5u};
+ bool isLineHit03[] = {false, true, true, true, true, true, true, false};
struct GetClosestLineData data[] =
- {
- {
- "void text.",
- "",
- 3u,
- visualY01,
- lineIndices01,
- isLineHit01
- },
- {
- "Single line text.",
- "hello world",
- 3u,
- visualY02,
- lineIndices02,
- isLineHit02
- },
{
- "Multi-line text.",
- "abcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuדאוvwxה"
- "סתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuד"
- "אוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqr"
- "פרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmno"
- "צמםpqrפרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjkl"
- "חלךmnoצמםpqrפרףstuדאוvwxהסתyzטזץ",
- 8u,
- visualY03,
- lineIndices03,
- isLineHit03
- }
- };
+ {"void text.",
+ "",
+ 3u,
+ visualY01,
+ lineIndices01,
+ isLineHit01},
+ {"Single line text.",
+ "hello world",
+ 3u,
+ visualY02,
+ lineIndices02,
+ isLineHit02},
+ {"Multi-line text.",
+ "abcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuדאוvwxה"
+ "סתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuד"
+ "אוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqr"
+ "פרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmno"
+ "צמםpqrפרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjkl"
+ "חלךmnoצמםpqrפרףstuדאוvwxהסתyzטזץ",
+ 8u,
+ visualY03,
+ lineIndices03,
+ isLineHit03}};
const unsigned int numberOfTests = 3u;
- for( unsigned int index = 0; index < numberOfTests; ++index )
+ for(unsigned int index = 0; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetClosestLineTest( data[index] ) )
+ if(!GetClosestLineTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliGetClosestCursorIndex");
- float visualX01[] = { -100.f };
- float visualY01[] = { -100.f };
- CharacterHitTest::Mode mode01[] = { CharacterHitTest::TAP };
- CharacterIndex logicalIndex01[] = { 0 };
- bool isCharacterHit01[] = { false };
+ float visualX01[] = {-100.f};
+ float visualY01[] = {-100.f};
+ CharacterHitTest::Mode mode01[] = {CharacterHitTest::TAP};
+ CharacterIndex logicalIndex01[] = {0};
+ bool isCharacterHit01[] = {false};
- float visualX02[] = { -100.f, 1000.f, 60.f, 79.f, 83.f, 148.f, 99.f };
- float visualY02[] = { -100.f, 1000.f, 12.f, 12.f, 12.f, 12.f, 12.f };
- CharacterHitTest::Mode mode02[] = { CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP };
- CharacterIndex logicalIndex02[] = { 0, 21u, 7u, 10u, 10u, 14u, 12u };
- bool isCharacterHit02[] = { false, false, true, true, true, true, true };
+ float visualX02[] = {-100.f, 1000.f, 60.f, 79.f, 83.f, 148.f, 99.f};
+ float visualY02[] = {-100.f, 1000.f, 12.f, 12.f, 12.f, 12.f, 12.f};
+ CharacterHitTest::Mode mode02[] = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
+ CharacterIndex logicalIndex02[] = {0, 21u, 7u, 10u, 10u, 14u, 12u};
+ bool isCharacterHit02[] = {false, false, true, true, true, true, true};
- float visualX03[] = { 19.f, 104.f, -2.f, 127.f };
- float visualY03[] = { 12.f, 12.f, 12.f, 12.f };
- CharacterHitTest::Mode mode03[] = { CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP };
- CharacterIndex logicalIndex03[] = { 3u, 13u, 0, 18u };
- bool isCharacterHit03[] = { true, true, false, false };
+ float visualX03[] = {19.f, 104.f, -2.f, 127.f};
+ float visualY03[] = {12.f, 12.f, 12.f, 12.f};
+ CharacterHitTest::Mode mode03[] = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
+ CharacterIndex logicalIndex03[] = {3u, 13u, 0, 18u};
+ bool isCharacterHit03[] = {true, true, false, false};
// 0 5 _ 6 11 12
// Hello world \n
// שלום עולם \n
// 22 31_32 40 41
// different الأربعاء \n
- float visualX04[] = { -100.f, 40.f, 44.f, 85.f, 500.f,
- 500.f, 367.f, 359.f, 329.f, -100.f,
- -100.f, 19.f, 64.f, 72.f, 104.f, 111.f, 500.f};
- float visualY04[] = { -100.f, 12.f, 12.f, 12.f, 12.f,
- 30.f, 30.f, 30.f, 30.f, 30.f,
- 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f };
- CharacterHitTest::Mode mode04[] = { CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP };
- CharacterIndex logicalIndex04[] = { 0, 5u, 6u, 11u, 11u,
- 12u, 16u, 17u, 21u, 21u,
- 22u, 25u, 30u, 32u, 35u, 34u, 40u,
- 41u };
- bool isCharacterHit04[] = { false, true, true, true, false,
- false, true, true, true, false,
- false, true, true, true, true, true, false };
+ float visualX04[] = {-100.f, 40.f, 44.f, 85.f, 500.f, 500.f, 367.f, 359.f, 329.f, -100.f, -100.f, 19.f, 64.f, 72.f, 104.f, 111.f, 500.f};
+ float visualY04[] = {-100.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f};
+ CharacterHitTest::Mode mode04[] = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
+ CharacterIndex logicalIndex04[] = {0, 5u, 6u, 11u, 11u, 12u, 16u, 17u, 21u, 21u, 22u, 25u, 30u, 32u, 35u, 34u, 40u, 41u};
+ bool isCharacterHit04[] = {false, true, true, true, false, false, true, true, true, false, false, true, true, true, true, true, false};
// 0 10 20 30 40 46
// abcשנבdefג קכghiעיןjk lחלךmnoצמם pqrפרףstuד אוvwxה
// 233 240 250 260 265
// חלךmnoצ מםpqrפרףst uדאוvwxהסת yzטזץ
- float visualX05[] = { -100.f, 96.f, 155.f, 250.f, 344.f, 500.f,
- -100.f, 36.f, 124.f, 190.f, 280.f, 500.f,
- -100.f, 56.f, 158.f, 237.f, 303.f, 500.f,
- -100.f, 98.f, 184.f, 261.f, 337.f, 500.f,
- -100.f, 40.f, 113.f, 223.f, 302.f, 500.f,
- -100.f, 82.f, 160.f, 253.f, 500.f };
- float visualY05[] = { -100.f, 12.f, 12.f, 12.f, 12.f, 12.f,
- 30.f, 30.f, 30.f, 30.f, 30.f, 30.f,
- 50.f, 50.f, 50.f, 50.f, 50.f, 50.f,
- 67.f, 67.f, 67.f, 67.f, 67.f, 67.f,
- 87.f, 87.f, 87.f, 87.f, 87.f, 87.f,
- 107.f, 107.f, 107.f, 107.f, 107.f };
- CharacterHitTest::Mode mode05[] = { CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP };
- CharacterIndex logicalIndex05[] = { 0, 10u, 19u, 28u, 39u, 44u,
- 45u, 48u, 59u, 66u, 78u, 87u,
- 89u, 96u, 106u, 115u, 124u, 133u,
- 134u, 145u, 154u, 162u, 171u, 179u,
- 180u, 184u, 191u, 203u, 212u,
- 221u, 222u, 233u, 241u, 251u, 265u };
- bool isCharacterHit05[] = { false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, false };
+ float visualX05[] = {-100.f, 96.f, 155.f, 250.f, 344.f, 500.f, -100.f, 36.f, 124.f, 190.f, 280.f, 500.f, -100.f, 56.f, 158.f, 237.f, 303.f, 500.f, -100.f, 98.f, 184.f, 261.f, 337.f, 500.f, -100.f, 40.f, 113.f, 223.f, 302.f, 500.f, -100.f, 82.f, 160.f, 253.f, 500.f};
+ float visualY05[] = {-100.f, 12.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 67.f, 67.f, 67.f, 67.f, 67.f, 67.f, 87.f, 87.f, 87.f, 87.f, 87.f, 87.f, 107.f, 107.f, 107.f, 107.f, 107.f};
+ CharacterHitTest::Mode mode05[] = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
+ CharacterIndex logicalIndex05[] = {0, 10u, 19u, 28u, 39u, 44u, 45u, 48u, 59u, 66u, 78u, 87u, 89u, 96u, 106u, 115u, 124u, 133u, 134u, 145u, 154u, 162u, 171u, 179u, 180u, 184u, 191u, 203u, 212u, 221u, 222u, 233u, 241u, 251u, 265u};
+ bool isCharacterHit05[] = {false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, false};
// 0 10 20 30 40 46
// שנבabcגקכd efעיןghiחל ךjklצמםmno פרףpqrדאוs tuהסתv
// 232 240 250 260 265
// ךjklצמםm noפרףpqrדא וstuהסתvwx טזץyz
- float visualX06[] = { 500.f, 307.f, 237.f, 148.f, 55.f, -100.f,
- 500.f, 362.f, 276.f, 213.f, 121.f, -100.f,
- 500.f, 344.f, 238.f, 167.f, 93.f, -100.f,
- 500.f, 306.f, 216.f, 142.f, 58.f, -100.f,
- 500.f, 355.f, 279.f, 182.f, 92.f, -100.f,
- 500.f, 326.f, 238.f, 150.f, -100.f };
- float visualY06[] = { -100.f, 12.f, 12.f, 12.f, 12.f, 12.f,
- 30.f, 30.f, 30.f, 30.f, 30.f, 30.f,
- 50.f, 50.f, 50.f, 50.f, 50.f, 50.f,
- 67.f, 67.f, 67.f, 67.f, 67.f, 67.f,
- 87.f, 87.f, 87.f, 87.f, 87.f, 87.f,
- 107.f, 107.f, 107.f, 107.f, 107.f };
- CharacterHitTest::Mode mode06[] = { CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP,
- CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP };
- CharacterIndex logicalIndex06[] = { 0, 11u, 19u, 28u, 39u, 44u,
- 45u, 48u, 57u, 65u, 78u, 87u,
- 89u, 96u, 107u, 114u, 124u, 133u,
- 134u, 144u, 154u, 162u, 171u, 178u,
- 179u, 185u, 192u, 203u, 212u, 221u,
- 222u, 232u, 240u, 251u, 265u };
- bool isCharacterHit06[] = { false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, true, false,
- false, true, true, true, false };
-
- float visualX07[] = { 395.f };
- float visualY07[] = { 12.f };
- CharacterHitTest::Mode mode07[] = { CharacterHitTest::TAP };
- CharacterIndex logicalIndex07[] = { 1u };
- bool isCharacterHit07[] = { true };
-
- float visualX08[] = { 7.f };
- float visualY08[] = { 12.f };
- CharacterHitTest::Mode mode08[] = { CharacterHitTest::TAP };
- CharacterIndex logicalIndex08[] = { 1u };
- bool isCharacterHit08[] = { true };
+ float visualX06[] = {500.f, 307.f, 237.f, 148.f, 55.f, -100.f, 500.f, 362.f, 276.f, 213.f, 121.f, -100.f, 500.f, 344.f, 238.f, 167.f, 93.f, -100.f, 500.f, 306.f, 216.f, 142.f, 58.f, -100.f, 500.f, 355.f, 279.f, 182.f, 92.f, -100.f, 500.f, 326.f, 238.f, 150.f, -100.f};
+ float visualY06[] = {-100.f, 12.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 67.f, 67.f, 67.f, 67.f, 67.f, 67.f, 87.f, 87.f, 87.f, 87.f, 87.f, 87.f, 107.f, 107.f, 107.f, 107.f, 107.f};
+ CharacterHitTest::Mode mode06[] = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
+ CharacterIndex logicalIndex06[] = {0, 11u, 19u, 28u, 39u, 44u, 45u, 48u, 57u, 65u, 78u, 87u, 89u, 96u, 107u, 114u, 124u, 133u, 134u, 144u, 154u, 162u, 171u, 178u, 179u, 185u, 192u, 203u, 212u, 221u, 222u, 232u, 240u, 251u, 265u};
+ bool isCharacterHit06[] = {false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, false};
+
+ float visualX07[] = {395.f};
+ float visualY07[] = {12.f};
+ CharacterHitTest::Mode mode07[] = {CharacterHitTest::TAP};
+ CharacterIndex logicalIndex07[] = {1u};
+ bool isCharacterHit07[] = {true};
+
+ float visualX08[] = {7.f};
+ float visualY08[] = {12.f};
+ CharacterHitTest::Mode mode08[] = {CharacterHitTest::TAP};
+ CharacterIndex logicalIndex08[] = {1u};
+ bool isCharacterHit08[] = {true};
struct GetClosestCursorIndexData data[] =
- {
{
- "Void text.",
- "",
- 1u,
- visualX01,
- visualY01,
- mode01,
- logicalIndex01,
- isCharacterHit01
- },
- {
- "Single line text.",
- "Hello world שלום עולם",
- 7u,
- visualX02,
- visualY02,
- mode02,
- logicalIndex02,
- isCharacterHit02
- },
- {
- "Single line with ligatures",
- "different الأربعاء",
- 4u,
- visualX03,
- visualY03,
- mode03,
- logicalIndex03,
- isCharacterHit03
- },
- {
- "Multiline. Single line paragraphs",
- "Hello world\n"
- "שלום עולם\n"
- "different الأربعاء\n",
- 17u,
- visualX04,
- visualY04,
- mode04,
- logicalIndex04,
- isCharacterHit04
- },
- {
- "Multiline. Single bidirectional paragraph, starts LTR, wrapped lines",
- "abcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuדאוvwxה"
- "סתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuד"
- "אוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqr"
- "פרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmno"
- "צמםpqrפרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjkl"
- "חלךmnoצמםpqrפרףstuדאוvwxהסתyzטזץ",
- 35u,
- visualX05,
- visualY05,
- mode05,
- logicalIndex05,
- isCharacterHit05
- },
- {
- "Multiline. Single bidirectional paragraph, starts RTL, wrapped lines",
- "שנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוstuהסתv"
- "wxטזץyzשנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוs"
- "tuהסתvwxטזץyzשנבabcגקכdefעיןghiחלךjklצמםmnoפרף"
- "pqrדאוstuהסתvwxטזץyzשנבabcגקכdefעיןghiחלךjklצמם"
- "mnoפרףpqrדאוstuהסתvwxטזץyzשנבabcגקכdefעיןghiחל"
- "ךjklצמםmnoפרףpqrדאוstuהסתvwxטזץyz",
- 35u,
- visualX06,
- visualY06,
- mode06,
- logicalIndex06,
- isCharacterHit06
- },
- {
- "Testing complex characters. Arabic ligatures",
- "الأَبْجَدِيَّة العَرَبِيَّة",
- 1u,
- visualX07,
- visualY07,
- mode07,
- logicalIndex07,
- isCharacterHit07
- },
- {
- "Testing complex characters. Latin ligatures",
- "fi ligature",
- 1u,
- visualX08,
- visualY08,
- mode08,
- logicalIndex08,
- isCharacterHit08
- }
- };
+ {"Void text.",
+ "",
+ 1u,
+ visualX01,
+ visualY01,
+ mode01,
+ logicalIndex01,
+ isCharacterHit01},
+ {"Single line text.",
+ "Hello world שלום עולם",
+ 7u,
+ visualX02,
+ visualY02,
+ mode02,
+ logicalIndex02,
+ isCharacterHit02},
+ {"Single line with ligatures",
+ "different الأربعاء",
+ 4u,
+ visualX03,
+ visualY03,
+ mode03,
+ logicalIndex03,
+ isCharacterHit03},
+ {"Multiline. Single line paragraphs",
+ "Hello world\n"
+ "שלום עולם\n"
+ "different الأربعاء\n",
+ 17u,
+ visualX04,
+ visualY04,
+ mode04,
+ logicalIndex04,
+ isCharacterHit04},
+ {"Multiline. Single bidirectional paragraph, starts LTR, wrapped lines",
+ "abcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuדאוvwxה"
+ "סתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuד"
+ "אוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqr"
+ "פרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjklחלךmno"
+ "צמםpqrפרףstuדאוvwxהסתyzטזץabcשנבdefגקכghiעיןjkl"
+ "חלךmnoצמםpqrפרףstuדאוvwxהסתyzטזץ",
+ 35u,
+ visualX05,
+ visualY05,
+ mode05,
+ logicalIndex05,
+ isCharacterHit05},
+ {"Multiline. Single bidirectional paragraph, starts RTL, wrapped lines",
+ "שנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוstuהסתv"
+ "wxטזץyzשנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוs"
+ "tuהסתvwxטזץyzשנבabcגקכdefעיןghiחלךjklצמםmnoפרף"
+ "pqrדאוstuהסתvwxטזץyzשנבabcגקכdefעיןghiחלךjklצמם"
+ "mnoפרףpqrדאוstuהסתvwxטזץyzשנבabcגקכdefעיןghiחל"
+ "ךjklצמםmnoפרףpqrדאוstuהסתvwxטזץyz",
+ 35u,
+ visualX06,
+ visualY06,
+ mode06,
+ logicalIndex06,
+ isCharacterHit06},
+ {"Testing complex characters. Arabic ligatures",
+ "الأَبْجَدِيَّة العَرَبِيَّة",
+ 1u,
+ visualX07,
+ visualY07,
+ mode07,
+ logicalIndex07,
+ isCharacterHit07},
+ {"Testing complex characters. Latin ligatures",
+ "fi ligature",
+ 1u,
+ visualX08,
+ visualY08,
+ mode08,
+ logicalIndex08,
+ isCharacterHit08}};
const unsigned int numberOfTests = 8u;
- for( unsigned int index = 0; index < numberOfTests; ++index )
+ for(unsigned int index = 0; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetClosestCursorIndexTest( data[index] ) )
+ if(!GetClosestCursorIndexTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliGetCursorPosition");
- float visualX08[] = { 5.f };
- float visualY08[] = { 0.f };
- CharacterIndex logicalIndex08[] = { 1u };
+ float visualX08[] = {5.f};
+ float visualY08[] = {0.f};
+ CharacterIndex logicalIndex08[] = {1u};
struct GetCursorPositionData data[] =
- {
{
- "Testing complex characters. Latin ligatures",
- "fi ligature",
- 1u,
- logicalIndex08,
- visualX08,
- visualY08,
- }
- };
+ {
+ "Testing complex characters. Latin ligatures",
+ "fi ligature",
+ 1u,
+ logicalIndex08,
+ visualX08,
+ visualY08,
+ }};
const unsigned int numberOfTests = 1u;
- for( unsigned int index = 0; index < numberOfTests; ++index )
+ for(unsigned int index = 0; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !GetCursorPositionTest( data[index] ) )
+ if(!GetCursorPositionTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliFindSelectionIndices");
- float visualX01[] = { -100.f };
- float visualY01[] = { -100.f };
- bool found01[] = { false };
- CharacterIndex startIndex01[] = { 0 };
- CharacterIndex endIndex01[] = { 0 };
- CharacterIndex noHitText01[] = { 0 };
-
- float visualX02[] = { -100.f, 1000.f, 1000.f };
- float visualY02[] = { -100.f, 12.f, 1000.f };
- bool found02[] = { false, false, false };
- CharacterIndex startIndex02[] = { 0, 6u, 6u };
- CharacterIndex endIndex02[] = { 5u, 11u, 11u };
- CharacterIndex noHitText02[] = { 0, 11u, 11u };
-
- float visualX03[] = { 70.f };
- float visualY03[] = { 12.f };
- bool found03[] = { true };
- CharacterIndex startIndex03[] = { 6u };
- CharacterIndex endIndex03[] = { 11u };
- CharacterIndex noHitText03[] = { 0u };
-
- float visualX04[] = { 131.f };
- float visualY04[] = { 12.f };
- bool found04[] = { true };
- CharacterIndex startIndex04[] = { 12u };
- CharacterIndex endIndex04[] = { 16u };
- CharacterIndex noHitText04[] = { 0u };
-
- float visualX05[] = { 0.f };
- float visualY05[] = { 12.f };
- bool found05[] = { true };
- CharacterIndex startIndex05[] = { 0 };
- CharacterIndex endIndex05[] = { 1u };
- CharacterIndex noHitText05[] = { 0 };
-
- float visualX06[] = { 10.f };
- float visualY06[] = { 12.f };
- bool found06[] = { true };
- CharacterIndex startIndex06[] = { 0 };
- CharacterIndex endIndex06[] = { 1u };
- CharacterIndex noHitText06[] = { 0u };
+ float visualX01[] = {-100.f};
+ float visualY01[] = {-100.f};
+ bool found01[] = {false};
+ CharacterIndex startIndex01[] = {0};
+ CharacterIndex endIndex01[] = {0};
+ CharacterIndex noHitText01[] = {0};
+
+ float visualX02[] = {-100.f, 1000.f, 1000.f};
+ float visualY02[] = {-100.f, 12.f, 1000.f};
+ bool found02[] = {false, false, false};
+ CharacterIndex startIndex02[] = {0, 6u, 6u};
+ CharacterIndex endIndex02[] = {5u, 11u, 11u};
+ CharacterIndex noHitText02[] = {0, 11u, 11u};
+
+ float visualX03[] = {70.f};
+ float visualY03[] = {12.f};
+ bool found03[] = {true};
+ CharacterIndex startIndex03[] = {6u};
+ CharacterIndex endIndex03[] = {11u};
+ CharacterIndex noHitText03[] = {0u};
+
+ float visualX04[] = {131.f};
+ float visualY04[] = {12.f};
+ bool found04[] = {true};
+ CharacterIndex startIndex04[] = {12u};
+ CharacterIndex endIndex04[] = {16u};
+ CharacterIndex noHitText04[] = {0u};
+
+ float visualX05[] = {0.f};
+ float visualY05[] = {12.f};
+ bool found05[] = {true};
+ CharacterIndex startIndex05[] = {0};
+ CharacterIndex endIndex05[] = {1u};
+ CharacterIndex noHitText05[] = {0};
+
+ float visualX06[] = {10.f};
+ float visualY06[] = {12.f};
+ bool found06[] = {true};
+ CharacterIndex startIndex06[] = {0};
+ CharacterIndex endIndex06[] = {1u};
+ CharacterIndex noHitText06[] = {0u};
struct FindSelectionIndicesData data[] =
- {
- {
- "void text",
- "",
- 1u,
- visualX01,
- visualY01,
- found01,
- startIndex01,
- endIndex01,
- noHitText01
- },
- {
- "touch out of text's boundaries",
- "Hello world",
- 3u,
- visualX02,
- visualY02,
- found02,
- startIndex02,
- endIndex02,
- noHitText02
- },
- {
- "touch on the text",
- "Hello world demo",
- 1u,
- visualX03,
- visualY03,
- found03,
- startIndex03,
- endIndex03,
- noHitText03
- },
{
- "touch on the new paragraph character at the end of line",
- "Hello world demo\n",
- 1u,
- visualX04,
- visualY04,
- found04,
- startIndex04,
- endIndex04,
- noHitText04
- },
- {
- "touch on a white space character. is the unique character of the line",
- " ",
- 1u,
- visualX05,
- visualY05,
- found05,
- startIndex05,
- endIndex05,
- noHitText05
- },
- {
- "touch on a white space character. is between two words",
- "h ello",
- 1u,
- visualX06,
- visualY06,
- found06,
- startIndex06,
- endIndex06,
- noHitText06
- },
- };
+ {"void text",
+ "",
+ 1u,
+ visualX01,
+ visualY01,
+ found01,
+ startIndex01,
+ endIndex01,
+ noHitText01},
+ {"touch out of text's boundaries",
+ "Hello world",
+ 3u,
+ visualX02,
+ visualY02,
+ found02,
+ startIndex02,
+ endIndex02,
+ noHitText02},
+ {"touch on the text",
+ "Hello world demo",
+ 1u,
+ visualX03,
+ visualY03,
+ found03,
+ startIndex03,
+ endIndex03,
+ noHitText03},
+ {"touch on the new paragraph character at the end of line",
+ "Hello world demo\n",
+ 1u,
+ visualX04,
+ visualY04,
+ found04,
+ startIndex04,
+ endIndex04,
+ noHitText04},
+ {"touch on a white space character. is the unique character of the line",
+ " ",
+ 1u,
+ visualX05,
+ visualY05,
+ found05,
+ startIndex05,
+ endIndex05,
+ noHitText05},
+ {"touch on a white space character. is between two words",
+ "h ello",
+ 1u,
+ visualX06,
+ visualY06,
+ found06,
+ startIndex06,
+ endIndex06,
+ noHitText06},
+ };
const unsigned int numberOfTests = 6u;
- for( unsigned int index = 0; index < numberOfTests; ++index )
+ for(unsigned int index = 0; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !FindSelectionIndicesTest( data[index] ) )
+ if(!FindSelectionIndicesTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliPrimaryCursorHeight");
- float heights[] = { 19.f };
- CharacterIndex logicalIndex[] = { 1u };
+ float heights[] = {19.f};
+ CharacterIndex logicalIndex[] = {1u};
struct PrimaryCursorHeightData data[] =
- {
{
- "Testing primary cursor height when line spacing is used.",
- "Hello World",
- 1u,
- logicalIndex,
- heights,
- }
- };
+ {
+ "Testing primary cursor height when line spacing is used.",
+ "Hello World",
+ 1u,
+ logicalIndex,
+ heights,
+ }};
const unsigned int numberOfTests = 1u;
- for( unsigned int index = 0; index < numberOfTests; ++index )
+ for(unsigned int index = 0; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !PrimaryCursorHeightTest( data[index] ) )
+ if(!PrimaryCursorHeightTest(data[index]))
{
tet_result(TET_FAIL);
}
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
#include <unistd.h>
+#include <iostream>
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/internal/text/layouts/layout-engine.h>
#include <dali-toolkit/internal/text/layouts/layout-parameters.h>
#include <dali-toolkit/internal/text/text-run-container.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
#include <toolkit-text-utils.h>
using namespace Dali;
using namespace Toolkit;
using namespace Text;
-
namespace
{
-
-const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
struct LayoutTextData
{
std::string text;
Size textArea;
unsigned int numberOfFonts;
- FontDescriptionRun *fontDescriptions;
+ FontDescriptionRun* fontDescriptions;
unsigned int numberOfLines;
LineRun* lines;
Layout::Engine::Type layout;
Text::LineWrap::Mode wrapMode;
};
-void Print( const LineRun& line )
+void Print(const LineRun& line)
{
std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
}
-bool LayoutTextTest( const LayoutTextData& data )
+bool LayoutTextTest(const LayoutTextData& data)
{
// Load some fonts.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 96u, 96u );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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 + "/tizen/TizenSansRegular.ttf");
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size layoutSize;
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- if( 0u != data.numberOfFonts )
+ if(0u != data.numberOfFonts)
{
- fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
- data.fontDescriptions,
- data.fontDescriptions + data.numberOfFonts );
+ fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
+ data.fontDescriptions,
+ data.fontDescriptions + data.numberOfFonts);
}
LayoutOptions options;
options.align = false;
- CreateTextModel( data.text,
- data.textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- data.wrapMode,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ data.wrapMode,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
Vector<LineRun>& lines = textModel->mVisualModel->mLines;
// 4) Compare the results.
- if( lines.Count() != data.numberOfLines )
+ if(lines.Count() != data.numberOfLines)
{
std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.numberOfLines; ++index )
+ for(unsigned int index = 0u; index < data.numberOfLines; ++index)
{
- const LineRun& line = *( lines.Begin() + index );
- const LineRun& expectedLine = *( data.lines + index );
+ const LineRun& line = *(lines.Begin() + index);
+ const LineRun& expectedLine = *(data.lines + index);
- if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
+ if(line.characterRun.characterIndex != expectedLine.characterRun.characterIndex)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
+ if(line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
}
} // namespace
-
int UtcDaliTextHyphenWrapping(void)
{
ToolkitTestApplication application;
// Layout some lines of left to right text.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 13u;
- fontDescriptionRun1.familyLength = fontFamily.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
Size textArea(65.0f, 200.f);
LineRun line1 =
- {
- { 0u, 5u },
- { 0u, 5u },
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 5u},
+ {0u, 5u},
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
LineRun line2 =
- {
- { 5u, 8u },
- { 5u, 8u },
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {5u, 8u},
+ {5u, 8u},
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line1 );
- lines.PushBack( line2 );
+ lines.PushBack(line1);
+ lines.PushBack(line2);
LayoutTextData data =
- {
- "Hi Experiment",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 13u,
- (Text::LineWrap::Mode)DevelText::LineWrap::HYPHENATION
- };
-
- if( !LayoutTextTest( data ) )
+ {
+ "Hi Experiment",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 13u,
+ (Text::LineWrap::Mode)DevelText::LineWrap::HYPHENATION};
+
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of left to right text.
- const std::string fontFamily( "DejaVuSans" );
+ const std::string fontFamily("DejaVuSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 13u;
- fontDescriptionRun1.familyLength = fontFamily.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
Size textArea(72.0f, 200.f);
LineRun line1 =
- {
- { 0u, 3u },
- { 0u, 3u },
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 3u},
+ {0u, 3u},
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
LineRun line2 =
- {
- { 3u, 6u },
- { 3u, 6u },
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {3u, 6u},
+ {3u, 6u},
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
LineRun line3 =
- {
- { 9u, 4u },
- { 9u, 4u },
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {9u, 4u},
+ {9u, 4u},
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line1 );
- lines.PushBack( line2 );
- lines.PushBack( line3 );
+ lines.PushBack(line1);
+ lines.PushBack(line2);
+ lines.PushBack(line3);
LayoutTextData data =
- {
- "Hi Experiment",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- 3u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 13u,
- (Text::LineWrap::Mode)DevelText::LineWrap::MIXED
- };
-
- if( !LayoutTextTest( data ) )
+ {
+ "Hi Experiment",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ 3u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 13u,
+ (Text::LineWrap::Mode)DevelText::LineWrap::MIXED};
+
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
#include <unistd.h>
+#include <iostream>
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/internal/text/layouts/layout-engine.h>
#include <dali-toolkit/internal/text/layouts/layout-parameters.h>
#include <dali-toolkit/internal/text/text-run-container.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
#include <toolkit-text-utils.h>
using namespace Dali;
namespace
{
-
-const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
struct LayoutTextData
{
- std::string description;
- std::string text;
- Size textArea;
- unsigned int numberOfFonts;
- FontDescriptionRun* fontDescriptions;
- Size layoutSize;
- unsigned int totalNumberOfGlyphs;
- float* positions;
- unsigned int numberOfLines;
- LineRun* lines;
- Layout::Engine::Type layout;
- unsigned int startIndex;
- unsigned int numberOfGlyphs;
- bool ellipsis:1;
- DevelText::EllipsisPosition::Type ellipsisPosition;
- bool updated:1;
+ std::string description;
+ std::string text;
+ Size textArea;
+ unsigned int numberOfFonts;
+ FontDescriptionRun* fontDescriptions;
+ Size layoutSize;
+ unsigned int totalNumberOfGlyphs;
+ float* positions;
+ unsigned int numberOfLines;
+ LineRun* lines;
+ Layout::Engine::Type layout;
+ unsigned int startIndex;
+ unsigned int numberOfGlyphs;
+ bool ellipsis : 1;
+ DevelText::EllipsisPosition::Type ellipsisPosition;
+ bool updated : 1;
};
-void Print( const LineRun& line )
+void Print(const LineRun& line)
{
std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
std::cout << " ellipsis : " << line.ellipsis << std::endl;
}
-bool LayoutTextTest( const LayoutTextData& data )
+bool LayoutTextTest(const LayoutTextData& data)
{
// Load some fonts.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 96u, 96u );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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 + "/tizen/TizenSansHebrewRegular.ttf" );
- fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
- fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf");
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size layoutSize;
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- if( 0u != data.numberOfFonts )
+ if(0u != data.numberOfFonts)
{
- fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
- data.fontDescriptions,
- data.fontDescriptions + data.numberOfFonts );
+ fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
+ data.fontDescriptions,
+ data.fontDescriptions + data.numberOfFonts);
}
LayoutOptions options;
options.align = false;
- CreateTextModel( data.text,
- data.textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Clear the layout.
Vector<LineRun>& lines = visualModel->mLines;
- const Length numberOfCharacters = logicalModel->mText.Count();
- const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
- const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
- const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
+ const Length numberOfCharacters = logicalModel->mText.Count();
+ const bool isLastNewParagraph = (0u == numberOfCharacters) ? false : TextAbstraction::IsNewParagraph(*(logicalModel->mText.Begin() + (numberOfCharacters - 1u)));
+ const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
+ const bool removeLastLine = isLastNewParagraph && (lastGlyphIndex + 1u == visualModel->mGlyphs.Count());
LineIndex startRemoveIndex = 0u;
- if( 0u != lines.Count() )
+ if(0u != lines.Count())
{
- startRemoveIndex = lines.Count();
+ startRemoveIndex = lines.Count();
LineIndex endRemoveIndex = startRemoveIndex;
- ClearGlyphRuns( data.startIndex,
- lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
- lines,
- startRemoveIndex,
- endRemoveIndex );
+ ClearGlyphRuns(data.startIndex,
+ lastGlyphIndex + (removeLastLine ? 1u : 0u),
+ lines,
+ startRemoveIndex,
+ endRemoveIndex);
// Update the character runs of the lines.
const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
- const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
- const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
- const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
- ClearCharacterRuns( startCharacterIndex,
- lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
- lines,
- startRemoveIndex,
- endRemoveIndex );
-
- lines.Erase( lines.Begin() + startRemoveIndex,
- lines.Begin() + endRemoveIndex );
+ const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
+ const CharacterIndex startCharacterIndex = *(glyphsToCharactersBuffer + data.startIndex);
+ const CharacterIndex lastCharacterIndex = *(glyphsToCharactersBuffer + lastGlyphIndex) + *(charactersPerGlyph + lastGlyphIndex) - 1u;
+ ClearCharacterRuns(startCharacterIndex,
+ lastCharacterIndex + (removeLastLine ? 1u : 0u),
+ lines,
+ startRemoveIndex,
+ endRemoveIndex);
+
+ lines.Erase(lines.Begin() + startRemoveIndex,
+ lines.Begin() + endRemoveIndex);
}
Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
- glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
- glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
+ glyphPositions.Erase(glyphPositions.Begin() + data.startIndex,
+ glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs);
// 3) Layout
Layout::Engine engine;
- engine.SetMetrics( metrics );
- engine.SetLayout( data.layout );
+ engine.SetMetrics(metrics);
+ engine.SetLayout(data.layout);
- textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
- textModel->mLineWrapMode = LineWrap::WORD;
+ textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
+ textModel->mLineWrapMode = LineWrap::WORD;
textModel->mIgnoreSpacesAfterText = true;
- Layout::Parameters layoutParameters( data.textArea,
- textModel );
+ Layout::Parameters layoutParameters(data.textArea,
+ textModel);
layoutParameters.isLastNewParagraph = isLastNewParagraph;
// The initial glyph and the number of glyphs to layout.
- layoutParameters.startGlyphIndex = data.startIndex;
- layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
- layoutParameters.startLineIndex = startRemoveIndex;
+ layoutParameters.startGlyphIndex = data.startIndex;
+ layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
+ layoutParameters.startLineIndex = startRemoveIndex;
layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
layoutSize = Vector2::ZERO;
- bool isAutoScroll = false;
- const bool updated = engine.LayoutText( layoutParameters,
- layoutSize,
- data.ellipsis,
- isAutoScroll,
- data.ellipsisPosition );
+ bool isAutoScroll = false;
+ const bool updated = engine.LayoutText(layoutParameters,
+ layoutSize,
+ data.ellipsis,
+ isAutoScroll,
+ data.ellipsisPosition);
// 4) Compare the results.
- if( updated != data.updated )
+ if(updated != data.updated)
{
std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
return false;
}
- if( layoutSize != data.layoutSize )
+ if(layoutSize != data.layoutSize)
{
std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
+ for(unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index)
{
- const Vector2& position = *( glyphPositions.Begin() + index );
+ const Vector2& position = *(glyphPositions.Begin() + index);
- if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(std::round(position.x) - *(data.positions + 2u * index)) > Math::MACHINE_EPSILON_1000)
{
- std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
+ std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *(data.positions + 2u * index) << std::endl;
return false;
}
- if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(position.y - *(data.positions + 2u * index + 1u)) > Math::MACHINE_EPSILON_1000)
{
- std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
+ std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *(data.positions + 2u * index + 1u) << std::endl;
return false;
}
}
- if( lines.Count() != data.numberOfLines )
+ if(lines.Count() != data.numberOfLines)
{
std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.numberOfLines; ++index )
+ for(unsigned int index = 0u; index < data.numberOfLines; ++index)
{
- const LineRun& line = *( lines.Begin() + index );
- const LineRun& expectedLine = *( data.lines + index );
+ const LineRun& line = *(lines.Begin() + index);
+ const LineRun& expectedLine = *(data.lines + index);
- if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
+ if(line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
+ if(line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
+ if(line.characterRun.characterIndex != expectedLine.characterRun.characterIndex)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
+ if(line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
+ if(fabsf(floor(line.width) - expectedLine.width) > Math::MACHINE_EPSILON_1)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
+ if(fabsf(line.ascender - expectedLine.ascender) > Math::MACHINE_EPSILON_1)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
+ if(fabsf(line.descender - expectedLine.descender) > Math::MACHINE_EPSILON_1)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
+ if(fabsf(line.extraLength - expectedLine.extraLength) > Math::MACHINE_EPSILON_1)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
- if( line.ellipsis != expectedLine.ellipsis )
+ if(line.ellipsis != expectedLine.ellipsis)
{
std::cout << " Different line info for line : " << index << std::endl;
- Print( line );
+ Print(line);
std::cout << " expected" << std::endl;
- Print( expectedLine );
+ Print(expectedLine);
return false;
}
struct AlignData
{
- std::string description;
- std::string text;
- Size textArea;
- unsigned int numberOfFonts;
- FontDescriptionRun* fontDescriptions;
- Text::HorizontalAlignment::Type horizontalAlignment;
- Text::VerticalAlignment::Type verticalAlignment;
- unsigned int startIndex;
- unsigned int numberOfCharacters;
- unsigned int numberOfLines;
- float* lineOffsets;
- Dali::LayoutDirection::Type layoutDirection;
- bool matchSystemLanguageDirection;
+ std::string description;
+ std::string text;
+ Size textArea;
+ unsigned int numberOfFonts;
+ FontDescriptionRun* fontDescriptions;
+ Text::HorizontalAlignment::Type horizontalAlignment;
+ Text::VerticalAlignment::Type verticalAlignment;
+ unsigned int startIndex;
+ unsigned int numberOfCharacters;
+ unsigned int numberOfLines;
+ float* lineOffsets;
+ Dali::LayoutDirection::Type layoutDirection;
+ bool matchSystemLanguageDirection;
};
-bool AlignTest( const AlignData& data )
+bool AlignTest(const AlignData& data)
{
// Load some fonts.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 96u, 96u );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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 + "/tizen/TizenSansHebrewRegular.ttf" );
- fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf");
+ fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf");
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size layoutSize;
+ Size layoutSize;
Vector<FontDescriptionRun> fontDescriptionRuns;
- if( 0u != data.numberOfFonts )
+ if(0u != data.numberOfFonts)
{
- fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
- data.fontDescriptions,
- data.fontDescriptions + data.numberOfFonts );
+ fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
+ data.fontDescriptions,
+ data.fontDescriptions + data.numberOfFonts);
}
LayoutOptions options;
options.align = false;
- CreateTextModel( data.text,
- data.textArea,
- fontDescriptionRuns,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ CreateTextModel(data.text,
+ data.textArea,
+ fontDescriptionRuns,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// Call the Align method.
Layout::Engine engine;
- engine.SetMetrics( metrics );
+ engine.SetMetrics(metrics);
float alignmentOffset = 0.f;
- engine.Align( data.textArea,
- data.startIndex,
- data.numberOfCharacters,
- data.horizontalAlignment,
- visualModel->mLines,
- alignmentOffset,
- data.layoutDirection,
- data.matchSystemLanguageDirection );
+ engine.Align(data.textArea,
+ data.startIndex,
+ data.numberOfCharacters,
+ data.horizontalAlignment,
+ visualModel->mLines,
+ alignmentOffset,
+ data.layoutDirection,
+ data.matchSystemLanguageDirection);
// Compare results.
- if( data.numberOfLines != visualModel->mLines.Count() )
+ if(data.numberOfLines != visualModel->mLines.Count())
{
std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
return false;
}
const LineRun* const linesBuffer = visualModel->mLines.Begin();
- for( unsigned int index = 0u; index < data.numberOfLines; ++index )
+ for(unsigned int index = 0u; index < data.numberOfLines; ++index)
{
- const LineRun& line = *( linesBuffer + index );
+ const LineRun& line = *(linesBuffer + index);
- if( line.alignmentOffset != *( data.lineOffsets + index ) )
+ if(line.alignmentOffset != *(data.lineOffsets + index))
{
- std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
+ std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *(data.lineOffsets + index) << std::endl;
return false;
}
}
Layout::Engine engine;
- DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
+ DALI_TEST_CHECK(Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout());
- engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
- DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
+ engine.SetLayout(Layout::Engine::MULTI_LINE_BOX);
+ DALI_TEST_CHECK(Layout::Engine::MULTI_LINE_BOX == engine.GetLayout());
tet_result(TET_PASS);
END_TEST;
Layout::Engine engine;
- DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
+ DALI_TEST_EQUALS(0, engine.GetCursorWidth(), TEST_LOCATION);
- engine.SetCursorWidth( 2 );
- DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
+ engine.SetCursorWidth(2);
+ DALI_TEST_EQUALS(2, engine.GetCursorWidth(), TEST_LOCATION);
tet_result(TET_PASS);
END_TEST;
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextLayoutNoText");
- Size textArea(100.f, 60.f);
- Size layoutSize = Vector2::ZERO;
+ Size textArea(100.f, 60.f);
+ Size layoutSize = Vector2::ZERO;
LayoutTextData data =
- {
- "No text",
- "",
- textArea,
- 0u,
- NULL,
- layoutSize,
- 0u,
- NULL,
- 0u,
- NULL,
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 0u,
- false,
- DevelText::EllipsisPosition::END,
- false
- };
+ {
+ "No text",
+ "",
+ textArea,
+ 0u,
+ NULL,
+ layoutSize,
+ 0u,
+ NULL,
+ 0u,
+ NULL,
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 0u,
+ false,
+ DevelText::EllipsisPosition::END,
+ false};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Won't layout the text in multi-line if the width is too small.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 11u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
- Size textArea(1.f, 1.f);
- Size layoutSize = Vector2::ZERO;
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(1.f, 1.f);
+ Size layoutSize = Vector2::ZERO;
LayoutTextData data =
- {
- "Layout text in a small area",
- "Hello world",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 0u,
- NULL,
- 0u,
- NULL,
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 11u,
- false,
- DevelText::EllipsisPosition::END,
- false
- };
+ {
+ "Layout text in a small area",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 0u,
+ NULL,
+ 0u,
+ NULL,
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 11u,
+ false,
+ DevelText::EllipsisPosition::END,
+ false};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Will layout the text in single line as it can be scrolled.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 11u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
- Size textArea(1.f, 1.f);
- Size layoutSize(81.f, 20.f);
- float positions[] = { 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f };
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(1.f, 1.f);
+ Size layoutSize(81.f, 20.f);
+ float positions[] = {0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f};
struct LineRun line =
- {
- { 0u, 11u },
- { 0u, 11u },
- 81.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 11u},
+ {0u, 11u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line );
+ lines.PushBack(line);
LayoutTextData data =
- {
- "Layout text in a small area",
- "Hello world",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 11u,
- positions,
- 1u,
- lines.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 11u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout text in a small area",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 11u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 11u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of left to right text.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
- fontDescriptionRun1.familyLength = fontFamily.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
FontDescriptionRun fontDescriptionRun2;
- fontDescriptionRun2.characterRun.characterIndex = 18u;
+ fontDescriptionRun2.characterRun.characterIndex = 18u;
fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
- fontDescriptionRun2.familyLength = fontFamily.size();
- fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
- memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
+ fontDescriptionRun2.familyLength = fontFamily.size();
+ fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
+ memcpy(fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength);
fontDescriptionRun2.familyDefined = true;
fontDescriptionRun2.weightDefined = false;
- fontDescriptionRun2.widthDefined = false;
- fontDescriptionRun2.slantDefined = false;
- fontDescriptionRun2.sizeDefined = false;
+ fontDescriptionRun2.widthDefined = false;
+ fontDescriptionRun2.slantDefined = false;
+ fontDescriptionRun2.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
- fontDescriptionRuns.PushBack( fontDescriptionRun2 );
- Size textArea(100.f, 300.f);
- Size layoutSize(98.f, 97.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
+ fontDescriptionRuns.PushBack(fontDescriptionRun2);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(98.f, 97.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
- 0.f, -12.f, 8.f, -9.f, 18.f, -9.f, 27.f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f,
- 0.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 36.f, -9.f, 42.f, -9.f, 53.f, -9.f, 62.f, -11.f, 68.f, -0.f,
- 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 18.f, -9.f, 28.f, -9.f, 36.f, -0.f, 41.f, -9.f, 51.f, -12.f, 57.f, -0.f, 62.f, -11.f, 68.f, -9.f, 78.f, -9.f, 87.f, -11.f, 94.f, -2.f
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f, 0.f, -12.f, 8.f, -9.f, 18.f, -9.f, 27.f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f, 0.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 36.f, -9.f, 42.f, -9.f, 53.f, -9.f, 62.f, -11.f, 68.f, -0.f, 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 18.f, -9.f, 28.f, -9.f, 36.f, -0.f, 41.f, -9.f, 51.f, -12.f, 57.f, -0.f, 62.f, -11.f, 68.f, -9.f, 78.f, -9.f, 87.f, -11.f, 94.f, -2.f};
struct LineRun line0 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line1 =
- {
- { 12u, 6u },
- { 12u, 6u },
- 44.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 6u},
+ {12u, 6u},
+ 44.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line2 =
- {
- { 18u, 7u },
- { 18u, 7u },
- 54.f,
- 15.f,
- -4.f,
- 6.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {18u, 7u},
+ {18u, 7u},
+ 54.f,
+ 15.f,
+ -4.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line3 =
- {
- { 25u, 9u },
- { 25u, 10u },
- 68.f,
- 15.f,
- -4.f,
- 6.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {25u, 9u},
+ {25u, 10u},
+ 68.f,
+ 15.f,
+ -4.f,
+ 6.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line4 =
- {
- { 34u, 14u },
- { 35u, 14u },
- 98.f,
- 15.f,
- -4.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {34u, 14u},
+ {35u, 14u},
+ 98.f,
+ 15.f,
+ -4.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
- lines.PushBack( line2 );
- lines.PushBack( line3 );
- lines.PushBack( line4 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
+ lines.PushBack(line3);
+ lines.PushBack(line4);
LayoutTextData data =
- {
- "Layout simple multi-line text",
- "Hello world demo.\n"
- "Layout different lines of text.",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 48u,
- positions,
- 5u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 48u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout simple multi-line text",
+ "Hello world demo.\n"
+ "Layout different lines of text.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 48u,
+ positions,
+ 5u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 48u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of bidirectional text.
- const std::string fontFamily1( "TizenSans" );
+ const std::string fontFamily1("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun1.familyLength = fontFamily1.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily1.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
- const std::string fontFamily2( "TizenSansHebrew" );
+ const std::string fontFamily2("TizenSansHebrew");
// Set a known font description
FontDescriptionRun fontDescriptionRun2;
- fontDescriptionRun2.characterRun.characterIndex = 17u;
+ fontDescriptionRun2.characterRun.characterIndex = 17u;
fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun2.familyLength = fontFamily2.size();
- fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
- memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
+ fontDescriptionRun2.familyLength = fontFamily2.size();
+ fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
+ memcpy(fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength);
fontDescriptionRun2.familyDefined = true;
fontDescriptionRun2.weightDefined = false;
- fontDescriptionRun2.widthDefined = false;
- fontDescriptionRun2.slantDefined = false;
- fontDescriptionRun2.sizeDefined = false;
+ fontDescriptionRun2.widthDefined = false;
+ fontDescriptionRun2.slantDefined = false;
+ fontDescriptionRun2.sizeDefined = false;
- const std::string fontFamily3( "TizenSans" );
+ const std::string fontFamily3("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun3;
- fontDescriptionRun3.characterRun.characterIndex = 26u;
+ fontDescriptionRun3.characterRun.characterIndex = 26u;
fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun3.familyLength = fontFamily3.size();
- fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
- memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
+ fontDescriptionRun3.familyLength = fontFamily3.size();
+ fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
+ memcpy(fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength);
fontDescriptionRun3.familyDefined = true;
fontDescriptionRun3.weightDefined = false;
- fontDescriptionRun3.widthDefined = false;
- fontDescriptionRun3.slantDefined = false;
- fontDescriptionRun3.sizeDefined = false;
+ fontDescriptionRun3.widthDefined = false;
+ fontDescriptionRun3.slantDefined = false;
+ fontDescriptionRun3.sizeDefined = false;
- const std::string fontFamily4( "TizenSansHebrew" );
+ const std::string fontFamily4("TizenSansHebrew");
// Set a known font description
FontDescriptionRun fontDescriptionRun4;
- fontDescriptionRun4.characterRun.characterIndex = 28u;
+ fontDescriptionRun4.characterRun.characterIndex = 28u;
fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun4.familyLength = fontFamily4.size();
- fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
- memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
+ fontDescriptionRun4.familyLength = fontFamily4.size();
+ fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
+ memcpy(fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength);
fontDescriptionRun4.familyDefined = true;
fontDescriptionRun4.weightDefined = false;
- fontDescriptionRun4.widthDefined = false;
- fontDescriptionRun4.slantDefined = false;
- fontDescriptionRun4.sizeDefined = false;
+ fontDescriptionRun4.widthDefined = false;
+ fontDescriptionRun4.slantDefined = false;
+ fontDescriptionRun4.sizeDefined = false;
- const std::string fontFamily5( "TizenSans" );
+ const std::string fontFamily5("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun5;
- fontDescriptionRun5.characterRun.characterIndex = 38u;
+ fontDescriptionRun5.characterRun.characterIndex = 38u;
fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun5.familyLength = fontFamily5.size();
- fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
- memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
+ fontDescriptionRun5.familyLength = fontFamily5.size();
+ fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
+ memcpy(fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength);
fontDescriptionRun5.familyDefined = true;
fontDescriptionRun5.weightDefined = false;
- fontDescriptionRun5.widthDefined = false;
- fontDescriptionRun5.slantDefined = false;
- fontDescriptionRun5.sizeDefined = false;
+ fontDescriptionRun5.widthDefined = false;
+ fontDescriptionRun5.slantDefined = false;
+ fontDescriptionRun5.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
- fontDescriptionRuns.PushBack( fontDescriptionRun2 );
- fontDescriptionRuns.PushBack( fontDescriptionRun3 );
- fontDescriptionRuns.PushBack( fontDescriptionRun4 );
- fontDescriptionRuns.PushBack( fontDescriptionRun5 );
- Size textArea(100.f, 300.f);
- Size layoutSize(81.f, 120.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
+ fontDescriptionRuns.PushBack(fontDescriptionRun2);
+ fontDescriptionRuns.PushBack(fontDescriptionRun3);
+ fontDescriptionRuns.PushBack(fontDescriptionRun4);
+ fontDescriptionRuns.PushBack(fontDescriptionRun5);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(81.f, 120.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 28 .. 37
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 38 .. 49
- 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 12 .. 21
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 22 .. 27
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 28 .. 37
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 38 .. 49
+ 4.f,
+ -13.f,
+ 13.f,
+ -9.f,
+ 23.f,
+ -9.f,
+ 36.f,
+ -9.f,
+ 0.f,
+ -2.f, // 50 .. 54
+ };
struct LineRun line0 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line1 =
- {
- { 12u, 10u },
- { 12u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 10u},
+ {12u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line2 =
- {
- { 22u, 6u },
- { 22u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {22u, 6u},
+ {22u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line3 =
- {
- { 28u, 10u },
- { 28u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {28u, 10u},
+ {28u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line4 =
- {
- { 38u, 12u },
- { 38u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {38u, 12u},
+ {38u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line5 =
- {
- { 50u, 5u },
- { 50u, 5u },
- 45.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {50u, 5u},
+ {50u, 5u},
+ 45.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
- lines.PushBack( line2 );
- lines.PushBack( line3 );
- lines.PushBack( line4 );
- lines.PushBack( line5 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
+ lines.PushBack(line3);
+ lines.PushBack(line4);
+ lines.PushBack(line5);
LayoutTextData data =
- {
- "Layout bidirectional text.",
- "Hello world demo שלום עולם.\n"
- "שלום עולם hello world demo.",
- textArea,
- 5u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 55u,
- positions,
- 6u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 55u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout bidirectional text.",
+ "Hello world demo שלום עולם.\n"
+ "שלום עולם hello world demo.",
+ textArea,
+ 5u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 55u,
+ positions,
+ 6u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 55u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout a long word which doesn't fit in the width of the text area.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 29u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
- Size textArea(100.f, 300.f);
- Size layoutSize(98.f, 60.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(98.f, 60.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -9.f, 48.f, -9.f, 58.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -13.f, 86.f, -9.f,
- 0.f, -9.f, 13.f, -9.f, 23.f, -13.f, 31.f, -9.f, 41.f, -13.f, 45.f, -13.f, 48.f, -9.f, 57.f, -9.f, 69.f, -9.f, 79.f, -9.f, 85.f, -13.f, 88.f, -13.f,
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
- };
+ {
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -9.f,
+ 48.f,
+ -9.f,
+ 58.f,
+ -9.f,
+ 65.f,
+ -13.f,
+ 68.f,
+ -13.f,
+ 77.f,
+ -13.f,
+ 86.f,
+ -9.f,
+ 0.f,
+ -9.f,
+ 13.f,
+ -9.f,
+ 23.f,
+ -13.f,
+ 31.f,
+ -9.f,
+ 41.f,
+ -13.f,
+ 45.f,
+ -13.f,
+ 48.f,
+ -9.f,
+ 57.f,
+ -9.f,
+ 69.f,
+ -9.f,
+ 79.f,
+ -9.f,
+ 85.f,
+ -13.f,
+ 88.f,
+ -13.f,
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -2.f,
+ };
struct LineRun line0 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 95.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 95.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line1 =
- {
- { 12u, 12u },
- { 12u, 12u },
- 98.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 12u},
+ {12u, 12u},
+ 98.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line2 =
- {
- { 24u, 5u },
- { 24u, 5u },
- 44.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {24u, 5u},
+ {24u, 5u},
+ 44.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
- lines.PushBack( line2 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
LayoutTextData data =
- {
- "Layout a long word which doesn't fit in the width of the text area.",
- "Helloworlddemohelloworlddemo.",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 29u,
- positions,
- 3u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 29u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout a long word which doesn't fit in the width of the text area.",
+ "Helloworlddemohelloworlddemo.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 29u,
+ positions,
+ 3u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 29u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout simple text ending with a \n. It has to add a void line at the end.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 13u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
- Size textArea(100.f, 300.f);
- Size layoutSize(84.f, 40.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(84.f, 40.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -2.f, 85.f, -12.f
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -2.f, 85.f, -12.f};
struct LineRun line0 =
- {
- { 0u, 13u },
- { 0u, 13u },
- 84.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 13u},
+ {0u, 13u},
+ 84.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line1 =
- {
- { 13u, 0u },
- { 13u, 0u },
- 0.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {13u, 0u},
+ {13u, 0u},
+ 0.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
LayoutTextData data =
- {
- "Layout simple text ending with a \n.",
- "Hello world.\n",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 13u,
- positions,
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 13u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout simple text ending with a \n.",
+ "Hello world.\n",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 13u,
+ positions,
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 13u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout simple text with one character with a different font size.
- const std::string fontFamily( "TizenSans" );
+ const std::string fontFamily("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun1;
- fontDescriptionRun1.characterRun.characterIndex = 0u;
+ fontDescriptionRun1.characterRun.characterIndex = 0u;
fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
- fontDescriptionRun1.familyLength = fontFamily.size();
- fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
- memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
+ fontDescriptionRun1.familyLength = fontFamily.size();
+ fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
+ memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
fontDescriptionRun1.familyDefined = true;
fontDescriptionRun1.weightDefined = false;
- fontDescriptionRun1.widthDefined = false;
- fontDescriptionRun1.slantDefined = false;
- fontDescriptionRun1.sizeDefined = false;
+ fontDescriptionRun1.widthDefined = false;
+ fontDescriptionRun1.slantDefined = false;
+ fontDescriptionRun1.sizeDefined = false;
FontDescriptionRun fontDescriptionRun2;
- fontDescriptionRun2.characterRun.characterIndex = 6u;
+ fontDescriptionRun2.characterRun.characterIndex = 6u;
fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
- fontDescriptionRun2.familyLength = fontFamily.size();
- fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
- memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
- fontDescriptionRun2.size = 1280u;
+ fontDescriptionRun2.familyLength = fontFamily.size();
+ fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
+ memcpy(fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength);
+ fontDescriptionRun2.size = 1280u;
fontDescriptionRun2.familyDefined = true;
fontDescriptionRun2.weightDefined = false;
- fontDescriptionRun2.widthDefined = false;
- fontDescriptionRun2.slantDefined = false;
- fontDescriptionRun2.sizeDefined = true;
+ fontDescriptionRun2.widthDefined = false;
+ fontDescriptionRun2.slantDefined = false;
+ fontDescriptionRun2.sizeDefined = true;
FontDescriptionRun fontDescriptionRun3;
- fontDescriptionRun3.characterRun.characterIndex = 7u;
+ fontDescriptionRun3.characterRun.characterIndex = 7u;
fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun3.familyLength = fontFamily.size();
- fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
- memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
+ fontDescriptionRun3.familyLength = fontFamily.size();
+ fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
+ memcpy(fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength);
fontDescriptionRun3.familyDefined = true;
fontDescriptionRun3.weightDefined = false;
- fontDescriptionRun3.widthDefined = false;
- fontDescriptionRun3.slantDefined = false;
- fontDescriptionRun3.sizeDefined = false;
+ fontDescriptionRun3.widthDefined = false;
+ fontDescriptionRun3.slantDefined = false;
+ fontDescriptionRun3.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun1 );
- fontDescriptionRuns.PushBack( fontDescriptionRun2 );
- fontDescriptionRuns.PushBack( fontDescriptionRun3 );
- Size textArea(100.f, 300.f);
- Size layoutSize(89.f, 53.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun1);
+ fontDescriptionRuns.PushBack(fontDescriptionRun2);
+ fontDescriptionRuns.PushBack(fontDescriptionRun3);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(89.f, 53.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 60.f, -9.f, 70.f, -9.f, 76.f, -13.f, 80.f, -13.f, 89.f, -0.f,
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 60.f, -9.f, 70.f, -9.f, 76.f, -13.f, 80.f, -13.f, 89.f, -0.f, 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f};
struct LineRun line0 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 89.f,
- 25.f,
- -8.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 89.f,
+ 25.f,
+ -8.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line1 =
- {
- { 12u, 5u },
- { 12u, 5u },
- 44.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 5u},
+ {12u, 5u},
+ 44.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
LayoutTextData data =
- {
- "Layout simple text with one character with a different font size.",
- "Hello world demo.",
- textArea,
- 3u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 17u,
- positions,
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 17u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout simple text with one character with a different font size.",
+ "Hello world demo.",
+ textArea,
+ 3u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 17u,
+ positions,
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 17u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextLayoutMultilineText06");
- const std::string fontFamily( "TizenSansHebrew" );
+ const std::string fontFamily("TizenSansHebrew");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
- Size textArea(64.f, 100.f);
- Size layoutSize(34.f, 40.f);
+ Size textArea(64.f, 100.f);
+ Size layoutSize(34.f, 40.f);
float positions[] =
- {
- 27.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
- 22.f, -10.f, 17.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
- };
+ {
+ 27.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f, 22.f, -10.f, 17.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f};
struct LineRun line0 =
- {
- { 0u, 5u },
- { 0u, 5u },
- 32.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {0u, 5u},
+ {0u, 5u},
+ 32.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line1 =
- {
- { 5u, 5u },
- { 5u, 5u },
- 34.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {5u, 5u},
+ {5u, 5u},
+ 34.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
LayoutTextData data =
- {
- "Layout right to left text that doesn't fit in the text area after reordering.",
- "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 10u,
- positions,
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 10u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout right to left text that doesn't fit in the text area after reordering.",
+ "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 10u,
+ positions,
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 10u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextLayoutMultilineText07");
- const std::string fontFamily( "TizenSansHebrew" );
+ const std::string fontFamily("TizenSansHebrew");
// Set a known font description
FontDescriptionRun fontDescriptionRun;
- fontDescriptionRun.characterRun.characterIndex = 0u;
+ fontDescriptionRun.characterRun.characterIndex = 0u;
fontDescriptionRun.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun.familyLength = fontFamily.size();
- fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
- memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+ fontDescriptionRun.familyLength = fontFamily.size();
+ fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+ memcpy(fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength);
fontDescriptionRun.familyDefined = true;
fontDescriptionRun.weightDefined = false;
- fontDescriptionRun.widthDefined = false;
- fontDescriptionRun.slantDefined = false;
- fontDescriptionRun.sizeDefined = false;
+ fontDescriptionRun.widthDefined = false;
+ fontDescriptionRun.slantDefined = false;
+ fontDescriptionRun.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun );
+ fontDescriptionRuns.PushBack(fontDescriptionRun);
- Size textArea(26.f, 100.f);
- Size layoutSize(24.f, 60.f);
+ Size textArea(26.f, 100.f);
+ Size layoutSize(24.f, 60.f);
float positions[] =
- {
- 10.f, -10.f, 4.f, -10.f, 0.f, -10.f,
- 13.f, -10.f, 9.f, -10.f, 0.f, -13.f,
- 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
- };
+ {
+ 10.f, -10.f, 4.f, -10.f, 0.f, -10.f, 13.f, -10.f, 9.f, -10.f, 0.f, -13.f, 14.f, -10.f, 4.f, -10.f, 0.f, -10.f};
struct LineRun line0 =
- {
- { 0u, 3u },
- { 0u, 3u },
- 21.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {0u, 3u},
+ {0u, 3u},
+ 21.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line1 =
- {
- { 3u, 3u },
- { 3u, 3u },
- 22.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {3u, 3u},
+ {3u, 3u},
+ 22.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line2 =
- {
- { 6u, 3u },
- { 6u, 3u },
- 24.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {6u, 3u},
+ {6u, 3u},
+ 24.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line0 );
- lines.PushBack( line1 );
- lines.PushBack( line2 );
+ lines.PushBack(line0);
+ lines.PushBack(line1);
+ lines.PushBack(line2);
LayoutTextData data =
- {
- "Layout a single word of right to left text that doesn't fit in one single line. When layouting ltr a piece of word fits in the line but it doesn't after reordering.",
- "שנורולכאן", // If a piece of this text is laid-out ltr the width is 26. When reordered, the length is 27. This might cause alignment issues.
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 9u,
- positions,
- 3u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 9u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout a single word of right to left text that doesn't fit in one single line. When layouting ltr a piece of word fits in the line but it doesn't after reordering.",
+ "שנורולכאן", // If a piece of this text is laid-out ltr the width is 26. When reordered, the length is 27. This might cause alignment issues.
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 9u,
+ positions,
+ 3u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 9u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of bidirectional text. Update the paragraphs at the beginning.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 17u;
+ fontDescriptionRun02.characterRun.characterIndex = 17u;
fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 26u;
+ fontDescriptionRun03.characterRun.characterIndex = 26u;
fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun03.familyLength = fontLatin.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontLatin.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 28u;
+ fontDescriptionRun04.characterRun.characterIndex = 28u;
fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun04.familyLength = fontArabic.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontArabic.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 42u;
+ fontDescriptionRun05.characterRun.characterIndex = 42u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 54u;
+ fontDescriptionRun06.characterRun.characterIndex = 54u;
fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun06.familyLength = fontHebrew.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontHebrew.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun07;
- fontDescriptionRun07.characterRun.characterIndex = 64u;
+ fontDescriptionRun07.characterRun.characterIndex = 64u;
fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun07.familyLength = fontHebrew.size();
- fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
- memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+ fontDescriptionRun07.familyLength = fontHebrew.size();
+ fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
+ memcpy(fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength);
fontDescriptionRun07.familyDefined = true;
fontDescriptionRun07.weightDefined = false;
- fontDescriptionRun07.widthDefined = false;
- fontDescriptionRun07.slantDefined = false;
- fontDescriptionRun07.sizeDefined = false;
+ fontDescriptionRun07.widthDefined = false;
+ fontDescriptionRun07.slantDefined = false;
+ fontDescriptionRun07.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun08;
- fontDescriptionRun08.characterRun.characterIndex = 74u;
+ fontDescriptionRun08.characterRun.characterIndex = 74u;
fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
- fontDescriptionRun08.familyLength = fontLatin.size();
- fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
- memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
+ fontDescriptionRun08.familyLength = fontLatin.size();
+ fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
+ memcpy(fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength);
fontDescriptionRun08.familyDefined = true;
fontDescriptionRun08.weightDefined = false;
- fontDescriptionRun08.widthDefined = false;
- fontDescriptionRun08.slantDefined = false;
- fontDescriptionRun08.sizeDefined = false;
+ fontDescriptionRun08.widthDefined = false;
+ fontDescriptionRun08.slantDefined = false;
+ fontDescriptionRun08.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun09;
- fontDescriptionRun09.characterRun.characterIndex = 92u;
+ fontDescriptionRun09.characterRun.characterIndex = 92u;
fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun09.familyLength = fontLatin.size();
- fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
- memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+ fontDescriptionRun09.familyLength = fontLatin.size();
+ fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
+ memcpy(fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength);
fontDescriptionRun09.familyDefined = true;
fontDescriptionRun09.weightDefined = false;
- fontDescriptionRun09.widthDefined = false;
- fontDescriptionRun09.slantDefined = false;
- fontDescriptionRun09.sizeDefined = false;
+ fontDescriptionRun09.widthDefined = false;
+ fontDescriptionRun09.slantDefined = false;
+ fontDescriptionRun09.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun10;
- fontDescriptionRun10.characterRun.characterIndex = 104u;
+ fontDescriptionRun10.characterRun.characterIndex = 104u;
fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun10.familyLength = fontArabic.size();
- fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
- memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+ fontDescriptionRun10.familyLength = fontArabic.size();
+ fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
+ memcpy(fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength);
fontDescriptionRun10.familyDefined = true;
fontDescriptionRun10.weightDefined = false;
- fontDescriptionRun10.widthDefined = false;
- fontDescriptionRun10.slantDefined = false;
- fontDescriptionRun10.sizeDefined = false;
+ fontDescriptionRun10.widthDefined = false;
+ fontDescriptionRun10.slantDefined = false;
+ fontDescriptionRun10.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun11;
- fontDescriptionRun11.characterRun.characterIndex = 118u;
+ fontDescriptionRun11.characterRun.characterIndex = 118u;
fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun11.familyLength = fontHebrew.size();
- fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
- memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+ fontDescriptionRun11.familyLength = fontHebrew.size();
+ fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
+ memcpy(fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength);
fontDescriptionRun11.familyDefined = true;
fontDescriptionRun11.weightDefined = false;
- fontDescriptionRun11.widthDefined = false;
- fontDescriptionRun11.slantDefined = false;
- fontDescriptionRun11.sizeDefined = false;
+ fontDescriptionRun11.widthDefined = false;
+ fontDescriptionRun11.slantDefined = false;
+ fontDescriptionRun11.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun12;
- fontDescriptionRun12.characterRun.characterIndex = 128u;
+ fontDescriptionRun12.characterRun.characterIndex = 128u;
fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun12.familyLength = fontLatin.size();
- fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
- memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+ fontDescriptionRun12.familyLength = fontLatin.size();
+ fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
+ memcpy(fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength);
fontDescriptionRun12.familyDefined = true;
fontDescriptionRun12.weightDefined = false;
- fontDescriptionRun12.widthDefined = false;
- fontDescriptionRun12.slantDefined = false;
- fontDescriptionRun12.sizeDefined = false;
+ fontDescriptionRun12.widthDefined = false;
+ fontDescriptionRun12.slantDefined = false;
+ fontDescriptionRun12.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun13;
- fontDescriptionRun13.characterRun.characterIndex = 145u;
+ fontDescriptionRun13.characterRun.characterIndex = 145u;
fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun13.familyLength = fontHebrew.size();
- fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
- memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
+ fontDescriptionRun13.familyLength = fontHebrew.size();
+ fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
+ memcpy(fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength);
fontDescriptionRun13.familyDefined = true;
fontDescriptionRun13.weightDefined = false;
- fontDescriptionRun13.widthDefined = false;
- fontDescriptionRun13.slantDefined = false;
- fontDescriptionRun13.sizeDefined = false;
+ fontDescriptionRun13.widthDefined = false;
+ fontDescriptionRun13.slantDefined = false;
+ fontDescriptionRun13.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun14;
- fontDescriptionRun14.characterRun.characterIndex = 154u;
+ fontDescriptionRun14.characterRun.characterIndex = 154u;
fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun14.familyLength = fontLatin.size();
- fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
- memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
+ fontDescriptionRun14.familyLength = fontLatin.size();
+ fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
+ memcpy(fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength);
fontDescriptionRun14.familyDefined = true;
fontDescriptionRun14.weightDefined = false;
- fontDescriptionRun14.widthDefined = false;
- fontDescriptionRun14.slantDefined = false;
- fontDescriptionRun14.sizeDefined = false;
+ fontDescriptionRun14.widthDefined = false;
+ fontDescriptionRun14.slantDefined = false;
+ fontDescriptionRun14.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun15;
- fontDescriptionRun15.characterRun.characterIndex = 156u;
+ fontDescriptionRun15.characterRun.characterIndex = 156u;
fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun15.familyLength = fontHebrew.size();
- fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
- memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+ fontDescriptionRun15.familyLength = fontHebrew.size();
+ fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
+ memcpy(fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength);
fontDescriptionRun15.familyDefined = true;
fontDescriptionRun15.weightDefined = false;
- fontDescriptionRun15.widthDefined = false;
- fontDescriptionRun15.slantDefined = false;
- fontDescriptionRun15.sizeDefined = false;
+ fontDescriptionRun15.widthDefined = false;
+ fontDescriptionRun15.slantDefined = false;
+ fontDescriptionRun15.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun16;
- fontDescriptionRun16.characterRun.characterIndex = 166u;
+ fontDescriptionRun16.characterRun.characterIndex = 166u;
fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun16.familyLength = fontLatin.size();
- fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
- memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+ fontDescriptionRun16.familyLength = fontLatin.size();
+ fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+ memcpy(fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength);
fontDescriptionRun16.familyDefined = true;
fontDescriptionRun16.weightDefined = false;
- fontDescriptionRun16.widthDefined = false;
- fontDescriptionRun16.slantDefined = false;
- fontDescriptionRun16.sizeDefined = false;
+ fontDescriptionRun16.widthDefined = false;
+ fontDescriptionRun16.slantDefined = false;
+ fontDescriptionRun16.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun17;
- fontDescriptionRun17.characterRun.characterIndex = 178u;
+ fontDescriptionRun17.characterRun.characterIndex = 178u;
fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun17.familyLength = fontArabic.size();
- fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
- memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+ fontDescriptionRun17.familyLength = fontArabic.size();
+ fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+ memcpy(fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength);
fontDescriptionRun17.familyDefined = true;
fontDescriptionRun17.weightDefined = false;
- fontDescriptionRun17.widthDefined = false;
- fontDescriptionRun17.slantDefined = false;
- fontDescriptionRun17.sizeDefined = false;
+ fontDescriptionRun17.widthDefined = false;
+ fontDescriptionRun17.slantDefined = false;
+ fontDescriptionRun17.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
- fontDescriptionRuns.PushBack( fontDescriptionRun07 );
- fontDescriptionRuns.PushBack( fontDescriptionRun08 );
- fontDescriptionRuns.PushBack( fontDescriptionRun09 );
- fontDescriptionRuns.PushBack( fontDescriptionRun10 );
- fontDescriptionRuns.PushBack( fontDescriptionRun11 );
- fontDescriptionRuns.PushBack( fontDescriptionRun12 );
- fontDescriptionRuns.PushBack( fontDescriptionRun13 );
- fontDescriptionRuns.PushBack( fontDescriptionRun14 );
- fontDescriptionRuns.PushBack( fontDescriptionRun15 );
- fontDescriptionRuns.PushBack( fontDescriptionRun16 );
- fontDescriptionRuns.PushBack( fontDescriptionRun17 );
- Size textArea(100.f, 300.f);
- Size layoutSize(100.f, 380.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
+ fontDescriptionRuns.PushBack(fontDescriptionRun07);
+ fontDescriptionRuns.PushBack(fontDescriptionRun08);
+ fontDescriptionRuns.PushBack(fontDescriptionRun09);
+ fontDescriptionRuns.PushBack(fontDescriptionRun10);
+ fontDescriptionRuns.PushBack(fontDescriptionRun11);
+ fontDescriptionRuns.PushBack(fontDescriptionRun12);
+ fontDescriptionRuns.PushBack(fontDescriptionRun13);
+ fontDescriptionRuns.PushBack(fontDescriptionRun14);
+ fontDescriptionRuns.PushBack(fontDescriptionRun15);
+ fontDescriptionRuns.PushBack(fontDescriptionRun16);
+ fontDescriptionRuns.PushBack(fontDescriptionRun17);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(100.f, 380.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
- 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
- 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
- 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
- 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
- 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
- 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 12 .. 21
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 22 .. 27
+ 58.f,
+ -8.f,
+ 52.f,
+ -6.f,
+ 45.f,
+ -8.f,
+ 41.f,
+ -7.f,
+ 39.f,
+ -11.f,
+ 34.f,
+ -0.f,
+ 30.f,
+ -7.f,
+ 28.f,
+ -11.f,
+ 23.f,
+ -11.f,
+ 16.f,
+ -8.f,
+ 15.f,
+ -11.f,
+ 9.f,
+ -11.f,
+ 4.f,
+ -8.f,
+ 0.f,
+ -0.f,
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f, // 28 .. 47
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f,
+ 59.f,
+ -10.f,
+ 50.f,
+ -13.f,
+ 46.f,
+ -10.f,
+ 36.f,
+ -10.f,
+ 32.f,
+ -0.f, // 48 .. 58
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 0.f,
+ -0.f, // 59 .. 63
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 64 .. 73
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 74 .. 85
+ 4.f,
+ -13.f,
+ 13.f,
+ -9.f,
+ 23.f,
+ -9.f,
+ 36.f,
+ -9.f,
+ 0.f,
+ -2.f,
+ 0.f,
+ -12.f, // 86 .. 91
+ 0.f,
+ -13.f,
+ 8.f,
+ -9.f,
+ 18.f,
+ -13.f,
+ 22.f,
+ -13.f,
+ 25.f,
+ -9.f,
+ 34.f,
+ -0.f,
+ 38.f,
+ -9.f,
+ 50.f,
+ -9.f,
+ 60.f,
+ -9.f,
+ 66.f,
+ -13.f,
+ 69.f,
+ -13.f,
+ 79.f,
+ -0.f, // 92 .. 103
+ 92.f,
+ -8.f,
+ 86.f,
+ -6.f,
+ 79.f,
+ -8.f,
+ 75.f,
+ -7.f,
+ 73.f,
+ -11.f,
+ 68.f,
+ -0.f,
+ 64.f,
+ -7.f,
+ 62.f,
+ -11.f,
+ 57.f,
+ -11.f,
+ 50.f,
+ -8.f,
+ 49.f,
+ -11.f,
+ 43.f,
+ -11.f,
+ 38.f,
+ -8.f,
+ 34.f,
+ -0.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 10.f,
+ -10.f,
+ 0.f,
+ -10.f,
+ 99.f,
+ -0.f, // 104 .. 122
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -0.f, // 123 .. 127
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -0.f,
+ 40.f,
+ -9.f,
+ 52.f,
+ -9.f,
+ 62.f,
+ -9.f,
+ 69.f,
+ -13.f,
+ 72.f,
+ -13.f,
+ 81.f,
+ -0.f, // 128 .. 139
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 140 .. 149
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 150 .. 155
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 156 .. 165
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 166 .. 177
+ 54.f,
+ -8.f,
+ 49.f,
+ -6.f,
+ 41.f,
+ -8.f,
+ 37.f,
+ -7.f,
+ 35.f,
+ -11.f,
+ 31.f,
+ -0.f,
+ 26.f,
+ -7.f,
+ 24.f,
+ -11.f,
+ 19.f,
+ -11.f,
+ 12.f,
+ -8.f,
+ 11.f,
+ -11.f,
+ 5.f,
+ -11.f,
+ 0.f,
+ -8.f,
+ 0.f,
+ -0.f, // 178 .. 191
+ };
struct LineRun line01 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line02 =
- {
- { 12u, 10u },
- { 12u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 10u},
+ {12u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line03 =
- {
- { 22u, 6u },
- { 22u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {22u, 6u},
+ {22u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line04 =
- {
- { 28u, 14u },
- { 28u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {28u, 14u},
+ {28u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line05 =
- {
- { 42, 12u },
- { 42, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {42, 12u},
+ {42, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line06 =
- {
- { 54u, 10u },
- { 54u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {54u, 10u},
+ {54u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line07 =
- {
- { 64u, 10u },
- { 64u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {64u, 10u},
+ {64u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line08 =
- {
- { 74u, 12u },
- { 74u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {74u, 12u},
+ {74u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line09 =
- {
- { 86u, 6u },
- { 86u, 6u },
- 45.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {86u, 6u},
+ {86u, 6u},
+ 45.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line10 =
- {
- { 92u, 12u },
- { 92u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {92u, 12u},
+ {92u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line11 =
- {
- { 104u, 19u },
- { 104u, 19u },
- 100.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {104u, 19u},
+ {104u, 19u},
+ 100.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line12 =
- {
- { 123u, 5u },
- { 123u, 5u },
- 32.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {123u, 5u},
+ {123u, 5u},
+ 32.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line13 =
- {
- { 128u, 12u },
- { 128u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {128u, 12u},
+ {128u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line14 =
- {
- { 140u, 10u },
- { 140u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {140u, 10u},
+ {140u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line15 =
- {
- { 150u, 6u },
- { 150u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {150u, 6u},
+ {150u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line16 =
- {
- { 156u, 10u },
- { 156u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {156u, 10u},
+ {156u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line17 =
- {
- { 166u, 12u },
- { 166u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {166u, 12u},
+ {166u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line18 =
- {
- { 178u, 14u },
- { 178u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {178u, 14u},
+ {178u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line19 =
- {
- { 192u, 0u },
- { 192u, 0u },
- 0.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {192u, 0u},
+ {192u, 0u},
+ 0.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line01 );
- lines.PushBack( line02 );
- lines.PushBack( line03 );
- lines.PushBack( line04 );
- lines.PushBack( line05 );
- lines.PushBack( line06 );
- lines.PushBack( line07 );
- lines.PushBack( line08 );
- lines.PushBack( line09 );
- lines.PushBack( line10 );
- lines.PushBack( line11 );
- lines.PushBack( line12 );
- lines.PushBack( line13 );
- lines.PushBack( line14 );
- lines.PushBack( line15 );
- lines.PushBack( line16 );
- lines.PushBack( line17 );
- lines.PushBack( line18 );
- lines.PushBack( line19 );
+ lines.PushBack(line01);
+ lines.PushBack(line02);
+ lines.PushBack(line03);
+ lines.PushBack(line04);
+ lines.PushBack(line05);
+ lines.PushBack(line06);
+ lines.PushBack(line07);
+ lines.PushBack(line08);
+ lines.PushBack(line09);
+ lines.PushBack(line10);
+ lines.PushBack(line11);
+ lines.PushBack(line12);
+ lines.PushBack(line13);
+ lines.PushBack(line14);
+ lines.PushBack(line15);
+ lines.PushBack(line16);
+ lines.PushBack(line17);
+ lines.PushBack(line18);
+ lines.PushBack(line19);
LayoutTextData data =
- {
- "Layout bidirectional text.",
- "Hello world demo שלום עולם.\n"
- "مرحبا بالعالم hello world שלום עולם\n"
- "שלום עולם hello world demo.\n"
- "hello world مرحبا بالعالم שלום עולם\n"
- "Hello world demo שלום עולם.\n"
- "שלום עולם hello world مرحبا بالعالم\n",
- textArea,
- 17u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 192u,
- positions,
- 19u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 64u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout bidirectional text.",
+ "Hello world demo שלום עולם.\n"
+ "مرحبا بالعالم hello world שלום עולם\n"
+ "שלום עולם hello world demo.\n"
+ "hello world مرحبا بالعالم שלום עולם\n"
+ "Hello world demo שלום עולם.\n"
+ "שלום עולם hello world مرحبا بالعالم\n",
+ textArea,
+ 17u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 192u,
+ positions,
+ 19u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 64u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of bidirectional text. Update the paragraphs at the middle.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 17u;
+ fontDescriptionRun02.characterRun.characterIndex = 17u;
fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 26u;
+ fontDescriptionRun03.characterRun.characterIndex = 26u;
fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun03.familyLength = fontLatin.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontLatin.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 28u;
+ fontDescriptionRun04.characterRun.characterIndex = 28u;
fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun04.familyLength = fontArabic.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontArabic.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 42u;
+ fontDescriptionRun05.characterRun.characterIndex = 42u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 54u;
+ fontDescriptionRun06.characterRun.characterIndex = 54u;
fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun06.familyLength = fontHebrew.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontHebrew.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun07;
- fontDescriptionRun07.characterRun.characterIndex = 64u;
+ fontDescriptionRun07.characterRun.characterIndex = 64u;
fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun07.familyLength = fontHebrew.size();
- fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
- memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+ fontDescriptionRun07.familyLength = fontHebrew.size();
+ fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
+ memcpy(fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength);
fontDescriptionRun07.familyDefined = true;
fontDescriptionRun07.weightDefined = false;
- fontDescriptionRun07.widthDefined = false;
- fontDescriptionRun07.slantDefined = false;
- fontDescriptionRun07.sizeDefined = false;
+ fontDescriptionRun07.widthDefined = false;
+ fontDescriptionRun07.slantDefined = false;
+ fontDescriptionRun07.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun08;
- fontDescriptionRun08.characterRun.characterIndex = 74u;
+ fontDescriptionRun08.characterRun.characterIndex = 74u;
fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
- fontDescriptionRun08.familyLength = fontLatin.size();
- fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
- memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
+ fontDescriptionRun08.familyLength = fontLatin.size();
+ fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
+ memcpy(fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength);
fontDescriptionRun08.familyDefined = true;
fontDescriptionRun08.weightDefined = false;
- fontDescriptionRun08.widthDefined = false;
- fontDescriptionRun08.slantDefined = false;
- fontDescriptionRun08.sizeDefined = false;
+ fontDescriptionRun08.widthDefined = false;
+ fontDescriptionRun08.slantDefined = false;
+ fontDescriptionRun08.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun09;
- fontDescriptionRun09.characterRun.characterIndex = 92u;
+ fontDescriptionRun09.characterRun.characterIndex = 92u;
fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun09.familyLength = fontLatin.size();
- fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
- memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+ fontDescriptionRun09.familyLength = fontLatin.size();
+ fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
+ memcpy(fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength);
fontDescriptionRun09.familyDefined = true;
fontDescriptionRun09.weightDefined = false;
- fontDescriptionRun09.widthDefined = false;
- fontDescriptionRun09.slantDefined = false;
- fontDescriptionRun09.sizeDefined = false;
+ fontDescriptionRun09.widthDefined = false;
+ fontDescriptionRun09.slantDefined = false;
+ fontDescriptionRun09.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun10;
- fontDescriptionRun10.characterRun.characterIndex = 104u;
+ fontDescriptionRun10.characterRun.characterIndex = 104u;
fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun10.familyLength = fontArabic.size();
- fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
- memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+ fontDescriptionRun10.familyLength = fontArabic.size();
+ fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
+ memcpy(fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength);
fontDescriptionRun10.familyDefined = true;
fontDescriptionRun10.weightDefined = false;
- fontDescriptionRun10.widthDefined = false;
- fontDescriptionRun10.slantDefined = false;
- fontDescriptionRun10.sizeDefined = false;
+ fontDescriptionRun10.widthDefined = false;
+ fontDescriptionRun10.slantDefined = false;
+ fontDescriptionRun10.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun11;
- fontDescriptionRun11.characterRun.characterIndex = 118u;
+ fontDescriptionRun11.characterRun.characterIndex = 118u;
fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun11.familyLength = fontHebrew.size();
- fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
- memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+ fontDescriptionRun11.familyLength = fontHebrew.size();
+ fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
+ memcpy(fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength);
fontDescriptionRun11.familyDefined = true;
fontDescriptionRun11.weightDefined = false;
- fontDescriptionRun11.widthDefined = false;
- fontDescriptionRun11.slantDefined = false;
- fontDescriptionRun11.sizeDefined = false;
+ fontDescriptionRun11.widthDefined = false;
+ fontDescriptionRun11.slantDefined = false;
+ fontDescriptionRun11.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun12;
- fontDescriptionRun12.characterRun.characterIndex = 128u;
+ fontDescriptionRun12.characterRun.characterIndex = 128u;
fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun12.familyLength = fontLatin.size();
- fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
- memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+ fontDescriptionRun12.familyLength = fontLatin.size();
+ fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
+ memcpy(fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength);
fontDescriptionRun12.familyDefined = true;
fontDescriptionRun12.weightDefined = false;
- fontDescriptionRun12.widthDefined = false;
- fontDescriptionRun12.slantDefined = false;
- fontDescriptionRun12.sizeDefined = false;
+ fontDescriptionRun12.widthDefined = false;
+ fontDescriptionRun12.slantDefined = false;
+ fontDescriptionRun12.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun13;
- fontDescriptionRun13.characterRun.characterIndex = 145u;
+ fontDescriptionRun13.characterRun.characterIndex = 145u;
fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun13.familyLength = fontHebrew.size();
- fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
- memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
+ fontDescriptionRun13.familyLength = fontHebrew.size();
+ fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
+ memcpy(fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength);
fontDescriptionRun13.familyDefined = true;
fontDescriptionRun13.weightDefined = false;
- fontDescriptionRun13.widthDefined = false;
- fontDescriptionRun13.slantDefined = false;
- fontDescriptionRun13.sizeDefined = false;
+ fontDescriptionRun13.widthDefined = false;
+ fontDescriptionRun13.slantDefined = false;
+ fontDescriptionRun13.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun14;
- fontDescriptionRun14.characterRun.characterIndex = 154u;
+ fontDescriptionRun14.characterRun.characterIndex = 154u;
fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun14.familyLength = fontLatin.size();
- fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
- memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
+ fontDescriptionRun14.familyLength = fontLatin.size();
+ fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
+ memcpy(fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength);
fontDescriptionRun14.familyDefined = true;
fontDescriptionRun14.weightDefined = false;
- fontDescriptionRun14.widthDefined = false;
- fontDescriptionRun14.slantDefined = false;
- fontDescriptionRun14.sizeDefined = false;
+ fontDescriptionRun14.widthDefined = false;
+ fontDescriptionRun14.slantDefined = false;
+ fontDescriptionRun14.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun15;
- fontDescriptionRun15.characterRun.characterIndex = 156u;
+ fontDescriptionRun15.characterRun.characterIndex = 156u;
fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun15.familyLength = fontHebrew.size();
- fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
- memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+ fontDescriptionRun15.familyLength = fontHebrew.size();
+ fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
+ memcpy(fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength);
fontDescriptionRun15.familyDefined = true;
fontDescriptionRun15.weightDefined = false;
- fontDescriptionRun15.widthDefined = false;
- fontDescriptionRun15.slantDefined = false;
- fontDescriptionRun15.sizeDefined = false;
+ fontDescriptionRun15.widthDefined = false;
+ fontDescriptionRun15.slantDefined = false;
+ fontDescriptionRun15.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun16;
- fontDescriptionRun16.characterRun.characterIndex = 166u;
+ fontDescriptionRun16.characterRun.characterIndex = 166u;
fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun16.familyLength = fontLatin.size();
- fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
- memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+ fontDescriptionRun16.familyLength = fontLatin.size();
+ fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+ memcpy(fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength);
fontDescriptionRun16.familyDefined = true;
fontDescriptionRun16.weightDefined = false;
- fontDescriptionRun16.widthDefined = false;
- fontDescriptionRun16.slantDefined = false;
- fontDescriptionRun16.sizeDefined = false;
+ fontDescriptionRun16.widthDefined = false;
+ fontDescriptionRun16.slantDefined = false;
+ fontDescriptionRun16.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun17;
- fontDescriptionRun17.characterRun.characterIndex = 178u;
+ fontDescriptionRun17.characterRun.characterIndex = 178u;
fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun17.familyLength = fontArabic.size();
- fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
- memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+ fontDescriptionRun17.familyLength = fontArabic.size();
+ fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+ memcpy(fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength);
fontDescriptionRun17.familyDefined = true;
fontDescriptionRun17.weightDefined = false;
- fontDescriptionRun17.widthDefined = false;
- fontDescriptionRun17.slantDefined = false;
- fontDescriptionRun17.sizeDefined = false;
+ fontDescriptionRun17.widthDefined = false;
+ fontDescriptionRun17.slantDefined = false;
+ fontDescriptionRun17.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
- fontDescriptionRuns.PushBack( fontDescriptionRun07 );
- fontDescriptionRuns.PushBack( fontDescriptionRun08 );
- fontDescriptionRuns.PushBack( fontDescriptionRun09 );
- fontDescriptionRuns.PushBack( fontDescriptionRun10 );
- fontDescriptionRuns.PushBack( fontDescriptionRun11 );
- fontDescriptionRuns.PushBack( fontDescriptionRun12 );
- fontDescriptionRuns.PushBack( fontDescriptionRun13 );
- fontDescriptionRuns.PushBack( fontDescriptionRun14 );
- fontDescriptionRuns.PushBack( fontDescriptionRun15 );
- fontDescriptionRuns.PushBack( fontDescriptionRun16 );
- fontDescriptionRuns.PushBack( fontDescriptionRun17 );
- Size textArea(100.f, 300.f);
- Size layoutSize(100.f, 380.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
+ fontDescriptionRuns.PushBack(fontDescriptionRun07);
+ fontDescriptionRuns.PushBack(fontDescriptionRun08);
+ fontDescriptionRuns.PushBack(fontDescriptionRun09);
+ fontDescriptionRuns.PushBack(fontDescriptionRun10);
+ fontDescriptionRuns.PushBack(fontDescriptionRun11);
+ fontDescriptionRuns.PushBack(fontDescriptionRun12);
+ fontDescriptionRuns.PushBack(fontDescriptionRun13);
+ fontDescriptionRuns.PushBack(fontDescriptionRun14);
+ fontDescriptionRuns.PushBack(fontDescriptionRun15);
+ fontDescriptionRuns.PushBack(fontDescriptionRun16);
+ fontDescriptionRuns.PushBack(fontDescriptionRun17);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(100.f, 380.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
- 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
- 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
- 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
- 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
- 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
- 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 12 .. 21
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 22 .. 27
+ 58.f,
+ -8.f,
+ 52.f,
+ -6.f,
+ 45.f,
+ -8.f,
+ 41.f,
+ -7.f,
+ 39.f,
+ -11.f,
+ 34.f,
+ -0.f,
+ 30.f,
+ -7.f,
+ 28.f,
+ -11.f,
+ 23.f,
+ -11.f,
+ 16.f,
+ -8.f,
+ 15.f,
+ -11.f,
+ 9.f,
+ -11.f,
+ 4.f,
+ -8.f,
+ 0.f,
+ -0.f,
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f, // 28 .. 47
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f,
+ 59.f,
+ -10.f,
+ 50.f,
+ -13.f,
+ 46.f,
+ -10.f,
+ 36.f,
+ -10.f,
+ 32.f,
+ -0.f, // 48 .. 58
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 0.f,
+ -0.f, // 59 .. 63
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 64 .. 73
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 74 .. 85
+ 4.f,
+ -13.f,
+ 13.f,
+ -9.f,
+ 23.f,
+ -9.f,
+ 36.f,
+ -9.f,
+ 0.f,
+ -2.f,
+ 0.f,
+ -12.f, // 86 .. 91
+ 0.f,
+ -13.f,
+ 8.f,
+ -9.f,
+ 18.f,
+ -13.f,
+ 22.f,
+ -13.f,
+ 25.f,
+ -9.f,
+ 34.f,
+ -0.f,
+ 38.f,
+ -9.f,
+ 50.f,
+ -9.f,
+ 60.f,
+ -9.f,
+ 66.f,
+ -13.f,
+ 69.f,
+ -13.f,
+ 79.f,
+ -0.f, // 92 .. 103
+ 92.f,
+ -8.f,
+ 86.f,
+ -6.f,
+ 79.f,
+ -8.f,
+ 75.f,
+ -7.f,
+ 73.f,
+ -11.f,
+ 68.f,
+ -0.f,
+ 64.f,
+ -7.f,
+ 62.f,
+ -11.f,
+ 57.f,
+ -11.f,
+ 50.f,
+ -8.f,
+ 49.f,
+ -11.f,
+ 43.f,
+ -11.f,
+ 38.f,
+ -8.f,
+ 34.f,
+ -0.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 10.f,
+ -10.f,
+ 0.f,
+ -10.f,
+ 99.f,
+ -0.f, // 104 .. 122
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -0.f, // 123 .. 127
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -0.f,
+ 40.f,
+ -9.f,
+ 52.f,
+ -9.f,
+ 62.f,
+ -9.f,
+ 69.f,
+ -13.f,
+ 72.f,
+ -13.f,
+ 81.f,
+ -0.f, // 128 .. 139
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 140 .. 149
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 150 .. 155
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 156 .. 165
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 166 .. 177
+ 54.f,
+ -8.f,
+ 49.f,
+ -6.f,
+ 41.f,
+ -8.f,
+ 37.f,
+ -7.f,
+ 35.f,
+ -11.f,
+ 31.f,
+ -0.f,
+ 26.f,
+ -7.f,
+ 24.f,
+ -11.f,
+ 19.f,
+ -11.f,
+ 12.f,
+ -8.f,
+ 11.f,
+ -11.f,
+ 5.f,
+ -11.f,
+ 0.f,
+ -8.f,
+ 0.f,
+ -0.f, // 178 .. 191
+ };
struct LineRun line01 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line02 =
- {
- { 12u, 10u },
- { 12u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 10u},
+ {12u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line03 =
- {
- { 22u, 6u },
- { 22u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {22u, 6u},
+ {22u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line04 =
- {
- { 28u, 14u },
- { 28u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- true,
- false
- };
+ {
+ {28u, 14u},
+ {28u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ true,
+ false};
struct LineRun line05 =
- {
- { 42u, 12u },
- { 42u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {42u, 12u},
+ {42u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line06 =
- {
- { 54u, 10u },
- { 54u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {54u, 10u},
+ {54u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line07 =
- {
- { 64u, 10u },
- { 64u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {64u, 10u},
+ {64u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line08 =
- {
- { 74u, 12u },
- { 74u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 1.f,
- 0.f,
- false,
- false
- };
+ {
+ {74u, 12u},
+ {74u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 1.f,
+ 0.f,
+ false,
+ false};
struct LineRun line09 =
- {
- { 86u, 6u },
- { 86u, 6u },
- 45.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {86u, 6u},
+ {86u, 6u},
+ 45.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line10 =
- {
- { 92u, 12u },
- { 92u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {92u, 12u},
+ {92u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line11 =
- {
- { 104u, 19u },
- { 104u, 19u },
- 100.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {104u, 19u},
+ {104u, 19u},
+ 100.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line12 =
- {
- { 123u, 5u },
- { 123u, 5u },
- 32.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {123u, 5u},
+ {123u, 5u},
+ 32.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line13 =
- {
- { 128u, 12u },
- { 128u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {128u, 12u},
+ {128u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line14 =
- {
- { 140u, 10u },
- { 140u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {140u, 10u},
+ {140u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line15 =
- {
- { 150u, 6u },
- { 150u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {150u, 6u},
+ {150u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line16 =
- {
- { 156u, 10u },
- { 156u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {156u, 10u},
+ {156u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line17 =
- {
- { 166u, 12u },
- { 166u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {166u, 12u},
+ {166u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line18 =
- {
- { 178u, 14u },
- { 178u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {178u, 14u},
+ {178u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line19 =
- {
- { 192u, 0u },
- { 192u, 0u },
- 0.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {192u, 0u},
+ {192u, 0u},
+ 0.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line01 );
- lines.PushBack( line02 );
- lines.PushBack( line03 );
- lines.PushBack( line04 );
- lines.PushBack( line05 );
- lines.PushBack( line06 );
- lines.PushBack( line07 );
- lines.PushBack( line08 );
- lines.PushBack( line09 );
- lines.PushBack( line10 );
- lines.PushBack( line11 );
- lines.PushBack( line12 );
- lines.PushBack( line13 );
- lines.PushBack( line14 );
- lines.PushBack( line15 );
- lines.PushBack( line16 );
- lines.PushBack( line17 );
- lines.PushBack( line18 );
- lines.PushBack( line19 );
+ lines.PushBack(line01);
+ lines.PushBack(line02);
+ lines.PushBack(line03);
+ lines.PushBack(line04);
+ lines.PushBack(line05);
+ lines.PushBack(line06);
+ lines.PushBack(line07);
+ lines.PushBack(line08);
+ lines.PushBack(line09);
+ lines.PushBack(line10);
+ lines.PushBack(line11);
+ lines.PushBack(line12);
+ lines.PushBack(line13);
+ lines.PushBack(line14);
+ lines.PushBack(line15);
+ lines.PushBack(line16);
+ lines.PushBack(line17);
+ lines.PushBack(line18);
+ lines.PushBack(line19);
LayoutTextData data =
- {
- "Layout bidirectional text.",
- "Hello world demo שלום עולם.\n"
- "مرحبا بالعالم hello world שלום עולם\n"
- "שלום עולם hello world demo.\n"
- "hello world مرحبا بالعالم שלום עולם\n"
- "Hello world demo שלום עולם.\n"
- "שלום עולם hello world مرحبا بالعالم\n",
- textArea,
- 17u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 192u,
- positions,
- 19u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 64u,
- 64u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout bidirectional text.",
+ "Hello world demo שלום עולם.\n"
+ "مرحبا بالعالم hello world שלום עולם\n"
+ "שלום עולם hello world demo.\n"
+ "hello world مرحبا بالعالم שלום עולם\n"
+ "Hello world demo שלום עולם.\n"
+ "שלום עולם hello world مرحبا بالعالم\n",
+ textArea,
+ 17u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 192u,
+ positions,
+ 19u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 64u,
+ 64u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout some lines of bidirectional text. Update the paragraphs at the middle.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 17u;
+ fontDescriptionRun02.characterRun.characterIndex = 17u;
fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 26u;
+ fontDescriptionRun03.characterRun.characterIndex = 26u;
fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun03.familyLength = fontLatin.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontLatin.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 28u;
+ fontDescriptionRun04.characterRun.characterIndex = 28u;
fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun04.familyLength = fontArabic.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontArabic.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 42u;
+ fontDescriptionRun05.characterRun.characterIndex = 42u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 54u;
+ fontDescriptionRun06.characterRun.characterIndex = 54u;
fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun06.familyLength = fontHebrew.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontHebrew.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun07;
- fontDescriptionRun07.characterRun.characterIndex = 64u;
+ fontDescriptionRun07.characterRun.characterIndex = 64u;
fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun07.familyLength = fontHebrew.size();
- fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
- memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+ fontDescriptionRun07.familyLength = fontHebrew.size();
+ fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
+ memcpy(fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength);
fontDescriptionRun07.familyDefined = true;
fontDescriptionRun07.weightDefined = false;
- fontDescriptionRun07.widthDefined = false;
- fontDescriptionRun07.slantDefined = false;
- fontDescriptionRun07.sizeDefined = false;
+ fontDescriptionRun07.widthDefined = false;
+ fontDescriptionRun07.slantDefined = false;
+ fontDescriptionRun07.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun08;
- fontDescriptionRun08.characterRun.characterIndex = 74u;
+ fontDescriptionRun08.characterRun.characterIndex = 74u;
fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
- fontDescriptionRun08.familyLength = fontLatin.size();
- fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
- memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
+ fontDescriptionRun08.familyLength = fontLatin.size();
+ fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
+ memcpy(fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength);
fontDescriptionRun08.familyDefined = true;
fontDescriptionRun08.weightDefined = false;
- fontDescriptionRun08.widthDefined = false;
- fontDescriptionRun08.slantDefined = false;
- fontDescriptionRun08.sizeDefined = false;
+ fontDescriptionRun08.widthDefined = false;
+ fontDescriptionRun08.slantDefined = false;
+ fontDescriptionRun08.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun09;
- fontDescriptionRun09.characterRun.characterIndex = 92u;
+ fontDescriptionRun09.characterRun.characterIndex = 92u;
fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun09.familyLength = fontLatin.size();
- fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
- memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+ fontDescriptionRun09.familyLength = fontLatin.size();
+ fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
+ memcpy(fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength);
fontDescriptionRun09.familyDefined = true;
fontDescriptionRun09.weightDefined = false;
- fontDescriptionRun09.widthDefined = false;
- fontDescriptionRun09.slantDefined = false;
- fontDescriptionRun09.sizeDefined = false;
+ fontDescriptionRun09.widthDefined = false;
+ fontDescriptionRun09.slantDefined = false;
+ fontDescriptionRun09.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun10;
- fontDescriptionRun10.characterRun.characterIndex = 104u;
+ fontDescriptionRun10.characterRun.characterIndex = 104u;
fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun10.familyLength = fontArabic.size();
- fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
- memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+ fontDescriptionRun10.familyLength = fontArabic.size();
+ fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
+ memcpy(fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength);
fontDescriptionRun10.familyDefined = true;
fontDescriptionRun10.weightDefined = false;
- fontDescriptionRun10.widthDefined = false;
- fontDescriptionRun10.slantDefined = false;
- fontDescriptionRun10.sizeDefined = false;
+ fontDescriptionRun10.widthDefined = false;
+ fontDescriptionRun10.slantDefined = false;
+ fontDescriptionRun10.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun11;
- fontDescriptionRun11.characterRun.characterIndex = 118u;
+ fontDescriptionRun11.characterRun.characterIndex = 118u;
fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun11.familyLength = fontHebrew.size();
- fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
- memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+ fontDescriptionRun11.familyLength = fontHebrew.size();
+ fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
+ memcpy(fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength);
fontDescriptionRun11.familyDefined = true;
fontDescriptionRun11.weightDefined = false;
- fontDescriptionRun11.widthDefined = false;
- fontDescriptionRun11.slantDefined = false;
- fontDescriptionRun11.sizeDefined = false;
+ fontDescriptionRun11.widthDefined = false;
+ fontDescriptionRun11.slantDefined = false;
+ fontDescriptionRun11.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun12;
- fontDescriptionRun12.characterRun.characterIndex = 128u;
+ fontDescriptionRun12.characterRun.characterIndex = 128u;
fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
- fontDescriptionRun12.familyLength = fontLatin.size();
- fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
- memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+ fontDescriptionRun12.familyLength = fontLatin.size();
+ fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
+ memcpy(fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength);
fontDescriptionRun12.familyDefined = true;
fontDescriptionRun12.weightDefined = false;
- fontDescriptionRun12.widthDefined = false;
- fontDescriptionRun12.slantDefined = false;
- fontDescriptionRun12.sizeDefined = false;
+ fontDescriptionRun12.widthDefined = false;
+ fontDescriptionRun12.slantDefined = false;
+ fontDescriptionRun12.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun13;
- fontDescriptionRun13.characterRun.characterIndex = 145u;
+ fontDescriptionRun13.characterRun.characterIndex = 145u;
fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
- fontDescriptionRun13.familyLength = fontHebrew.size();
- fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
- memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
+ fontDescriptionRun13.familyLength = fontHebrew.size();
+ fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
+ memcpy(fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength);
fontDescriptionRun13.familyDefined = true;
fontDescriptionRun13.weightDefined = false;
- fontDescriptionRun13.widthDefined = false;
- fontDescriptionRun13.slantDefined = false;
- fontDescriptionRun13.sizeDefined = false;
+ fontDescriptionRun13.widthDefined = false;
+ fontDescriptionRun13.slantDefined = false;
+ fontDescriptionRun13.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun14;
- fontDescriptionRun14.characterRun.characterIndex = 154u;
+ fontDescriptionRun14.characterRun.characterIndex = 154u;
fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun14.familyLength = fontLatin.size();
- fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
- memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
+ fontDescriptionRun14.familyLength = fontLatin.size();
+ fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
+ memcpy(fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength);
fontDescriptionRun14.familyDefined = true;
fontDescriptionRun14.weightDefined = false;
- fontDescriptionRun14.widthDefined = false;
- fontDescriptionRun14.slantDefined = false;
- fontDescriptionRun14.sizeDefined = false;
+ fontDescriptionRun14.widthDefined = false;
+ fontDescriptionRun14.slantDefined = false;
+ fontDescriptionRun14.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun15;
- fontDescriptionRun15.characterRun.characterIndex = 156u;
+ fontDescriptionRun15.characterRun.characterIndex = 156u;
fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun15.familyLength = fontHebrew.size();
- fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
- memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+ fontDescriptionRun15.familyLength = fontHebrew.size();
+ fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
+ memcpy(fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength);
fontDescriptionRun15.familyDefined = true;
fontDescriptionRun15.weightDefined = false;
- fontDescriptionRun15.widthDefined = false;
- fontDescriptionRun15.slantDefined = false;
- fontDescriptionRun15.sizeDefined = false;
+ fontDescriptionRun15.widthDefined = false;
+ fontDescriptionRun15.slantDefined = false;
+ fontDescriptionRun15.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun16;
- fontDescriptionRun16.characterRun.characterIndex = 166u;
+ fontDescriptionRun16.characterRun.characterIndex = 166u;
fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun16.familyLength = fontLatin.size();
- fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
- memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+ fontDescriptionRun16.familyLength = fontLatin.size();
+ fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+ memcpy(fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength);
fontDescriptionRun16.familyDefined = true;
fontDescriptionRun16.weightDefined = false;
- fontDescriptionRun16.widthDefined = false;
- fontDescriptionRun16.slantDefined = false;
- fontDescriptionRun16.sizeDefined = false;
+ fontDescriptionRun16.widthDefined = false;
+ fontDescriptionRun16.slantDefined = false;
+ fontDescriptionRun16.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun17;
- fontDescriptionRun17.characterRun.characterIndex = 178u;
+ fontDescriptionRun17.characterRun.characterIndex = 178u;
fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun17.familyLength = fontArabic.size();
- fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
- memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+ fontDescriptionRun17.familyLength = fontArabic.size();
+ fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+ memcpy(fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength);
fontDescriptionRun17.familyDefined = true;
fontDescriptionRun17.weightDefined = false;
- fontDescriptionRun17.widthDefined = false;
- fontDescriptionRun17.slantDefined = false;
- fontDescriptionRun17.sizeDefined = false;
+ fontDescriptionRun17.widthDefined = false;
+ fontDescriptionRun17.slantDefined = false;
+ fontDescriptionRun17.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
- fontDescriptionRuns.PushBack( fontDescriptionRun07 );
- fontDescriptionRuns.PushBack( fontDescriptionRun08 );
- fontDescriptionRuns.PushBack( fontDescriptionRun09 );
- fontDescriptionRuns.PushBack( fontDescriptionRun10 );
- fontDescriptionRuns.PushBack( fontDescriptionRun11 );
- fontDescriptionRuns.PushBack( fontDescriptionRun12 );
- fontDescriptionRuns.PushBack( fontDescriptionRun13 );
- fontDescriptionRuns.PushBack( fontDescriptionRun14 );
- fontDescriptionRuns.PushBack( fontDescriptionRun15 );
- fontDescriptionRuns.PushBack( fontDescriptionRun16 );
- fontDescriptionRuns.PushBack( fontDescriptionRun17 );
- Size textArea(100.f, 300.f);
- Size layoutSize(100.f, 380.f);
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
+ fontDescriptionRuns.PushBack(fontDescriptionRun07);
+ fontDescriptionRuns.PushBack(fontDescriptionRun08);
+ fontDescriptionRuns.PushBack(fontDescriptionRun09);
+ fontDescriptionRuns.PushBack(fontDescriptionRun10);
+ fontDescriptionRuns.PushBack(fontDescriptionRun11);
+ fontDescriptionRuns.PushBack(fontDescriptionRun12);
+ fontDescriptionRuns.PushBack(fontDescriptionRun13);
+ fontDescriptionRuns.PushBack(fontDescriptionRun14);
+ fontDescriptionRuns.PushBack(fontDescriptionRun15);
+ fontDescriptionRuns.PushBack(fontDescriptionRun16);
+ fontDescriptionRuns.PushBack(fontDescriptionRun17);
+ Size textArea(100.f, 300.f);
+ Size layoutSize(100.f, 380.f);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
- 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
- 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
- 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
- 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
- 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
- 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
- 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
- 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
- };
+ {
+ 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 12 .. 21
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 22 .. 27
+ 58.f,
+ -8.f,
+ 52.f,
+ -6.f,
+ 45.f,
+ -8.f,
+ 41.f,
+ -7.f,
+ 39.f,
+ -11.f,
+ 34.f,
+ -0.f,
+ 30.f,
+ -7.f,
+ 28.f,
+ -11.f,
+ 23.f,
+ -11.f,
+ 16.f,
+ -8.f,
+ 15.f,
+ -11.f,
+ 9.f,
+ -11.f,
+ 4.f,
+ -8.f,
+ 0.f,
+ -0.f,
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f, // 28 .. 47
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f,
+ 59.f,
+ -10.f,
+ 50.f,
+ -13.f,
+ 46.f,
+ -10.f,
+ 36.f,
+ -10.f,
+ 32.f,
+ -0.f, // 48 .. 58
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 0.f,
+ -0.f, // 59 .. 63
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 64 .. 73
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 74 .. 85
+ 4.f,
+ -13.f,
+ 13.f,
+ -9.f,
+ 23.f,
+ -9.f,
+ 36.f,
+ -9.f,
+ 0.f,
+ -2.f,
+ 0.f,
+ -12.f, // 86 .. 91
+ 0.f,
+ -13.f,
+ 8.f,
+ -9.f,
+ 18.f,
+ -13.f,
+ 22.f,
+ -13.f,
+ 25.f,
+ -9.f,
+ 34.f,
+ -0.f,
+ 38.f,
+ -9.f,
+ 50.f,
+ -9.f,
+ 60.f,
+ -9.f,
+ 66.f,
+ -13.f,
+ 69.f,
+ -13.f,
+ 79.f,
+ -0.f, // 92 .. 103
+ 92.f,
+ -8.f,
+ 86.f,
+ -6.f,
+ 79.f,
+ -8.f,
+ 75.f,
+ -7.f,
+ 73.f,
+ -11.f,
+ 68.f,
+ -0.f,
+ 64.f,
+ -7.f,
+ 62.f,
+ -11.f,
+ 57.f,
+ -11.f,
+ 50.f,
+ -8.f,
+ 49.f,
+ -11.f,
+ 43.f,
+ -11.f,
+ 38.f,
+ -8.f,
+ 34.f,
+ -0.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 10.f,
+ -10.f,
+ 0.f,
+ -10.f,
+ 99.f,
+ -0.f, // 104 .. 122
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -0.f, // 123 .. 127
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -0.f,
+ 40.f,
+ -9.f,
+ 52.f,
+ -9.f,
+ 62.f,
+ -9.f,
+ 69.f,
+ -13.f,
+ 72.f,
+ -13.f,
+ 81.f,
+ -0.f, // 128 .. 139
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 68.f,
+ -10.f,
+ 59.f,
+ -13.f,
+ 54.f,
+ -10.f,
+ 45.f,
+ -10.f,
+ 79.f,
+ -0.f, // 140 .. 149
+ 23.f,
+ -10.f,
+ 19.f,
+ -10.f,
+ 10.f,
+ -13.f,
+ 0.f,
+ -10.f,
+ 32.f,
+ -2.f,
+ 36.f,
+ -12.f, // 150 .. 155
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f, // 156 .. 165
+ 4.f,
+ -13.f,
+ 12.f,
+ -9.f,
+ 22.f,
+ -13.f,
+ 26.f,
+ -13.f,
+ 29.f,
+ -9.f,
+ 38.f,
+ -0.f,
+ 42.f,
+ -9.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -9.f,
+ 70.f,
+ -13.f,
+ 73.f,
+ -13.f,
+ 0.f,
+ -0.f, // 166 .. 177
+ 54.f,
+ -8.f,
+ 49.f,
+ -6.f,
+ 41.f,
+ -8.f,
+ 37.f,
+ -7.f,
+ 35.f,
+ -11.f,
+ 31.f,
+ -0.f,
+ 26.f,
+ -7.f,
+ 24.f,
+ -11.f,
+ 19.f,
+ -11.f,
+ 12.f,
+ -8.f,
+ 11.f,
+ -11.f,
+ 5.f,
+ -11.f,
+ 0.f,
+ -8.f,
+ 0.f,
+ -0.f, // 178 .. 191
+ };
struct LineRun line01 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line02 =
- {
- { 12u, 10u },
- { 12u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {12u, 10u},
+ {12u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line03 =
- {
- { 22u, 6u },
- { 22u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {22u, 6u},
+ {22u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line04 =
- {
- { 28u, 14u },
- { 28u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {28u, 14u},
+ {28u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line05 =
- {
- { 42u, 12u },
- { 42u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {42u, 12u},
+ {42u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line06 =
- {
- { 54u, 10u },
- { 54u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {54u, 10u},
+ {54u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line07 =
- {
- { 64u, 10u },
- { 64u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {64u, 10u},
+ {64u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line08 =
- {
- { 74u, 12u },
- { 74u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 1.f,
- 0.f,
- false,
- false
- };
+ {
+ {74u, 12u},
+ {74u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 1.f,
+ 0.f,
+ false,
+ false};
struct LineRun line09 =
- {
- { 86u, 6u },
- { 86u, 6u },
- 45.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {86u, 6u},
+ {86u, 6u},
+ 45.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line10 =
- {
- { 92u, 12u },
- { 92u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {92u, 12u},
+ {92u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line11 =
- {
- { 104u, 19u },
- { 104u, 19u },
- 100.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {104u, 19u},
+ {104u, 19u},
+ 100.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line12 =
- {
- { 123u, 5u },
- { 123u, 5u },
- 32.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {123u, 5u},
+ {123u, 5u},
+ 32.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line13 =
- {
- { 128u, 12u },
- { 128u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {128u, 12u},
+ {128u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line14 =
- {
- { 140u, 10u },
- { 140u, 10u },
- 79.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {140u, 10u},
+ {140u, 10u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line15 =
- {
- { 150u, 6u },
- { 150u, 6u },
- 35.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {150u, 6u},
+ {150u, 6u},
+ 35.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line16 =
- {
- { 156u, 10u },
- { 156u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {156u, 10u},
+ {156u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line17 =
- {
- { 166u, 12u },
- { 166u, 12u },
- 79.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {166u, 12u},
+ {166u, 12u},
+ 79.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line18 =
- {
- { 178u, 14u },
- { 178u, 14u },
- 63.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {178u, 14u},
+ {178u, 14u},
+ 63.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line19 =
- {
- { 192u, 0u },
- { 192u, 0u },
- 0.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {192u, 0u},
+ {192u, 0u},
+ 0.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines;
- lines.PushBack( line01 );
- lines.PushBack( line02 );
- lines.PushBack( line03 );
- lines.PushBack( line04 );
- lines.PushBack( line05 );
- lines.PushBack( line06 );
- lines.PushBack( line07 );
- lines.PushBack( line08 );
- lines.PushBack( line09 );
- lines.PushBack( line10 );
- lines.PushBack( line11 );
- lines.PushBack( line12 );
- lines.PushBack( line13 );
- lines.PushBack( line14 );
- lines.PushBack( line15 );
- lines.PushBack( line16 );
- lines.PushBack( line17 );
- lines.PushBack( line18 );
- lines.PushBack( line19 );
+ lines.PushBack(line01);
+ lines.PushBack(line02);
+ lines.PushBack(line03);
+ lines.PushBack(line04);
+ lines.PushBack(line05);
+ lines.PushBack(line06);
+ lines.PushBack(line07);
+ lines.PushBack(line08);
+ lines.PushBack(line09);
+ lines.PushBack(line10);
+ lines.PushBack(line11);
+ lines.PushBack(line12);
+ lines.PushBack(line13);
+ lines.PushBack(line14);
+ lines.PushBack(line15);
+ lines.PushBack(line16);
+ lines.PushBack(line17);
+ lines.PushBack(line18);
+ lines.PushBack(line19);
LayoutTextData data =
- {
- "Layout bidirectional text.",
- "Hello world demo שלום עולם.\n"
- "مرحبا بالعالم hello world שלום עולם\n"
- "שלום עולם hello world demo.\n"
- "hello world مرحبا بالعالم שלום עולם\n"
- "Hello world demo שלום עולם.\n"
- "שלום עולם hello world مرحبا بالعالم\n",
- textArea,
- 17u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 192u,
- positions,
- 19u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 128u,
- 64u,
- false,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout bidirectional text.",
+ "Hello world demo שלום עולם.\n"
+ "مرحبا بالعالم hello world שלום עולם\n"
+ "שלום עולם hello world demo.\n"
+ "hello world مرحبا بالعالم שלום עולם\n"
+ "Hello world demo שלום עולם.\n"
+ "שלום עולם hello world مرحبا بالعالم\n",
+ textArea,
+ 17u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 192u,
+ positions,
+ 19u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 128u,
+ 64u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout single-line LTR text with ellipsis.
- const std::string fontLatin( "TizenSans" );
+ const std::string fontLatin("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
struct LineRun line01 =
- {
- { 0u, 13u },
- { 0u, 13u },
- 93.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- true
- };
+ {
+ {0u, 13u},
+ {0u, 13u},
+ 93.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ true};
Vector<LineRun> lines;
- lines.PushBack( line01 );
+ lines.PushBack(line01);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, 85.f, -13.f,
- };
-
- Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 20.f );
+ {
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -0.f,
+ 40.f,
+ -9.f,
+ 52.f,
+ -9.f,
+ 62.f,
+ -9.f,
+ 69.f,
+ -13.f,
+ 72.f,
+ -13.f,
+ 81.f,
+ -0.f,
+ 85.f,
+ -13.f,
+ };
+
+ Size textArea(100.f, 50.f);
+ Size layoutSize(100.f, 20.f);
LayoutTextData data =
- {
- "Layout single-line LTR text with ellipsis.",
- "Hello world demo hello world demo hello world demo.",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 13u,
- positions,
- 1u,
- lines.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 51u,
- true,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout single-line LTR text with ellipsis.",
+ "Hello world demo hello world demo hello world demo.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 13u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 51u,
+ true,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout multi-line LTR text with ellipsis.
- const std::string fontLatin( "TizenSans" );
+ const std::string fontLatin("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
struct LineRun line01 =
- {
- { 0u, 12u },
- { 0u, 12u },
- 81.f,
- 15.f,
- -5.f,
- 4.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 12u},
+ {0u, 12u},
+ 81.f,
+ 15.f,
+ -5.f,
+ 4.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line02 =
- {
- { 12u, 12u },
- { 12u, 12u },
- 95.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- true
- };
+ {
+ {12u, 12u},
+ {12u, 12u},
+ 95.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ true};
Vector<LineRun> lines;
- lines.PushBack( line01 );
- lines.PushBack( line02 );
+ lines.PushBack(line01);
+ lines.PushBack(line02);
float positions[] =
- {
- 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
- 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 46.f, -13.f, 54.f, -9.f, 64.f, -13.f, 68.f, -13.f, 71.f, -9.f, 80.f, -0.f, 84.f, -9.f,
- };
-
- Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 40.f );
+ {
+ 0.f,
+ -12.f,
+ 10.f,
+ -9.f,
+ 20.f,
+ -13.f,
+ 24.f,
+ -13.f,
+ 27.f,
+ -9.f,
+ 36.f,
+ -0.f,
+ 40.f,
+ -9.f,
+ 52.f,
+ -9.f,
+ 62.f,
+ -9.f,
+ 69.f,
+ -13.f,
+ 72.f,
+ -13.f,
+ 81.f,
+ -0.f,
+ 0.f,
+ -13.f,
+ 9.f,
+ -9.f,
+ 19.f,
+ -9.f,
+ 32.f,
+ -9.f,
+ 41.f,
+ -0.f,
+ 46.f,
+ -13.f,
+ 54.f,
+ -9.f,
+ 64.f,
+ -13.f,
+ 68.f,
+ -13.f,
+ 71.f,
+ -9.f,
+ 80.f,
+ -0.f,
+ 84.f,
+ -9.f,
+ };
+
+ Size textArea(100.f, 50.f);
+ Size layoutSize(100.f, 40.f);
LayoutTextData data =
- {
- "Layout multi-line LTR text with ellipsis.",
- "Hello world demo hello world demo hello world demo.",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 24u,
- positions,
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 51u,
- true,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout multi-line LTR text with ellipsis.",
+ "Hello world demo hello world demo hello world demo.",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 24u,
+ positions,
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 51u,
+ true,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout single-line RTL text with ellipsis.
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun01.familyLength = fontHebrew.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontHebrew.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 10u;
+ fontDescriptionRun02.characterRun.characterIndex = 10u;
fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun02.familyLength = fontArabic.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontArabic.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 24u;
+ fontDescriptionRun03.characterRun.characterIndex = 24u;
fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun03.familyLength = fontHebrew.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontHebrew.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 34u;
+ fontDescriptionRun04.characterRun.characterIndex = 34u;
fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun04.familyLength = fontArabic.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontArabic.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun05.familyLength = fontHebrew.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontHebrew.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 58u;
+ fontDescriptionRun06.characterRun.characterIndex = 58u;
fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
struct LineRun line01 =
- {
- { 0u, 14u },
- { 0u, 14u },
- 98.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- true
- };
+ {
+ {0u, 14u},
+ {0u, 14u},
+ 98.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ true};
Vector<LineRun> lines;
- lines.PushBack( line01 );
+ lines.PushBack(line01);
float positions[] =
- {
- 87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 65.f, -10.f, 60.f, -0.f, 51.f, -10.f, 47.f, -10.f, 38.f, -13.f, 29.f, -10.f, 24.f, -0.f, 17.f, -8.f, 12.f, -6.f, 4.f, -8.f, 0.f, -7.f, 78.f, -11.f, 73.f, -0.f,
- };
-
- Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 20.f );
+ {
+ 87.f,
+ -10.f,
+ 79.f,
+ -13.f,
+ 74.f,
+ -10.f,
+ 65.f,
+ -10.f,
+ 60.f,
+ -0.f,
+ 51.f,
+ -10.f,
+ 47.f,
+ -10.f,
+ 38.f,
+ -13.f,
+ 29.f,
+ -10.f,
+ 24.f,
+ -0.f,
+ 17.f,
+ -8.f,
+ 12.f,
+ -6.f,
+ 4.f,
+ -8.f,
+ 0.f,
+ -7.f,
+ 78.f,
+ -11.f,
+ 73.f,
+ -0.f,
+ };
+
+ Size textArea(100.f, 50.f);
+ Size layoutSize(100.f, 20.f);
LayoutTextData data =
- {
- "Layout single-line RTL text with ellipsis.",
- "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 16u,
- positions,
- 1u,
- lines.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 72u,
- true,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout single-line RTL text with ellipsis.",
+ "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 16u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 72u,
+ true,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Layout multi-line RTL text with ellipsis.
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun01.familyLength = fontHebrew.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontHebrew.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 10u;
+ fontDescriptionRun02.characterRun.characterIndex = 10u;
fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun02.familyLength = fontArabic.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontArabic.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 24u;
+ fontDescriptionRun03.characterRun.characterIndex = 24u;
fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun03.familyLength = fontHebrew.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontHebrew.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 34u;
+ fontDescriptionRun04.characterRun.characterIndex = 34u;
fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun04.familyLength = fontArabic.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontArabic.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun05.familyLength = fontHebrew.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontHebrew.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 58u;
+ fontDescriptionRun06.characterRun.characterIndex = 58u;
fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
struct LineRun line01 =
- {
- { 0u, 10u },
- { 0u, 10u },
- 70.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 10u},
+ {0u, 10u},
+ 70.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
struct LineRun line02 =
- {
- { 10u, 19u },
- { 10u, 19u },
- 99.f,
- 15.f,
- -5.f,
- 5.f,
- 0.f,
- 0.f,
- false,
- true
- };
+ {
+ {10u, 19u},
+ {10u, 19u},
+ 99.f,
+ 15.f,
+ -5.f,
+ 5.f,
+ 0.f,
+ 0.f,
+ false,
+ true};
Vector<LineRun> lines;
- lines.PushBack( line01 );
- lines.PushBack( line02 );
+ lines.PushBack(line01);
+ lines.PushBack(line02);
float positions[] =
- {
- 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, 96.f, -8.f, 91.f, -6.f, 83.f, -8.f, 79.f, -7.f, 78.f, -11.f, 73.f, -0.f,
- 68.f, -7.f, 67.f, -11.f, 61.f, -11.f, 55.f, -8.f, 53.f, -11.f, 47.f, -11.f, 42.f, -8.f, 38.f, -0.f, 27.f, -10.f, 18.f, -13.f, 14.f, -10.f, 4.f, -10.f, 0.f, -0.f, 92.f, -10.f, 88.f, -10.f, 79.f, -13.f, 70.f, -10.f, 65.f, -0.f,
- };
-
- Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 40.f );
+ {
+ 63.f,
+ -10.f,
+ 54.f,
+ -13.f,
+ 50.f,
+ -10.f,
+ 41.f,
+ -10.f,
+ 36.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 23.f,
+ -10.f,
+ 14.f,
+ -13.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f,
+ 96.f,
+ -8.f,
+ 91.f,
+ -6.f,
+ 83.f,
+ -8.f,
+ 79.f,
+ -7.f,
+ 78.f,
+ -11.f,
+ 73.f,
+ -0.f,
+ 68.f,
+ -7.f,
+ 67.f,
+ -11.f,
+ 61.f,
+ -11.f,
+ 55.f,
+ -8.f,
+ 53.f,
+ -11.f,
+ 47.f,
+ -11.f,
+ 42.f,
+ -8.f,
+ 38.f,
+ -0.f,
+ 27.f,
+ -10.f,
+ 18.f,
+ -13.f,
+ 14.f,
+ -10.f,
+ 4.f,
+ -10.f,
+ 0.f,
+ -0.f,
+ 92.f,
+ -10.f,
+ 88.f,
+ -10.f,
+ 79.f,
+ -13.f,
+ 70.f,
+ -10.f,
+ 65.f,
+ -0.f,
+ };
+
+ Size textArea(100.f, 50.f);
+ Size layoutSize(100.f, 40.f);
LayoutTextData data =
- {
- "Layout multi-line RTL text with ellipsis.",
- "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 34u,
- positions,
- 2u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 72u,
- true,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Layout multi-line RTL text with ellipsis.",
+ "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 34u,
+ positions,
+ 2u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 72u,
+ true,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextLayoutEllipsis05");
- const std::string fontLatin( "TizenSans" );
+ const std::string fontLatin("TizenSans");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
struct LineRun line01 =
- {
- { 0u, 11u },
- { 0u, 11u },
- 80.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- true
- };
+ {
+ {0u, 11u},
+ {0u, 11u},
+ 80.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ true};
Vector<LineRun> lines;
- lines.PushBack( line01 );
+ lines.PushBack(line01);
float positions[] =
- {
- 0.f, -12.f
- };
+ {
+ 0.f, -12.f};
- Size textArea( 100.f, 19.f );
- Size layoutSize( 100.f, 20.f );
+ Size textArea(100.f, 19.f);
+ Size layoutSize(100.f, 20.f);
LayoutTextData data =
- {
- "Not enough height.",
- "Hello world",
- textArea,
- 1u,
- fontDescriptionRuns.Begin(),
- layoutSize,
- 1u,
- positions,
- 1u,
- lines.Begin(),
- Layout::Engine::MULTI_LINE_BOX,
- 0u,
- 11u,
- true,
- DevelText::EllipsisPosition::END,
- true
- };
+ {
+ "Not enough height.",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 1u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 11u,
+ true,
+ DevelText::EllipsisPosition::END,
+ true};
- if( !LayoutTextTest( data ) )
+ if(!LayoutTextTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Begin alignment for the first paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::BEGIN,
- Text::VerticalAlignment::TOP,
- 0u,
- 22u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
+ {
+ "Begin alignment for the first paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
+ 0u,
+ 22u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
- if( !AlignTest( data ) )
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 33.f, 19.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Begin alignment for the mid paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::BEGIN,
- Text::VerticalAlignment::TOP,
- 22u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "Begin alignment for the mid paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
+ 22u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Begin alignment for the last paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::BEGIN,
- Text::VerticalAlignment::TOP,
- 48u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "Begin alignment for the last paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
+ 48u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {9.f, 15.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Center alignment for the first paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::CENTER,
- Text::VerticalAlignment::TOP,
- 0u,
- 22u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
+ {
+ "Center alignment for the first paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
+ 0u,
+ 22u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
- if( !AlignTest( data ) )
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 14.f, 9.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Center alignment for the mid paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::CENTER,
- Text::VerticalAlignment::TOP,
- 22u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "Center alignment for the mid paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
+ 22u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 16.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 9.f, 16.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Center alignment for the last paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::CENTER,
- Text::VerticalAlignment::TOP,
- 48u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "Center alignment for the last paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
+ 48u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 19.f, 30.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {19.f, 30.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "End alignment for the first paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::END,
- Text::VerticalAlignment::TOP,
- 0u,
- 22u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
+ {
+ "End alignment for the first paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
+ 0u,
+ 22u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
- if( !AlignTest( data ) )
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, -4.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "End alignment for the mid paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::END,
- Text::VerticalAlignment::TOP,
- 22u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "End alignment for the mid paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
+ 22u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 33.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 19.f, 33.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "End alignment for the last paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::END,
- Text::VerticalAlignment::TOP,
- 48u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- false
- };
-
- if( !AlignTest( data ) )
+ {
+ "End alignment for the last paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
+ 48u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ false};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Begin alignment for the first paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::END,
- Text::VerticalAlignment::TOP,
- 0u,
- 22u,
- 6u,
- positions,
- Dali::LayoutDirection::RIGHT_TO_LEFT,
- true
- };
+ {
+ "Begin alignment for the first paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
+ 0u,
+ 22u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::RIGHT_TO_LEFT,
+ true};
- if( !AlignTest( data ) )
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 19.f, 30.f, 33.f, 0.f, 0.f, 0.f };
+ float positions[] = {19.f, 30.f, 33.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "End alignment for the last paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::END,
- Text::VerticalAlignment::TOP,
- 0u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- true
- };
+ {
+ "End alignment for the last paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
+ 0u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ true};
- if( !AlignTest( data ) )
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
// Calculate text alignment.
- const std::string fontLatin( "TizenSans" );
- const std::string fontHebrew( "TizenSansHebrew" );
- const std::string fontArabic( "TizenSansArabic" );
+ const std::string fontLatin("TizenSans");
+ const std::string fontHebrew("TizenSansHebrew");
+ const std::string fontArabic("TizenSansArabic");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun01.familyLength = fontLatin.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 12u;
+ fontDescriptionRun02.characterRun.characterIndex = 12u;
fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
- fontDescriptionRun02.familyLength = fontHebrew.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontHebrew.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 22u;
+ fontDescriptionRun03.characterRun.characterIndex = 22u;
fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun03.familyLength = fontArabic.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontArabic.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
FontDescriptionRun fontDescriptionRun04;
- fontDescriptionRun04.characterRun.characterIndex = 36u;
+ fontDescriptionRun04.characterRun.characterIndex = 36u;
fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun04.familyLength = fontLatin.size();
- fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
- memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+ fontDescriptionRun04.familyLength = fontLatin.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength);
fontDescriptionRun04.familyDefined = true;
fontDescriptionRun04.weightDefined = false;
- fontDescriptionRun04.widthDefined = false;
- fontDescriptionRun04.slantDefined = false;
- fontDescriptionRun04.sizeDefined = false;
+ fontDescriptionRun04.widthDefined = false;
+ fontDescriptionRun04.slantDefined = false;
+ fontDescriptionRun04.sizeDefined = false;
FontDescriptionRun fontDescriptionRun05;
- fontDescriptionRun05.characterRun.characterIndex = 48u;
+ fontDescriptionRun05.characterRun.characterIndex = 48u;
fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
- fontDescriptionRun05.familyLength = fontLatin.size();
- fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
- memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+ fontDescriptionRun05.familyLength = fontLatin.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength);
fontDescriptionRun05.familyDefined = true;
fontDescriptionRun05.weightDefined = false;
- fontDescriptionRun05.widthDefined = false;
- fontDescriptionRun05.slantDefined = false;
- fontDescriptionRun05.sizeDefined = false;
+ fontDescriptionRun05.widthDefined = false;
+ fontDescriptionRun05.slantDefined = false;
+ fontDescriptionRun05.sizeDefined = false;
FontDescriptionRun fontDescriptionRun06;
- fontDescriptionRun06.characterRun.characterIndex = 60u;
+ fontDescriptionRun06.characterRun.characterIndex = 60u;
fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
- fontDescriptionRun06.familyLength = fontArabic.size();
- fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
- memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
+ fontDescriptionRun06.familyLength = fontArabic.size();
+ fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+ memcpy(fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength);
fontDescriptionRun06.familyDefined = true;
fontDescriptionRun06.weightDefined = false;
- fontDescriptionRun06.widthDefined = false;
- fontDescriptionRun06.slantDefined = false;
- fontDescriptionRun06.sizeDefined = false;
+ fontDescriptionRun06.widthDefined = false;
+ fontDescriptionRun06.slantDefined = false;
+ fontDescriptionRun06.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns;
- fontDescriptionRuns.PushBack( fontDescriptionRun01 );
- fontDescriptionRuns.PushBack( fontDescriptionRun02 );
- fontDescriptionRuns.PushBack( fontDescriptionRun03 );
- fontDescriptionRuns.PushBack( fontDescriptionRun04 );
- fontDescriptionRuns.PushBack( fontDescriptionRun05 );
- fontDescriptionRuns.PushBack( fontDescriptionRun06 );
+ fontDescriptionRuns.PushBack(fontDescriptionRun01);
+ fontDescriptionRuns.PushBack(fontDescriptionRun02);
+ fontDescriptionRuns.PushBack(fontDescriptionRun03);
+ fontDescriptionRuns.PushBack(fontDescriptionRun04);
+ fontDescriptionRuns.PushBack(fontDescriptionRun05);
+ fontDescriptionRuns.PushBack(fontDescriptionRun06);
- float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+ float positions[] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
- Size textArea( 100.f, 300.f );
+ Size textArea(100.f, 300.f);
AlignData data =
- {
- "Begin alignment for the first paragraph.",
- "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
- textArea,
- 6u,
- fontDescriptionRuns.Begin(),
- Text::HorizontalAlignment::BEGIN,
- Text::VerticalAlignment::TOP,
- 48u,
- 26u,
- 6u,
- positions,
- Dali::LayoutDirection::LEFT_TO_RIGHT,
- true
- };
-
- if( !AlignTest( data ) )
+ {
+ "Begin alignment for the first paragraph.",
+ "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
+ textArea,
+ 6u,
+ fontDescriptionRuns.Begin(),
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
+ 48u,
+ 26u,
+ 6u,
+ positions,
+ Dali::LayoutDirection::LEFT_TO_RIGHT,
+ true};
+
+ if(!AlignTest(data))
{
tet_result(TET_FAIL);
}
tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
Layout::Engine engine;
- DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+ DALI_TEST_EQUALS(0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
- engine.SetDefaultLineSpacing( 10.f );
- DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+ engine.SetDefaultLineSpacing(10.f);
+ DALI_TEST_EQUALS(10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
tet_result(TET_PASS);
END_TEST;
// Test retrieving metrics from group of characters
- const std::string fontFamily( "TizenSansHindi" );
+ const std::string fontFamily("TizenSansHindi");
// Set a known font description
FontDescriptionRun fontDescriptionRun01;
- fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun01.familyLength = fontFamily.size();
- fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
- memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyLength = fontFamily.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength);
fontDescriptionRun01.familyDefined = true;
fontDescriptionRun01.weightDefined = false;
- fontDescriptionRun01.widthDefined = false;
- fontDescriptionRun01.slantDefined = false;
- fontDescriptionRun01.sizeDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun02;
- fontDescriptionRun02.characterRun.characterIndex = 0u;
+ fontDescriptionRun02.characterRun.characterIndex = 0u;
fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun02.familyLength = fontFamily.size();
- fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
- memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+ fontDescriptionRun02.familyLength = fontFamily.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength);
fontDescriptionRun02.familyDefined = true;
fontDescriptionRun02.weightDefined = false;
- fontDescriptionRun02.widthDefined = false;
- fontDescriptionRun02.slantDefined = false;
- fontDescriptionRun02.sizeDefined = false;
+ fontDescriptionRun02.widthDefined = false;
+ fontDescriptionRun02.slantDefined = false;
+ fontDescriptionRun02.sizeDefined = false;
// Set a known font description
FontDescriptionRun fontDescriptionRun03;
- fontDescriptionRun03.characterRun.characterIndex = 0u;
+ fontDescriptionRun03.characterRun.characterIndex = 0u;
fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
- fontDescriptionRun03.familyLength = fontFamily.size();
- fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
- memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
+ fontDescriptionRun03.familyLength = fontFamily.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength);
fontDescriptionRun03.familyDefined = true;
fontDescriptionRun03.weightDefined = false;
- fontDescriptionRun03.widthDefined = false;
- fontDescriptionRun03.slantDefined = false;
- fontDescriptionRun03.sizeDefined = false;
+ fontDescriptionRun03.widthDefined = false;
+ fontDescriptionRun03.slantDefined = false;
+ fontDescriptionRun03.sizeDefined = false;
Vector<FontDescriptionRun> fontDescriptionRuns01;
- fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
+ fontDescriptionRuns01.PushBack(fontDescriptionRun01);
Vector<FontDescriptionRun> fontDescriptionRuns02;
- fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
+ fontDescriptionRuns02.PushBack(fontDescriptionRun02);
Vector<FontDescriptionRun> fontDescriptionRuns03;
- fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
+ fontDescriptionRuns03.PushBack(fontDescriptionRun03);
// Set a text area.
Size textArea(100.f, 100.f);
-
// Group: second glyph doesn't exceed the width of the first glyph
- float positions01[] = { 0.f, -11.f };
+ float positions01[] = {0.f, -11.f};
struct LineRun line01 =
- {
- { 0u, 1u },
- { 0u, 1u },
- 11.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 1u},
+ {0u, 1u},
+ 11.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines01;
- lines01.PushBack( line01 );
+ lines01.PushBack(line01);
Size layoutSize01 = Vector2(11.f, 20.f);
// Group: second glyph doesn't exceed the width of the first glyph
- float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
-
- struct LineRun line02 =
- {
- { 0u, 2u },
- { 0u, 2u },
- 16.f,
- 15.f,
- -5.f,
- 0.f,
+ float positions02[] = {
0.f,
- 0.f,
- false,
- false
+ -11.f,
+ 7.f,
+ -15.f,
};
+
+ struct LineRun line02 =
+ {
+ {0u, 2u},
+ {0u, 2u},
+ 16.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines02;
- lines02.PushBack( line02 );
+ lines02.PushBack(line02);
Size layoutSize02 = Vector2(16.f, 20.f);
// Group: second glyph doesn't exceed the width of the first glyph
- float positions03[] = { 0.f, -11.f , 2.f, -15.f };
+ float positions03[] = {0.f, -11.f, 2.f, -15.f};
struct LineRun line03 =
- {
- { 0u, 2u },
- { 0u, 2u },
- 11.f,
- 15.f,
- -5.f,
- 0.f,
- 0.f,
- 0.f,
- false,
- false
- };
+ {
+ {0u, 2u},
+ {0u, 2u},
+ 11.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ 0.f,
+ false,
+ false};
Vector<LineRun> lines03;
- lines03.PushBack( line03 );
+ lines03.PushBack(line03);
Size layoutSize03 = Vector2(11.f, 20.f);
- /////////////////////////////
+ /////////////////////////////
struct LayoutTextData data[] =
- {
- {
- "Single glyph",
- "प",
- textArea,
- 1u,
- fontDescriptionRuns01.Begin(),
- layoutSize01,
- 1u,
- positions01,
- 1u,
- lines01.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 1u,
- false,
- DevelText::EllipsisPosition::END,
- true
- },
{
- "Group: second glyph exceeds the width of the first glyph",
- "पो",
- textArea,
- 1u,
- fontDescriptionRuns02.Begin(),
- layoutSize02,
- 2u,
- positions02,
- 1u,
- lines02.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 2u,
- false,
- DevelText::EllipsisPosition::END,
- true
- },
- {
- "Group: second glyph doesn't exceed the width of the first glyph",
- "पे",
- textArea,
- 1u,
- fontDescriptionRuns03.Begin(),
- layoutSize03,
- 2u,
- positions03,
- 1u,
- lines03.Begin(),
- Layout::Engine::SINGLE_LINE_BOX,
- 0u,
- 2u,
- false,
- DevelText::EllipsisPosition::END,
- true
- }
- };
- const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
-
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ {"Single glyph",
+ "प",
+ textArea,
+ 1u,
+ fontDescriptionRuns01.Begin(),
+ layoutSize01,
+ 1u,
+ positions01,
+ 1u,
+ lines01.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 1u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true},
+ {"Group: second glyph exceeds the width of the first glyph",
+ "पो",
+ textArea,
+ 1u,
+ fontDescriptionRuns02.Begin(),
+ layoutSize02,
+ 2u,
+ positions02,
+ 1u,
+ lines02.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 2u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true},
+ {"Group: second glyph doesn't exceed the width of the first glyph",
+ "पे",
+ textArea,
+ 1u,
+ fontDescriptionRuns03.Begin(),
+ layoutSize03,
+ 2u,
+ positions03,
+ 1u,
+ lines03.Begin(),
+ Layout::Engine::SINGLE_LINE_BOX,
+ 0u,
+ 2u,
+ false,
+ DevelText::EllipsisPosition::END,
+ true}};
+ const unsigned int numberOfTests = sizeof(data) / sizeof(LayoutTextData);
+
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !LayoutTextTest( data[index] ) )
+ if(!LayoutTextTest(data[index]))
{
tet_result(TET_FAIL);
}
/*
- * 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.
*
*/
-#include <iostream>
#include <stdlib.h>
#include <unistd.h>
+#include <iostream>
-#include <dali-toolkit/internal/text/shaper.h>
#include <dali-toolkit-test-suite-utils.h>
#include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/internal/text/shaper.h>
#include <toolkit-text-utils.h>
using namespace Dali;
namespace
{
-const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
struct GlyphInfoData
{
- FontId fontId; ///< Identifies the font containing the glyph
- GlyphIndex index; ///< Uniquely identifies a glyph for a given FontId
- float width; ///< The width of the glyph
- float height; ///< The height of the glyph
- float xBearing; ///< The distance from the cursor position to the leftmost border of the glyph
- 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.
+ FontId fontId; ///< Identifies the font containing the glyph
+ GlyphIndex index; ///< Uniquely identifies a glyph for a given FontId
+ float width; ///< The width of the glyph
+ float height; ///< The height of the glyph
+ float xBearing; ///< The distance from the cursor position to the leftmost border of the glyph
+ 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 )
+bool IsEqualGlyph(const GlyphInfoData& glyphData, const GlyphInfo& glyph)
{
- if( glyphData.fontId != glyph.fontId )
+ if(glyphData.fontId != glyph.fontId)
{
return false;
}
- if( glyphData.index != glyph.index )
+ if(glyphData.index != glyph.index)
{
return false;
}
- if( fabsf( glyphData.width - glyph.width ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.width - glyph.width) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( fabsf( glyphData.height - glyph.height ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.height - glyph.height) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( fabsf( glyphData.xBearing - glyph.xBearing ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.xBearing - glyph.xBearing) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( fabsf( glyphData.yBearing - glyph.yBearing ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.yBearing - glyph.yBearing) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( fabsf( glyphData.advance - floor(glyph.advance) ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.advance - floor(glyph.advance)) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( fabsf( glyphData.scaleFactor - glyph.scaleFactor ) > Math::MACHINE_EPSILON_1000 )
+ if(fabsf(glyphData.scaleFactor - glyph.scaleFactor) > Math::MACHINE_EPSILON_1000)
{
return false;
}
- if( glyphData.isItalicRequired != glyph.isItalicRequired )
+ if(glyphData.isItalicRequired != glyph.isItalicRequired)
{
return false;
}
- if( glyphData.isBoldRequired != glyph.isBoldRequired )
+ if(glyphData.isBoldRequired != glyph.isBoldRequired)
{
return false;
}
struct ShapeInfoData
{
- std::string description; ///< Description of the test.
- std::string text; ///< input text.
- uint32_t index; ///< The index from where to start to query the break info.
- uint32_t numberOfCharacters; ///< The requested number of characters.
- uint32_t expectedNumberOfGlyphs; ///< The expected number of glyphs.
- GlyphInfoData* glyphs; ///< The glyphs.
- CharacterIndex* characterIndices; ///< The character index for each glyph.
- 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.
+ std::string description; ///< Description of the test.
+ std::string text; ///< input text.
+ uint32_t index; ///< The index from where to start to query the break info.
+ uint32_t numberOfCharacters; ///< The requested number of characters.
+ uint32_t expectedNumberOfGlyphs; ///< The expected number of glyphs.
+ GlyphInfoData* glyphs; ///< The glyphs.
+ CharacterIndex* characterIndices; ///< The character index for each glyph.
+ 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 )
+bool ShapeInfoTest(const ShapeInfoData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
-
- CreateTextModel( data.text,
- textArea,
- data.fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- data.markupProcessorEnabled,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+
+ CreateTextModel(data.text,
+ textArea,
+ data.fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ data.markupProcessorEnabled,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
// 2) Clear the model.
- Vector<GlyphInfo>& glyphs = visualModel->mGlyphs;
- Vector<CharacterIndex>& glyphToCharacter = visualModel->mGlyphsToCharacters;
- Vector<Length>& charactersPerGlyph = visualModel->mCharactersPerGlyph;
- Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
- Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
+ Vector<GlyphInfo>& glyphs = visualModel->mGlyphs;
+ Vector<CharacterIndex>& glyphToCharacter = visualModel->mGlyphsToCharacters;
+ Vector<Length>& charactersPerGlyph = visualModel->mCharactersPerGlyph;
+ Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
+ Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
// Get the glyph index.
GlyphIndex glyphIndex = 0u;
- if( 0u != visualModel->mCharactersToGlyph.Count() )
+ if(0u != visualModel->mCharactersToGlyph.Count())
{
- glyphIndex = *( visualModel->mCharactersToGlyph.Begin() + data.index );
+ glyphIndex = *(visualModel->mCharactersToGlyph.Begin() + data.index);
const CharacterIndex lastCharacterIndex = data.index + data.numberOfCharacters - 1u;
- const Length numberOfGlyphs = *( visualModel->mCharactersToGlyph.Begin() + lastCharacterIndex ) + *( visualModel->mGlyphsPerCharacter.Begin() + lastCharacterIndex ) - glyphIndex;
+ const Length numberOfGlyphs = *(visualModel->mCharactersToGlyph.Begin() + lastCharacterIndex) + *(visualModel->mGlyphsPerCharacter.Begin() + lastCharacterIndex) - glyphIndex;
// Erase the glyph info from the text model.
// Got from the ShapeText() function.
- glyphs.Erase( glyphs.Begin() + glyphIndex, glyphs.Begin() + glyphIndex + numberOfGlyphs );
- glyphToCharacter.Erase( glyphToCharacter.Begin() + glyphIndex, glyphToCharacter.Begin() + glyphIndex + numberOfGlyphs );
- charactersPerGlyph.Erase( charactersPerGlyph.Begin() + glyphIndex, charactersPerGlyph.Begin() + glyphIndex + numberOfGlyphs );
+ glyphs.Erase(glyphs.Begin() + glyphIndex, glyphs.Begin() + glyphIndex + numberOfGlyphs);
+ glyphToCharacter.Erase(glyphToCharacter.Begin() + glyphIndex, glyphToCharacter.Begin() + glyphIndex + numberOfGlyphs);
+ charactersPerGlyph.Erase(charactersPerGlyph.Begin() + glyphIndex, charactersPerGlyph.Begin() + glyphIndex + numberOfGlyphs);
// Got from the VisualModel::CreateCharacterToGlyphTable() and the VisualModel::CreateGlyphsPerCharacterTable() methods.
- charactersToGlyph.Erase( charactersToGlyph.Begin() + data.index,
- charactersToGlyph.Begin() + data.index + data.numberOfCharacters );
- glyphsPerCharacter.Erase( glyphsPerCharacter.Begin() + data.index,
- glyphsPerCharacter.Begin() + data.index + data.numberOfCharacters );
+ charactersToGlyph.Erase(charactersToGlyph.Begin() + data.index,
+ charactersToGlyph.Begin() + data.index + data.numberOfCharacters);
+ glyphsPerCharacter.Erase(glyphsPerCharacter.Begin() + data.index,
+ glyphsPerCharacter.Begin() + data.index + data.numberOfCharacters);
// Update the glyph to character indices.
- for( Vector<CharacterIndex>::Iterator it = glyphToCharacter.Begin() + glyphIndex,
- endIt = glyphToCharacter.End();
- it != endIt;
- ++it )
+ for(Vector<CharacterIndex>::Iterator it = glyphToCharacter.Begin() + glyphIndex,
+ endIt = glyphToCharacter.End();
+ it != endIt;
+ ++it)
{
CharacterIndex& index = *it;
index -= data.numberOfCharacters;
}
-
}
// Reset the metrics got from the model as the ShapeText() function doesn't retrieve them.
- for( Vector<GlyphInfo>::Iterator it = glyphs.Begin(),
- endIt = glyphs.End();
- it != endIt;
- ++it )
+ for(Vector<GlyphInfo>::Iterator it = glyphs.Begin(),
+ endIt = glyphs.End();
+ it != endIt;
+ ++it)
{
- GlyphInfo& info = *it;
- info.width = 0.f;
- info.height = 0.f;
- info.xBearing = 0.f;
- info.yBearing = 0.f;
+ GlyphInfo& info = *it;
+ info.width = 0.f;
+ info.height = 0.f;
+ info.xBearing = 0.f;
+ info.yBearing = 0.f;
info.scaleFactor = 0.f;
}
Vector<GlyphIndex> newParagraphGlyphs;
- ShapeText( logicalModel->mText,
- logicalModel->mLineBreakInfo,
- logicalModel->mScriptRuns,
- logicalModel->mFontRuns,
- data.index,
- glyphIndex,
- data.numberOfCharacters,
- glyphs,
- glyphToCharacter,
- charactersPerGlyph,
- newParagraphGlyphs );
+ ShapeText(logicalModel->mText,
+ logicalModel->mLineBreakInfo,
+ logicalModel->mScriptRuns,
+ logicalModel->mFontRuns,
+ data.index,
+ glyphIndex,
+ data.numberOfCharacters,
+ glyphs,
+ glyphToCharacter,
+ charactersPerGlyph,
+ newParagraphGlyphs);
// Clear the advance of the new paragraph glyphs.
- for( Vector<GlyphIndex>::Iterator it = newParagraphGlyphs.Begin(),
- endIt = newParagraphGlyphs.End();
- it != endIt;
- ++it )
+ for(Vector<GlyphIndex>::Iterator it = newParagraphGlyphs.Begin(),
+ endIt = newParagraphGlyphs.End();
+ it != endIt;
+ ++it)
{
- GlyphInfo& info = *( glyphs.Begin() + *it );
- info.advance = 0.f;
+ GlyphInfo& info = *(glyphs.Begin() + *it);
+ info.advance = 0.f;
}
// 4) Compare the results.
- if( data.expectedNumberOfGlyphs != glyphs.Count() )
+ if(data.expectedNumberOfGlyphs != glyphs.Count())
{
std::cout << " Different number of glyphs : " << glyphs.Count() << ", expected : " << data.expectedNumberOfGlyphs << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
+ for(unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index)
{
- if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) )
+ if(!IsEqualGlyph(data.glyphs[index], glyphs[index]))
{
std::cout << " different glyph info, index : " << index << std::endl;
std::cout << " isItalicRequired : " << expectedGlyphInfo.isItalicRequired << std::endl;
std::cout << " isBoldRequired : " << expectedGlyphInfo.isBoldRequired << std::endl;
-
return false;
}
}
- for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
+ for(unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index)
{
- if( data.characterIndices[index] != glyphToCharacter[index] )
+ if(data.characterIndices[index] != glyphToCharacter[index])
{
std::cout << " different character index, index : " << index << std::endl;
return false;
}
}
- for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
+ for(unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index)
{
- if( data.charactersPerGlyph[index] != charactersPerGlyph[index] )
+ if(data.charactersPerGlyph[index] != charactersPerGlyph[index])
{
std::cout << " different character per glyph, index : " << index << std::endl;
return false;
}
}
- if( data.expectedNumberOfNewParagraphGlyphs != newParagraphGlyphs.Count() )
+ if(data.expectedNumberOfNewParagraphGlyphs != newParagraphGlyphs.Count())
{
std::cout << " Different number of new paragraph glyphs : " << newParagraphGlyphs.Count() << ", expected : " << data.expectedNumberOfNewParagraphGlyphs << std::endl;
return false;
}
- for( unsigned int index = 0u; index < data.expectedNumberOfNewParagraphGlyphs; ++index )
+ for(unsigned int index = 0u; index < data.expectedNumberOfNewParagraphGlyphs; ++index)
{
- if( data.newParagraphGlyphs[index] != newParagraphGlyphs[index] )
+ if(data.newParagraphGlyphs[index] != newParagraphGlyphs[index])
{
std::cout << " different new paragraph glyph, index : " << index << std::endl;
return false;
void LoadTextShapeFonts()
{
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
- fontClient.SetDpi( 96u, 96u );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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" );
+ 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 );
+ fontClient.SetDpi(96u, 96u);
- char* pathNamePtr = get_current_dir_name();
- const std::string pathName( pathNamePtr );
- free( pathNamePtr );
+ 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" );
+ 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 );
+ fontClient.SetDpi(96u, 96u);
+ char* pathNamePtr = get_current_dir_name();
+ const std::string pathName(pathNamePtr);
+ free(pathNamePtr);
TextAbstraction::FontDescription fontDescriptionText;
fontDescriptionText.path = "";
tet_infoline(" UtcDaliTextShape");
struct GlyphInfoData glyphs02[] =
- {
- { 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 };
- Length charactersPerGlyph02[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
+ {
+ {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};
+ Length charactersPerGlyph02[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u};
struct GlyphInfoData glyphs03[] =
- {
- { 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 };
- Length charactersPerGlyph03[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
- CharacterIndex newParagraphGlyphs03[] = { 11u, 16u };
+ {
+ {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};
+ Length charactersPerGlyph03[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u};
+ CharacterIndex newParagraphGlyphs03[] = {11u, 16u};
struct GlyphInfoData glyphs04[] =
- {
- { 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 };
- Length charactersPerGlyph04[] = { 0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u };
+ {
+ {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};
+ Length charactersPerGlyph04[] = {0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u};
struct GlyphInfoData glyphs05[] =
- {
- { 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, 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, 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 characterIndices05[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u,
- 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u,
- 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u,
- 30u, 31u, 32u, 33u, 34u, 35u, 37u, 38u, 39u, 40u,
- 41u, 42u, 43u, 44u, 45u, 46u, 47u, 48u, 49u, 50u,
- 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u,
- 61u, 62u, 63u, 64u, 65u, 66u, 67u, 68u, 69u, 70u,
- 71u, 72u, 73u, 74u };
- Length charactersPerGlyph05[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 2u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u };
- CharacterIndex newParagraphGlyphs05[] = { 26u };
- CharacterIndex newParagraphGlyphs06[] = { 49u };
- CharacterIndex newParagraphGlyphs07[] = { 73u };
+ {
+ {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, 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, 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 characterIndices05[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 37u, 38u, 39u, 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 64u, 65u, 66u, 67u, 68u, 69u, 70u, 71u, 72u, 73u, 74u};
+ Length charactersPerGlyph05[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u};
+ CharacterIndex newParagraphGlyphs05[] = {26u};
+ CharacterIndex newParagraphGlyphs06[] = {49u};
+ CharacterIndex newParagraphGlyphs07[] = {73u};
Vector<FontDescriptionRun> fontDescriptions01;
Vector<FontDescriptionRun> fontDescriptions02;
Vector<FontDescriptionRun> fontDescriptions05;
Vector<FontDescriptionRun> fontDescriptions06;
- const std::string fontFamily( "TizenSans" );
- const std::string fontFamilyMalayalam( "Noto Sans Malayalam" );
+ const std::string fontFamily("TizenSans");
+ const std::string fontFamilyMalayalam("Noto Sans Malayalam");
FontDescriptionRun fontDescriptionRun01 =
- {
{
+ {0u,
+ 11u},
+ nullptr,
0u,
- 11u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength);
- fontDescriptions01.PushBack( fontDescriptionRun01 );
+ fontDescriptions01.PushBack(fontDescriptionRun01);
FontDescriptionRun fontDescriptionRun02 =
- {
{
+ {0u,
+ 17u},
+ nullptr,
0u,
- 17u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy(fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength);
- fontDescriptions02.PushBack( fontDescriptionRun02 );
+ fontDescriptions02.PushBack(fontDescriptionRun02);
FontDescriptionRun fontDescriptionRun03 =
- {
{
+ {0u,
+ 8u},
+ nullptr,
0u,
- 8u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy(fontDescriptionRun03.familyName, fontFamilyMalayalam.c_str(), fontDescriptionRun03.familyLength);
- fontDescriptions03.PushBack( fontDescriptionRun03 );
+ fontDescriptions03.PushBack(fontDescriptionRun03);
FontDescriptionRun fontDescriptionRun04 =
- {
{
+ {0u,
+ 75u},
+ nullptr,
0u,
- 75u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy(fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength);
- fontDescriptions04.PushBack( fontDescriptionRun04 );
+ fontDescriptions04.PushBack(fontDescriptionRun04);
FontDescriptionRun fontDescriptionRun05 =
- {
{
+ {0u,
+ 75u},
+ nullptr,
0u,
- 75u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy(fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength);
- fontDescriptions05.PushBack( fontDescriptionRun05 );
+ 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[] =
- {
- {
- "Zero characters",
- "",
- 0u,
- 0u,
- 0u,
- nullptr,
- nullptr,
- nullptr,
- 0u,
- nullptr,
- false,
- },
{
- "Latin script",
- "Hello world",
- 0u,
- 11u,
- 11u,
- glyphs02,
- characterIndices02,
- charactersPerGlyph02,
- 0u,
+ {0u,
+ 75u},
nullptr,
- false,
- fontDescriptions01
- },
- {
- "Latin script. Some paragraphs.",
- "Hello world\ndemo\n",
- 0u,
- 17u,
- 17u,
- glyphs03,
- characterIndices03,
- charactersPerGlyph03,
- 2u,
- newParagraphGlyphs03,
- false,
- fontDescriptions02
- },
- {
- "Malayalam script. More glyphs than characters.",
- "ജോസോഹോവോ",
- 0u,
- 8u,
- 12u,
- glyphs04,
- characterIndices04,
- charactersPerGlyph04,
0u,
- nullptr,
+ TextAbstraction::FontWeight::NONE,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::NONE,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
false,
- fontDescriptions03
- },
- {
- "Latin script with some paragraphs. Update initial paragraph.",
- "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
- 0u,
- 27u,
- 74u,
- glyphs05,
- characterIndices05,
- charactersPerGlyph05,
- 1u,
- newParagraphGlyphs05,
false,
- fontDescriptions04,
- },
- {
- "Latin script with some paragraphs. Update mid paragraph.",
- "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
- 27u,
- 24u,
- 74u,
- glyphs05,
- characterIndices05,
- charactersPerGlyph05,
- 1u,
- newParagraphGlyphs06,
false,
- fontDescriptions05
- },
+ 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[] =
{
- "Latin script with some paragraphs. Update final paragraph.",
- "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
- 51u,
- 24u,
- 74u,
- glyphs05,
- characterIndices05,
- charactersPerGlyph05,
- 1u,
- newParagraphGlyphs07,
- false,
- fontDescriptions06
- },
- };
+ {
+ "Zero characters",
+ "",
+ 0u,
+ 0u,
+ 0u,
+ nullptr,
+ nullptr,
+ nullptr,
+ 0u,
+ nullptr,
+ false,
+ },
+ {"Latin script",
+ "Hello world",
+ 0u,
+ 11u,
+ 11u,
+ glyphs02,
+ characterIndices02,
+ charactersPerGlyph02,
+ 0u,
+ nullptr,
+ false,
+ fontDescriptions01},
+ {"Latin script. Some paragraphs.",
+ "Hello world\ndemo\n",
+ 0u,
+ 17u,
+ 17u,
+ glyphs03,
+ characterIndices03,
+ charactersPerGlyph03,
+ 2u,
+ newParagraphGlyphs03,
+ false,
+ fontDescriptions02},
+ {"Malayalam script. More glyphs than characters.",
+ "ജോസോഹോവോ",
+ 0u,
+ 8u,
+ 12u,
+ glyphs04,
+ characterIndices04,
+ charactersPerGlyph04,
+ 0u,
+ nullptr,
+ false,
+ fontDescriptions03},
+ {
+ "Latin script with some paragraphs. Update initial paragraph.",
+ "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
+ 0u,
+ 27u,
+ 74u,
+ glyphs05,
+ characterIndices05,
+ charactersPerGlyph05,
+ 1u,
+ newParagraphGlyphs05,
+ false,
+ fontDescriptions04,
+ },
+ {"Latin script with some paragraphs. Update mid paragraph.",
+ "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
+ 27u,
+ 24u,
+ 74u,
+ glyphs05,
+ characterIndices05,
+ charactersPerGlyph05,
+ 1u,
+ newParagraphGlyphs06,
+ false,
+ fontDescriptions05},
+ {"Latin script with some paragraphs. Update final paragraph.",
+ "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
+ 51u,
+ 24u,
+ 74u,
+ glyphs05,
+ characterIndices05,
+ charactersPerGlyph05,
+ 1u,
+ newParagraphGlyphs07,
+ false,
+ fontDescriptions06},
+ };
const unsigned int numberOfTests = 7u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
LoadTextShapeFonts();
- if( !ShapeInfoTest( data[index] ) )
+ if(!ShapeInfoTest(data[index]))
{
tet_result(TET_FAIL);
}
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 },
- };
+ {
+ {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 },
- };
+ {
+ {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 };
+ CharacterIndex characterIndices[] = {0u, 1u, 2u, 3u};
+ Length charactersPerGlyph[] = {1u, 1u, 1u, 1u};
Vector<FontDescriptionRun> fontDescriptions01;
Vector<FontDescriptionRun> fontDescriptions02;
- const std::string fontFamily( "Roboto" );
+ const std::string fontFamily("Roboto");
FontDescriptionRun fontDescriptionRun01 =
- {
{
+ {0u,
+ 4u},
+ nullptr,
0u,
- 4u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::BOLD,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::ITALIC,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- true,
- false,
- true,
- false
- };
+ 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 );
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy(fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength);
fontDescriptions01.PushBack(fontDescriptionRun01);
FontDescriptionRun fontDescriptionRun02 =
- {
{
+ {0u,
+ 1u},
+ nullptr,
0u,
- 1u
- },
- nullptr,
- 0u,
- TextAbstraction::FontWeight::NONE,
- TextAbstraction::FontWidth::NONE,
- TextAbstraction::FontSlant::NONE,
- TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
- true,
- false,
- false,
- false,
- false
- };
+ 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 );
+ 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
- };
+ {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 );
+ 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
- };
+ {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 );
+ 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
- };
+ {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 );
+ 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
- }
- };
+ {"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 )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
LoadSoftwareStylingFonts();
- if( !ShapeInfoTest( data[index] ) )
+ if(!ShapeInfoTest(data[index]))
{
tet_result(TET_FAIL);
}
END_TEST;
}
-
int UtcDaliTextShapeEmojiSequences(void)
{
-
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextShapeEmojiSequences");
- const std::string colorFontFamily( "NotoColorEmoji" );
- const std::string textFontFamily( "DejaVuSans" );
+ const std::string colorFontFamily("NotoColorEmoji");
+ const std::string textFontFamily("DejaVuSans");
LoadEmojiFonts();
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 };
-
-
+ {
+ {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 };
+ {
+ {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);
+ 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);
+ 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);
+ 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);
-
+ 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
- },
- };
+ {"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 )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
- tet_infoline( data[index].description.c_str());
- if( !ShapeInfoTest( data[index] ) )
+ tet_infoline(data[index].description.c_str());
+ if(!ShapeInfoTest(data[index]))
{
tet_result(TET_FAIL);
}
/*
- * 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.
#include <dali-toolkit/dali-toolkit.h>
#include <toolkit-text-utils.h>
-
using namespace Dali;
using namespace Toolkit;
using namespace Text;
// void CreateGlyphsPerCharacterTable( CharacterIndex startIndex,
// Length numberOfCharacters )
-
//////////////////////////////////////////////////////////
namespace
{
-
struct SetGlyphsPerCharacterData
{
std::string description; ///< Description of the test.
unsigned int* glyphsIndices; ///< The glyph indices.
};
-bool SetGlyphsPerCharacterTest( const SetGlyphsPerCharacterData& data )
+bool SetGlyphsPerCharacterTest(const SetGlyphsPerCharacterData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
- Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
+ Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
+ Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
// 2) Clear the model.
GlyphIndex startGlyphIndex = 0u;
- if( 0u != charactersToGlyph.Count() )
+ if(0u != charactersToGlyph.Count())
{
// The number of glyphs to be removed.
const Length numberOfGlyphs = charactersToGlyph[data.startIndex + data.numberOfCharacters - 1u] + glyphsPerCharacter[data.startIndex + data.numberOfCharacters - 1u] - charactersToGlyph[data.startIndex];
- startGlyphIndex = charactersToGlyph[data.startIndex];
+ startGlyphIndex = charactersToGlyph[data.startIndex];
- charactersToGlyph.Erase( charactersToGlyph.Begin() + data.startIndex,
- charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters );
- glyphsPerCharacter.Erase( glyphsPerCharacter.Begin() + data.startIndex,
- glyphsPerCharacter.Begin() + data.startIndex + data.numberOfCharacters );
+ charactersToGlyph.Erase(charactersToGlyph.Begin() + data.startIndex,
+ charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters);
+ glyphsPerCharacter.Erase(glyphsPerCharacter.Begin() + data.startIndex,
+ glyphsPerCharacter.Begin() + data.startIndex + data.numberOfCharacters);
// Update the character to glyph indices.
- for( Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
- endIt = charactersToGlyph.End();
- it != endIt;
- ++it )
+ for(Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
+ endIt = charactersToGlyph.End();
+ it != endIt;
+ ++it)
{
*it -= numberOfGlyphs;
}
}
// 3) Call the CreateGlyphsPerCharacterTable() function
- visualModel->CreateGlyphsPerCharacterTable( data.startIndex,
- startGlyphIndex,
- data.numberOfCharacters );
+ visualModel->CreateGlyphsPerCharacterTable(data.startIndex,
+ startGlyphIndex,
+ data.numberOfCharacters);
// 4) Compare the results.
- if( data.totalNumberOfCharacters != glyphsPerCharacter.Count() )
+ if(data.totalNumberOfCharacters != glyphsPerCharacter.Count())
{
std::cout << " Different number of characters : " << glyphsPerCharacter.Count() << ", expected : " << data.totalNumberOfCharacters << std::endl;
return false;
}
- for( unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i )
+ for(unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i)
{
- if( data.glyphsPerCharacter[i] != glyphsPerCharacter[i] )
+ if(data.glyphsPerCharacter[i] != glyphsPerCharacter[i])
{
std::cout << " Different number of glyphs for index " << i << std::endl;
- for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
+ for(unsigned int j = 0; j < data.totalNumberOfCharacters; ++j)
{
std::cout << glyphsPerCharacter[j] << " ";
}
std::cout << std::endl;
std::cout << " expected" << std::endl;
- for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
+ for(unsigned int j = 0; j < data.totalNumberOfCharacters; ++j)
{
std::cout << data.glyphsPerCharacter[j] << " ";
}
return true;
}
-bool SetCharacterToGlyphTest( const SetCharacterToGlyphData& data )
+bool SetCharacterToGlyphTest(const SetCharacterToGlyphData& data)
{
// 1) Create the model.
- ModelPtr textModel;
+ ModelPtr textModel;
MetricsPtr metrics;
- Size textArea(100.f, 60.f);
- Size layoutSize;
+ Size textArea(100.f, 60.f);
+ Size layoutSize;
const Vector<FontDescriptionRun> fontDescriptions;
- const LayoutOptions options;
- CreateTextModel( data.text,
- textArea,
- fontDescriptions,
- options,
- layoutSize,
- textModel,
- metrics,
- false,
- LineWrap::WORD,
- false,
- Toolkit::DevelText::EllipsisPosition::END,
- 0.f );
+ const LayoutOptions options;
+ CreateTextModel(data.text,
+ textArea,
+ fontDescriptions,
+ options,
+ layoutSize,
+ textModel,
+ metrics,
+ false,
+ LineWrap::WORD,
+ false,
+ Toolkit::DevelText::EllipsisPosition::END,
+ 0.0f, // lineSpacing
+ 0.0f // characterSpacing
+ );
LogicalModelPtr logicalModel = textModel->mLogicalModel;
- VisualModelPtr visualModel = textModel->mVisualModel;
+ VisualModelPtr visualModel = textModel->mVisualModel;
- Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
- Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
+ Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
+ Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
// 2) Clear the model.
GlyphIndex startGlyphIndex = 0u;
- if( 0u != charactersToGlyph.Count() )
+ if(0u != charactersToGlyph.Count())
{
// The number of glyphs to be removed.
const Length numberOfGlyphs = charactersToGlyph[data.startIndex + data.numberOfCharacters - 1u] + glyphsPerCharacter[data.startIndex + data.numberOfCharacters - 1u] - charactersToGlyph[data.startIndex];
- startGlyphIndex = charactersToGlyph[data.startIndex];
+ startGlyphIndex = charactersToGlyph[data.startIndex];
- charactersToGlyph.Erase( charactersToGlyph.Begin() + data.startIndex,
- charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters );
+ charactersToGlyph.Erase(charactersToGlyph.Begin() + data.startIndex,
+ charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters);
// Update the character to glyph indices.
- for( Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
- endIt = charactersToGlyph.End();
- it != endIt;
- ++it )
+ for(Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
+ endIt = charactersToGlyph.End();
+ it != endIt;
+ ++it)
{
*it -= numberOfGlyphs;
}
}
// 3) Call the CreateCharacterToGlyphTable() function
- visualModel->CreateCharacterToGlyphTable( data.startIndex,
- startGlyphIndex,
- data.numberOfCharacters );
+ visualModel->CreateCharacterToGlyphTable(data.startIndex,
+ startGlyphIndex,
+ data.numberOfCharacters);
// 4) Compare the results.
- if( data.totalNumberOfCharacters != charactersToGlyph.Count() )
+ if(data.totalNumberOfCharacters != charactersToGlyph.Count())
{
std::cout << " Different number of character : " << charactersToGlyph.Count() << ", expected : " << data.totalNumberOfCharacters << std::endl;
return false;
}
- for( unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i )
+ for(unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i)
{
- if( data.glyphsIndices[i] != charactersToGlyph[i] )
+ if(data.glyphsIndices[i] != charactersToGlyph[i])
{
std::cout << " Different number of character to glyph index " << i << std::endl;
- for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
+ for(unsigned int j = 0; j < data.totalNumberOfCharacters; ++j)
{
std::cout << charactersToGlyph[j] << " ";
}
std::cout << std::endl;
std::cout << " expected" << std::endl;
- for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
+ for(unsigned int j = 0; j < data.totalNumberOfCharacters; ++j)
{
std::cout << data.glyphsIndices[j] << " ";
}
{
tet_infoline(" UtcDaliSetGlyphsPerCharacter");
- Length glyphsPerCharacter02[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
- Length glyphsPerCharacter03[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
- Length glyphsPerCharacter04[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u,
- 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
- 1u, 1u, 1u, 1u, 0u, 1u, 0u, 2u, 1u, 0u,
- 2u, 0u, 2u, 0u, 2u, 1u, 1u, 0u, 0u, 0u,
- 2u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 2u, 1u,
- 0u, 2u, 1u, 1u };
+ Length glyphsPerCharacter02[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u};
+ Length glyphsPerCharacter03[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u};
+ Length glyphsPerCharacter04[] = {1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u, 0u, 2u, 1u, 0u, 2u, 0u, 2u, 0u, 2u, 1u, 1u, 0u, 0u, 0u, 2u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 2u, 1u, 0u, 2u, 1u, 1u};
struct SetGlyphsPerCharacterData data[] =
- {
- {
- "Zero characters text",
- "",
- 0u,
- 0u,
- 0u,
- NULL
- },
- {
- "Simple 1 to 1 text",
- "Hello world",
- 0u,
- 11u,
- 11u,
- glyphsPerCharacter02,
- },
- {
- "Text with different number of glyphs and characters.",
- "Hello different world",
- 0u,
- 21u,
- 21u,
- glyphsPerCharacter03,
- },
{
- "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 0u,
- 22u,
- 54u,
- glyphsPerCharacter04,
- },
- {
- "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 22u,
- 14u,
- 54u,
- glyphsPerCharacter04,
- },
- {
- "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 36u,
- 18u,
- 54u,
- glyphsPerCharacter04,
- },
- };
+ {"Zero characters text",
+ "",
+ 0u,
+ 0u,
+ 0u,
+ NULL},
+ {
+ "Simple 1 to 1 text",
+ "Hello world",
+ 0u,
+ 11u,
+ 11u,
+ glyphsPerCharacter02,
+ },
+ {
+ "Text with different number of glyphs and characters.",
+ "Hello different world",
+ 0u,
+ 21u,
+ 21u,
+ glyphsPerCharacter03,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 0u,
+ 22u,
+ 54u,
+ glyphsPerCharacter04,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 22u,
+ 14u,
+ 54u,
+ glyphsPerCharacter04,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 36u,
+ 18u,
+ 54u,
+ glyphsPerCharacter04,
+ },
+ };
const unsigned int numberOfTests = 6u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !SetGlyphsPerCharacterTest( data[index] ) )
+ if(!SetGlyphsPerCharacterTest(data[index]))
{
tet_result(TET_FAIL);
}
{
tet_infoline(" UtcDaliSetGlyphsPerCharacter");
- GlyphIndex glyphIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
- GlyphIndex glyphIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u };
- GlyphIndex glyphIndices04[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u,
- 21u, 22u, 23u, 23u, 24u, 24u, 26u, 27u, 27u, 29u, 29u, 31u, 31u, 33u,
- 34u, 35u, 35u, 35u, 35u, 37u, 38u, 39u, 40u, 41u, 42u, 42u, 42u, 44u, 45u, 45u, 47u, 48u };
+ GlyphIndex glyphIndices02[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u};
+ GlyphIndex glyphIndices03[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u};
+ GlyphIndex glyphIndices04[] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, 23u, 24u, 24u, 26u, 27u, 27u, 29u, 29u, 31u, 31u, 33u, 34u, 35u, 35u, 35u, 35u, 37u, 38u, 39u, 40u, 41u, 42u, 42u, 42u, 44u, 45u, 45u, 47u, 48u};
struct SetCharacterToGlyphData data[] =
- {
- {
- "Zero characters text",
- "",
- 0u,
- 0u,
- 0u,
- NULL
- },
- {
- "Simple 1 to 1 text",
- "Hello world",
- 0u,
- 11u,
- 11u,
- glyphIndices02,
- },
- {
- "Text with different number of glyphs and characters.",
- "Hello different world",
- 0u,
- 21u,
- 21u,
- glyphIndices03,
- },
- {
- "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 0u,
- 22u,
- 54u,
- glyphIndices04,
- },
{
- "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 22u,
- 14u,
- 54u,
- glyphIndices04,
- },
- {
- "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
- "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
- 36u,
- 18u,
- 54u,
- glyphIndices04,
- },
- };
+ {"Zero characters text",
+ "",
+ 0u,
+ 0u,
+ 0u,
+ NULL},
+ {
+ "Simple 1 to 1 text",
+ "Hello world",
+ 0u,
+ 11u,
+ 11u,
+ glyphIndices02,
+ },
+ {
+ "Text with different number of glyphs and characters.",
+ "Hello different world",
+ 0u,
+ 21u,
+ 21u,
+ glyphIndices03,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 0u,
+ 22u,
+ 54u,
+ glyphIndices04,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 22u,
+ 14u,
+ 54u,
+ glyphIndices04,
+ },
+ {
+ "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
+ "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
+ 36u,
+ 18u,
+ 54u,
+ glyphIndices04,
+ },
+ };
const unsigned int numberOfTests = 6u;
- for( unsigned int index = 0u; index < numberOfTests; ++index )
+ for(unsigned int index = 0u; index < numberOfTests; ++index)
{
ToolkitTestApplication application;
- if( !SetCharacterToGlyphTest( data[index] ) )
+ if(!SetCharacterToGlyphTest(data[index]))
{
tet_result(TET_FAIL);
}
DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet1, underlineMapSet1), true, TEST_LOCATION);
application.GetScene().Add(textEditor1);
+
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}
+
+int UtcDaliTextEditorCharacterSpacing(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextEditorCharacterSpacing ");
+
+ TextEditor textEditor = TextEditor::New();
+
+ textEditor.SetProperty(Actor::Property::SIZE, Vector2(150.0f, 300.f));
+
+ application.GetScene().Add(textEditor);
+ application.SendNotification();
+ application.Render();
+
+ textEditor.SetProperty(TextEditor::Property::TEXT, "Hi Experiment");
+ textEditor.SetProperty(DevelTextEditor::Property::CHARACTER_SPACING, 10.f);
+ DALI_TEST_EQUALS(textEditor.GetProperty<float>(DevelTextEditor::Property::CHARACTER_SPACING), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
application.SendNotification();
application.Render();
DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet3, underlineMapSet3), true, TEST_LOCATION);
application.GetScene().Add(field3);
+
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}
+
+int UtcDaliTextFieldCharacterSpacing(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextFieldCharacterSpacing ");
+
+ TextField textField = TextField::New();
+
+ textField.SetProperty(Actor::Property::SIZE, Vector2(150.0f, 300.f));
+
+ application.GetScene().Add(textField);
+ application.SendNotification();
+ application.Render();
+
+ textField.SetProperty(TextField::Property::TEXT, "Hi Experiment");
+ textField.SetProperty(DevelTextField::Property::CHARACTER_SPACING, 10.f);
+ DALI_TEST_EQUALS(textField.GetProperty<float>(DevelTextField::Property::CHARACTER_SPACING), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
application.SendNotification();
application.Render();
/*
- * 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.
strikethroughMapGet.Clear();
END_TEST;
+}
+
+int UtcDaliTextLabelCharacterSpacing(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextLabelCharacterSpacing ");
+
+ TextLabel textLabel = TextLabel::New();
+
+ textLabel.SetProperty(Actor::Property::SIZE, Vector2(150.0f, 300.f));
+
+ application.GetScene().Add(textLabel);
+ application.SendNotification();
+ application.Render();
+
+ textLabel.SetProperty(TextLabel::Property::TEXT, "Hi Experiment");
+ textLabel.SetProperty(DevelTextLabel::Property::CHARACTER_SPACING, 10.f);
+ DALI_TEST_EQUALS(textLabel.GetProperty<float>(DevelTextLabel::Property::CHARACTER_SPACING), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
}
\ No newline at end of file
* @details Name "inputStrikethrough", type Property::MAP.
*/
INPUT_STRIKETHROUGH,
+
+ /**
+ * @brief The spaces between characters in Pixels.
+ * @details Name "characterSpacing", type Property::FLOAT.
+ * @note
+ * A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ * The default value is 0.f which does nothing.
+ */
+ CHARACTER_SPACING,
};
} // namespace Property
* @details Name "inputStrikethrough", type Property::MAP.
*/
INPUT_STRIKETHROUGH,
+
+ /**
+ * @brief The spaces between characters in Pixels.
+ * @details Name "characterSpacing", type Property::FLOAT.
+ * @note
+ * A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ * The default value is 0.f which does nothing.
+ */
+ CHARACTER_SPACING,
};
} // namespace Property
*
*/
STRIKETHROUGH,
+
+ /**
+ * @brief The spaces between characters in Pixels.
+ * @details Name "characterSpacing", type Property::FLOAT.
+ * @note
+ * A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ * The default value is 0.f which does nothing.
+ */
+ CHARACTER_SPACING,
};
} // namespace Property
#include <dali-toolkit/internal/text/text-enumerations-impl.h>
#include <dali-toolkit/internal/text/text-font-style.h>
#include <dali-toolkit/internal/text/text-model.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
namespace Dali
{
Text::ModelPtr& textModel = internalDataModel.textModel;
FontClient& fontClient = internalDataModel.fontClient;
- Vector<LineRun>& lines = textModel->mVisualModel->mLines; // The laid out lines.
- Vector<bool>& isEmoji = internalDataModel.isEmoji;
- const Size textLayoutArea = internalDataModel.textLayoutArea;
+ Vector<LineRun>& lines = textModel->mVisualModel->mLines; // The laid out lines.
+ Vector<bool>& isEmoji = internalDataModel.isEmoji;
+ const Size textLayoutArea = internalDataModel.textLayoutArea;
+ const float characterSpacing = textModel->mVisualModel->GetCharacterSpacing();
+ float calculatedAdvance = 0.f;
+ Vector<CharacterIndex>& glyphToCharacterMap = textModel->mVisualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
////////////////////////////////////////////////////////////////////////////////
// Ellipsis the text.
////////////////////////////////////////////////////////////////////////////////
firstPenSet = true;
}
- removedGlypsWidth += std::min(glyphToRemove.advance, (glyphToRemove.xBearing + glyphToRemove.width));
+ calculatedAdvance = GetCalculatedAdvance(*(textModel->mLogicalModel->mText.Begin() + (*(glyphToCharacterMapBuffer + index))), characterSpacing, glyphToRemove.advance);
+ removedGlypsWidth += std::min(calculatedAdvance, (glyphToRemove.xBearing + glyphToRemove.width));
// Calculate the width of the ellipsis glyph and check if it fits.
const float ellipsisGlyphWidth = ellipsisGlyph.width + ellipsisGlyph.xBearing;
#define DALI_TOOLKIT_DEVEL_API_VISUALS_TEXT_VISUAL_PROPERTIES_DEVEL_H
/*
- * Copyright (c) 2020 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.
* @copydoc Dali::Toolkit::DevelTextLabel::Property::STRIKETHROUGH
*/
STRIKETHROUGH = UNDERLINE + 3,
+
+ /**
+ * @copydoc Dali::Toolkit::DevelTextLabel::Property::CHARACTER_SPACING
+ */
+ CHARACTER_SPACING = UNDERLINE + 4,
};
} // namespace Property
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextEditor, "minLineSize", FLOAT, MIN_LINE_SIZE )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextEditor, "strikethrough", MAP, STRIKETHROUGH )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextEditor, "inputStrikethrough", MAP, INPUT_STRIKETHROUGH )
+DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextEditor, "characterSpacing", FLOAT, CHARACTER_SPACING )
DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "textChanged", SIGNAL_TEXT_CHANGED )
DALI_SIGNAL_REGISTRATION(Toolkit, TextEditor, "inputStyleChanged", SIGNAL_INPUT_STYLE_CHANGED )
}
break;
}
+ case Toolkit::DevelTextEditor::Property::CHARACTER_SPACING:
+ {
+ const float characterSpacing = value.Get<float>();
+ impl.mController->SetCharacterSpacing(characterSpacing);
+ impl.mRenderer.Reset();
+ break;
+ }
}
}
value = impl.mController->GetDefaultLineSize();
break;
}
+ case Toolkit::DevelTextEditor::Property::CHARACTER_SPACING:
+ {
+ value = impl.mController->GetCharacterSpacing();
+ break;
+ }
} //switch
return value;
}
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextField, "ellipsisPosition", INTEGER, ELLIPSIS_POSITION )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextField, "strikethrough", MAP, STRIKETHROUGH )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextField, "inputStrikethrough", MAP, INPUT_STRIKETHROUGH )
+DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextField, "characterSpacing", FLOAT, CHARACTER_SPACING )
DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "textChanged", SIGNAL_TEXT_CHANGED )
DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "maxLengthReached", SIGNAL_MAX_LENGTH_REACHED )
}
break;
}
+ case Toolkit::DevelTextField::Property::CHARACTER_SPACING:
+ {
+ const float characterSpacing = value.Get<float>();
+ DALI_LOG_INFO(gTextFieldLogFilter, Debug::General, "TextField %p CHARACTER_SPACING %d\n", impl.mController.Get(), characterSpacing);
+
+ impl.mController->SetCharacterSpacing(characterSpacing);
+ break;
+ }
}
}
GetStrikethroughProperties(impl.mController, value, Text::EffectStyle::INPUT);
break;
}
+ case Toolkit::DevelTextField::Property::CHARACTER_SPACING:
+ {
+ value = impl.mController->GetCharacterSpacing();
+ break;
+ }
} //switch
return value;
}
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextLabel, "enableFontSizeScale", BOOLEAN, ENABLE_FONT_SIZE_SCALE )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextLabel, "ellipsisPosition", INTEGER, ELLIPSIS_POSITION )
DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextLabel, "strikethrough", MAP, STRIKETHROUGH )
+DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextLabel, "characterSpacing", FLOAT, CHARACTER_SPACING )
DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(Toolkit, TextLabel, "textColor", Color::BLACK, TEXT_COLOR )
DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit, TextLabel, "textColorRed", TEXT_COLOR_RED, TEXT_COLOR, 0)
impl.mTextUpdateNeeded = SetStrikethroughProperties(impl.mController, value, Text::EffectStyle::DEFAULT) || impl.mTextUpdateNeeded;
break;
}
+ case Toolkit::DevelTextLabel::Property::CHARACTER_SPACING:
+ {
+ const float characterSpacing = value.Get<float>();
+ impl.mController->SetCharacterSpacing(characterSpacing);
+ break;
+ }
}
// Request relayout when text update is needed. It's necessary to call it
GetStrikethroughProperties(impl.mController, value, Text::EffectStyle::DEFAULT);
break;
}
+ case Toolkit::DevelTextLabel::Property::CHARACTER_SPACING:
+ {
+ value = impl.mController->GetCharacterSpacing();
+ break;
+ }
}
}
${toolkit_src_dir}/text/text-view-interface.cpp
${toolkit_src_dir}/text/visual-model-impl.cpp
${toolkit_src_dir}/text/decorator/text-decorator.cpp
+ ${toolkit_src_dir}/text/layouts/layout-engine-helper-functions.cpp
${toolkit_src_dir}/text/layouts/layout-engine.cpp
${toolkit_src_dir}/text/multi-language-helper-functions.cpp
${toolkit_src_dir}/text/multi-language-support-impl.cpp
{
return logicalIndex;
}
+ const float characterSpacing = visualModel->GetCharacterSpacing();
// Whether there is a hit on a line.
bool matchedLine = false;
bool isBeforeFirstGlyph = false;
// Traverses glyphs in visual order. To do that use the visual to logical conversion table.
- CharacterIndex visualIndex = startCharacter;
- Length numberOfVisualCharacters = 0;
+ CharacterIndex visualIndex = startCharacter;
+ Length numberOfVisualCharacters = 0;
+ float calculatedAdvance = 0.f;
+ Vector<CharacterIndex>& glyphToCharacterMap = visualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
for(; visualIndex < endCharacter; ++visualIndex)
{
// The character in logical order.
// Get the metrics for the group of glyphs.
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(logicalModel->mText.Begin() + (*(glyphToCharacterMapBuffer + firstLogicalGlyphIndex))), characterSpacing, (*(visualModel->mGlyphs.Begin() + firstLogicalGlyphIndex)).advance);
GetGlyphsMetrics(firstLogicalGlyphIndex,
numberOfGlyphs,
glyphMetrics,
glyphInfoBuffer,
- metrics);
+ metrics,
+ calculatedAdvance);
// Get the position of the first glyph.
const Vector2& position = *(positionsBuffer + firstLogicalGlyphIndex);
const LineIndex lineIndex = parameters.visualModel->GetLineOfCharacter(characterOfLine);
const LineRun& line = *(modelLines + lineIndex);
- const GlyphIndex* const charactersToGlyphBuffer = parameters.visualModel->mCharactersToGlyph.Begin();
- const Length* const glyphsPerCharacterBuffer = parameters.visualModel->mGlyphsPerCharacter.Begin();
- const GlyphInfo* const glyphInfoBuffer = parameters.visualModel->mGlyphs.Begin();
- CharacterIndex index;
- GlyphMetrics glyphMetrics;
- MetricsPtr& metrics = parameters.metrics;
- GlyphIndex glyphIndex = 0u;
- Length numberOfGlyphs = 0u;
+ CharacterIndex index;
+ GlyphMetrics glyphMetrics;
+ MetricsPtr& metrics = parameters.metrics;
+ GlyphIndex glyphIndex = 0u;
+ Length numberOfGlyphs = 0u;
if(isLastNewParagraph)
{
index = totalNumberOfCharacters - 1u;
}
- GetGlyphMetricsFromCharacterIndex(index, glyphInfoBuffer, charactersToGlyphBuffer, glyphsPerCharacterBuffer, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
+ GetGlyphMetricsFromCharacterIndex(index, parameters.visualModel, parameters.logicalModel, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
// Set the primary cursor's height.
// The primary cursor height will take the font height of the last character and if there are no characters, it'll take the default font line height.
const Length* const charactersPerGlyphBuffer = parameters.visualModel->mCharactersPerGlyph.Begin();
const CharacterIndex* const glyphsToCharactersBuffer = parameters.visualModel->mGlyphsToCharacters.Begin();
const Vector2* const glyphPositionsBuffer = parameters.visualModel->mGlyphPositions.Begin();
+ const float characterSpacing = parameters.visualModel->GetCharacterSpacing();
- GetGlyphMetricsFromCharacterIndex(index, glyphInfoBuffer, charactersToGlyphBuffer, glyphsPerCharacterBuffer, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
+ // Get the metrics for the group of glyphs.
+ GetGlyphMetricsFromCharacterIndex(index, parameters.visualModel, parameters.logicalModel, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
+
+ // Convert the cursor position into the glyph position.
const GlyphIndex primaryGlyphIndex = glyphIndex;
const Length primaryNumberOfCharacters = *(charactersPerGlyphBuffer + primaryGlyphIndex);
(isFirstPositionOfLine && isRightToLeftParagraph) ||
(!isFirstPositionOfLine && !isLastPosition && !isCurrentRightToLeft));
- float glyphAdvance = addGlyphAdvance ? glyphMetrics.advance : 0.f;
+ float glyphAdvance = addGlyphAdvance ? (glyphMetrics.advance) : 0.f;
if(!isLastPositionOfLine &&
(primaryNumberOfCharacters > 1u))
numberOfGlyphAdvance = primaryNumberOfCharacters - numberOfGlyphAdvance;
}
- glyphAdvance = static_cast<float>(numberOfGlyphAdvance) * glyphMetrics.advance / static_cast<float>(primaryNumberOfCharacters);
+ glyphAdvance = static_cast<float>(numberOfGlyphAdvance) * (glyphMetrics.advance) / static_cast<float>(primaryNumberOfCharacters);
}
// Get the glyph position and x bearing (in the line's coords).
index = (isRightToLeftParagraph == isCurrentRightToLeft) ? nextCharacterIndex : characterIndex;
}
- GetGlyphMetricsFromCharacterIndex(index, glyphInfoBuffer, charactersToGlyphBuffer, glyphsPerCharacterBuffer, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
+ GetGlyphMetricsFromCharacterIndex(index, parameters.visualModel, parameters.logicalModel, metrics, glyphMetrics, glyphIndex, numberOfGlyphs);
+
const GlyphIndex secondaryGlyphIndex = glyphIndex;
const Vector2& secondaryPosition = *(glyphPositionsBuffer + secondaryGlyphIndex);
const bool addGlyphAdvance = ((!isFirstPositionOfLine && !isCurrentRightToLeft) ||
(isFirstPositionOfLine && !isRightToLeftParagraph));
- cursorInfo.secondaryPosition.x = -glyphMetrics.xBearing + secondaryPosition.x + (addGlyphAdvance ? glyphMetrics.advance : 0.f);
+ cursorInfo.secondaryPosition.x = -glyphMetrics.xBearing + secondaryPosition.x + (addGlyphAdvance ? (glyphMetrics.advance + characterSpacing) : 0.f);
cursorInfo.secondaryPosition.y = cursorInfo.lineOffset + cursorInfo.lineHeight - cursorInfo.secondaryCursorHeight;
// Transform the cursor info from line's coords to text's coords.
/*
- * 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.
Length numberOfGlyphs,
GlyphMetrics& glyphMetrics,
const GlyphInfo* const glyphsBuffer,
- MetricsPtr& metrics)
+ MetricsPtr& metrics,
+ float calculatedAdvance)
{
const GlyphInfo& firstGlyph = *(glyphsBuffer + glyphIndex);
glyphMetrics.fontId = firstGlyph.fontId;
glyphMetrics.fontHeight = fontMetrics.height;
glyphMetrics.width = firstGlyph.width;
- glyphMetrics.advance = firstGlyph.advance;
+ glyphMetrics.advance = calculatedAdvance;
glyphMetrics.ascender = fontMetrics.ascender;
glyphMetrics.xBearing = firstGlyph.xBearing;
const float currentMaxGlyphWidthEdge = glyphMetrics.advance + glyphInfo.xBearing + glyphInfo.width;
maxWidthEdge = std::max(maxWidthEdge, currentMaxGlyphWidthEdge);
- glyphMetrics.advance += glyphInfo.advance;
+ glyphMetrics.advance += (glyphInfo.advance);
}
glyphMetrics.width = maxWidthEdge - glyphMetrics.xBearing;
glyphMetrics.width += (firstGlyph.isItalicRequired && !isItalicFont) ? TextAbstraction::FontClient::DEFAULT_ITALIC_ANGLE * firstGlyph.height : 0.f;
}
-void GetGlyphMetricsFromCharacterIndex(CharacterIndex index, const GlyphInfo* const glyphInfoBuffer, const GlyphIndex* const charactersToGlyphBuffer, const Length* const glyphsPerCharacterBuffer, MetricsPtr& metrics, GlyphMetrics& glyphMetrics, GlyphIndex& glyphIndex, Length& numberOfGlyphs)
+void GetGlyphMetricsFromCharacterIndex(CharacterIndex index,
+ const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ MetricsPtr& metrics,
+ GlyphMetrics& glyphMetrics,
+ GlyphIndex& glyphIndex,
+ Length& numberOfGlyphs)
{
+ const GlyphIndex* const charactersToGlyphBuffer = visualModel->mCharactersToGlyph.Begin();
+ const Length* const glyphsPerCharacterBuffer = visualModel->mGlyphsPerCharacter.Begin();
+ const GlyphInfo* const glyphInfoBuffer = visualModel->mGlyphs.Begin();
+ Vector<CharacterIndex>& glyphToCharacterMap = visualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+ const float characterSpacing = visualModel->GetCharacterSpacing();
+
//Takes the character index, obtains the glyph index (and the number of Glyphs) from it and finally gets the glyph metrics.
glyphIndex = *(charactersToGlyphBuffer + index);
numberOfGlyphs = *(glyphsPerCharacterBuffer + index);
+ float calculatedAdvance = 0.f;
+
+ calculatedAdvance = GetCalculatedAdvance(*(logicalModel->mText.Begin() + (*(glyphToCharacterMapBuffer + glyphIndex))), characterSpacing, (*(visualModel->mGlyphs.Begin() + glyphIndex)).advance);
+
// Get the metrics for the group of glyphs.
GetGlyphsMetrics(glyphIndex,
numberOfGlyphs,
glyphMetrics,
glyphInfoBuffer,
- metrics);
+ metrics,
+ calculatedAdvance);
+}
+
+float GetCalculatedAdvance(unsigned int character, float characterSpacing, float advance)
+{
+ //Gets the final advance value by adding the CharacterSpacing value to it
+ //In some cases the CharacterSpacing should not be added. Ex: when the glyph is a ZWSP (Zero Width Space)
+ return (TextAbstraction::IsZeroWidthNonJoiner(character) || TextAbstraction::IsZeroWidthJoiner(character) ||
+ TextAbstraction::IsZeroWidthSpace(character) || TextAbstraction::IsNewParagraph(character) ||
+ TextAbstraction::IsLeftToRightMark(character) || TextAbstraction::IsRightToLeftMark(character))
+ ? advance
+ : advance + characterSpacing;
}
} // namespace Text
#define DALI_TOOLKIT_TEXT_GLYPH_METRICS_HELPER_H
/*
- * 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.
*/
// INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/logical-model-impl.h>
#include <dali-toolkit/internal/text/metrics.h>
+#include <dali-toolkit/internal/text/visual-model-impl.h>
namespace Dali
{
* @param[out] glyphMetrics Some glyph metrics (font height, advance, ascender and x bearing).
* @param[in] glyphsBuffer The glyphs buffer.
* @param[in] metrics Used to access metrics from FontClient.
+ * @param[in] calculatedAdvance The final advance value obtained by adding the CharacterSpacing value to the original advance. In some cases the CharacterSpacing should not be added. Ex: when the glyph is a ZWSP (Zero Width Space)
*/
void GetGlyphsMetrics(GlyphIndex glyphIndex,
Length numberOfGlyphs,
GlyphMetrics& glyphMetrics,
const GlyphInfo* const glyphsBuffer,
- MetricsPtr& metrics);
+ MetricsPtr& metrics,
+ float calculatedAdvance);
+
+/**
+ * @brief Gets the final advance value by adding the CharacterSpacing value to it
+ *In some cases the CharacterSpacing should not be added. Ex: when the glyph is a ZWSP (Zero Width Space)
+ *
+ * @param[in] character The character of which the advance is to be calculated.
+ * @param[in] characterSpacing The character spacing to be added to the advance.
+ * @param[in] advance The original advance.
+ *
+ * @return The calculated advance
+ */
+float GetCalculatedAdvance(unsigned int character, float characterSpacing, float advance);
/**
* @brief Takes the character index, obtains the glyph index (and the number of Glyphs) from it and finally gets the glyph metrics.
*
* @param[in] index The character index.
- * @param[in] glyphInfoBuffer The glyphs buffer.
- * @param[in] charactersToGlyphBuffer A vector containing the glyph index for each character.
- * @param[in] glyphsPerCharacterBuffer A vector containing the number of glyphs in each character.
+ * @param[in] visualModel The visual model.
+ * @param[in] logicalModel The logical model.
* @param[in] metrics Used to access metrics from FontClient.
* @param[out] glyphMetrics Some glyph metrics (font height, advance, ascender and x bearing).
* @param[out] glyphIndex The glyph index obtained from the character index.
* @param[out] numberOfGlyphs The number of glyphs in the character of which the index was passed to the function.
*
*/
-void GetGlyphMetricsFromCharacterIndex(CharacterIndex index,
- const GlyphInfo* const glyphInfoBuffer,
- const GlyphIndex* const charactersToGlyphBuffer,
- const Length* const glyphsPerCharacterBuffer,
- MetricsPtr& metrics,
- GlyphMetrics& glyphMetrics,
- GlyphIndex& glyphIndex,
- Length& numberOfGlyphs);
+void GetGlyphMetricsFromCharacterIndex(CharacterIndex index,
+ const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ MetricsPtr& metrics,
+ GlyphMetrics& glyphMetrics,
+ GlyphIndex& glyphIndex,
+ Length& numberOfGlyphs);
} // namespace Text
--- /dev/null
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// FILE HEADER
+#include <dali-toolkit/internal/text/layouts/layout-engine-helper-functions.h>
+
+// INTERNAL INCLUDE
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
+
+namespace Dali
+{
+namespace Toolkit
+{
+namespace Text
+{
+namespace Layout
+{
+void CalculateGlyphPositionsLTR(const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ const float interGlyphExtraAdvance,
+ const Length numberOfGlyphs,
+ const GlyphIndex startIndexForGlyph,
+ const GlyphIndex startIndexForGlyphPositions,
+ Vector2* glyphPositionsBuffer,
+ float& penX)
+{
+ const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin();
+ const float characterSpacing = visualModel->GetCharacterSpacing();
+ const Character* const textBuffer = logicalModel->mText.Begin();
+
+ Vector<CharacterIndex>& glyphToCharacterMap = visualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+
+ float calculatedAdvance = 0.f;
+
+ for(GlyphIndex i = 0u; i < numberOfGlyphs; ++i)
+ {
+ const GlyphInfo& glyph = *(glyphsBuffer + startIndexForGlyph + i);
+ Vector2& position = *(glyphPositionsBuffer + startIndexForGlyphPositions + i);
+
+ position.x = penX + glyph.xBearing;
+ position.y = -glyph.yBearing;
+
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + (startIndexForGlyph + i)))), characterSpacing, glyph.advance);
+ penX += (calculatedAdvance + interGlyphExtraAdvance);
+ }
+}
+
+void CalculateGlyphPositionsRTL(const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ const BidirectionalLineRunIndex& bidiLineIndex,
+ const GlyphIndex& startGlyphIndex,
+ Vector2* glyphPositionsBuffer,
+ CharacterIndex& characterVisualIndex,
+ CharacterIndex& characterLogicalIndex,
+ float& penX)
+{
+ const Character* const textBuffer = logicalModel->mText.Begin();
+ const BidirectionalLineInfoRun& bidiLine = logicalModel->mBidirectionalLineInfo[bidiLineIndex];
+ const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin();
+ const GlyphIndex* const charactersToGlyphsBuffer = visualModel->mCharactersToGlyph.Begin();
+ const float characterSpacing = visualModel->GetCharacterSpacing();
+
+ float calculatedAdvance = 0.f;
+
+ while(TextAbstraction::IsWhiteSpace(*(textBuffer + characterVisualIndex)))
+ {
+ const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex);
+ const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
+
+ Vector2& position = *(glyphPositionsBuffer + glyphIndex - startGlyphIndex);
+ position.x = penX;
+ position.y = -glyph.yBearing;
+
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance);
+ penX += calculatedAdvance;
+
+ ++characterLogicalIndex;
+ characterVisualIndex = bidiLine.characterRun.characterIndex + *(bidiLine.visualToLogicalMap + characterLogicalIndex);
+ }
+}
+
+void TraversesCharactersForGlyphPositionsRTL(const VisualModelPtr& visualModel,
+ const Character* const textBuffer,
+ const GlyphIndex& startGlyphIndex,
+ const float interGlyphExtraAdvance,
+ const CharacterRun& bidiLineCharacterRun,
+ CharacterIndex* bidiLineVisualToLogicalMap,
+ Vector2* glyphPositionsBuffer,
+ CharacterIndex& characterLogicalIndex,
+ float& penX)
+{
+ const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin();
+ const GlyphIndex* const charactersToGlyphsBuffer = visualModel->mCharactersToGlyph.Begin();
+ const float characterSpacing = visualModel->GetCharacterSpacing();
+ const Length* const glyphsPerCharacterBuffer = visualModel->mGlyphsPerCharacter.Begin();
+
+ float calculatedAdvance = 0.f;
+
+ for(; characterLogicalIndex < bidiLineCharacterRun.numberOfCharacters;
+ ++characterLogicalIndex)
+ {
+ // Convert the character in the logical order into the character in the visual order.
+ const CharacterIndex characterVisualIndex = bidiLineCharacterRun.characterIndex + *(bidiLineVisualToLogicalMap + characterLogicalIndex);
+
+ // Get the number of glyphs of the character.
+ const Length numberOfGlyphs = *(glyphsPerCharacterBuffer + characterVisualIndex);
+
+ for(GlyphIndex index = 0u; index < numberOfGlyphs; ++index)
+ {
+ // Convert the character in the visual order into the glyph in the visual order.
+ const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex) + index;
+
+ DALI_ASSERT_DEBUG(glyphIndex < visualModel->mGlyphs.Count());
+
+ const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
+ Vector2& position = *(glyphPositionsBuffer + glyphIndex - startGlyphIndex);
+
+ position.x = penX + glyph.xBearing;
+ position.y = -glyph.yBearing;
+
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance);
+ penX += (calculatedAdvance + interGlyphExtraAdvance);
+ }
+ }
+}
+
+} // namespace Layout
+
+} // namespace Text
+
+} // namespace Toolkit
+
+} // namespace Dali
--- /dev/null
+#ifndef DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_HELPER_FUNCTIONS_H
+#define DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_HELPER_FUNCTIONS_H
+
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// INTERNAL INCLUDE
+#include <dali-toolkit/internal/text/logical-model-impl.h>
+#include <dali-toolkit/internal/text/visual-model-impl.h>
+
+namespace Dali
+{
+namespace Toolkit
+{
+namespace Text
+{
+namespace Layout
+{
+/**
+ * @brief Calculate glyph positions when set glyph positions for left to right.
+ *
+ * @param[in] visualModel The visual model.
+ * @param[in] logicalModel The logical model.
+ * @param[in] interGlyphExtraAdvance Extra advance added to each glyph.
+ * @param[in] numberOfGlyphs The number of glyphs.
+ * @param[in] startIndexForGlyph The index of the first glyph in the line.
+ * @param[in] startIndexForGlyphPositions The index of the first glyph for GlyphPositions.
+ * @param[in,out] glyphPositionsBuffer The glyph positions buffer.
+ * @param[in,out] penX The current position for the horizontal pen.
+ */
+void CalculateGlyphPositionsLTR(const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ const float interGlyphExtraAdvance,
+ const Length numberOfGlyphs,
+ const GlyphIndex startIndexForGlyph,
+ const GlyphIndex startIndexForGlyphPositions,
+ Vector2* glyphPositionsBuffer,
+ float& penX);
+
+/**
+ * @brief Calculate glyph positions when set glyph positions for right to left.
+ *
+ * @param[in] visualModel The visual model.
+ * @param[in] logicalModel The logical model.
+ * @param[in] bidiLineIndex Index to the line's bidirectional info.
+ * @param[in] startGlyphIndex The index of the first glyph in the line.
+ * @param[in,out] glyphPositionsBuffer The glyph positions buffer.
+ * @param[in] characterVisualIndex The character visual index.
+ * @param[in] characterLogicalIndex The character logical index.
+ * @param[in,out] penX The current position for the horizontal pen.
+ */
+void CalculateGlyphPositionsRTL(const VisualModelPtr& visualModel,
+ const LogicalModelPtr& logicalModel,
+ const BidirectionalLineRunIndex& bidiLineIndex,
+ const GlyphIndex& startGlyphIndex,
+ Vector2* glyphPositionsBuffer,
+ CharacterIndex& characterVisualIndex,
+ CharacterIndex& characterLogicalIndex,
+ float& penX);
+
+/**
+ * @brief Calculate glyph positions when set glyph positions for right to left.
+ *
+ * @param[in] visualModel The visual model.
+ * @param[in] textBuffer The text buffer.
+ * @param[in] startGlyphIndex The index of the first glyph in the line.
+ * @param[in] interGlyphExtraAdvance Extra advance added to each glyph.
+ * @param[in] bidiLineCharacterRun The initial character index within the whole text and the number of characters of the run for BidirectionalLine.
+ * @param[in] bidiLineVisualToLogicalMap Pointer to the visual to logical map table for BidirectionalLine.
+ * @param[in,out] glyphPositionsBuffer The glyph positions buffer.
+ * @param[in,out] characterLogicalIndex The character logical index.
+ * @param[in,out] penX The current position for the horizontal pen.
+ */
+void TraversesCharactersForGlyphPositionsRTL(const VisualModelPtr& visualModel,
+ const Character* const textBuffer,
+ const GlyphIndex& startGlyphIndex,
+ const float interGlyphExtraAdvance,
+ const CharacterRun& bidiLineCharacterRun,
+ CharacterIndex* bidiLineVisualToLogicalMap,
+ Vector2* glyphPositionsBuffer,
+ CharacterIndex& characterLogicalIndex,
+ float& penX);
+
+} // namespace Layout
+
+} // namespace Text
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif // DALI_TOOLKIT_TEXT_LAYOUT_ENGINE_HELPER_FUNCTIONS_H
\ No newline at end of file
/*
- * 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.
#include <dali-toolkit/internal/text/bidirectional-support.h>
#include <dali-toolkit/internal/text/cursor-helper-functions.h>
#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
+#include <dali-toolkit/internal/text/layouts/layout-engine-helper-functions.h>
#include <dali-toolkit/internal/text/layouts/layout-parameters.h>
namespace Dali
// However, the line descender has a negative value, hence the subtraction.
return lineRun.ascender - lineRun.descender + lineRun.lineSpacing;
}
+
namespace Layout
{
namespace
const float outlineWidth = static_cast<float>(parameters.textModel->GetOutlineWidth());
const GlyphIndex lastGlyphOfParagraphPlusOne = parameters.startGlyphIndex + parameters.numberOfGlyphs;
+ const float characterSpacing = parameters.textModel->mVisualModel->GetCharacterSpacing();
CharacterIndex characterLogicalIndex = 0u;
CharacterIndex characterVisualIndex = 0u;
+ float calculatedAdvance = 0.f;
+
// If there are characters in the second half of Line then the first visual index mapped from visualToLogicalMapSecondHalf
// Otherwise maps the first visual index from visualToLogicalMap.
// This is to initialize the first visual index.
{
const GlyphInfo& glyphInfo = *(glyphsBuffer + *(charactersToGlyphsBuffer + characterVisualIndex));
- whiteSpaceLengthEndOfLine += glyphInfo.advance;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyphInfo.advance);
+ whiteSpaceLengthEndOfLine += calculatedAdvance;
++characterLogicalIndex;
characterVisualIndex = bidirectionalLineInfo.characterRunForSecondHalfLine.characterIndex + *(bidirectionalLineInfo.visualToLogicalMapSecondHalf + characterLogicalIndex);
{
const GlyphInfo& glyphInfo = *(glyphsBuffer + *(charactersToGlyphsBuffer + characterVisualIndex));
- whiteSpaceLengthEndOfLine += glyphInfo.advance;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyphInfo.advance);
+ whiteSpaceLengthEndOfLine += calculatedAdvance;
++characterLogicalIndex;
characterVisualIndex = bidirectionalLineInfo.characterRun.characterIndex + *(bidirectionalLineInfo.visualToLogicalMap + characterLogicalIndex);
charactersPerGlyphBuffer);
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, (*(glyphsBuffer + glyphIndex)).advance);
GetGlyphsMetrics(glyphIndex,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
float penX = -glyphMetrics.xBearing + mCursorWidth + outlineWidth;
characterLogicalIndex += *(charactersPerGlyphBuffer + glyphIndex + numberOfGLyphsInGroup - 1u);
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, (*(glyphsBuffer + glyphIndex)).advance);
GetGlyphsMetrics(glyphIndex,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
if(isWhiteSpace)
{
characterLogicalIndex += *(charactersPerGlyphBuffer + glyphIndex + numberOfGLyphsInGroup - 1u);
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, (*(glyphsBuffer + glyphIndex)).advance);
GetGlyphsMetrics(glyphIndex,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
if(isWhiteSpace)
{
float widthFirstHalf = ((ellipsisPosition != DevelText::EllipsisPosition::MIDDLE) ? targetWidth : targetWidth - std::floor(targetWidth / 2));
bool isSecondHalf = false;
+ // Character Spacing
+ const float characterSpacing = parameters.textModel->mVisualModel->GetCharacterSpacing();
+ float calculatedAdvance = 0.f;
+ Vector<CharacterIndex>& glyphToCharacterMap = parameters.textModel->mVisualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + lineLayout.glyphIndex))), characterSpacing, (*(glyphsBuffer + lineLayout.glyphIndex)).advance);
GetGlyphsMetrics(lineLayout.glyphIndex,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
// Set the direction of the first character of the line.
lineLayout.characterIndex = *(glyphsToCharactersBuffer + lineLayout.glyphIndex);
charactersPerGlyphBuffer);
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + glyphIndex))), characterSpacing, (*(glyphsBuffer + glyphIndex)).advance);
GetGlyphsMetrics(glyphIndex,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
const bool isLastGlyph = glyphIndex + numberOfGLyphsInGroup == totalNumberOfGlyphs;
if(isWhiteSpace)
{
// Add the length to the length of white spaces at the end of the line.
- tmpLineLayout.whiteSpaceLengthEndOfLine += glyphMetrics.advance; // The advance is used as the width is always zero for the white spaces.
+ tmpLineLayout.whiteSpaceLengthEndOfLine += glyphMetrics.advance;
+ // The advance is used as the width is always zero for the white spaces.
}
else
{
while(tmpLineLayout.length + tmpLineLayout.whiteSpaceLengthEndOfLine > targetWidth && glyphIndexToRemove < glyphIndex)
{
GlyphMetrics glyphMetrics;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + glyphIndexToRemove))), characterSpacing, (*(glyphsBuffer + glyphIndexToRemove)).advance);
GetGlyphsMetrics(glyphIndexToRemove,
numberOfGLyphsInGroup,
glyphMetrics,
glyphsBuffer,
- mMetrics);
+ mMetrics,
+ calculatedAdvance);
const Length numberOfGLyphsInGroup = GetNumberOfGlyphsOfGroup(glyphIndexToRemove,
lastGlyphOfParagraphPlusOne,
const GlyphInfo& glyph = *(glyphsBuffer + startIndexForGlyph);
float penX = -glyph.xBearing + mCursorWidth + outlineWidth; //
- for(GlyphIndex i = 0u; i < numberOfGlyphs; ++i)
- {
- const GlyphInfo& glyph = *(glyphsBuffer + startIndexForGlyph + i);
- Vector2& position = *(glyphPositionsBuffer + startIndexForGlyphPositions + i);
-
- position.x = penX + glyph.xBearing;
- position.y = -glyph.yBearing;
-
- penX += (glyph.advance + interGlyphExtraAdvance);
- }
+ CalculateGlyphPositionsLTR(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel,
+ interGlyphExtraAdvance,
+ numberOfGlyphs,
+ startIndexForGlyph, // startIndexForGlyph is the index of the first glyph in the line
+ startIndexForGlyphPositions,
+ glyphPositionsBuffer,
+ penX);
if(layout.isSplitToTwoHalves)
{
const Length numberOfGlyphsInSecondHalfLine = layout.numberOfGlyphsInSecondHalfLine;
const GlyphIndex startIndexForGlyphPositionsnSecondHalf = layout.glyphIndexInSecondHalfLine - layoutParameters.startGlyphIndex;
- for(GlyphIndex i = 0u; i < numberOfGlyphsInSecondHalfLine; ++i)
- {
- const GlyphInfo& glyph = *(glyphsBuffer + startIndexForGlyphInSecondHalf + i);
- Vector2& position = *(glyphPositionsBuffer + startIndexForGlyphPositionsnSecondHalf + i);
-
- position.x = penX + glyph.xBearing;
- position.y = -glyph.yBearing;
-
- penX += (glyph.advance + interGlyphExtraAdvance);
- }
+ CalculateGlyphPositionsLTR(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel,
+ interGlyphExtraAdvance,
+ numberOfGlyphsInSecondHalfLine,
+ startIndexForGlyphInSecondHalf, // startIndexForGlyph is the index of the first glyph in the line
+ startIndexForGlyphPositionsnSecondHalf,
+ glyphPositionsBuffer,
+ penX);
}
}
LayoutBidiParameters& layoutBidiParameters,
const LineLayout& layout)
{
- const Character* const textBuffer = layoutParameters.textModel->mLogicalModel->mText.Begin();
const BidirectionalLineInfoRun& bidiLine = layoutParameters.textModel->mLogicalModel->mBidirectionalLineInfo[layoutBidiParameters.bidiLineIndex];
const GlyphInfo* const glyphsBuffer = layoutParameters.textModel->mVisualModel->mGlyphs.Begin();
const GlyphIndex* const charactersToGlyphsBuffer = layoutParameters.textModel->mVisualModel->mCharactersToGlyph.Begin();
- const Length* const glyphsPerCharacterBuffer = layoutParameters.textModel->mVisualModel->mGlyphsPerCharacter.Begin();
CharacterIndex characterLogicalIndex = 0u;
CharacterIndex characterVisualIndex = bidiLine.characterRunForSecondHalfLine.characterIndex + *(bidiLine.visualToLogicalMapSecondHalf + characterLogicalIndex);
if(layout.isSplitToTwoHalves)
{
- while(TextAbstraction::IsWhiteSpace(*(textBuffer + characterVisualIndex)))
- {
- const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex);
- const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
-
- Vector2& position = *(glyphPositionsBuffer + glyphIndex - layoutParameters.startGlyphIndex);
- position.x = penX;
- position.y = -glyph.yBearing;
-
- penX += glyph.advance;
-
- ++characterLogicalIndex;
- characterVisualIndex = bidiLine.characterRun.characterIndex + *(bidiLine.visualToLogicalMap + characterLogicalIndex);
- }
+ CalculateGlyphPositionsRTL(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel,
+ layoutBidiParameters.bidiLineIndex,
+ layoutParameters.startGlyphIndex,
+ glyphPositionsBuffer,
+ characterVisualIndex,
+ characterLogicalIndex,
+ penX);
}
if(characterLogicalIndex == bidiLine.characterRunForSecondHalfLine.numberOfCharacters)
characterLogicalIndex = 0u;
characterVisualIndex = bidiLine.characterRun.characterIndex + *(bidiLine.visualToLogicalMap + characterLogicalIndex);
- while(TextAbstraction::IsWhiteSpace(*(textBuffer + characterVisualIndex)))
- {
- const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex);
- const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
-
- Vector2& position = *(glyphPositionsBuffer + glyphIndex - layoutParameters.startGlyphIndex);
- position.x = penX;
- position.y = -glyph.yBearing;
-
- penX += glyph.advance;
-
- ++characterLogicalIndex;
- characterVisualIndex = bidiLine.characterRun.characterIndex + *(bidiLine.visualToLogicalMap + characterLogicalIndex);
- }
+ CalculateGlyphPositionsRTL(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel,
+ layoutBidiParameters.bidiLineIndex,
+ layoutParameters.startGlyphIndex,
+ glyphPositionsBuffer,
+ characterVisualIndex,
+ characterLogicalIndex,
+ penX);
}
const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex);
// Traverses the characters of the right to left paragraph.
if(layout.isSplitToTwoHalves && !extendedToSecondHalf)
{
- for(; characterLogicalIndex < bidiLine.characterRunForSecondHalfLine.numberOfCharacters;
- ++characterLogicalIndex)
- {
- // Convert the character in the logical order into the character in the visual order.
- const CharacterIndex characterVisualIndex = bidiLine.characterRunForSecondHalfLine.characterIndex + *(bidiLine.visualToLogicalMapSecondHalf + characterLogicalIndex);
-
- // Get the number of glyphs of the character.
- const Length numberOfGlyphs = *(glyphsPerCharacterBuffer + characterVisualIndex);
-
- for(GlyphIndex index = 0u; index < numberOfGlyphs; ++index)
- {
- // Convert the character in the visual order into the glyph in the visual order.
- const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex) + index;
-
- DALI_ASSERT_DEBUG(glyphIndex < layoutParameters.textModel->mVisualModel->mGlyphs.Count());
-
- const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
- Vector2& position = *(glyphPositionsBuffer + glyphIndex - layoutParameters.startGlyphIndex);
-
- position.x = penX + glyph.xBearing;
- position.y = -glyph.yBearing;
-
- penX += (glyph.advance + layoutParameters.interGlyphExtraAdvance);
- }
- }
+ TraversesCharactersForGlyphPositionsRTL(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel->mText.Begin(),
+ layoutParameters.startGlyphIndex,
+ layoutParameters.interGlyphExtraAdvance,
+ bidiLine.characterRunForSecondHalfLine,
+ bidiLine.visualToLogicalMapSecondHalf,
+ glyphPositionsBuffer,
+ characterLogicalIndex,
+ penX);
}
characterLogicalIndex = extendedToSecondHalf ? characterLogicalIndex : 0u;
- for(; characterLogicalIndex < bidiLine.characterRun.numberOfCharacters;
- ++characterLogicalIndex)
- {
- // Convert the character in the logical order into the character in the visual order.
- const CharacterIndex characterVisualIndex = bidiLine.characterRun.characterIndex + *(bidiLine.visualToLogicalMap + characterLogicalIndex);
-
- // Get the number of glyphs of the character.
- const Length numberOfGlyphs = *(glyphsPerCharacterBuffer + characterVisualIndex);
-
- for(GlyphIndex index = 0u; index < numberOfGlyphs; ++index)
- {
- // Convert the character in the visual order into the glyph in the visual order.
- const GlyphIndex glyphIndex = *(charactersToGlyphsBuffer + characterVisualIndex) + index;
- DALI_ASSERT_DEBUG(glyphIndex < layoutParameters.textModel->mVisualModel->mGlyphs.Count());
-
- const GlyphInfo& glyph = *(glyphsBuffer + glyphIndex);
- Vector2& position = *(glyphPositionsBuffer + glyphIndex - layoutParameters.startGlyphIndex);
-
- position.x = penX + glyph.xBearing;
- position.y = -glyph.yBearing;
-
- penX += (glyph.advance + layoutParameters.interGlyphExtraAdvance);
- }
- }
+ TraversesCharactersForGlyphPositionsRTL(layoutParameters.textModel->mVisualModel,
+ layoutParameters.textModel->mLogicalModel->mText.Begin(),
+ layoutParameters.startGlyphIndex,
+ layoutParameters.interGlyphExtraAdvance,
+ bidiLine.characterRun,
+ bidiLine.visualToLogicalMap,
+ glyphPositionsBuffer,
+ characterLogicalIndex,
+ penX);
}
/**
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
#include <dali-toolkit/internal/graphics/builtin-shader-extern-gen.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
#include <dali-toolkit/internal/text/glyph-run.h>
#include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
#include <dali-toolkit/internal/text/rendering/atlas/atlas-mesh-factory.h>
const Vector4& strikethroughColor(view.GetStrikethroughColor());
const float strikethroughHeight = view.GetStrikethroughHeight();
Vector4 currentStrikethroughColor;
+ const float characterSpacing(view.GetCharacterSpacing());
// Elided text info. Indices according to elided text.
const auto startIndexOfGlyphs = view.GetStartIndexOfElidedGlyphs();
uint32_t underlineChunkId = 0u; // give id for each chunk.
bool isPreUnderlined = false; // status of underlined for previous glyph.
- uint32_t strikethroughChunkId = 0u; // give id for each chunk.
- bool isPrevGlyphStrikethrough = false; // status of strikethrough for previous glyph.
+ uint32_t strikethroughChunkId = 0u; // give id for each chunk.
+ bool isPrevGlyphStrikethrough = false; // status of strikethrough for previous glyph.
+ const Character* textBuffer = view.GetTextBuffer();
+ float calculatedAdvance = 0.f;
+ const Vector<CharacterIndex>& glyphToCharacterMap = view.GetGlyphsToCharacters();
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
//Skip hyphenIndices less than startIndexOfGlyphs or between two middle of elided text
if(hyphenIndices)
if(addHyphen)
{
GlyphInfo tempInfo = *(glyphsBuffer + i);
- position.x = position.x + tempInfo.advance - tempInfo.xBearing + glyph.xBearing;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + i))), characterSpacing, tempInfo.advance);
+ position.x = position.x + calculatedAdvance - tempInfo.xBearing + glyph.xBearing;
position.y += tempInfo.yBearing - glyph.yBearing;
}
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/controls/text-controls/text-label-devel.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
#include <dali-toolkit/internal/text/rendering/view-model.h>
namespace Dali
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
Length hyphenIndex = 0;
+ const Character* textBuffer = mModel->GetTextBuffer();
+ float calculatedAdvance = 0.f;
+ const Vector<CharacterIndex>& glyphToCharacterMap = mModel->GetGlyphsToCharacters();
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+
// Traverses the lines of the text.
for(LineIndex lineIndex = 0u; lineIndex < modelNumberOfLines; ++lineIndex)
{
const Text::Underline::Type underlineType = mModel->GetUnderlineType();
const float dashedUnderlineWidth = mModel->GetDashedUnderlineWidth();
const float dashedUnderlineGap = mModel->GetDashedUnderlineGap();
-
- const bool strikethroughEnabled = mModel->IsStrikethroughEnabled();
- const Vector4& strikethroughColor = mModel->GetStrikethroughColor();
- const float strikethroughHeight = mModel->GetStrikethroughHeight();
+ const bool strikethroughEnabled = mModel->IsStrikethroughEnabled();
+ const Vector4& strikethroughColor = mModel->GetStrikethroughColor();
+ const float strikethroughHeight = mModel->GetStrikethroughHeight();
+ const float characterSpacing = mModel->GetCharacterSpacing();
// Get the underline runs.
const Length numberOfUnderlineRuns = mModel->GetNumberOfUnderlineRuns();
if(addHyphen)
{
GlyphInfo tempInfo = *(glyphsBuffer + elidedGlyphIndex);
- position.x = position.x + tempInfo.advance - tempInfo.xBearing + glyphInfo->xBearing;
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + elidedGlyphIndex))), characterSpacing, tempInfo.advance);
+ position.x = position.x + calculatedAdvance - tempInfo.xBearing + glyphInfo->xBearing;
position.y = -glyphInfo->yBearing;
}
// INTERNAL INCLUDES
#include <dali-toolkit/internal/text/line-run.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
namespace Dali
{
return mModel->GetHyphensCount();
}
+const float ViewModel::GetCharacterSpacing() const
+{
+ return mModel->GetCharacterSpacing();
+}
+
+const Character* ViewModel::GetTextBuffer() const
+{
+ return mModel->GetTextBuffer();
+}
+
+const Vector<CharacterIndex>& ViewModel::GetGlyphsToCharacters() const
+{
+ return mModel->GetGlyphsToCharacters();
+}
+
void ViewModel::ElideGlyphs()
{
mIsTextElided = false;
mStartIndexOfElidedGlyphs = mFirstMiddleIndexOfElidedGlyphs = mSecondMiddleIndexOfElidedGlyphs = 0;
mEndIndexOfElidedGlyphs = mModel->GetNumberOfGlyphs() - 1u;
- auto ellipsisPosition = GetEllipsisPosition();
+ auto ellipsisPosition = GetEllipsisPosition();
+ auto characterSpacing = GetCharacterSpacing();
+ const Character* textBuffer = GetTextBuffer();
+ const Vector<CharacterIndex>& glyphToCharacterMap = GetGlyphsToCharacters();
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+ float calculatedAdvance = 0.f;
if(IsTextElideEnabled())
{
firstPenSet = true;
}
- removedGlypsWidth += std::min(glyphToRemove.advance, (glyphToRemove.xBearing + glyphToRemove.width));
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + indexOfEllipsis))), characterSpacing, glyphToRemove.advance);
+ removedGlypsWidth += std::min(calculatedAdvance, (glyphToRemove.xBearing + glyphToRemove.width));
// Calculate the width of the ellipsis glyph and check if it fits.
const float ellipsisGlyphWidth = ellipsisGlyph.width + ellipsisGlyph.xBearing;
Length GetHyphensCount() const override;
/**
+ * @copydoc ModelInterface::GetCharacterSpacing()
+ */
+ const float GetCharacterSpacing() const override;
+
+ /**
+ * @copydoc ModelInterface::GetTextBuffer()
+ */
+ const Character* GetTextBuffer() const override;
+
+ /**
+ * @copydoc ModelInterface::GetGlyphsToCharacters()
+ */
+ const Vector<CharacterIndex>& GetGlyphsToCharacters() const override;
+
+ /**
* @brief Does the text elide at the end, start or middle of text according to ellipsis position
*
* It stores a copy of the visible glyphs and removes as many glyphs as needed
/*
- * 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.
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
#include <dali-toolkit/internal/graphics/builtin-shader-extern-gen.h>
+#include <dali-toolkit/internal/text/cursor-helper-functions.h>
#include <dali-toolkit/internal/text/text-view.h>
namespace Dali::Toolkit::Text
{
-
namespace
{
struct BackgroundVertex
};
} // unnamed namespace
-Actor CreateControllerBackgroundActor(const View& textView, const VisualModelPtr& textVisualModel, Shader& textShaderBackground)
+Actor CreateControllerBackgroundActor(const View& textView, const VisualModelPtr& textVisualModel, const LogicalModelPtr& textLogicalModel, Shader& textShaderBackground)
{
// NOTE: Currently we only support background color for left-to-right text.
const LineRun* lineRun = textVisualModel->mLines.Begin();
float alignmentOffset = lineRun->alignmentOffset;
numberOfGlyphs = textView.GetGlyphs(glyphs.Begin(),
- positions.Begin(),
- alignmentOffset,
- 0u,
- numberOfGlyphs);
+ positions.Begin(),
+ alignmentOffset,
+ 0u,
+ numberOfGlyphs);
glyphs.Resize(numberOfGlyphs);
positions.Resize(numberOfGlyphs);
const Vector4* const backgroundColorsBuffer = textView.GetBackgroundColors();
const ColorIndex* const backgroundColorIndicesBuffer = textView.GetBackgroundColorIndices();
const Vector4& defaultBackgroundColor = textVisualModel->IsBackgroundEnabled() ? textVisualModel->GetBackgroundColor() : Color::TRANSPARENT;
+ const float characterSpacing = textVisualModel->GetCharacterSpacing();
+ Vector<CharacterIndex>& glyphToCharacterMap = textVisualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+ float calculatedAdvance = 0.f;
Vector4 quad;
uint32_t numberOfQuads = 0u;
if(backgroundColor != Color::TRANSPARENT)
{
const Vector2 position = *(positionsBuffer + i);
+ calculatedAdvance = GetCalculatedAdvance(*(textLogicalModel->mText.Begin() + (*(glyphToCharacterMapBuffer + i))), characterSpacing, glyph.advance);
if(i == 0u && glyphSize == 1u) // Only one glyph in the whole text
{
quad.x = position.x;
quad.y = yLineOffset;
- quad.z = quad.x + std::max(glyph.advance, glyph.xBearing + glyph.width);
+ quad.z = quad.x + std::max(calculatedAdvance, glyph.xBearing + glyph.width);
quad.w = lineHeight;
}
else if((lineIndex != prevLineIndex) || (i == 0u)) // The first glyph in the line
{
quad.x = position.x;
quad.y = yLineOffset;
- quad.z = quad.x - glyph.xBearing + glyph.advance;
+ quad.z = quad.x - glyph.xBearing + calculatedAdvance;
quad.w = quad.y + lineHeight;
}
else if(i == glyphSize - 1u) // The last glyph in the whole text
{
quad.x = position.x - glyph.xBearing;
quad.y = yLineOffset;
- quad.z = quad.x + std::max(glyph.advance, glyph.xBearing + glyph.width);
+ quad.z = quad.x + std::max(calculatedAdvance, glyph.xBearing + glyph.width);
quad.w = quad.y + lineHeight;
}
else // The glyph in the middle of the text
{
quad.x = position.x - glyph.xBearing;
quad.y = yLineOffset;
- quad.z = quad.x + glyph.advance;
+ quad.z = quad.x + calculatedAdvance;
quad.w = quad.y + lineHeight;
}
#define DALI_TOOLKIT_TEXT_CONTROLLER_BACKGROUND_ACTOR_H
/*
- * 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.
#include <dali/public-api/rendering/shader.h>
// INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/logical-model-impl.h>
#include <dali-toolkit/internal/text/visual-model-impl.h>
namespace Dali::Toolkit::Text
/**
* @brief Create an actor that renders the text background color
*
+ * @param[in] textView The text view.
+ * @param[in] textVisualModel The text visual model.
+ * @param[in] textLogicalModel The text logical model.
+ * @param[in] textShaderBackground The text shader for background.
+ *
* @return the created actor or an empty handle if no background color needs to be rendered.
*/
-Actor CreateControllerBackgroundActor(const View& textView, const VisualModelPtr& textVisualModel, Shader& textShaderBackground);
+Actor CreateControllerBackgroundActor(const View& textView, const VisualModelPtr& textVisualModel, const LogicalModelPtr& textLogicalModel, Shader& textShaderBackground);
} // namespace Dali::Toolkit::Text
#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/integration-api/debug.h>
#include <dali/public-api/actors/layer.h>
+#include <dali/public-api/rendering/renderer.h>
#include <cmath>
// INTERNAL INCLUDES
#include <dali-toolkit/internal/text/character-set-conversion.h>
#include <dali-toolkit/internal/text/cursor-helper-functions.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
#include <dali-toolkit/internal/text/text-control-interface.h>
#include <dali-toolkit/internal/text/text-controller-impl-data-clearer.h>
#include <dali-toolkit/internal/text/text-controller-impl-event-handler.h>
{
mLayoutEngine.SetDefaultLineSpacing(lineSpacing);
- RelayoutForNewLineSize();
+ RelayoutAllCharacters();
return true;
}
return false;
{
mLayoutEngine.SetDefaultLineSize(lineSize);
- RelayoutForNewLineSize();
+ RelayoutAllCharacters();
return true;
}
return false;
}
}
-void Controller::Impl::RelayoutForNewLineSize()
+void Controller::Impl::RelayoutAllCharacters()
{
// relayout all characters
mTextUpdateInfo.mCharacterIndex = 0;
mClipboard = Clipboard::Get();
mView.SetVisualModel(mModel->mVisualModel);
+ mView.SetLogicalModel(mModel->mLogicalModel);
// Use this to access FontClient i.e. to get down-scaled Emoji metrics.
mMetrics = Metrics::New(mFontClient);
void ScrollTextToMatchCursor();
/**
- * @brief fill needed relayout parameters when line size is changed & request relayout.
+ * @brief Create an actor that renders the text background color
+ *
+ * @return the created actor or an empty handle if no background color needs to be rendered.
+ */
+ Actor CreateBackgroundActor();
+
+ /**
+ * @brief fill needed relayout parameters whenever a property is changed and a re-layout is needed for the entire text.
*/
- void RelayoutForNewLineSize();
+ void RelayoutAllCharacters();
/**
* @copydoc Controller::IsInputStyleChangedSignalsQueueEmpty
mImpl->mModel->mVisualModel->SetEllipsisPosition(ellipsisPosition);
}
+void Controller::SetCharacterSpacing(float characterSpacing)
+{
+ mImpl->mModel->mVisualModel->SetCharacterSpacing(characterSpacing);
+
+ mImpl->RelayoutAllCharacters();
+ mImpl->RequestRelayout();
+}
+
+const float Controller::GetCharacterSpacing() const
+{
+ return mImpl->mModel->mVisualModel->GetCharacterSpacing();
+}
+
Controller::UpdateTextType Controller::Relayout(const Size& size, Dali::LayoutDirection::Type layoutDirection)
{
return Relayouter::Relayout(*this, size, layoutDirection);
Actor Controller::CreateBackgroundActor()
{
- return CreateControllerBackgroundActor(mImpl->mView, mImpl->mModel->mVisualModel, mImpl->mShaderBackground);
+ return CreateControllerBackgroundActor(mImpl->mView, mImpl->mModel->mVisualModel, mImpl->mModel->mLogicalModel, mImpl->mShaderBackground);
}
void Controller::GetAnchorActors(std::vector<Toolkit::TextAnchor>& anchorActors)
*/
void SetAnchorControlInterface(AnchorControlInterface* anchorControlInterface);
+ /**
+ * @brief Sets the character spacing.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @param[in] characterSpacing The character spacing.
+ */
+ void SetCharacterSpacing(float characterSpacing);
+
+ /**
+ * @brief Retrieves the character spacing.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @return The character spacing.
+ */
+ const float GetCharacterSpacing() const;
+
public: // Queries & retrieves.
/**
* @brief Return the layout engine.
* @param[in] numberOfRuns Number of strikethrough runs to be copied.
*/
virtual void GetStrikethroughRuns(StrikethroughGlyphRun* strikethroughRuns, StrikethroughRunIndex index, Length numberOfRuns) const = 0;
+
+ /**
+ * @brief Retrieves the character spacing.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @return The character spacing.
+ */
+ virtual const float GetCharacterSpacing() const = 0;
+
+ /**
+ * @brief Retrieves the text buffer.
+ *
+ * @return The text buffer.
+ */
+ virtual const Character* GetTextBuffer() const = 0;
+
+ /**
+ * @brief Retrieves the Glyphs to Characters Array.
+ *
+ * @return The GlyphsToCharacters.
+ */
+ virtual const Vector<CharacterIndex>& GetGlyphsToCharacters() const = 0;
};
} // namespace Text
mVisualModel->GetStrikethroughRuns(strikethroughRuns, index, numberOfRuns);
}
+const float Model::GetCharacterSpacing() const
+{
+ return mVisualModel->GetCharacterSpacing();
+}
+
+const Character* Model::GetTextBuffer() const
+{
+ return mLogicalModel->mText.Begin();
+}
+
+const Vector<CharacterIndex>& Model::GetGlyphsToCharacters() const
+{
+ return mVisualModel->mGlyphsToCharacters;
+}
+
Model::Model()
: mLogicalModel(),
mVisualModel(),
const Vector4& GetStrikethroughColor() const override;
bool IsStrikethroughEnabled() const override;
+ /**
+ * @copydoc ModelInterface::GetCharacterSpacing()
+ */
+ const float GetCharacterSpacing() const override;
+
+ /**
+ * @copydoc ModelInterface::GetTextBuffer()
+ */
+ const Character* GetTextBuffer() const override;
+
+ /**
+ * @copydoc ModelInterface::GetGlyphsToCharacters()
+ */
+ const Vector<CharacterIndex>& GetGlyphsToCharacters() const override;
/**
* @copydoc ModelInterface::GetNumberOfStrikethroughRuns()
/*
- * 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.
// INTERNAL INCLUDES
#include <dali-toolkit/internal/text/cursor-helper-functions.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
#include <dali-toolkit/internal/text/text-controller-impl-event-handler.h>
using namespace Dali;
}
// Get the indices to the first and last selected glyphs.
- const CharacterIndex selectionEndMinusOne = selectionEnd - 1u;
- const GlyphIndex glyphStart = *(charactersToGlyphBuffer + selectionStart);
- const Length numberOfGlyphs = *(glyphsPerCharacterBuffer + selectionEndMinusOne);
- const GlyphIndex glyphEnd = *(charactersToGlyphBuffer + selectionEndMinusOne) + ((numberOfGlyphs > 0) ? numberOfGlyphs - 1u : 0u);
+ const CharacterIndex selectionEndMinusOne = selectionEnd - 1u;
+ const GlyphIndex glyphStart = *(charactersToGlyphBuffer + selectionStart);
+ const Length numberOfGlyphs = *(glyphsPerCharacterBuffer + selectionEndMinusOne);
+ const GlyphIndex glyphEnd = *(charactersToGlyphBuffer + selectionEndMinusOne) + ((numberOfGlyphs > 0) ? numberOfGlyphs - 1u : 0u);
+ const float characterSpacing = visualModel->GetCharacterSpacing();
+ Vector<CharacterIndex>& glyphToCharacterMap = visualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
// Get the lines where the glyphs are laid-out.
const LineRun* lineRun = visualModel->mLines.Begin();
// Count the actual number of quads.
unsigned int actualNumberOfQuads = 0u;
Vector4 quad;
+ float calculatedAdvance = 0.f;
// Traverse the glyphs.
for(GlyphIndex index = glyphStart; index <= glyphEnd; ++index)
{
const GlyphInfo& glyph = *(glyphsBuffer + index);
const Vector2& position = *(positionsBuffer + index);
+ calculatedAdvance = GetCalculatedAdvance(*(logicalModel->mText.Begin() + (*(glyphToCharacterMapBuffer + index))), characterSpacing, glyph.advance);
if(splitStartGlyph)
{
// If the first glyph is a ligature that must be broken it may be needed to add only part of the glyph to the highlight box.
- const float glyphAdvance = glyph.advance / static_cast<float>(numberOfCharactersStart);
+ const float glyphAdvance = calculatedAdvance / static_cast<float>(numberOfCharactersStart);
const CharacterIndex interGlyphIndex = selectionStart - *(glyphToCharacterBuffer + glyphStart);
// Get the direction of the character.
CharacterDirection isCurrentRightToLeft = false;
{
// Equally, if the last glyph is a ligature that must be broken it may be needed to add only part of the glyph to the highlight box.
- const float glyphAdvance = glyph.advance / static_cast<float>(numberOfCharactersEnd);
+ const float glyphAdvance = calculatedAdvance / static_cast<float>(numberOfCharactersEnd);
const CharacterIndex interGlyphIndex = selectionEnd - *(glyphToCharacterBuffer + glyphEnd);
// Get the direction of the character.
CharacterDirection isCurrentRightToLeft = false;
quad.x = lineRun->alignmentOffset + position.x - glyph.xBearing + model->mScrollPosition.x;
quad.y = selectionBoxInfo->lineOffset;
- quad.z = quad.x + glyph.advance;
+ quad.z = quad.x + calculatedAdvance;
quad.w = quad.y + selectionBoxInfo->lineHeight;
// Store the min and max 'x' for each line.
*
*/
+// EXTERNAL INCLUDES
+#include <dali/public-api/common/dali-vector.h>
+
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/text/text-enumerations-devel.h>
#include <dali-toolkit/internal/text/text-definitions.h>
virtual void GetStrikethroughRuns(StrikethroughGlyphRun* strikethroughRuns,
StrikethroughRunIndex index,
Length numberOfRuns) const = 0;
+
+ /**
+ * @brief The spaces between characters in Pixels.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @return characterSpacing.
+ */
+ virtual const float GetCharacterSpacing() const = 0;
+
+ /**
+ * @brief The text buffer.
+ *
+ * @return The text buffer.
+ */
+ virtual const Character* GetTextBuffer() const = 0;
+
+ /**
+ * @brief The text Glyph to Characters Array.
+ *
+ * @return GetGlyphsToCharacters.
+ */
+ virtual const Vector<CharacterIndex>& GetGlyphsToCharacters() const = 0;
};
} // namespace Text
#include <dali/public-api/math/vector2.h>
#include <memory.h>
+// INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
+
namespace Dali
{
namespace Toolkit
struct View::Impl
{
VisualModelPtr mVisualModel;
+ LogicalModelPtr mLogicalModel;
TextAbstraction::FontClient mFontClient; ///< Handle to the font client.
};
mImpl->mVisualModel = visualModel;
}
+void View::SetLogicalModel(LogicalModelPtr logicalModel)
+{
+ mImpl->mLogicalModel = logicalModel;
+}
+
const Vector2& View::GetControlSize() const
{
if(mImpl->mVisualModel)
GlyphIndex glyphIndex,
Length numberOfGlyphs) const
{
- Length numberOfLaidOutGlyphs = 0u;
- Length numberOfActualLaidOutGlyphs = 0u;
+ Length numberOfLaidOutGlyphs = 0u;
+ Length numberOfActualLaidOutGlyphs = 0u;
+ const float characterSpacing = mImpl->mVisualModel->GetCharacterSpacing();
+ Vector<CharacterIndex>& glyphToCharacterMap = mImpl->mVisualModel->mGlyphsToCharacters;
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+ float calculatedAdvance = 0.f;
+ const Character* textBuffer = mImpl->mLogicalModel->mText.Begin();
if(mImpl->mVisualModel)
{
firstPenSet = true;
}
- removedGlypsWidth += std::min(glyphToRemove.advance, (glyphToRemove.xBearing + glyphToRemove.width));
+ calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + indexOfEllipsis))), characterSpacing, glyphToRemove.advance);
+ removedGlypsWidth += std::min(calculatedAdvance, (glyphToRemove.xBearing + glyphToRemove.width));
// Calculate the width of the ellipsis glyph and check if it fits.
const float ellipsisGlyphWidth = ellipsisGlyph.width + ellipsisGlyph.xBearing;
}
}
+const float View::GetCharacterSpacing() const
+{
+ return (mImpl->mVisualModel) ? mImpl->mVisualModel->GetCharacterSpacing() : 0.f;
+}
+
+const Character* View::GetTextBuffer() const
+{
+ return (mImpl->mVisualModel) ? mImpl->mLogicalModel->mText.Begin() : nullptr;
+}
+
+const Vector<CharacterIndex>& View::GetGlyphsToCharacters() const
+{
+ return mImpl->mVisualModel->GetGlyphsToCharacters();
+}
+
} // namespace Text
} // namespace Toolkit
*/
// INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/logical-model-impl.h>
#include <dali-toolkit/internal/text/text-view-interface.h>
#include <dali-toolkit/internal/text/visual-model-impl.h>
void SetVisualModel(VisualModelPtr visualModel);
/**
+ * @brief Set the logical model.
+ *
+ * @param[in] logicalModel The logical model used by the View.
+ */
+ void SetLogicalModel(LogicalModelPtr logicalModel);
+
+ /**
* @copydoc Dali::Toolkit::Text::ViewInterface::GetControlSize()
*/
const Vector2& GetControlSize() const override;
StrikethroughRunIndex index,
Length numberOfRuns) const;
+ /**
+ * @copydoc Dali::Toolkit::Text::ViewInterface::GetCharacterSpacing()
+ */
+ const float GetCharacterSpacing() const override;
+
+ /**
+ * @copydoc Dali::Toolkit::Text::ViewInterface::GetTextBuffer()
+ */
+ const Character* GetTextBuffer() const override;
+
+ /**
+ * @copydoc Dali::Toolkit::Text::ViewInterface::GetGlyphsToCharacters()
+ */
+ const Vector<CharacterIndex>& GetGlyphsToCharacters() const override;
+
private:
// Undefined
View(const View& handle);
mStrikethroughHeight = height;
}
+void VisualModel::SetCharacterSpacing(float characterSpacing)
+{
+ mCharacterSpacing = characterSpacing;
+}
+
const Vector4& VisualModel::GetTextColor() const
{
return mTextColor;
return mBackgroundColor;
}
+const float VisualModel::GetCharacterSpacing() const
+{
+ return mCharacterSpacing;
+}
+
bool VisualModel::IsBackgroundEnabled() const
{
return mBackgroundEnabled;
mCachedLineIndex = 0u;
}
+const Vector<CharacterIndex>& VisualModel::GetGlyphsToCharacters() const
+{
+ return mGlyphsToCharacters;
+}
+
VisualModel::~VisualModel()
{
}
mUnderlineColorSet(false),
mBackgroundEnabled(false),
mMarkupProcessorEnabled(false),
- mStrikethroughEnabled(false)
+ mStrikethroughEnabled(false),
+ mCharacterSpacing(0.0f)
{
}
* @return Returns the override height for a strikethrough, 0 indicates that font metrics will determine the height
*/
float GetStrikethroughHeight() const;
+ /**
+ * @brief Set the override used for character spacing.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @param[in] characterSpacing The character spacing.
+ */
+ void SetCharacterSpacing(float characterSpacing);
+
+ /**
+ * @brief Retrieves the characterSpacing.
+ *
+ * @note A positive value will make the characters far apart (expanded) and a negative value will bring them closer (condensed).
+ *
+ * @return Returns the characterSpacing.
+ */
+ const float GetCharacterSpacing() const;
+
+ /**
+ * @brief Retrieves the Glyphs to Characters Array.
+ *
+ * @return The GlyphsToCharacters.
+ */
+ const Vector<CharacterIndex>& GetGlyphsToCharacters() const;
/**
* @brief Retrieves the strikethrough runs.
bool mMarkupProcessorEnabled : 1; ///< Markup-processor enabled flag
HyphenInfo mHyphen; ///< Contains hyphen glyph info & the character index to draw hyphen after.
bool mStrikethroughEnabled : 1; ///< Strikethrough enabled flag
+ float mCharacterSpacing; ///< Contains the value of the character spacing.
};
} // namespace Text