2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
23 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
24 #include <dali-toolkit/internal/text/text-run-container.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <toolkit-text-utils.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 Layout::Engine::Type layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
58 DevelText::EllipsisPosition::Type ellipsisPosition;
62 void Print( const LineRun& line )
64 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
65 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
66 std::cout << " width : " << floor(line.width) << std::endl;
67 std::cout << " ascender : " << line.ascender << std::endl;
68 std::cout << " descender : " << line.descender << std::endl;
69 std::cout << " extraLength : " << line.extraLength << std::endl;
70 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
71 std::cout << " direction : " << line.direction << std::endl;
72 std::cout << " ellipsis : " << line.ellipsis << std::endl;
75 bool LayoutTextTest( const LayoutTextData& data )
78 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
79 fontClient.SetDpi( 96u, 96u );
81 char* pathNamePtr = get_current_dir_name();
82 const std::string pathName( pathNamePtr );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
87 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
90 // 1) Create the model.
95 Vector<FontDescriptionRun> fontDescriptionRuns;
96 if( 0u != data.numberOfFonts )
98 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
99 data.fontDescriptions,
100 data.fontDescriptions + data.numberOfFonts );
103 LayoutOptions options;
104 options.align = false;
105 CreateTextModel( data.text,
115 Toolkit::DevelText::EllipsisPosition::END );
117 LogicalModelPtr logicalModel = textModel->mLogicalModel;
118 VisualModelPtr visualModel = textModel->mVisualModel;
120 // 2) Clear the layout.
121 Vector<LineRun>& lines = visualModel->mLines;
123 const Length numberOfCharacters = logicalModel->mText.Count();
124 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
125 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
126 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
128 LineIndex startRemoveIndex = 0u;
130 if( 0u != lines.Count() )
132 startRemoveIndex = lines.Count();
133 LineIndex endRemoveIndex = startRemoveIndex;
134 ClearGlyphRuns( data.startIndex,
135 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
140 // Update the character runs of the lines.
141 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
142 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
143 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
144 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
145 ClearCharacterRuns( startCharacterIndex,
146 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
151 lines.Erase( lines.Begin() + startRemoveIndex,
152 lines.Begin() + endRemoveIndex );
155 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
157 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
158 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
161 Layout::Engine engine;
162 engine.SetMetrics( metrics );
163 engine.SetLayout( data.layout );
165 textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
166 textModel->mLineWrapMode = LineWrap::WORD;
167 textModel->mIgnoreSpacesAfterText = true;
168 Layout::Parameters layoutParameters( data.textArea,
171 layoutParameters.isLastNewParagraph = isLastNewParagraph;
173 // The initial glyph and the number of glyphs to layout.
174 layoutParameters.startGlyphIndex = data.startIndex;
175 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
176 layoutParameters.startLineIndex = startRemoveIndex;
177 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
179 layoutSize = Vector2::ZERO;
181 bool isAutoScroll = false;
182 const bool updated = engine.LayoutText( layoutParameters,
186 data.ellipsisPosition );
188 // 4) Compare the results.
190 if( updated != data.updated )
192 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
196 if( layoutSize != data.layoutSize )
198 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
202 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
204 const Vector2& position = *( glyphPositions.Begin() + index );
206 if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
208 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
211 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
213 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
218 if( lines.Count() != data.numberOfLines )
220 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
224 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
226 const LineRun& line = *( lines.Begin() + index );
227 const LineRun& expectedLine = *( data.lines + index );
229 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
231 std::cout << " Different line info for line : " << index << std::endl;
233 std::cout << " expected" << std::endl;
234 Print( expectedLine );
237 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
239 std::cout << " Different line info for line : " << index << std::endl;
241 std::cout << " expected" << std::endl;
242 Print( expectedLine );
246 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
248 std::cout << " Different line info for line : " << index << std::endl;
250 std::cout << " expected" << std::endl;
251 Print( expectedLine );
254 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
256 std::cout << " Different line info for line : " << index << std::endl;
258 std::cout << " expected" << std::endl;
259 Print( expectedLine );
263 if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
265 std::cout << " Different line info for line : " << index << std::endl;
267 std::cout << " expected" << std::endl;
268 Print( expectedLine );
272 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
274 std::cout << " Different line info for line : " << index << std::endl;
276 std::cout << " expected" << std::endl;
277 Print( expectedLine );
281 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
283 std::cout << " Different line info for line : " << index << std::endl;
285 std::cout << " expected" << std::endl;
286 Print( expectedLine );
290 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
292 std::cout << " Different line info for line : " << index << std::endl;
294 std::cout << " expected" << std::endl;
295 Print( expectedLine );
299 if( line.ellipsis != expectedLine.ellipsis )
301 std::cout << " Different line info for line : " << index << std::endl;
303 std::cout << " expected" << std::endl;
304 Print( expectedLine );
308 // Do not compare the alignment offset as it's not calculated in the layout.
309 // Do not compare the line direction as it's not set in the layout.
315 //////////////////////////////////////////////////////////
319 std::string description;
322 unsigned int numberOfFonts;
323 FontDescriptionRun* fontDescriptions;
324 Text::HorizontalAlignment::Type horizontalAlignment;
325 Text::VerticalAlignment::Type verticalAlignment;
326 unsigned int startIndex;
327 unsigned int numberOfCharacters;
328 unsigned int numberOfLines;
330 Dali::LayoutDirection::Type layoutDirection;
331 bool matchSystemLanguageDirection;
334 bool AlignTest( const AlignData& data )
337 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
338 fontClient.SetDpi( 96u, 96u );
340 char* pathNamePtr = get_current_dir_name();
341 const std::string pathName( pathNamePtr );
344 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
345 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
346 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
348 // 1) Create the model.
353 Vector<FontDescriptionRun> fontDescriptionRuns;
354 if( 0u != data.numberOfFonts )
356 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
357 data.fontDescriptions,
358 data.fontDescriptions + data.numberOfFonts );
361 LayoutOptions options;
362 options.align = false;
363 CreateTextModel( data.text,
373 Toolkit::DevelText::EllipsisPosition::END );
375 LogicalModelPtr logicalModel = textModel->mLogicalModel;
376 VisualModelPtr visualModel = textModel->mVisualModel;
378 // Call the Align method.
379 Layout::Engine engine;
380 engine.SetMetrics( metrics );
382 float alignmentOffset = 0.f;
383 engine.Align( data.textArea,
385 data.numberOfCharacters,
386 data.horizontalAlignment,
389 data.layoutDirection,
390 data.matchSystemLanguageDirection );
393 if( data.numberOfLines != visualModel->mLines.Count() )
395 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
399 const LineRun* const linesBuffer = visualModel->mLines.Begin();
400 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
402 const LineRun& line = *( linesBuffer + index );
404 if( line.alignmentOffset != *( data.lineOffsets + index ) )
406 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
415 //////////////////////////////////////////////////////////
417 // UtcDaliTextLayoutSetGetLayout
418 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
419 // UtcDaliTextLayoutSetGetHorizontalAlignment
420 // UtcDaliTextLayoutSetGetVerticalAlignment
421 // UtcDaliTextLayoutSetGetCursorWidth
422 // UtcDaliTextLayoutNoText
423 // UtcDaliTextLayoutSmallTextArea01
424 // UtcDaliTextLayoutSmallTextArea02
425 // UtcDaliTextLayoutMultilineText01
426 // UtcDaliTextLayoutMultilineText02
427 // UtcDaliTextLayoutMultilineText03
428 // UtcDaliTextLayoutMultilineText04
429 // UtcDaliTextLayoutMultilineText05
430 // UtcDaliTextLayoutMultilineText06
431 // UtcDaliTextUpdateLayout01
432 // UtcDaliTextUpdateLayout02
433 // UtcDaliTextUpdateLayout03
434 // UtcDaliTextLayoutEllipsis01
435 // UtcDaliTextLayoutEllipsis02
436 // UtcDaliTextLayoutEllipsis03
437 // UtcDaliTextLayoutEllipsis04
438 // UtcDaliTextLayoutEllipsis04
439 // UtcDaliTextReorderLayout01
440 // UtcDaliTextReorderLayout02
441 // UtcDaliTextReorderLayout03
442 // UtcDaliTextReorderLayout04
443 // UtcDaliTextAlign01
444 // UtcDaliTextAlign02
445 // UtcDaliTextAlign03
446 // UtcDaliTextAlign04
447 // UtcDaliTextAlign05
448 // UtcDaliTextAlign06
449 // UtcDaliTextAlign07
450 // UtcDaliTextAlign08
451 // UtcDaliTextAlign09
453 //////////////////////////////////////////////////////////
455 int UtcDaliTextLayoutSetGetLayout(void)
457 ToolkitTestApplication application;
458 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
460 Layout::Engine engine;
462 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
464 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
465 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
467 tet_result(TET_PASS);
471 int UtcDaliTextLayoutSetGetCursorWidth(void)
473 ToolkitTestApplication application;
476 Layout::Engine engine;
478 DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
480 engine.SetCursorWidth( 2 );
481 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
483 tet_result(TET_PASS);
487 int UtcDaliTextLayoutNoText(void)
489 ToolkitTestApplication application;
490 tet_infoline(" UtcDaliTextLayoutNoText");
492 Size textArea(100.f, 60.f);
493 Size layoutSize = Vector2::ZERO;
494 LayoutTextData data =
506 Layout::Engine::MULTI_LINE_BOX,
510 DevelText::EllipsisPosition::END,
514 if( !LayoutTextTest( data ) )
516 tet_result(TET_FAIL);
519 tet_result(TET_PASS);
523 int UtcDaliTextLayoutSmallTextArea01(void)
525 ToolkitTestApplication application;
526 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
528 // Won't layout the text in multi-line if the width is too small.
530 const std::string fontFamily( "TizenSans" );
532 // Set a known font description
533 FontDescriptionRun fontDescriptionRun;
534 fontDescriptionRun.characterRun.characterIndex = 0u;
535 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
536 fontDescriptionRun.familyLength = fontFamily.size();
537 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
538 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
539 fontDescriptionRun.familyDefined = true;
540 fontDescriptionRun.weightDefined = false;
541 fontDescriptionRun.widthDefined = false;
542 fontDescriptionRun.slantDefined = false;
543 fontDescriptionRun.sizeDefined = false;
545 Vector<FontDescriptionRun> fontDescriptionRuns;
546 fontDescriptionRuns.PushBack( fontDescriptionRun );
547 Size textArea(1.f, 1.f);
548 Size layoutSize = Vector2::ZERO;
549 LayoutTextData data =
551 "Layout text in a small area",
555 fontDescriptionRuns.Begin(),
561 Layout::Engine::MULTI_LINE_BOX,
565 DevelText::EllipsisPosition::END,
569 if( !LayoutTextTest( data ) )
571 tet_result(TET_FAIL);
574 tet_result(TET_PASS);
578 int UtcDaliTextLayoutSmallTextArea02(void)
580 ToolkitTestApplication application;
581 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
583 // Will layout the text in single line as it can be scrolled.
585 const std::string fontFamily( "TizenSans" );
587 // Set a known font description
588 FontDescriptionRun fontDescriptionRun;
589 fontDescriptionRun.characterRun.characterIndex = 0u;
590 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
591 fontDescriptionRun.familyLength = fontFamily.size();
592 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
593 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
594 fontDescriptionRun.familyDefined = true;
595 fontDescriptionRun.weightDefined = false;
596 fontDescriptionRun.widthDefined = false;
597 fontDescriptionRun.slantDefined = false;
598 fontDescriptionRun.sizeDefined = false;
600 Vector<FontDescriptionRun> fontDescriptionRuns;
601 fontDescriptionRuns.PushBack( fontDescriptionRun );
602 Size textArea(1.f, 1.f);
603 Size layoutSize(81.f, 20.f);
604 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 };
605 struct LineRun line =
618 Vector<LineRun> lines;
619 lines.PushBack( line );
621 LayoutTextData data =
623 "Layout text in a small area",
627 fontDescriptionRuns.Begin(),
633 Layout::Engine::SINGLE_LINE_BOX,
637 DevelText::EllipsisPosition::END,
641 if( !LayoutTextTest( data ) )
643 tet_result(TET_FAIL);
646 tet_result(TET_PASS);
650 int UtcDaliTextLayoutMultilineText01(void)
652 ToolkitTestApplication application;
653 tet_infoline(" UtcDaliTextLayoutMultilineText01");
655 // Layout some lines of left to right text.
657 const std::string fontFamily( "TizenSans" );
659 // Set a known font description
660 FontDescriptionRun fontDescriptionRun1;
661 fontDescriptionRun1.characterRun.characterIndex = 0u;
662 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
663 fontDescriptionRun1.familyLength = fontFamily.size();
664 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
665 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
666 fontDescriptionRun1.familyDefined = true;
667 fontDescriptionRun1.weightDefined = false;
668 fontDescriptionRun1.widthDefined = false;
669 fontDescriptionRun1.slantDefined = false;
670 fontDescriptionRun1.sizeDefined = false;
672 FontDescriptionRun fontDescriptionRun2;
673 fontDescriptionRun2.characterRun.characterIndex = 18u;
674 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
675 fontDescriptionRun2.familyLength = fontFamily.size();
676 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
677 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
678 fontDescriptionRun2.familyDefined = true;
679 fontDescriptionRun2.weightDefined = false;
680 fontDescriptionRun2.widthDefined = false;
681 fontDescriptionRun2.slantDefined = false;
682 fontDescriptionRun2.sizeDefined = false;
684 Vector<FontDescriptionRun> fontDescriptionRuns;
685 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
686 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
687 Size textArea(100.f, 300.f);
688 Size layoutSize(98.f, 97.f);
691 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,
692 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
693 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,
694 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,
695 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
697 struct LineRun line0 =
710 struct LineRun line1 =
723 struct LineRun line2 =
736 struct LineRun line3 =
749 struct LineRun line4 =
762 Vector<LineRun> lines;
763 lines.PushBack( line0 );
764 lines.PushBack( line1 );
765 lines.PushBack( line2 );
766 lines.PushBack( line3 );
767 lines.PushBack( line4 );
769 LayoutTextData data =
771 "Layout simple multi-line text",
772 "Hello world demo.\n"
773 "Layout different lines of text.",
776 fontDescriptionRuns.Begin(),
782 Layout::Engine::MULTI_LINE_BOX,
786 DevelText::EllipsisPosition::END,
790 if( !LayoutTextTest( data ) )
792 tet_result(TET_FAIL);
795 tet_result(TET_PASS);
799 int UtcDaliTextLayoutMultilineText02(void)
801 ToolkitTestApplication application;
802 tet_infoline(" UtcDaliTextLayoutMultilineText02");
804 // Layout some lines of bidirectional text.
806 const std::string fontFamily1( "TizenSans" );
808 // Set a known font description
809 FontDescriptionRun fontDescriptionRun1;
810 fontDescriptionRun1.characterRun.characterIndex = 0u;
811 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
812 fontDescriptionRun1.familyLength = fontFamily1.size();
813 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
814 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
815 fontDescriptionRun1.familyDefined = true;
816 fontDescriptionRun1.weightDefined = false;
817 fontDescriptionRun1.widthDefined = false;
818 fontDescriptionRun1.slantDefined = false;
819 fontDescriptionRun1.sizeDefined = false;
821 const std::string fontFamily2( "TizenSansHebrew" );
823 // Set a known font description
824 FontDescriptionRun fontDescriptionRun2;
825 fontDescriptionRun2.characterRun.characterIndex = 17u;
826 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
827 fontDescriptionRun2.familyLength = fontFamily2.size();
828 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
829 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
830 fontDescriptionRun2.familyDefined = true;
831 fontDescriptionRun2.weightDefined = false;
832 fontDescriptionRun2.widthDefined = false;
833 fontDescriptionRun2.slantDefined = false;
834 fontDescriptionRun2.sizeDefined = false;
836 const std::string fontFamily3( "TizenSans" );
838 // Set a known font description
839 FontDescriptionRun fontDescriptionRun3;
840 fontDescriptionRun3.characterRun.characterIndex = 26u;
841 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
842 fontDescriptionRun3.familyLength = fontFamily3.size();
843 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
844 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
845 fontDescriptionRun3.familyDefined = true;
846 fontDescriptionRun3.weightDefined = false;
847 fontDescriptionRun3.widthDefined = false;
848 fontDescriptionRun3.slantDefined = false;
849 fontDescriptionRun3.sizeDefined = false;
851 const std::string fontFamily4( "TizenSansHebrew" );
853 // Set a known font description
854 FontDescriptionRun fontDescriptionRun4;
855 fontDescriptionRun4.characterRun.characterIndex = 28u;
856 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
857 fontDescriptionRun4.familyLength = fontFamily4.size();
858 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
859 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
860 fontDescriptionRun4.familyDefined = true;
861 fontDescriptionRun4.weightDefined = false;
862 fontDescriptionRun4.widthDefined = false;
863 fontDescriptionRun4.slantDefined = false;
864 fontDescriptionRun4.sizeDefined = false;
866 const std::string fontFamily5( "TizenSans" );
868 // Set a known font description
869 FontDescriptionRun fontDescriptionRun5;
870 fontDescriptionRun5.characterRun.characterIndex = 38u;
871 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
872 fontDescriptionRun5.familyLength = fontFamily5.size();
873 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
874 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
875 fontDescriptionRun5.familyDefined = true;
876 fontDescriptionRun5.weightDefined = false;
877 fontDescriptionRun5.widthDefined = false;
878 fontDescriptionRun5.slantDefined = false;
879 fontDescriptionRun5.sizeDefined = false;
881 Vector<FontDescriptionRun> fontDescriptionRuns;
882 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
883 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
884 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
885 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
886 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
887 Size textArea(100.f, 300.f);
888 Size layoutSize(81.f, 120.f);
891 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
892 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
893 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
894 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
895 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
896 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
898 struct LineRun line0 =
911 struct LineRun line1 =
924 struct LineRun line2 =
937 struct LineRun line3 =
950 struct LineRun line4 =
963 struct LineRun line5 =
976 Vector<LineRun> lines;
977 lines.PushBack( line0 );
978 lines.PushBack( line1 );
979 lines.PushBack( line2 );
980 lines.PushBack( line3 );
981 lines.PushBack( line4 );
982 lines.PushBack( line5 );
984 LayoutTextData data =
986 "Layout bidirectional text.",
987 "Hello world demo שלום עולם.\n"
988 "שלום עולם hello world demo.",
991 fontDescriptionRuns.Begin(),
997 Layout::Engine::MULTI_LINE_BOX,
1001 DevelText::EllipsisPosition::END,
1005 if( !LayoutTextTest( data ) )
1007 tet_result(TET_FAIL);
1010 tet_result(TET_PASS);
1014 int UtcDaliTextLayoutMultilineText03(void)
1016 ToolkitTestApplication application;
1017 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1019 // Layout a long word which doesn't fit in the width of the text area.
1021 const std::string fontFamily( "TizenSans" );
1023 // Set a known font description
1024 FontDescriptionRun fontDescriptionRun;
1025 fontDescriptionRun.characterRun.characterIndex = 0u;
1026 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1027 fontDescriptionRun.familyLength = fontFamily.size();
1028 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1029 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1030 fontDescriptionRun.familyDefined = true;
1031 fontDescriptionRun.weightDefined = false;
1032 fontDescriptionRun.widthDefined = false;
1033 fontDescriptionRun.slantDefined = false;
1034 fontDescriptionRun.sizeDefined = false;
1036 Vector<FontDescriptionRun> fontDescriptionRuns;
1037 fontDescriptionRuns.PushBack( fontDescriptionRun );
1038 Size textArea(100.f, 300.f);
1039 Size layoutSize(98.f, 60.f);
1042 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,
1043 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,
1044 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
1046 struct LineRun line0 =
1059 struct LineRun line1 =
1072 struct LineRun line2 =
1085 Vector<LineRun> lines;
1086 lines.PushBack( line0 );
1087 lines.PushBack( line1 );
1088 lines.PushBack( line2 );
1090 LayoutTextData data =
1092 "Layout a long word which doesn't fit in the width of the text area.",
1093 "Helloworlddemohelloworlddemo.",
1096 fontDescriptionRuns.Begin(),
1102 Layout::Engine::MULTI_LINE_BOX,
1106 DevelText::EllipsisPosition::END,
1110 if( !LayoutTextTest( data ) )
1112 tet_result(TET_FAIL);
1115 tet_result(TET_PASS);
1119 int UtcDaliTextLayoutMultilineText04(void)
1121 ToolkitTestApplication application;
1122 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1124 // Layout simple text ending with a \n. It has to add a void line at the end.
1126 const std::string fontFamily( "TizenSans" );
1128 // Set a known font description
1129 FontDescriptionRun fontDescriptionRun;
1130 fontDescriptionRun.characterRun.characterIndex = 0u;
1131 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1132 fontDescriptionRun.familyLength = fontFamily.size();
1133 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1134 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1135 fontDescriptionRun.familyDefined = true;
1136 fontDescriptionRun.weightDefined = false;
1137 fontDescriptionRun.widthDefined = false;
1138 fontDescriptionRun.slantDefined = false;
1139 fontDescriptionRun.sizeDefined = false;
1141 Vector<FontDescriptionRun> fontDescriptionRuns;
1142 fontDescriptionRuns.PushBack( fontDescriptionRun );
1143 Size textArea(100.f, 300.f);
1144 Size layoutSize(84.f, 40.f);
1147 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
1149 struct LineRun line0 =
1161 struct LineRun line1 =
1174 Vector<LineRun> lines;
1175 lines.PushBack( line0 );
1176 lines.PushBack( line1 );
1178 LayoutTextData data =
1180 "Layout simple text ending with a \n.",
1184 fontDescriptionRuns.Begin(),
1190 Layout::Engine::MULTI_LINE_BOX,
1194 DevelText::EllipsisPosition::END,
1198 if( !LayoutTextTest( data ) )
1200 tet_result(TET_FAIL);
1203 tet_result(TET_PASS);
1207 int UtcDaliTextLayoutMultilineText05(void)
1209 ToolkitTestApplication application;
1210 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1212 // Layout simple text with one character with a different font size.
1214 const std::string fontFamily( "TizenSans" );
1216 // Set a known font description
1217 FontDescriptionRun fontDescriptionRun1;
1218 fontDescriptionRun1.characterRun.characterIndex = 0u;
1219 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1220 fontDescriptionRun1.familyLength = fontFamily.size();
1221 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1222 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1223 fontDescriptionRun1.familyDefined = true;
1224 fontDescriptionRun1.weightDefined = false;
1225 fontDescriptionRun1.widthDefined = false;
1226 fontDescriptionRun1.slantDefined = false;
1227 fontDescriptionRun1.sizeDefined = false;
1229 FontDescriptionRun fontDescriptionRun2;
1230 fontDescriptionRun2.characterRun.characterIndex = 6u;
1231 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1232 fontDescriptionRun2.familyLength = fontFamily.size();
1233 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1234 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1235 fontDescriptionRun2.size = 1280u;
1236 fontDescriptionRun2.familyDefined = true;
1237 fontDescriptionRun2.weightDefined = false;
1238 fontDescriptionRun2.widthDefined = false;
1239 fontDescriptionRun2.slantDefined = false;
1240 fontDescriptionRun2.sizeDefined = true;
1242 FontDescriptionRun fontDescriptionRun3;
1243 fontDescriptionRun3.characterRun.characterIndex = 7u;
1244 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1245 fontDescriptionRun3.familyLength = fontFamily.size();
1246 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1247 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1248 fontDescriptionRun3.familyDefined = true;
1249 fontDescriptionRun3.weightDefined = false;
1250 fontDescriptionRun3.widthDefined = false;
1251 fontDescriptionRun3.slantDefined = false;
1252 fontDescriptionRun3.sizeDefined = false;
1254 Vector<FontDescriptionRun> fontDescriptionRuns;
1255 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1256 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1257 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1258 Size textArea(100.f, 300.f);
1259 Size layoutSize(89.f, 53.f);
1262 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,
1263 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
1265 struct LineRun line0 =
1278 struct LineRun line1 =
1291 Vector<LineRun> lines;
1292 lines.PushBack( line0 );
1293 lines.PushBack( line1 );
1295 LayoutTextData data =
1297 "Layout simple text with one character with a different font size.",
1298 "Hello world demo.",
1301 fontDescriptionRuns.Begin(),
1307 Layout::Engine::MULTI_LINE_BOX,
1311 DevelText::EllipsisPosition::END,
1315 if( !LayoutTextTest( data ) )
1317 tet_result(TET_FAIL);
1320 tet_result(TET_PASS);
1324 int UtcDaliTextLayoutMultilineText06(void)
1326 ToolkitTestApplication application;
1327 tet_infoline(" UtcDaliTextLayoutMultilineText06");
1329 const std::string fontFamily( "TizenSansHebrew" );
1331 // Set a known font description
1332 FontDescriptionRun fontDescriptionRun;
1333 fontDescriptionRun.characterRun.characterIndex = 0u;
1334 fontDescriptionRun.characterRun.numberOfCharacters = 10u;
1335 fontDescriptionRun.familyLength = fontFamily.size();
1336 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1337 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1338 fontDescriptionRun.familyDefined = true;
1339 fontDescriptionRun.weightDefined = false;
1340 fontDescriptionRun.widthDefined = false;
1341 fontDescriptionRun.slantDefined = false;
1342 fontDescriptionRun.sizeDefined = false;
1344 Vector<FontDescriptionRun> fontDescriptionRuns;
1345 fontDescriptionRuns.PushBack( fontDescriptionRun );
1347 Size textArea(64.f, 100.f);
1348 Size layoutSize(34.f, 40.f);
1351 27.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
1352 22.f, -10.f, 17.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
1354 struct LineRun line0 =
1367 struct LineRun line1 =
1380 Vector<LineRun> lines;
1381 lines.PushBack( line0 );
1382 lines.PushBack( line1 );
1384 LayoutTextData data =
1386 "Layout right to left text that doesn't fit in the text area after reordering.",
1387 "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
1390 fontDescriptionRuns.Begin(),
1396 Layout::Engine::MULTI_LINE_BOX,
1400 DevelText::EllipsisPosition::END,
1404 if( !LayoutTextTest( data ) )
1406 tet_result(TET_FAIL);
1409 tet_result(TET_PASS);
1413 int UtcDaliTextLayoutMultilineText07(void)
1415 ToolkitTestApplication application;
1416 tet_infoline(" UtcDaliTextLayoutMultilineText07");
1418 const std::string fontFamily( "TizenSansHebrew" );
1420 // Set a known font description
1421 FontDescriptionRun fontDescriptionRun;
1422 fontDescriptionRun.characterRun.characterIndex = 0u;
1423 fontDescriptionRun.characterRun.numberOfCharacters = 9u;
1424 fontDescriptionRun.familyLength = fontFamily.size();
1425 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1426 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1427 fontDescriptionRun.familyDefined = true;
1428 fontDescriptionRun.weightDefined = false;
1429 fontDescriptionRun.widthDefined = false;
1430 fontDescriptionRun.slantDefined = false;
1431 fontDescriptionRun.sizeDefined = false;
1433 Vector<FontDescriptionRun> fontDescriptionRuns;
1434 fontDescriptionRuns.PushBack( fontDescriptionRun );
1436 Size textArea(26.f, 100.f);
1437 Size layoutSize(24.f, 60.f);
1440 10.f, -10.f, 4.f, -10.f, 0.f, -10.f,
1441 13.f, -10.f, 9.f, -10.f, 0.f, -13.f,
1442 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
1444 struct LineRun line0 =
1457 struct LineRun line1 =
1470 struct LineRun line2 =
1483 Vector<LineRun> lines;
1484 lines.PushBack( line0 );
1485 lines.PushBack( line1 );
1486 lines.PushBack( line2 );
1488 LayoutTextData data =
1490 "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.",
1491 "שנורולכאן", // 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.
1494 fontDescriptionRuns.Begin(),
1500 Layout::Engine::MULTI_LINE_BOX,
1504 DevelText::EllipsisPosition::END,
1508 if( !LayoutTextTest( data ) )
1510 tet_result(TET_FAIL);
1513 tet_result(TET_PASS);
1517 int UtcDaliTextUpdateLayout01(void)
1519 ToolkitTestApplication application;
1520 tet_infoline(" UtcDaliTextUpdateLayout01");
1522 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1524 const std::string fontLatin( "TizenSans" );
1525 const std::string fontHebrew( "TizenSansHebrew" );
1526 const std::string fontArabic( "TizenSansArabic" );
1528 // Set a known font description
1529 FontDescriptionRun fontDescriptionRun01;
1530 fontDescriptionRun01.characterRun.characterIndex = 0u;
1531 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1532 fontDescriptionRun01.familyLength = fontLatin.size();
1533 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1534 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1535 fontDescriptionRun01.familyDefined = true;
1536 fontDescriptionRun01.weightDefined = false;
1537 fontDescriptionRun01.widthDefined = false;
1538 fontDescriptionRun01.slantDefined = false;
1539 fontDescriptionRun01.sizeDefined = false;
1541 // Set a known font description
1542 FontDescriptionRun fontDescriptionRun02;
1543 fontDescriptionRun02.characterRun.characterIndex = 17u;
1544 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1545 fontDescriptionRun02.familyLength = fontHebrew.size();
1546 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1547 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1548 fontDescriptionRun02.familyDefined = true;
1549 fontDescriptionRun02.weightDefined = false;
1550 fontDescriptionRun02.widthDefined = false;
1551 fontDescriptionRun02.slantDefined = false;
1552 fontDescriptionRun02.sizeDefined = false;
1554 // Set a known font description
1555 FontDescriptionRun fontDescriptionRun03;
1556 fontDescriptionRun03.characterRun.characterIndex = 26u;
1557 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1558 fontDescriptionRun03.familyLength = fontLatin.size();
1559 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1560 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1561 fontDescriptionRun03.familyDefined = true;
1562 fontDescriptionRun03.weightDefined = false;
1563 fontDescriptionRun03.widthDefined = false;
1564 fontDescriptionRun03.slantDefined = false;
1565 fontDescriptionRun03.sizeDefined = false;
1567 // Set a known font description
1568 FontDescriptionRun fontDescriptionRun04;
1569 fontDescriptionRun04.characterRun.characterIndex = 28u;
1570 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1571 fontDescriptionRun04.familyLength = fontArabic.size();
1572 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1573 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1574 fontDescriptionRun04.familyDefined = true;
1575 fontDescriptionRun04.weightDefined = false;
1576 fontDescriptionRun04.widthDefined = false;
1577 fontDescriptionRun04.slantDefined = false;
1578 fontDescriptionRun04.sizeDefined = false;
1580 // Set a known font description
1581 FontDescriptionRun fontDescriptionRun05;
1582 fontDescriptionRun05.characterRun.characterIndex = 42u;
1583 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1584 fontDescriptionRun05.familyLength = fontLatin.size();
1585 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1586 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1587 fontDescriptionRun05.familyDefined = true;
1588 fontDescriptionRun05.weightDefined = false;
1589 fontDescriptionRun05.widthDefined = false;
1590 fontDescriptionRun05.slantDefined = false;
1591 fontDescriptionRun05.sizeDefined = false;
1593 // Set a known font description
1594 FontDescriptionRun fontDescriptionRun06;
1595 fontDescriptionRun06.characterRun.characterIndex = 54u;
1596 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1597 fontDescriptionRun06.familyLength = fontHebrew.size();
1598 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1599 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1600 fontDescriptionRun06.familyDefined = true;
1601 fontDescriptionRun06.weightDefined = false;
1602 fontDescriptionRun06.widthDefined = false;
1603 fontDescriptionRun06.slantDefined = false;
1604 fontDescriptionRun06.sizeDefined = false;
1606 // Set a known font description
1607 FontDescriptionRun fontDescriptionRun07;
1608 fontDescriptionRun07.characterRun.characterIndex = 64u;
1609 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1610 fontDescriptionRun07.familyLength = fontHebrew.size();
1611 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1612 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1613 fontDescriptionRun07.familyDefined = true;
1614 fontDescriptionRun07.weightDefined = false;
1615 fontDescriptionRun07.widthDefined = false;
1616 fontDescriptionRun07.slantDefined = false;
1617 fontDescriptionRun07.sizeDefined = false;
1619 // Set a known font description
1620 FontDescriptionRun fontDescriptionRun08;
1621 fontDescriptionRun08.characterRun.characterIndex = 74u;
1622 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1623 fontDescriptionRun08.familyLength = fontLatin.size();
1624 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1625 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1626 fontDescriptionRun08.familyDefined = true;
1627 fontDescriptionRun08.weightDefined = false;
1628 fontDescriptionRun08.widthDefined = false;
1629 fontDescriptionRun08.slantDefined = false;
1630 fontDescriptionRun08.sizeDefined = false;
1632 // Set a known font description
1633 FontDescriptionRun fontDescriptionRun09;
1634 fontDescriptionRun09.characterRun.characterIndex = 92u;
1635 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1636 fontDescriptionRun09.familyLength = fontLatin.size();
1637 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1638 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1639 fontDescriptionRun09.familyDefined = true;
1640 fontDescriptionRun09.weightDefined = false;
1641 fontDescriptionRun09.widthDefined = false;
1642 fontDescriptionRun09.slantDefined = false;
1643 fontDescriptionRun09.sizeDefined = false;
1645 // Set a known font description
1646 FontDescriptionRun fontDescriptionRun10;
1647 fontDescriptionRun10.characterRun.characterIndex = 104u;
1648 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1649 fontDescriptionRun10.familyLength = fontArabic.size();
1650 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1651 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1652 fontDescriptionRun10.familyDefined = true;
1653 fontDescriptionRun10.weightDefined = false;
1654 fontDescriptionRun10.widthDefined = false;
1655 fontDescriptionRun10.slantDefined = false;
1656 fontDescriptionRun10.sizeDefined = false;
1658 // Set a known font description
1659 FontDescriptionRun fontDescriptionRun11;
1660 fontDescriptionRun11.characterRun.characterIndex = 118u;
1661 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1662 fontDescriptionRun11.familyLength = fontHebrew.size();
1663 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1664 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1665 fontDescriptionRun11.familyDefined = true;
1666 fontDescriptionRun11.weightDefined = false;
1667 fontDescriptionRun11.widthDefined = false;
1668 fontDescriptionRun11.slantDefined = false;
1669 fontDescriptionRun11.sizeDefined = false;
1671 // Set a known font description
1672 FontDescriptionRun fontDescriptionRun12;
1673 fontDescriptionRun12.characterRun.characterIndex = 128u;
1674 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1675 fontDescriptionRun12.familyLength = fontLatin.size();
1676 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1677 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1678 fontDescriptionRun12.familyDefined = true;
1679 fontDescriptionRun12.weightDefined = false;
1680 fontDescriptionRun12.widthDefined = false;
1681 fontDescriptionRun12.slantDefined = false;
1682 fontDescriptionRun12.sizeDefined = false;
1684 // Set a known font description
1685 FontDescriptionRun fontDescriptionRun13;
1686 fontDescriptionRun13.characterRun.characterIndex = 145u;
1687 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1688 fontDescriptionRun13.familyLength = fontHebrew.size();
1689 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1690 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1691 fontDescriptionRun13.familyDefined = true;
1692 fontDescriptionRun13.weightDefined = false;
1693 fontDescriptionRun13.widthDefined = false;
1694 fontDescriptionRun13.slantDefined = false;
1695 fontDescriptionRun13.sizeDefined = false;
1697 // Set a known font description
1698 FontDescriptionRun fontDescriptionRun14;
1699 fontDescriptionRun14.characterRun.characterIndex = 154u;
1700 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1701 fontDescriptionRun14.familyLength = fontLatin.size();
1702 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1703 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1704 fontDescriptionRun14.familyDefined = true;
1705 fontDescriptionRun14.weightDefined = false;
1706 fontDescriptionRun14.widthDefined = false;
1707 fontDescriptionRun14.slantDefined = false;
1708 fontDescriptionRun14.sizeDefined = false;
1710 // Set a known font description
1711 FontDescriptionRun fontDescriptionRun15;
1712 fontDescriptionRun15.characterRun.characterIndex = 156u;
1713 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1714 fontDescriptionRun15.familyLength = fontHebrew.size();
1715 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1716 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1717 fontDescriptionRun15.familyDefined = true;
1718 fontDescriptionRun15.weightDefined = false;
1719 fontDescriptionRun15.widthDefined = false;
1720 fontDescriptionRun15.slantDefined = false;
1721 fontDescriptionRun15.sizeDefined = false;
1723 // Set a known font description
1724 FontDescriptionRun fontDescriptionRun16;
1725 fontDescriptionRun16.characterRun.characterIndex = 166u;
1726 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1727 fontDescriptionRun16.familyLength = fontLatin.size();
1728 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1729 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1730 fontDescriptionRun16.familyDefined = true;
1731 fontDescriptionRun16.weightDefined = false;
1732 fontDescriptionRun16.widthDefined = false;
1733 fontDescriptionRun16.slantDefined = false;
1734 fontDescriptionRun16.sizeDefined = false;
1736 // Set a known font description
1737 FontDescriptionRun fontDescriptionRun17;
1738 fontDescriptionRun17.characterRun.characterIndex = 178u;
1739 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1740 fontDescriptionRun17.familyLength = fontArabic.size();
1741 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1742 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1743 fontDescriptionRun17.familyDefined = true;
1744 fontDescriptionRun17.weightDefined = false;
1745 fontDescriptionRun17.widthDefined = false;
1746 fontDescriptionRun17.slantDefined = false;
1747 fontDescriptionRun17.sizeDefined = false;
1749 Vector<FontDescriptionRun> fontDescriptionRuns;
1750 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1751 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1752 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1753 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1754 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1755 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1756 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1757 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1758 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1759 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1760 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1761 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1762 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1763 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1764 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1765 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1766 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1767 Size textArea(100.f, 300.f);
1768 Size layoutSize(100.f, 380.f);
1771 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
1772 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
1773 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
1774 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
1775 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
1776 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
1777 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
1778 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
1779 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
1780 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
1781 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
1782 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
1783 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
1784 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
1785 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
1786 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
1787 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
1788 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
1791 struct LineRun line01 =
1804 struct LineRun line02 =
1817 struct LineRun line03 =
1830 struct LineRun line04 =
1843 struct LineRun line05 =
1856 struct LineRun line06 =
1869 struct LineRun line07 =
1882 struct LineRun line08 =
1895 struct LineRun line09 =
1908 struct LineRun line10 =
1921 struct LineRun line11 =
1934 struct LineRun line12 =
1947 struct LineRun line13 =
1960 struct LineRun line14 =
1973 struct LineRun line15 =
1986 struct LineRun line16 =
1999 struct LineRun line17 =
2012 struct LineRun line18 =
2025 struct LineRun line19 =
2038 Vector<LineRun> lines;
2039 lines.PushBack( line01 );
2040 lines.PushBack( line02 );
2041 lines.PushBack( line03 );
2042 lines.PushBack( line04 );
2043 lines.PushBack( line05 );
2044 lines.PushBack( line06 );
2045 lines.PushBack( line07 );
2046 lines.PushBack( line08 );
2047 lines.PushBack( line09 );
2048 lines.PushBack( line10 );
2049 lines.PushBack( line11 );
2050 lines.PushBack( line12 );
2051 lines.PushBack( line13 );
2052 lines.PushBack( line14 );
2053 lines.PushBack( line15 );
2054 lines.PushBack( line16 );
2055 lines.PushBack( line17 );
2056 lines.PushBack( line18 );
2057 lines.PushBack( line19 );
2059 LayoutTextData data =
2061 "Layout bidirectional text.",
2062 "Hello world demo שלום עולם.\n"
2063 "مرحبا بالعالم hello world שלום עולם\n"
2064 "שלום עולם hello world demo.\n"
2065 "hello world مرحبا بالعالم שלום עולם\n"
2066 "Hello world demo שלום עולם.\n"
2067 "שלום עולם hello world مرحبا بالعالم\n",
2070 fontDescriptionRuns.Begin(),
2076 Layout::Engine::MULTI_LINE_BOX,
2080 DevelText::EllipsisPosition::END,
2084 if( !LayoutTextTest( data ) )
2086 tet_result(TET_FAIL);
2089 tet_result(TET_PASS);
2093 int UtcDaliTextUpdateLayout02(void)
2095 ToolkitTestApplication application;
2096 tet_infoline(" UtcDaliTextUpdateLayout02");
2098 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2100 const std::string fontLatin( "TizenSans" );
2101 const std::string fontHebrew( "TizenSansHebrew" );
2102 const std::string fontArabic( "TizenSansArabic" );
2104 // Set a known font description
2105 FontDescriptionRun fontDescriptionRun01;
2106 fontDescriptionRun01.characterRun.characterIndex = 0u;
2107 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2108 fontDescriptionRun01.familyLength = fontLatin.size();
2109 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2110 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2111 fontDescriptionRun01.familyDefined = true;
2112 fontDescriptionRun01.weightDefined = false;
2113 fontDescriptionRun01.widthDefined = false;
2114 fontDescriptionRun01.slantDefined = false;
2115 fontDescriptionRun01.sizeDefined = false;
2117 // Set a known font description
2118 FontDescriptionRun fontDescriptionRun02;
2119 fontDescriptionRun02.characterRun.characterIndex = 17u;
2120 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2121 fontDescriptionRun02.familyLength = fontHebrew.size();
2122 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2123 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2124 fontDescriptionRun02.familyDefined = true;
2125 fontDescriptionRun02.weightDefined = false;
2126 fontDescriptionRun02.widthDefined = false;
2127 fontDescriptionRun02.slantDefined = false;
2128 fontDescriptionRun02.sizeDefined = false;
2130 // Set a known font description
2131 FontDescriptionRun fontDescriptionRun03;
2132 fontDescriptionRun03.characterRun.characterIndex = 26u;
2133 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2134 fontDescriptionRun03.familyLength = fontLatin.size();
2135 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2136 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2137 fontDescriptionRun03.familyDefined = true;
2138 fontDescriptionRun03.weightDefined = false;
2139 fontDescriptionRun03.widthDefined = false;
2140 fontDescriptionRun03.slantDefined = false;
2141 fontDescriptionRun03.sizeDefined = false;
2143 // Set a known font description
2144 FontDescriptionRun fontDescriptionRun04;
2145 fontDescriptionRun04.characterRun.characterIndex = 28u;
2146 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2147 fontDescriptionRun04.familyLength = fontArabic.size();
2148 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2149 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2150 fontDescriptionRun04.familyDefined = true;
2151 fontDescriptionRun04.weightDefined = false;
2152 fontDescriptionRun04.widthDefined = false;
2153 fontDescriptionRun04.slantDefined = false;
2154 fontDescriptionRun04.sizeDefined = false;
2156 // Set a known font description
2157 FontDescriptionRun fontDescriptionRun05;
2158 fontDescriptionRun05.characterRun.characterIndex = 42u;
2159 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2160 fontDescriptionRun05.familyLength = fontLatin.size();
2161 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2162 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2163 fontDescriptionRun05.familyDefined = true;
2164 fontDescriptionRun05.weightDefined = false;
2165 fontDescriptionRun05.widthDefined = false;
2166 fontDescriptionRun05.slantDefined = false;
2167 fontDescriptionRun05.sizeDefined = false;
2169 // Set a known font description
2170 FontDescriptionRun fontDescriptionRun06;
2171 fontDescriptionRun06.characterRun.characterIndex = 54u;
2172 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2173 fontDescriptionRun06.familyLength = fontHebrew.size();
2174 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2175 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2176 fontDescriptionRun06.familyDefined = true;
2177 fontDescriptionRun06.weightDefined = false;
2178 fontDescriptionRun06.widthDefined = false;
2179 fontDescriptionRun06.slantDefined = false;
2180 fontDescriptionRun06.sizeDefined = false;
2182 // Set a known font description
2183 FontDescriptionRun fontDescriptionRun07;
2184 fontDescriptionRun07.characterRun.characterIndex = 64u;
2185 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2186 fontDescriptionRun07.familyLength = fontHebrew.size();
2187 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2188 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2189 fontDescriptionRun07.familyDefined = true;
2190 fontDescriptionRun07.weightDefined = false;
2191 fontDescriptionRun07.widthDefined = false;
2192 fontDescriptionRun07.slantDefined = false;
2193 fontDescriptionRun07.sizeDefined = false;
2195 // Set a known font description
2196 FontDescriptionRun fontDescriptionRun08;
2197 fontDescriptionRun08.characterRun.characterIndex = 74u;
2198 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2199 fontDescriptionRun08.familyLength = fontLatin.size();
2200 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2201 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2202 fontDescriptionRun08.familyDefined = true;
2203 fontDescriptionRun08.weightDefined = false;
2204 fontDescriptionRun08.widthDefined = false;
2205 fontDescriptionRun08.slantDefined = false;
2206 fontDescriptionRun08.sizeDefined = false;
2208 // Set a known font description
2209 FontDescriptionRun fontDescriptionRun09;
2210 fontDescriptionRun09.characterRun.characterIndex = 92u;
2211 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2212 fontDescriptionRun09.familyLength = fontLatin.size();
2213 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2214 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2215 fontDescriptionRun09.familyDefined = true;
2216 fontDescriptionRun09.weightDefined = false;
2217 fontDescriptionRun09.widthDefined = false;
2218 fontDescriptionRun09.slantDefined = false;
2219 fontDescriptionRun09.sizeDefined = false;
2221 // Set a known font description
2222 FontDescriptionRun fontDescriptionRun10;
2223 fontDescriptionRun10.characterRun.characterIndex = 104u;
2224 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2225 fontDescriptionRun10.familyLength = fontArabic.size();
2226 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2227 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2228 fontDescriptionRun10.familyDefined = true;
2229 fontDescriptionRun10.weightDefined = false;
2230 fontDescriptionRun10.widthDefined = false;
2231 fontDescriptionRun10.slantDefined = false;
2232 fontDescriptionRun10.sizeDefined = false;
2234 // Set a known font description
2235 FontDescriptionRun fontDescriptionRun11;
2236 fontDescriptionRun11.characterRun.characterIndex = 118u;
2237 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2238 fontDescriptionRun11.familyLength = fontHebrew.size();
2239 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2240 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2241 fontDescriptionRun11.familyDefined = true;
2242 fontDescriptionRun11.weightDefined = false;
2243 fontDescriptionRun11.widthDefined = false;
2244 fontDescriptionRun11.slantDefined = false;
2245 fontDescriptionRun11.sizeDefined = false;
2247 // Set a known font description
2248 FontDescriptionRun fontDescriptionRun12;
2249 fontDescriptionRun12.characterRun.characterIndex = 128u;
2250 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2251 fontDescriptionRun12.familyLength = fontLatin.size();
2252 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2253 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2254 fontDescriptionRun12.familyDefined = true;
2255 fontDescriptionRun12.weightDefined = false;
2256 fontDescriptionRun12.widthDefined = false;
2257 fontDescriptionRun12.slantDefined = false;
2258 fontDescriptionRun12.sizeDefined = false;
2260 // Set a known font description
2261 FontDescriptionRun fontDescriptionRun13;
2262 fontDescriptionRun13.characterRun.characterIndex = 145u;
2263 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2264 fontDescriptionRun13.familyLength = fontHebrew.size();
2265 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2266 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2267 fontDescriptionRun13.familyDefined = true;
2268 fontDescriptionRun13.weightDefined = false;
2269 fontDescriptionRun13.widthDefined = false;
2270 fontDescriptionRun13.slantDefined = false;
2271 fontDescriptionRun13.sizeDefined = false;
2273 // Set a known font description
2274 FontDescriptionRun fontDescriptionRun14;
2275 fontDescriptionRun14.characterRun.characterIndex = 154u;
2276 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2277 fontDescriptionRun14.familyLength = fontLatin.size();
2278 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2279 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2280 fontDescriptionRun14.familyDefined = true;
2281 fontDescriptionRun14.weightDefined = false;
2282 fontDescriptionRun14.widthDefined = false;
2283 fontDescriptionRun14.slantDefined = false;
2284 fontDescriptionRun14.sizeDefined = false;
2286 // Set a known font description
2287 FontDescriptionRun fontDescriptionRun15;
2288 fontDescriptionRun15.characterRun.characterIndex = 156u;
2289 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2290 fontDescriptionRun15.familyLength = fontHebrew.size();
2291 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2292 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2293 fontDescriptionRun15.familyDefined = true;
2294 fontDescriptionRun15.weightDefined = false;
2295 fontDescriptionRun15.widthDefined = false;
2296 fontDescriptionRun15.slantDefined = false;
2297 fontDescriptionRun15.sizeDefined = false;
2299 // Set a known font description
2300 FontDescriptionRun fontDescriptionRun16;
2301 fontDescriptionRun16.characterRun.characterIndex = 166u;
2302 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2303 fontDescriptionRun16.familyLength = fontLatin.size();
2304 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2305 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2306 fontDescriptionRun16.familyDefined = true;
2307 fontDescriptionRun16.weightDefined = false;
2308 fontDescriptionRun16.widthDefined = false;
2309 fontDescriptionRun16.slantDefined = false;
2310 fontDescriptionRun16.sizeDefined = false;
2312 // Set a known font description
2313 FontDescriptionRun fontDescriptionRun17;
2314 fontDescriptionRun17.characterRun.characterIndex = 178u;
2315 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2316 fontDescriptionRun17.familyLength = fontArabic.size();
2317 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2318 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2319 fontDescriptionRun17.familyDefined = true;
2320 fontDescriptionRun17.weightDefined = false;
2321 fontDescriptionRun17.widthDefined = false;
2322 fontDescriptionRun17.slantDefined = false;
2323 fontDescriptionRun17.sizeDefined = false;
2325 Vector<FontDescriptionRun> fontDescriptionRuns;
2326 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2327 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2328 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2329 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2330 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2331 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2332 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2333 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2334 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2335 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2336 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2337 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2338 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2339 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2340 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2341 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2342 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2343 Size textArea(100.f, 300.f);
2344 Size layoutSize(100.f, 380.f);
2347 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
2348 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
2349 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
2350 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
2351 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
2352 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2353 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
2354 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
2355 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
2356 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
2357 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
2358 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
2359 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
2360 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
2361 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
2362 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
2363 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
2364 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
2367 struct LineRun line01 =
2380 struct LineRun line02 =
2393 struct LineRun line03 =
2406 struct LineRun line04 =
2419 struct LineRun line05 =
2432 struct LineRun line06 =
2445 struct LineRun line07 =
2458 struct LineRun line08 =
2471 struct LineRun line09 =
2484 struct LineRun line10 =
2497 struct LineRun line11 =
2510 struct LineRun line12 =
2523 struct LineRun line13 =
2536 struct LineRun line14 =
2549 struct LineRun line15 =
2562 struct LineRun line16 =
2575 struct LineRun line17 =
2588 struct LineRun line18 =
2601 struct LineRun line19 =
2614 Vector<LineRun> lines;
2615 lines.PushBack( line01 );
2616 lines.PushBack( line02 );
2617 lines.PushBack( line03 );
2618 lines.PushBack( line04 );
2619 lines.PushBack( line05 );
2620 lines.PushBack( line06 );
2621 lines.PushBack( line07 );
2622 lines.PushBack( line08 );
2623 lines.PushBack( line09 );
2624 lines.PushBack( line10 );
2625 lines.PushBack( line11 );
2626 lines.PushBack( line12 );
2627 lines.PushBack( line13 );
2628 lines.PushBack( line14 );
2629 lines.PushBack( line15 );
2630 lines.PushBack( line16 );
2631 lines.PushBack( line17 );
2632 lines.PushBack( line18 );
2633 lines.PushBack( line19 );
2635 LayoutTextData data =
2637 "Layout bidirectional text.",
2638 "Hello world demo שלום עולם.\n"
2639 "مرحبا بالعالم hello world שלום עולם\n"
2640 "שלום עולם hello world demo.\n"
2641 "hello world مرحبا بالعالم שלום עולם\n"
2642 "Hello world demo שלום עולם.\n"
2643 "שלום עולם hello world مرحبا بالعالم\n",
2646 fontDescriptionRuns.Begin(),
2652 Layout::Engine::MULTI_LINE_BOX,
2656 DevelText::EllipsisPosition::END,
2660 if( !LayoutTextTest( data ) )
2662 tet_result(TET_FAIL);
2665 tet_result(TET_PASS);
2669 int UtcDaliTextUpdateLayout03(void)
2671 ToolkitTestApplication application;
2672 tet_infoline(" UtcDaliTextUpdateLayout03");
2674 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2676 const std::string fontLatin( "TizenSans" );
2677 const std::string fontHebrew( "TizenSansHebrew" );
2678 const std::string fontArabic( "TizenSansArabic" );
2680 // Set a known font description
2681 FontDescriptionRun fontDescriptionRun01;
2682 fontDescriptionRun01.characterRun.characterIndex = 0u;
2683 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2684 fontDescriptionRun01.familyLength = fontLatin.size();
2685 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2686 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2687 fontDescriptionRun01.familyDefined = true;
2688 fontDescriptionRun01.weightDefined = false;
2689 fontDescriptionRun01.widthDefined = false;
2690 fontDescriptionRun01.slantDefined = false;
2691 fontDescriptionRun01.sizeDefined = false;
2693 // Set a known font description
2694 FontDescriptionRun fontDescriptionRun02;
2695 fontDescriptionRun02.characterRun.characterIndex = 17u;
2696 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2697 fontDescriptionRun02.familyLength = fontHebrew.size();
2698 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2699 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2700 fontDescriptionRun02.familyDefined = true;
2701 fontDescriptionRun02.weightDefined = false;
2702 fontDescriptionRun02.widthDefined = false;
2703 fontDescriptionRun02.slantDefined = false;
2704 fontDescriptionRun02.sizeDefined = false;
2706 // Set a known font description
2707 FontDescriptionRun fontDescriptionRun03;
2708 fontDescriptionRun03.characterRun.characterIndex = 26u;
2709 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2710 fontDescriptionRun03.familyLength = fontLatin.size();
2711 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2712 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2713 fontDescriptionRun03.familyDefined = true;
2714 fontDescriptionRun03.weightDefined = false;
2715 fontDescriptionRun03.widthDefined = false;
2716 fontDescriptionRun03.slantDefined = false;
2717 fontDescriptionRun03.sizeDefined = false;
2719 // Set a known font description
2720 FontDescriptionRun fontDescriptionRun04;
2721 fontDescriptionRun04.characterRun.characterIndex = 28u;
2722 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2723 fontDescriptionRun04.familyLength = fontArabic.size();
2724 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2725 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2726 fontDescriptionRun04.familyDefined = true;
2727 fontDescriptionRun04.weightDefined = false;
2728 fontDescriptionRun04.widthDefined = false;
2729 fontDescriptionRun04.slantDefined = false;
2730 fontDescriptionRun04.sizeDefined = false;
2732 // Set a known font description
2733 FontDescriptionRun fontDescriptionRun05;
2734 fontDescriptionRun05.characterRun.characterIndex = 42u;
2735 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2736 fontDescriptionRun05.familyLength = fontLatin.size();
2737 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2738 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2739 fontDescriptionRun05.familyDefined = true;
2740 fontDescriptionRun05.weightDefined = false;
2741 fontDescriptionRun05.widthDefined = false;
2742 fontDescriptionRun05.slantDefined = false;
2743 fontDescriptionRun05.sizeDefined = false;
2745 // Set a known font description
2746 FontDescriptionRun fontDescriptionRun06;
2747 fontDescriptionRun06.characterRun.characterIndex = 54u;
2748 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2749 fontDescriptionRun06.familyLength = fontHebrew.size();
2750 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2751 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2752 fontDescriptionRun06.familyDefined = true;
2753 fontDescriptionRun06.weightDefined = false;
2754 fontDescriptionRun06.widthDefined = false;
2755 fontDescriptionRun06.slantDefined = false;
2756 fontDescriptionRun06.sizeDefined = false;
2758 // Set a known font description
2759 FontDescriptionRun fontDescriptionRun07;
2760 fontDescriptionRun07.characterRun.characterIndex = 64u;
2761 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2762 fontDescriptionRun07.familyLength = fontHebrew.size();
2763 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2764 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2765 fontDescriptionRun07.familyDefined = true;
2766 fontDescriptionRun07.weightDefined = false;
2767 fontDescriptionRun07.widthDefined = false;
2768 fontDescriptionRun07.slantDefined = false;
2769 fontDescriptionRun07.sizeDefined = false;
2771 // Set a known font description
2772 FontDescriptionRun fontDescriptionRun08;
2773 fontDescriptionRun08.characterRun.characterIndex = 74u;
2774 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2775 fontDescriptionRun08.familyLength = fontLatin.size();
2776 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2777 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2778 fontDescriptionRun08.familyDefined = true;
2779 fontDescriptionRun08.weightDefined = false;
2780 fontDescriptionRun08.widthDefined = false;
2781 fontDescriptionRun08.slantDefined = false;
2782 fontDescriptionRun08.sizeDefined = false;
2784 // Set a known font description
2785 FontDescriptionRun fontDescriptionRun09;
2786 fontDescriptionRun09.characterRun.characterIndex = 92u;
2787 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2788 fontDescriptionRun09.familyLength = fontLatin.size();
2789 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2790 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2791 fontDescriptionRun09.familyDefined = true;
2792 fontDescriptionRun09.weightDefined = false;
2793 fontDescriptionRun09.widthDefined = false;
2794 fontDescriptionRun09.slantDefined = false;
2795 fontDescriptionRun09.sizeDefined = false;
2797 // Set a known font description
2798 FontDescriptionRun fontDescriptionRun10;
2799 fontDescriptionRun10.characterRun.characterIndex = 104u;
2800 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2801 fontDescriptionRun10.familyLength = fontArabic.size();
2802 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2803 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2804 fontDescriptionRun10.familyDefined = true;
2805 fontDescriptionRun10.weightDefined = false;
2806 fontDescriptionRun10.widthDefined = false;
2807 fontDescriptionRun10.slantDefined = false;
2808 fontDescriptionRun10.sizeDefined = false;
2810 // Set a known font description
2811 FontDescriptionRun fontDescriptionRun11;
2812 fontDescriptionRun11.characterRun.characterIndex = 118u;
2813 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2814 fontDescriptionRun11.familyLength = fontHebrew.size();
2815 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2816 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2817 fontDescriptionRun11.familyDefined = true;
2818 fontDescriptionRun11.weightDefined = false;
2819 fontDescriptionRun11.widthDefined = false;
2820 fontDescriptionRun11.slantDefined = false;
2821 fontDescriptionRun11.sizeDefined = false;
2823 // Set a known font description
2824 FontDescriptionRun fontDescriptionRun12;
2825 fontDescriptionRun12.characterRun.characterIndex = 128u;
2826 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2827 fontDescriptionRun12.familyLength = fontLatin.size();
2828 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2829 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2830 fontDescriptionRun12.familyDefined = true;
2831 fontDescriptionRun12.weightDefined = false;
2832 fontDescriptionRun12.widthDefined = false;
2833 fontDescriptionRun12.slantDefined = false;
2834 fontDescriptionRun12.sizeDefined = false;
2836 // Set a known font description
2837 FontDescriptionRun fontDescriptionRun13;
2838 fontDescriptionRun13.characterRun.characterIndex = 145u;
2839 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2840 fontDescriptionRun13.familyLength = fontHebrew.size();
2841 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2842 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2843 fontDescriptionRun13.familyDefined = true;
2844 fontDescriptionRun13.weightDefined = false;
2845 fontDescriptionRun13.widthDefined = false;
2846 fontDescriptionRun13.slantDefined = false;
2847 fontDescriptionRun13.sizeDefined = false;
2849 // Set a known font description
2850 FontDescriptionRun fontDescriptionRun14;
2851 fontDescriptionRun14.characterRun.characterIndex = 154u;
2852 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2853 fontDescriptionRun14.familyLength = fontLatin.size();
2854 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2855 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2856 fontDescriptionRun14.familyDefined = true;
2857 fontDescriptionRun14.weightDefined = false;
2858 fontDescriptionRun14.widthDefined = false;
2859 fontDescriptionRun14.slantDefined = false;
2860 fontDescriptionRun14.sizeDefined = false;
2862 // Set a known font description
2863 FontDescriptionRun fontDescriptionRun15;
2864 fontDescriptionRun15.characterRun.characterIndex = 156u;
2865 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2866 fontDescriptionRun15.familyLength = fontHebrew.size();
2867 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2868 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2869 fontDescriptionRun15.familyDefined = true;
2870 fontDescriptionRun15.weightDefined = false;
2871 fontDescriptionRun15.widthDefined = false;
2872 fontDescriptionRun15.slantDefined = false;
2873 fontDescriptionRun15.sizeDefined = false;
2875 // Set a known font description
2876 FontDescriptionRun fontDescriptionRun16;
2877 fontDescriptionRun16.characterRun.characterIndex = 166u;
2878 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2879 fontDescriptionRun16.familyLength = fontLatin.size();
2880 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2881 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2882 fontDescriptionRun16.familyDefined = true;
2883 fontDescriptionRun16.weightDefined = false;
2884 fontDescriptionRun16.widthDefined = false;
2885 fontDescriptionRun16.slantDefined = false;
2886 fontDescriptionRun16.sizeDefined = false;
2888 // Set a known font description
2889 FontDescriptionRun fontDescriptionRun17;
2890 fontDescriptionRun17.characterRun.characterIndex = 178u;
2891 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2892 fontDescriptionRun17.familyLength = fontArabic.size();
2893 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2894 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2895 fontDescriptionRun17.familyDefined = true;
2896 fontDescriptionRun17.weightDefined = false;
2897 fontDescriptionRun17.widthDefined = false;
2898 fontDescriptionRun17.slantDefined = false;
2899 fontDescriptionRun17.sizeDefined = false;
2901 Vector<FontDescriptionRun> fontDescriptionRuns;
2902 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2903 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2904 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2905 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2906 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2907 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2908 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2909 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2910 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2911 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2912 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2913 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2914 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2915 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2916 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2917 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2918 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2919 Size textArea(100.f, 300.f);
2920 Size layoutSize(100.f, 380.f);
2923 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
2924 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
2925 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
2926 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
2927 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
2928 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2929 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
2930 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
2931 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
2932 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
2933 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
2934 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
2935 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
2936 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
2937 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
2938 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
2939 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
2940 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
2943 struct LineRun line01 =
2956 struct LineRun line02 =
2969 struct LineRun line03 =
2982 struct LineRun line04 =
2995 struct LineRun line05 =
3008 struct LineRun line06 =
3021 struct LineRun line07 =
3034 struct LineRun line08 =
3047 struct LineRun line09 =
3060 struct LineRun line10 =
3073 struct LineRun line11 =
3086 struct LineRun line12 =
3099 struct LineRun line13 =
3112 struct LineRun line14 =
3125 struct LineRun line15 =
3138 struct LineRun line16 =
3151 struct LineRun line17 =
3164 struct LineRun line18 =
3177 struct LineRun line19 =
3190 Vector<LineRun> lines;
3191 lines.PushBack( line01 );
3192 lines.PushBack( line02 );
3193 lines.PushBack( line03 );
3194 lines.PushBack( line04 );
3195 lines.PushBack( line05 );
3196 lines.PushBack( line06 );
3197 lines.PushBack( line07 );
3198 lines.PushBack( line08 );
3199 lines.PushBack( line09 );
3200 lines.PushBack( line10 );
3201 lines.PushBack( line11 );
3202 lines.PushBack( line12 );
3203 lines.PushBack( line13 );
3204 lines.PushBack( line14 );
3205 lines.PushBack( line15 );
3206 lines.PushBack( line16 );
3207 lines.PushBack( line17 );
3208 lines.PushBack( line18 );
3209 lines.PushBack( line19 );
3211 LayoutTextData data =
3213 "Layout bidirectional text.",
3214 "Hello world demo שלום עולם.\n"
3215 "مرحبا بالعالم hello world שלום עולם\n"
3216 "שלום עולם hello world demo.\n"
3217 "hello world مرحبا بالعالم שלום עולם\n"
3218 "Hello world demo שלום עולם.\n"
3219 "שלום עולם hello world مرحبا بالعالم\n",
3222 fontDescriptionRuns.Begin(),
3228 Layout::Engine::MULTI_LINE_BOX,
3232 DevelText::EllipsisPosition::END,
3236 if( !LayoutTextTest( data ) )
3238 tet_result(TET_FAIL);
3241 tet_result(TET_PASS);
3245 int UtcDaliTextLayoutEllipsis01(void)
3247 ToolkitTestApplication application;
3248 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3250 // Layout single-line LTR text with ellipsis.
3252 const std::string fontLatin( "TizenSans" );
3254 // Set a known font description
3255 FontDescriptionRun fontDescriptionRun01;
3256 fontDescriptionRun01.characterRun.characterIndex = 0u;
3257 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3258 fontDescriptionRun01.familyLength = fontLatin.size();
3259 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3260 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3261 fontDescriptionRun01.familyDefined = true;
3262 fontDescriptionRun01.weightDefined = false;
3263 fontDescriptionRun01.widthDefined = false;
3264 fontDescriptionRun01.slantDefined = false;
3265 fontDescriptionRun01.sizeDefined = false;
3267 Vector<FontDescriptionRun> fontDescriptionRuns;
3268 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3270 struct LineRun line01 =
3283 Vector<LineRun> lines;
3284 lines.PushBack( line01 );
3288 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,
3291 Size textArea( 100.f, 50.f );
3292 Size layoutSize( 100.f, 20.f );
3294 LayoutTextData data =
3296 "Layout single-line LTR text with ellipsis.",
3297 "Hello world demo hello world demo hello world demo.",
3300 fontDescriptionRuns.Begin(),
3306 Layout::Engine::SINGLE_LINE_BOX,
3310 DevelText::EllipsisPosition::END,
3314 if( !LayoutTextTest( data ) )
3316 tet_result(TET_FAIL);
3319 tet_result(TET_PASS);
3323 int UtcDaliTextLayoutEllipsis02(void)
3325 ToolkitTestApplication application;
3326 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3328 // Layout multi-line LTR text with ellipsis.
3330 const std::string fontLatin( "TizenSans" );
3332 // Set a known font description
3333 FontDescriptionRun fontDescriptionRun01;
3334 fontDescriptionRun01.characterRun.characterIndex = 0u;
3335 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3336 fontDescriptionRun01.familyLength = fontLatin.size();
3337 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3338 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3339 fontDescriptionRun01.familyDefined = true;
3340 fontDescriptionRun01.weightDefined = false;
3341 fontDescriptionRun01.widthDefined = false;
3342 fontDescriptionRun01.slantDefined = false;
3343 fontDescriptionRun01.sizeDefined = false;
3345 Vector<FontDescriptionRun> fontDescriptionRuns;
3346 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3348 struct LineRun line01 =
3361 struct LineRun line02 =
3374 Vector<LineRun> lines;
3375 lines.PushBack( line01 );
3376 lines.PushBack( line02 );
3380 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,
3381 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,
3384 Size textArea( 100.f, 50.f );
3385 Size layoutSize( 100.f, 40.f );
3387 LayoutTextData data =
3389 "Layout multi-line LTR text with ellipsis.",
3390 "Hello world demo hello world demo hello world demo.",
3393 fontDescriptionRuns.Begin(),
3399 Layout::Engine::MULTI_LINE_BOX,
3403 DevelText::EllipsisPosition::END,
3407 if( !LayoutTextTest( data ) )
3409 tet_result(TET_FAIL);
3412 tet_result(TET_PASS);
3416 int UtcDaliTextLayoutEllipsis03(void)
3418 ToolkitTestApplication application;
3419 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3421 // Layout single-line RTL text with ellipsis.
3423 const std::string fontHebrew( "TizenSansHebrew" );
3424 const std::string fontArabic( "TizenSansArabic" );
3426 // Set a known font description
3427 FontDescriptionRun fontDescriptionRun01;
3428 fontDescriptionRun01.characterRun.characterIndex = 0u;
3429 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3430 fontDescriptionRun01.familyLength = fontHebrew.size();
3431 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3432 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3433 fontDescriptionRun01.familyDefined = true;
3434 fontDescriptionRun01.weightDefined = false;
3435 fontDescriptionRun01.widthDefined = false;
3436 fontDescriptionRun01.slantDefined = false;
3437 fontDescriptionRun01.sizeDefined = false;
3439 FontDescriptionRun fontDescriptionRun02;
3440 fontDescriptionRun02.characterRun.characterIndex = 10u;
3441 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3442 fontDescriptionRun02.familyLength = fontArabic.size();
3443 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3444 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3445 fontDescriptionRun02.familyDefined = true;
3446 fontDescriptionRun02.weightDefined = false;
3447 fontDescriptionRun02.widthDefined = false;
3448 fontDescriptionRun02.slantDefined = false;
3449 fontDescriptionRun02.sizeDefined = false;
3451 FontDescriptionRun fontDescriptionRun03;
3452 fontDescriptionRun03.characterRun.characterIndex = 24u;
3453 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3454 fontDescriptionRun03.familyLength = fontHebrew.size();
3455 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3456 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3457 fontDescriptionRun03.familyDefined = true;
3458 fontDescriptionRun03.weightDefined = false;
3459 fontDescriptionRun03.widthDefined = false;
3460 fontDescriptionRun03.slantDefined = false;
3461 fontDescriptionRun03.sizeDefined = false;
3463 FontDescriptionRun fontDescriptionRun04;
3464 fontDescriptionRun04.characterRun.characterIndex = 34u;
3465 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3466 fontDescriptionRun04.familyLength = fontArabic.size();
3467 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3468 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3469 fontDescriptionRun04.familyDefined = true;
3470 fontDescriptionRun04.weightDefined = false;
3471 fontDescriptionRun04.widthDefined = false;
3472 fontDescriptionRun04.slantDefined = false;
3473 fontDescriptionRun04.sizeDefined = false;
3475 FontDescriptionRun fontDescriptionRun05;
3476 fontDescriptionRun05.characterRun.characterIndex = 48u;
3477 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3478 fontDescriptionRun05.familyLength = fontHebrew.size();
3479 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3480 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3481 fontDescriptionRun05.familyDefined = true;
3482 fontDescriptionRun05.weightDefined = false;
3483 fontDescriptionRun05.widthDefined = false;
3484 fontDescriptionRun05.slantDefined = false;
3485 fontDescriptionRun05.sizeDefined = false;
3487 FontDescriptionRun fontDescriptionRun06;
3488 fontDescriptionRun06.characterRun.characterIndex = 58u;
3489 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3490 fontDescriptionRun06.familyLength = fontArabic.size();
3491 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3492 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3493 fontDescriptionRun06.familyDefined = true;
3494 fontDescriptionRun06.weightDefined = false;
3495 fontDescriptionRun06.widthDefined = false;
3496 fontDescriptionRun06.slantDefined = false;
3497 fontDescriptionRun06.sizeDefined = false;
3499 Vector<FontDescriptionRun> fontDescriptionRuns;
3500 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3501 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3502 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3503 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3504 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3505 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3507 struct LineRun line01 =
3520 Vector<LineRun> lines;
3521 lines.PushBack( line01 );
3525 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,
3528 Size textArea( 100.f, 50.f );
3529 Size layoutSize( 100.f, 20.f );
3531 LayoutTextData data =
3533 "Layout single-line RTL text with ellipsis.",
3534 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3537 fontDescriptionRuns.Begin(),
3543 Layout::Engine::SINGLE_LINE_BOX,
3547 DevelText::EllipsisPosition::END,
3551 if( !LayoutTextTest( data ) )
3553 tet_result(TET_FAIL);
3556 tet_result(TET_PASS);
3560 int UtcDaliTextLayoutEllipsis04(void)
3562 ToolkitTestApplication application;
3563 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3565 // Layout multi-line RTL text with ellipsis.
3567 const std::string fontHebrew( "TizenSansHebrew" );
3568 const std::string fontArabic( "TizenSansArabic" );
3570 // Set a known font description
3571 FontDescriptionRun fontDescriptionRun01;
3572 fontDescriptionRun01.characterRun.characterIndex = 0u;
3573 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3574 fontDescriptionRun01.familyLength = fontHebrew.size();
3575 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3576 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3577 fontDescriptionRun01.familyDefined = true;
3578 fontDescriptionRun01.weightDefined = false;
3579 fontDescriptionRun01.widthDefined = false;
3580 fontDescriptionRun01.slantDefined = false;
3581 fontDescriptionRun01.sizeDefined = false;
3583 FontDescriptionRun fontDescriptionRun02;
3584 fontDescriptionRun02.characterRun.characterIndex = 10u;
3585 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3586 fontDescriptionRun02.familyLength = fontArabic.size();
3587 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3588 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3589 fontDescriptionRun02.familyDefined = true;
3590 fontDescriptionRun02.weightDefined = false;
3591 fontDescriptionRun02.widthDefined = false;
3592 fontDescriptionRun02.slantDefined = false;
3593 fontDescriptionRun02.sizeDefined = false;
3595 FontDescriptionRun fontDescriptionRun03;
3596 fontDescriptionRun03.characterRun.characterIndex = 24u;
3597 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3598 fontDescriptionRun03.familyLength = fontHebrew.size();
3599 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3600 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3601 fontDescriptionRun03.familyDefined = true;
3602 fontDescriptionRun03.weightDefined = false;
3603 fontDescriptionRun03.widthDefined = false;
3604 fontDescriptionRun03.slantDefined = false;
3605 fontDescriptionRun03.sizeDefined = false;
3607 FontDescriptionRun fontDescriptionRun04;
3608 fontDescriptionRun04.characterRun.characterIndex = 34u;
3609 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3610 fontDescriptionRun04.familyLength = fontArabic.size();
3611 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3612 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3613 fontDescriptionRun04.familyDefined = true;
3614 fontDescriptionRun04.weightDefined = false;
3615 fontDescriptionRun04.widthDefined = false;
3616 fontDescriptionRun04.slantDefined = false;
3617 fontDescriptionRun04.sizeDefined = false;
3619 FontDescriptionRun fontDescriptionRun05;
3620 fontDescriptionRun05.characterRun.characterIndex = 48u;
3621 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3622 fontDescriptionRun05.familyLength = fontHebrew.size();
3623 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3624 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3625 fontDescriptionRun05.familyDefined = true;
3626 fontDescriptionRun05.weightDefined = false;
3627 fontDescriptionRun05.widthDefined = false;
3628 fontDescriptionRun05.slantDefined = false;
3629 fontDescriptionRun05.sizeDefined = false;
3631 FontDescriptionRun fontDescriptionRun06;
3632 fontDescriptionRun06.characterRun.characterIndex = 58u;
3633 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3634 fontDescriptionRun06.familyLength = fontArabic.size();
3635 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3636 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3637 fontDescriptionRun06.familyDefined = true;
3638 fontDescriptionRun06.weightDefined = false;
3639 fontDescriptionRun06.widthDefined = false;
3640 fontDescriptionRun06.slantDefined = false;
3641 fontDescriptionRun06.sizeDefined = false;
3643 Vector<FontDescriptionRun> fontDescriptionRuns;
3644 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3645 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3646 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3647 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3648 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3649 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3651 struct LineRun line01 =
3664 struct LineRun line02 =
3677 Vector<LineRun> lines;
3678 lines.PushBack( line01 );
3679 lines.PushBack( line02 );
3683 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,
3684 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,
3687 Size textArea( 100.f, 50.f );
3688 Size layoutSize( 100.f, 40.f );
3690 LayoutTextData data =
3692 "Layout multi-line RTL text with ellipsis.",
3693 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3696 fontDescriptionRuns.Begin(),
3702 Layout::Engine::MULTI_LINE_BOX,
3706 DevelText::EllipsisPosition::END,
3710 if( !LayoutTextTest( data ) )
3712 tet_result(TET_FAIL);
3715 tet_result(TET_PASS);
3719 int UtcDaliTextLayoutEllipsis05(void)
3721 ToolkitTestApplication application;
3722 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3724 const std::string fontLatin( "TizenSans" );
3726 // Set a known font description
3727 FontDescriptionRun fontDescriptionRun01;
3728 fontDescriptionRun01.characterRun.characterIndex = 0u;
3729 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3730 fontDescriptionRun01.familyLength = fontLatin.size();
3731 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3732 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3733 fontDescriptionRun01.familyDefined = true;
3734 fontDescriptionRun01.weightDefined = false;
3735 fontDescriptionRun01.widthDefined = false;
3736 fontDescriptionRun01.slantDefined = false;
3737 fontDescriptionRun01.sizeDefined = false;
3739 Vector<FontDescriptionRun> fontDescriptionRuns;
3740 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3742 struct LineRun line01 =
3755 Vector<LineRun> lines;
3756 lines.PushBack( line01 );
3763 Size textArea( 100.f, 19.f );
3764 Size layoutSize( 100.f, 20.f );
3766 LayoutTextData data =
3768 "Not enough height.",
3772 fontDescriptionRuns.Begin(),
3778 Layout::Engine::MULTI_LINE_BOX,
3782 DevelText::EllipsisPosition::END,
3786 if( !LayoutTextTest( data ) )
3788 tet_result(TET_FAIL);
3791 tet_result(TET_PASS);
3795 int UtcDaliTextAlign01(void)
3797 ToolkitTestApplication application;
3798 tet_infoline(" UtcDaliTextAlign01");
3800 // Calculate text alignment.
3802 const std::string fontLatin( "TizenSans" );
3803 const std::string fontHebrew( "TizenSansHebrew" );
3804 const std::string fontArabic( "TizenSansArabic" );
3806 // Set a known font description
3807 FontDescriptionRun fontDescriptionRun01;
3808 fontDescriptionRun01.characterRun.characterIndex = 0u;
3809 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3810 fontDescriptionRun01.familyLength = fontLatin.size();
3811 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3812 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3813 fontDescriptionRun01.familyDefined = true;
3814 fontDescriptionRun01.weightDefined = false;
3815 fontDescriptionRun01.widthDefined = false;
3816 fontDescriptionRun01.slantDefined = false;
3817 fontDescriptionRun01.sizeDefined = false;
3819 FontDescriptionRun fontDescriptionRun02;
3820 fontDescriptionRun02.characterRun.characterIndex = 12u;
3821 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3822 fontDescriptionRun02.familyLength = fontHebrew.size();
3823 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3824 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3825 fontDescriptionRun02.familyDefined = true;
3826 fontDescriptionRun02.weightDefined = false;
3827 fontDescriptionRun02.widthDefined = false;
3828 fontDescriptionRun02.slantDefined = false;
3829 fontDescriptionRun02.sizeDefined = false;
3831 FontDescriptionRun fontDescriptionRun03;
3832 fontDescriptionRun03.characterRun.characterIndex = 22u;
3833 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3834 fontDescriptionRun03.familyLength = fontArabic.size();
3835 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3836 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3837 fontDescriptionRun03.familyDefined = true;
3838 fontDescriptionRun03.weightDefined = false;
3839 fontDescriptionRun03.widthDefined = false;
3840 fontDescriptionRun03.slantDefined = false;
3841 fontDescriptionRun03.sizeDefined = false;
3843 FontDescriptionRun fontDescriptionRun04;
3844 fontDescriptionRun04.characterRun.characterIndex = 36u;
3845 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3846 fontDescriptionRun04.familyLength = fontLatin.size();
3847 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3848 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3849 fontDescriptionRun04.familyDefined = true;
3850 fontDescriptionRun04.weightDefined = false;
3851 fontDescriptionRun04.widthDefined = false;
3852 fontDescriptionRun04.slantDefined = false;
3853 fontDescriptionRun04.sizeDefined = false;
3855 FontDescriptionRun fontDescriptionRun05;
3856 fontDescriptionRun05.characterRun.characterIndex = 48u;
3857 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3858 fontDescriptionRun05.familyLength = fontLatin.size();
3859 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3860 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3861 fontDescriptionRun05.familyDefined = true;
3862 fontDescriptionRun05.weightDefined = false;
3863 fontDescriptionRun05.widthDefined = false;
3864 fontDescriptionRun05.slantDefined = false;
3865 fontDescriptionRun05.sizeDefined = false;
3867 FontDescriptionRun fontDescriptionRun06;
3868 fontDescriptionRun06.characterRun.characterIndex = 60u;
3869 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3870 fontDescriptionRun06.familyLength = fontArabic.size();
3871 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3872 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3873 fontDescriptionRun06.familyDefined = true;
3874 fontDescriptionRun06.weightDefined = false;
3875 fontDescriptionRun06.widthDefined = false;
3876 fontDescriptionRun06.slantDefined = false;
3877 fontDescriptionRun06.sizeDefined = false;
3879 Vector<FontDescriptionRun> fontDescriptionRuns;
3880 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3881 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3882 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3883 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3884 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3885 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3887 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
3889 Size textArea( 100.f, 300.f );
3892 "Begin alignment for the first paragraph.",
3893 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3896 fontDescriptionRuns.Begin(),
3897 Text::HorizontalAlignment::BEGIN,
3898 Text::VerticalAlignment::TOP,
3903 Dali::LayoutDirection::LEFT_TO_RIGHT,
3907 if( !AlignTest( data ) )
3909 tet_result(TET_FAIL);
3912 tet_result(TET_PASS);
3916 int UtcDaliTextAlign02(void)
3918 ToolkitTestApplication application;
3919 tet_infoline(" UtcDaliTextAlign02");
3921 // Calculate text alignment.
3923 const std::string fontLatin( "TizenSans" );
3924 const std::string fontHebrew( "TizenSansHebrew" );
3925 const std::string fontArabic( "TizenSansArabic" );
3927 // Set a known font description
3928 FontDescriptionRun fontDescriptionRun01;
3929 fontDescriptionRun01.characterRun.characterIndex = 0u;
3930 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3931 fontDescriptionRun01.familyLength = fontLatin.size();
3932 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3933 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3934 fontDescriptionRun01.familyDefined = true;
3935 fontDescriptionRun01.weightDefined = false;
3936 fontDescriptionRun01.widthDefined = false;
3937 fontDescriptionRun01.slantDefined = false;
3938 fontDescriptionRun01.sizeDefined = false;
3940 FontDescriptionRun fontDescriptionRun02;
3941 fontDescriptionRun02.characterRun.characterIndex = 12u;
3942 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3943 fontDescriptionRun02.familyLength = fontHebrew.size();
3944 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3945 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3946 fontDescriptionRun02.familyDefined = true;
3947 fontDescriptionRun02.weightDefined = false;
3948 fontDescriptionRun02.widthDefined = false;
3949 fontDescriptionRun02.slantDefined = false;
3950 fontDescriptionRun02.sizeDefined = false;
3952 FontDescriptionRun fontDescriptionRun03;
3953 fontDescriptionRun03.characterRun.characterIndex = 22u;
3954 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3955 fontDescriptionRun03.familyLength = fontArabic.size();
3956 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3957 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3958 fontDescriptionRun03.familyDefined = true;
3959 fontDescriptionRun03.weightDefined = false;
3960 fontDescriptionRun03.widthDefined = false;
3961 fontDescriptionRun03.slantDefined = false;
3962 fontDescriptionRun03.sizeDefined = false;
3964 FontDescriptionRun fontDescriptionRun04;
3965 fontDescriptionRun04.characterRun.characterIndex = 36u;
3966 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3967 fontDescriptionRun04.familyLength = fontLatin.size();
3968 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3969 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3970 fontDescriptionRun04.familyDefined = true;
3971 fontDescriptionRun04.weightDefined = false;
3972 fontDescriptionRun04.widthDefined = false;
3973 fontDescriptionRun04.slantDefined = false;
3974 fontDescriptionRun04.sizeDefined = false;
3976 FontDescriptionRun fontDescriptionRun05;
3977 fontDescriptionRun05.characterRun.characterIndex = 48u;
3978 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3979 fontDescriptionRun05.familyLength = fontLatin.size();
3980 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3981 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3982 fontDescriptionRun05.familyDefined = true;
3983 fontDescriptionRun05.weightDefined = false;
3984 fontDescriptionRun05.widthDefined = false;
3985 fontDescriptionRun05.slantDefined = false;
3986 fontDescriptionRun05.sizeDefined = false;
3988 FontDescriptionRun fontDescriptionRun06;
3989 fontDescriptionRun06.characterRun.characterIndex = 60u;
3990 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3991 fontDescriptionRun06.familyLength = fontArabic.size();
3992 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3993 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3994 fontDescriptionRun06.familyDefined = true;
3995 fontDescriptionRun06.weightDefined = false;
3996 fontDescriptionRun06.widthDefined = false;
3997 fontDescriptionRun06.slantDefined = false;
3998 fontDescriptionRun06.sizeDefined = false;
4000 Vector<FontDescriptionRun> fontDescriptionRuns;
4001 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4002 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4003 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4004 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4005 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4006 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4008 float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
4010 Size textArea( 100.f, 300.f );
4013 "Begin alignment for the mid paragraph.",
4014 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4017 fontDescriptionRuns.Begin(),
4018 Text::HorizontalAlignment::BEGIN,
4019 Text::VerticalAlignment::TOP,
4024 Dali::LayoutDirection::LEFT_TO_RIGHT,
4028 if( !AlignTest( data ) )
4030 tet_result(TET_FAIL);
4033 tet_result(TET_PASS);
4037 int UtcDaliTextAlign03(void)
4039 ToolkitTestApplication application;
4040 tet_infoline(" UtcDaliTextAlign03");
4042 // Calculate text alignment.
4044 const std::string fontLatin( "TizenSans" );
4045 const std::string fontHebrew( "TizenSansHebrew" );
4046 const std::string fontArabic( "TizenSansArabic" );
4048 // Set a known font description
4049 FontDescriptionRun fontDescriptionRun01;
4050 fontDescriptionRun01.characterRun.characterIndex = 0u;
4051 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4052 fontDescriptionRun01.familyLength = fontLatin.size();
4053 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4054 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4055 fontDescriptionRun01.familyDefined = true;
4056 fontDescriptionRun01.weightDefined = false;
4057 fontDescriptionRun01.widthDefined = false;
4058 fontDescriptionRun01.slantDefined = false;
4059 fontDescriptionRun01.sizeDefined = false;
4061 FontDescriptionRun fontDescriptionRun02;
4062 fontDescriptionRun02.characterRun.characterIndex = 12u;
4063 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4064 fontDescriptionRun02.familyLength = fontHebrew.size();
4065 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4066 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4067 fontDescriptionRun02.familyDefined = true;
4068 fontDescriptionRun02.weightDefined = false;
4069 fontDescriptionRun02.widthDefined = false;
4070 fontDescriptionRun02.slantDefined = false;
4071 fontDescriptionRun02.sizeDefined = false;
4073 FontDescriptionRun fontDescriptionRun03;
4074 fontDescriptionRun03.characterRun.characterIndex = 22u;
4075 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4076 fontDescriptionRun03.familyLength = fontArabic.size();
4077 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4078 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4079 fontDescriptionRun03.familyDefined = true;
4080 fontDescriptionRun03.weightDefined = false;
4081 fontDescriptionRun03.widthDefined = false;
4082 fontDescriptionRun03.slantDefined = false;
4083 fontDescriptionRun03.sizeDefined = false;
4085 FontDescriptionRun fontDescriptionRun04;
4086 fontDescriptionRun04.characterRun.characterIndex = 36u;
4087 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4088 fontDescriptionRun04.familyLength = fontLatin.size();
4089 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4090 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4091 fontDescriptionRun04.familyDefined = true;
4092 fontDescriptionRun04.weightDefined = false;
4093 fontDescriptionRun04.widthDefined = false;
4094 fontDescriptionRun04.slantDefined = false;
4095 fontDescriptionRun04.sizeDefined = false;
4097 FontDescriptionRun fontDescriptionRun05;
4098 fontDescriptionRun05.characterRun.characterIndex = 48u;
4099 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4100 fontDescriptionRun05.familyLength = fontLatin.size();
4101 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4102 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4103 fontDescriptionRun05.familyDefined = true;
4104 fontDescriptionRun05.weightDefined = false;
4105 fontDescriptionRun05.widthDefined = false;
4106 fontDescriptionRun05.slantDefined = false;
4107 fontDescriptionRun05.sizeDefined = false;
4109 FontDescriptionRun fontDescriptionRun06;
4110 fontDescriptionRun06.characterRun.characterIndex = 60u;
4111 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4112 fontDescriptionRun06.familyLength = fontArabic.size();
4113 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4114 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4115 fontDescriptionRun06.familyDefined = true;
4116 fontDescriptionRun06.weightDefined = false;
4117 fontDescriptionRun06.widthDefined = false;
4118 fontDescriptionRun06.slantDefined = false;
4119 fontDescriptionRun06.sizeDefined = false;
4121 Vector<FontDescriptionRun> fontDescriptionRuns;
4122 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4123 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4124 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4125 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4126 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4127 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4129 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4131 Size textArea( 100.f, 300.f );
4134 "Begin alignment for the last paragraph.",
4135 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4138 fontDescriptionRuns.Begin(),
4139 Text::HorizontalAlignment::BEGIN,
4140 Text::VerticalAlignment::TOP,
4145 Dali::LayoutDirection::LEFT_TO_RIGHT,
4149 if( !AlignTest( data ) )
4151 tet_result(TET_FAIL);
4154 tet_result(TET_PASS);
4158 int UtcDaliTextAlign04(void)
4160 ToolkitTestApplication application;
4161 tet_infoline(" UtcDaliTextAlign04");
4163 // Calculate text alignment.
4165 const std::string fontLatin( "TizenSans" );
4166 const std::string fontHebrew( "TizenSansHebrew" );
4167 const std::string fontArabic( "TizenSansArabic" );
4169 // Set a known font description
4170 FontDescriptionRun fontDescriptionRun01;
4171 fontDescriptionRun01.characterRun.characterIndex = 0u;
4172 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4173 fontDescriptionRun01.familyLength = fontLatin.size();
4174 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4175 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4176 fontDescriptionRun01.familyDefined = true;
4177 fontDescriptionRun01.weightDefined = false;
4178 fontDescriptionRun01.widthDefined = false;
4179 fontDescriptionRun01.slantDefined = false;
4180 fontDescriptionRun01.sizeDefined = false;
4182 FontDescriptionRun fontDescriptionRun02;
4183 fontDescriptionRun02.characterRun.characterIndex = 12u;
4184 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4185 fontDescriptionRun02.familyLength = fontHebrew.size();
4186 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4187 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4188 fontDescriptionRun02.familyDefined = true;
4189 fontDescriptionRun02.weightDefined = false;
4190 fontDescriptionRun02.widthDefined = false;
4191 fontDescriptionRun02.slantDefined = false;
4192 fontDescriptionRun02.sizeDefined = false;
4194 FontDescriptionRun fontDescriptionRun03;
4195 fontDescriptionRun03.characterRun.characterIndex = 22u;
4196 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4197 fontDescriptionRun03.familyLength = fontArabic.size();
4198 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4199 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4200 fontDescriptionRun03.familyDefined = true;
4201 fontDescriptionRun03.weightDefined = false;
4202 fontDescriptionRun03.widthDefined = false;
4203 fontDescriptionRun03.slantDefined = false;
4204 fontDescriptionRun03.sizeDefined = false;
4206 FontDescriptionRun fontDescriptionRun04;
4207 fontDescriptionRun04.characterRun.characterIndex = 36u;
4208 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4209 fontDescriptionRun04.familyLength = fontLatin.size();
4210 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4211 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4212 fontDescriptionRun04.familyDefined = true;
4213 fontDescriptionRun04.weightDefined = false;
4214 fontDescriptionRun04.widthDefined = false;
4215 fontDescriptionRun04.slantDefined = false;
4216 fontDescriptionRun04.sizeDefined = false;
4218 FontDescriptionRun fontDescriptionRun05;
4219 fontDescriptionRun05.characterRun.characterIndex = 48u;
4220 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4221 fontDescriptionRun05.familyLength = fontLatin.size();
4222 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4223 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4224 fontDescriptionRun05.familyDefined = true;
4225 fontDescriptionRun05.weightDefined = false;
4226 fontDescriptionRun05.widthDefined = false;
4227 fontDescriptionRun05.slantDefined = false;
4228 fontDescriptionRun05.sizeDefined = false;
4230 FontDescriptionRun fontDescriptionRun06;
4231 fontDescriptionRun06.characterRun.characterIndex = 60u;
4232 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4233 fontDescriptionRun06.familyLength = fontArabic.size();
4234 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4235 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4236 fontDescriptionRun06.familyDefined = true;
4237 fontDescriptionRun06.weightDefined = false;
4238 fontDescriptionRun06.widthDefined = false;
4239 fontDescriptionRun06.slantDefined = false;
4240 fontDescriptionRun06.sizeDefined = false;
4242 Vector<FontDescriptionRun> fontDescriptionRuns;
4243 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4244 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4245 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4246 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4247 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4248 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4250 float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
4252 Size textArea( 100.f, 300.f );
4255 "Center alignment for the first paragraph.",
4256 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4259 fontDescriptionRuns.Begin(),
4260 Text::HorizontalAlignment::CENTER,
4261 Text::VerticalAlignment::TOP,
4266 Dali::LayoutDirection::LEFT_TO_RIGHT,
4270 if( !AlignTest( data ) )
4272 tet_result(TET_FAIL);
4275 tet_result(TET_PASS);
4279 int UtcDaliTextAlign05(void)
4281 ToolkitTestApplication application;
4282 tet_infoline(" UtcDaliTextAlign05");
4284 // Calculate text alignment.
4286 const std::string fontLatin( "TizenSans" );
4287 const std::string fontHebrew( "TizenSansHebrew" );
4288 const std::string fontArabic( "TizenSansArabic" );
4290 // Set a known font description
4291 FontDescriptionRun fontDescriptionRun01;
4292 fontDescriptionRun01.characterRun.characterIndex = 0u;
4293 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4294 fontDescriptionRun01.familyLength = fontLatin.size();
4295 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4296 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4297 fontDescriptionRun01.familyDefined = true;
4298 fontDescriptionRun01.weightDefined = false;
4299 fontDescriptionRun01.widthDefined = false;
4300 fontDescriptionRun01.slantDefined = false;
4301 fontDescriptionRun01.sizeDefined = false;
4303 FontDescriptionRun fontDescriptionRun02;
4304 fontDescriptionRun02.characterRun.characterIndex = 12u;
4305 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4306 fontDescriptionRun02.familyLength = fontHebrew.size();
4307 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4308 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4309 fontDescriptionRun02.familyDefined = true;
4310 fontDescriptionRun02.weightDefined = false;
4311 fontDescriptionRun02.widthDefined = false;
4312 fontDescriptionRun02.slantDefined = false;
4313 fontDescriptionRun02.sizeDefined = false;
4315 FontDescriptionRun fontDescriptionRun03;
4316 fontDescriptionRun03.characterRun.characterIndex = 22u;
4317 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4318 fontDescriptionRun03.familyLength = fontArabic.size();
4319 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4320 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4321 fontDescriptionRun03.familyDefined = true;
4322 fontDescriptionRun03.weightDefined = false;
4323 fontDescriptionRun03.widthDefined = false;
4324 fontDescriptionRun03.slantDefined = false;
4325 fontDescriptionRun03.sizeDefined = false;
4327 FontDescriptionRun fontDescriptionRun04;
4328 fontDescriptionRun04.characterRun.characterIndex = 36u;
4329 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4330 fontDescriptionRun04.familyLength = fontLatin.size();
4331 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4332 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4333 fontDescriptionRun04.familyDefined = true;
4334 fontDescriptionRun04.weightDefined = false;
4335 fontDescriptionRun04.widthDefined = false;
4336 fontDescriptionRun04.slantDefined = false;
4337 fontDescriptionRun04.sizeDefined = false;
4339 FontDescriptionRun fontDescriptionRun05;
4340 fontDescriptionRun05.characterRun.characterIndex = 48u;
4341 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4342 fontDescriptionRun05.familyLength = fontLatin.size();
4343 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4344 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4345 fontDescriptionRun05.familyDefined = true;
4346 fontDescriptionRun05.weightDefined = false;
4347 fontDescriptionRun05.widthDefined = false;
4348 fontDescriptionRun05.slantDefined = false;
4349 fontDescriptionRun05.sizeDefined = false;
4351 FontDescriptionRun fontDescriptionRun06;
4352 fontDescriptionRun06.characterRun.characterIndex = 60u;
4353 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4354 fontDescriptionRun06.familyLength = fontArabic.size();
4355 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4356 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4357 fontDescriptionRun06.familyDefined = true;
4358 fontDescriptionRun06.weightDefined = false;
4359 fontDescriptionRun06.widthDefined = false;
4360 fontDescriptionRun06.slantDefined = false;
4361 fontDescriptionRun06.sizeDefined = false;
4363 Vector<FontDescriptionRun> fontDescriptionRuns;
4364 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4365 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4366 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4367 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4368 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4369 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4371 float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
4373 Size textArea( 100.f, 300.f );
4376 "Center alignment for the mid paragraph.",
4377 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4380 fontDescriptionRuns.Begin(),
4381 Text::HorizontalAlignment::CENTER,
4382 Text::VerticalAlignment::TOP,
4387 Dali::LayoutDirection::LEFT_TO_RIGHT,
4391 if( !AlignTest( data ) )
4393 tet_result(TET_FAIL);
4396 tet_result(TET_PASS);
4400 int UtcDaliTextAlign06(void)
4402 ToolkitTestApplication application;
4403 tet_infoline(" UtcDaliTextAlign06");
4405 // Calculate text alignment.
4407 const std::string fontLatin( "TizenSans" );
4408 const std::string fontHebrew( "TizenSansHebrew" );
4409 const std::string fontArabic( "TizenSansArabic" );
4411 // Set a known font description
4412 FontDescriptionRun fontDescriptionRun01;
4413 fontDescriptionRun01.characterRun.characterIndex = 0u;
4414 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4415 fontDescriptionRun01.familyLength = fontLatin.size();
4416 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4417 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4418 fontDescriptionRun01.familyDefined = true;
4419 fontDescriptionRun01.weightDefined = false;
4420 fontDescriptionRun01.widthDefined = false;
4421 fontDescriptionRun01.slantDefined = false;
4422 fontDescriptionRun01.sizeDefined = false;
4424 FontDescriptionRun fontDescriptionRun02;
4425 fontDescriptionRun02.characterRun.characterIndex = 12u;
4426 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4427 fontDescriptionRun02.familyLength = fontHebrew.size();
4428 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4429 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4430 fontDescriptionRun02.familyDefined = true;
4431 fontDescriptionRun02.weightDefined = false;
4432 fontDescriptionRun02.widthDefined = false;
4433 fontDescriptionRun02.slantDefined = false;
4434 fontDescriptionRun02.sizeDefined = false;
4436 FontDescriptionRun fontDescriptionRun03;
4437 fontDescriptionRun03.characterRun.characterIndex = 22u;
4438 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4439 fontDescriptionRun03.familyLength = fontArabic.size();
4440 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4441 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4442 fontDescriptionRun03.familyDefined = true;
4443 fontDescriptionRun03.weightDefined = false;
4444 fontDescriptionRun03.widthDefined = false;
4445 fontDescriptionRun03.slantDefined = false;
4446 fontDescriptionRun03.sizeDefined = false;
4448 FontDescriptionRun fontDescriptionRun04;
4449 fontDescriptionRun04.characterRun.characterIndex = 36u;
4450 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4451 fontDescriptionRun04.familyLength = fontLatin.size();
4452 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4453 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4454 fontDescriptionRun04.familyDefined = true;
4455 fontDescriptionRun04.weightDefined = false;
4456 fontDescriptionRun04.widthDefined = false;
4457 fontDescriptionRun04.slantDefined = false;
4458 fontDescriptionRun04.sizeDefined = false;
4460 FontDescriptionRun fontDescriptionRun05;
4461 fontDescriptionRun05.characterRun.characterIndex = 48u;
4462 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4463 fontDescriptionRun05.familyLength = fontLatin.size();
4464 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4465 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4466 fontDescriptionRun05.familyDefined = true;
4467 fontDescriptionRun05.weightDefined = false;
4468 fontDescriptionRun05.widthDefined = false;
4469 fontDescriptionRun05.slantDefined = false;
4470 fontDescriptionRun05.sizeDefined = false;
4472 FontDescriptionRun fontDescriptionRun06;
4473 fontDescriptionRun06.characterRun.characterIndex = 60u;
4474 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4475 fontDescriptionRun06.familyLength = fontArabic.size();
4476 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4477 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4478 fontDescriptionRun06.familyDefined = true;
4479 fontDescriptionRun06.weightDefined = false;
4480 fontDescriptionRun06.widthDefined = false;
4481 fontDescriptionRun06.slantDefined = false;
4482 fontDescriptionRun06.sizeDefined = false;
4484 Vector<FontDescriptionRun> fontDescriptionRuns;
4485 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4486 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4487 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4488 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4489 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4490 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4492 float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 16.f };
4494 Size textArea( 100.f, 300.f );
4497 "Center alignment for the last paragraph.",
4498 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4501 fontDescriptionRuns.Begin(),
4502 Text::HorizontalAlignment::CENTER,
4503 Text::VerticalAlignment::TOP,
4508 Dali::LayoutDirection::LEFT_TO_RIGHT,
4512 if( !AlignTest( data ) )
4514 tet_result(TET_FAIL);
4517 tet_result(TET_PASS);
4521 int UtcDaliTextAlign07(void)
4523 ToolkitTestApplication application;
4524 tet_infoline(" UtcDaliTextAlign07");
4526 // Calculate text alignment.
4528 const std::string fontLatin( "TizenSans" );
4529 const std::string fontHebrew( "TizenSansHebrew" );
4530 const std::string fontArabic( "TizenSansArabic" );
4532 // Set a known font description
4533 FontDescriptionRun fontDescriptionRun01;
4534 fontDescriptionRun01.characterRun.characterIndex = 0u;
4535 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4536 fontDescriptionRun01.familyLength = fontLatin.size();
4537 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4538 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4539 fontDescriptionRun01.familyDefined = true;
4540 fontDescriptionRun01.weightDefined = false;
4541 fontDescriptionRun01.widthDefined = false;
4542 fontDescriptionRun01.slantDefined = false;
4543 fontDescriptionRun01.sizeDefined = false;
4545 FontDescriptionRun fontDescriptionRun02;
4546 fontDescriptionRun02.characterRun.characterIndex = 12u;
4547 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4548 fontDescriptionRun02.familyLength = fontHebrew.size();
4549 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4550 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4551 fontDescriptionRun02.familyDefined = true;
4552 fontDescriptionRun02.weightDefined = false;
4553 fontDescriptionRun02.widthDefined = false;
4554 fontDescriptionRun02.slantDefined = false;
4555 fontDescriptionRun02.sizeDefined = false;
4557 FontDescriptionRun fontDescriptionRun03;
4558 fontDescriptionRun03.characterRun.characterIndex = 22u;
4559 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4560 fontDescriptionRun03.familyLength = fontArabic.size();
4561 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4562 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4563 fontDescriptionRun03.familyDefined = true;
4564 fontDescriptionRun03.weightDefined = false;
4565 fontDescriptionRun03.widthDefined = false;
4566 fontDescriptionRun03.slantDefined = false;
4567 fontDescriptionRun03.sizeDefined = false;
4569 FontDescriptionRun fontDescriptionRun04;
4570 fontDescriptionRun04.characterRun.characterIndex = 36u;
4571 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4572 fontDescriptionRun04.familyLength = fontLatin.size();
4573 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4574 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4575 fontDescriptionRun04.familyDefined = true;
4576 fontDescriptionRun04.weightDefined = false;
4577 fontDescriptionRun04.widthDefined = false;
4578 fontDescriptionRun04.slantDefined = false;
4579 fontDescriptionRun04.sizeDefined = false;
4581 FontDescriptionRun fontDescriptionRun05;
4582 fontDescriptionRun05.characterRun.characterIndex = 48u;
4583 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4584 fontDescriptionRun05.familyLength = fontLatin.size();
4585 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4586 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4587 fontDescriptionRun05.familyDefined = true;
4588 fontDescriptionRun05.weightDefined = false;
4589 fontDescriptionRun05.widthDefined = false;
4590 fontDescriptionRun05.slantDefined = false;
4591 fontDescriptionRun05.sizeDefined = false;
4593 FontDescriptionRun fontDescriptionRun06;
4594 fontDescriptionRun06.characterRun.characterIndex = 60u;
4595 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4596 fontDescriptionRun06.familyLength = fontArabic.size();
4597 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4598 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4599 fontDescriptionRun06.familyDefined = true;
4600 fontDescriptionRun06.weightDefined = false;
4601 fontDescriptionRun06.widthDefined = false;
4602 fontDescriptionRun06.slantDefined = false;
4603 fontDescriptionRun06.sizeDefined = false;
4605 Vector<FontDescriptionRun> fontDescriptionRuns;
4606 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4607 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4608 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4609 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4610 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4611 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4613 float positions[] = { 19.f, 30.f, 0.f, 0.f, 0.f, 0.f };
4615 Size textArea( 100.f, 300.f );
4618 "End alignment for the first paragraph.",
4619 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4622 fontDescriptionRuns.Begin(),
4623 Text::HorizontalAlignment::END,
4624 Text::VerticalAlignment::TOP,
4629 Dali::LayoutDirection::LEFT_TO_RIGHT,
4633 if( !AlignTest( data ) )
4635 tet_result(TET_FAIL);
4638 tet_result(TET_PASS);
4642 int UtcDaliTextAlign08(void)
4644 ToolkitTestApplication application;
4645 tet_infoline(" UtcDaliTextAlign08");
4647 // Calculate text alignment.
4649 const std::string fontLatin( "TizenSans" );
4650 const std::string fontHebrew( "TizenSansHebrew" );
4651 const std::string fontArabic( "TizenSansArabic" );
4653 // Set a known font description
4654 FontDescriptionRun fontDescriptionRun01;
4655 fontDescriptionRun01.characterRun.characterIndex = 0u;
4656 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4657 fontDescriptionRun01.familyLength = fontLatin.size();
4658 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4659 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4660 fontDescriptionRun01.familyDefined = true;
4661 fontDescriptionRun01.weightDefined = false;
4662 fontDescriptionRun01.widthDefined = false;
4663 fontDescriptionRun01.slantDefined = false;
4664 fontDescriptionRun01.sizeDefined = false;
4666 FontDescriptionRun fontDescriptionRun02;
4667 fontDescriptionRun02.characterRun.characterIndex = 12u;
4668 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4669 fontDescriptionRun02.familyLength = fontHebrew.size();
4670 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4671 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4672 fontDescriptionRun02.familyDefined = true;
4673 fontDescriptionRun02.weightDefined = false;
4674 fontDescriptionRun02.widthDefined = false;
4675 fontDescriptionRun02.slantDefined = false;
4676 fontDescriptionRun02.sizeDefined = false;
4678 FontDescriptionRun fontDescriptionRun03;
4679 fontDescriptionRun03.characterRun.characterIndex = 22u;
4680 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4681 fontDescriptionRun03.familyLength = fontArabic.size();
4682 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4683 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4684 fontDescriptionRun03.familyDefined = true;
4685 fontDescriptionRun03.weightDefined = false;
4686 fontDescriptionRun03.widthDefined = false;
4687 fontDescriptionRun03.slantDefined = false;
4688 fontDescriptionRun03.sizeDefined = false;
4690 FontDescriptionRun fontDescriptionRun04;
4691 fontDescriptionRun04.characterRun.characterIndex = 36u;
4692 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4693 fontDescriptionRun04.familyLength = fontLatin.size();
4694 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4695 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4696 fontDescriptionRun04.familyDefined = true;
4697 fontDescriptionRun04.weightDefined = false;
4698 fontDescriptionRun04.widthDefined = false;
4699 fontDescriptionRun04.slantDefined = false;
4700 fontDescriptionRun04.sizeDefined = false;
4702 FontDescriptionRun fontDescriptionRun05;
4703 fontDescriptionRun05.characterRun.characterIndex = 48u;
4704 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4705 fontDescriptionRun05.familyLength = fontLatin.size();
4706 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4707 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4708 fontDescriptionRun05.familyDefined = true;
4709 fontDescriptionRun05.weightDefined = false;
4710 fontDescriptionRun05.widthDefined = false;
4711 fontDescriptionRun05.slantDefined = false;
4712 fontDescriptionRun05.sizeDefined = false;
4714 FontDescriptionRun fontDescriptionRun06;
4715 fontDescriptionRun06.characterRun.characterIndex = 60u;
4716 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4717 fontDescriptionRun06.familyLength = fontArabic.size();
4718 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4719 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4720 fontDescriptionRun06.familyDefined = true;
4721 fontDescriptionRun06.weightDefined = false;
4722 fontDescriptionRun06.widthDefined = false;
4723 fontDescriptionRun06.slantDefined = false;
4724 fontDescriptionRun06.sizeDefined = false;
4726 Vector<FontDescriptionRun> fontDescriptionRuns;
4727 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4728 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4729 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4730 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4731 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4732 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4734 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4736 Size textArea( 100.f, 300.f );
4739 "End alignment for the mid paragraph.",
4740 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4743 fontDescriptionRuns.Begin(),
4744 Text::HorizontalAlignment::END,
4745 Text::VerticalAlignment::TOP,
4750 Dali::LayoutDirection::LEFT_TO_RIGHT,
4754 if( !AlignTest( data ) )
4756 tet_result(TET_FAIL);
4759 tet_result(TET_PASS);
4763 int UtcDaliTextAlign09(void)
4765 ToolkitTestApplication application;
4766 tet_infoline(" UtcDaliTextAlign09");
4768 // Calculate text alignment.
4770 const std::string fontLatin( "TizenSans" );
4771 const std::string fontHebrew( "TizenSansHebrew" );
4772 const std::string fontArabic( "TizenSansArabic" );
4774 // Set a known font description
4775 FontDescriptionRun fontDescriptionRun01;
4776 fontDescriptionRun01.characterRun.characterIndex = 0u;
4777 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4778 fontDescriptionRun01.familyLength = fontLatin.size();
4779 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4780 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4781 fontDescriptionRun01.familyDefined = true;
4782 fontDescriptionRun01.weightDefined = false;
4783 fontDescriptionRun01.widthDefined = false;
4784 fontDescriptionRun01.slantDefined = false;
4785 fontDescriptionRun01.sizeDefined = false;
4787 FontDescriptionRun fontDescriptionRun02;
4788 fontDescriptionRun02.characterRun.characterIndex = 12u;
4789 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4790 fontDescriptionRun02.familyLength = fontHebrew.size();
4791 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4792 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4793 fontDescriptionRun02.familyDefined = true;
4794 fontDescriptionRun02.weightDefined = false;
4795 fontDescriptionRun02.widthDefined = false;
4796 fontDescriptionRun02.slantDefined = false;
4797 fontDescriptionRun02.sizeDefined = false;
4799 FontDescriptionRun fontDescriptionRun03;
4800 fontDescriptionRun03.characterRun.characterIndex = 22u;
4801 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4802 fontDescriptionRun03.familyLength = fontArabic.size();
4803 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4804 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4805 fontDescriptionRun03.familyDefined = true;
4806 fontDescriptionRun03.weightDefined = false;
4807 fontDescriptionRun03.widthDefined = false;
4808 fontDescriptionRun03.slantDefined = false;
4809 fontDescriptionRun03.sizeDefined = false;
4811 FontDescriptionRun fontDescriptionRun04;
4812 fontDescriptionRun04.characterRun.characterIndex = 36u;
4813 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4814 fontDescriptionRun04.familyLength = fontLatin.size();
4815 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4816 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4817 fontDescriptionRun04.familyDefined = true;
4818 fontDescriptionRun04.weightDefined = false;
4819 fontDescriptionRun04.widthDefined = false;
4820 fontDescriptionRun04.slantDefined = false;
4821 fontDescriptionRun04.sizeDefined = false;
4823 FontDescriptionRun fontDescriptionRun05;
4824 fontDescriptionRun05.characterRun.characterIndex = 48u;
4825 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4826 fontDescriptionRun05.familyLength = fontLatin.size();
4827 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4828 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4829 fontDescriptionRun05.familyDefined = true;
4830 fontDescriptionRun05.weightDefined = false;
4831 fontDescriptionRun05.widthDefined = false;
4832 fontDescriptionRun05.slantDefined = false;
4833 fontDescriptionRun05.sizeDefined = false;
4835 FontDescriptionRun fontDescriptionRun06;
4836 fontDescriptionRun06.characterRun.characterIndex = 60u;
4837 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4838 fontDescriptionRun06.familyLength = fontArabic.size();
4839 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4840 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4841 fontDescriptionRun06.familyDefined = true;
4842 fontDescriptionRun06.weightDefined = false;
4843 fontDescriptionRun06.widthDefined = false;
4844 fontDescriptionRun06.slantDefined = false;
4845 fontDescriptionRun06.sizeDefined = false;
4847 Vector<FontDescriptionRun> fontDescriptionRuns;
4848 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4849 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4850 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4851 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4852 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4853 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4855 float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 33.f };
4857 Size textArea( 100.f, 300.f );
4860 "End alignment for the last paragraph.",
4861 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4864 fontDescriptionRuns.Begin(),
4865 Text::HorizontalAlignment::END,
4866 Text::VerticalAlignment::TOP,
4871 Dali::LayoutDirection::LEFT_TO_RIGHT,
4875 if( !AlignTest( data ) )
4877 tet_result(TET_FAIL);
4880 tet_result(TET_PASS);
4884 int UtcDaliTextAlign10(void)
4886 ToolkitTestApplication application;
4887 tet_infoline(" UtcDaliTextAlign10");
4889 // Calculate text alignment.
4891 const std::string fontLatin( "TizenSans" );
4892 const std::string fontHebrew( "TizenSansHebrew" );
4893 const std::string fontArabic( "TizenSansArabic" );
4895 // Set a known font description
4896 FontDescriptionRun fontDescriptionRun01;
4897 fontDescriptionRun01.characterRun.characterIndex = 0u;
4898 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4899 fontDescriptionRun01.familyLength = fontLatin.size();
4900 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4901 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4902 fontDescriptionRun01.familyDefined = true;
4903 fontDescriptionRun01.weightDefined = false;
4904 fontDescriptionRun01.widthDefined = false;
4905 fontDescriptionRun01.slantDefined = false;
4906 fontDescriptionRun01.sizeDefined = false;
4908 FontDescriptionRun fontDescriptionRun02;
4909 fontDescriptionRun02.characterRun.characterIndex = 12u;
4910 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4911 fontDescriptionRun02.familyLength = fontHebrew.size();
4912 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4913 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4914 fontDescriptionRun02.familyDefined = true;
4915 fontDescriptionRun02.weightDefined = false;
4916 fontDescriptionRun02.widthDefined = false;
4917 fontDescriptionRun02.slantDefined = false;
4918 fontDescriptionRun02.sizeDefined = false;
4920 FontDescriptionRun fontDescriptionRun03;
4921 fontDescriptionRun03.characterRun.characterIndex = 22u;
4922 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4923 fontDescriptionRun03.familyLength = fontArabic.size();
4924 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4925 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4926 fontDescriptionRun03.familyDefined = true;
4927 fontDescriptionRun03.weightDefined = false;
4928 fontDescriptionRun03.widthDefined = false;
4929 fontDescriptionRun03.slantDefined = false;
4930 fontDescriptionRun03.sizeDefined = false;
4932 FontDescriptionRun fontDescriptionRun04;
4933 fontDescriptionRun04.characterRun.characterIndex = 36u;
4934 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4935 fontDescriptionRun04.familyLength = fontLatin.size();
4936 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4937 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4938 fontDescriptionRun04.familyDefined = true;
4939 fontDescriptionRun04.weightDefined = false;
4940 fontDescriptionRun04.widthDefined = false;
4941 fontDescriptionRun04.slantDefined = false;
4942 fontDescriptionRun04.sizeDefined = false;
4944 FontDescriptionRun fontDescriptionRun05;
4945 fontDescriptionRun05.characterRun.characterIndex = 48u;
4946 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4947 fontDescriptionRun05.familyLength = fontLatin.size();
4948 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4949 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4950 fontDescriptionRun05.familyDefined = true;
4951 fontDescriptionRun05.weightDefined = false;
4952 fontDescriptionRun05.widthDefined = false;
4953 fontDescriptionRun05.slantDefined = false;
4954 fontDescriptionRun05.sizeDefined = false;
4956 FontDescriptionRun fontDescriptionRun06;
4957 fontDescriptionRun06.characterRun.characterIndex = 60u;
4958 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4959 fontDescriptionRun06.familyLength = fontArabic.size();
4960 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4961 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4962 fontDescriptionRun06.familyDefined = true;
4963 fontDescriptionRun06.weightDefined = false;
4964 fontDescriptionRun06.widthDefined = false;
4965 fontDescriptionRun06.slantDefined = false;
4966 fontDescriptionRun06.sizeDefined = false;
4968 Vector<FontDescriptionRun> fontDescriptionRuns;
4969 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4970 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4971 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4972 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4973 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4974 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4976 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4978 Size textArea( 100.f, 300.f );
4981 "Begin alignment for the first paragraph.",
4982 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4985 fontDescriptionRuns.Begin(),
4986 Text::HorizontalAlignment::END,
4987 Text::VerticalAlignment::TOP,
4992 Dali::LayoutDirection::RIGHT_TO_LEFT,
4996 if( !AlignTest( data ) )
4998 tet_result(TET_FAIL);
5001 tet_result(TET_PASS);
5005 int UtcDaliTextAlign11(void)
5007 ToolkitTestApplication application;
5008 tet_infoline(" UtcDaliTextAlign11");
5010 // Calculate text alignment.
5012 const std::string fontLatin( "TizenSans" );
5013 const std::string fontHebrew( "TizenSansHebrew" );
5014 const std::string fontArabic( "TizenSansArabic" );
5016 // Set a known font description
5017 FontDescriptionRun fontDescriptionRun01;
5018 fontDescriptionRun01.characterRun.characterIndex = 0u;
5019 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5020 fontDescriptionRun01.familyLength = fontLatin.size();
5021 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5022 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5023 fontDescriptionRun01.familyDefined = true;
5024 fontDescriptionRun01.weightDefined = false;
5025 fontDescriptionRun01.widthDefined = false;
5026 fontDescriptionRun01.slantDefined = false;
5027 fontDescriptionRun01.sizeDefined = false;
5029 FontDescriptionRun fontDescriptionRun02;
5030 fontDescriptionRun02.characterRun.characterIndex = 12u;
5031 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5032 fontDescriptionRun02.familyLength = fontHebrew.size();
5033 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5034 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5035 fontDescriptionRun02.familyDefined = true;
5036 fontDescriptionRun02.weightDefined = false;
5037 fontDescriptionRun02.widthDefined = false;
5038 fontDescriptionRun02.slantDefined = false;
5039 fontDescriptionRun02.sizeDefined = false;
5041 FontDescriptionRun fontDescriptionRun03;
5042 fontDescriptionRun03.characterRun.characterIndex = 22u;
5043 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5044 fontDescriptionRun03.familyLength = fontArabic.size();
5045 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5046 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5047 fontDescriptionRun03.familyDefined = true;
5048 fontDescriptionRun03.weightDefined = false;
5049 fontDescriptionRun03.widthDefined = false;
5050 fontDescriptionRun03.slantDefined = false;
5051 fontDescriptionRun03.sizeDefined = false;
5053 FontDescriptionRun fontDescriptionRun04;
5054 fontDescriptionRun04.characterRun.characterIndex = 36u;
5055 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5056 fontDescriptionRun04.familyLength = fontLatin.size();
5057 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5058 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5059 fontDescriptionRun04.familyDefined = true;
5060 fontDescriptionRun04.weightDefined = false;
5061 fontDescriptionRun04.widthDefined = false;
5062 fontDescriptionRun04.slantDefined = false;
5063 fontDescriptionRun04.sizeDefined = false;
5065 FontDescriptionRun fontDescriptionRun05;
5066 fontDescriptionRun05.characterRun.characterIndex = 48u;
5067 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5068 fontDescriptionRun05.familyLength = fontLatin.size();
5069 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5070 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5071 fontDescriptionRun05.familyDefined = true;
5072 fontDescriptionRun05.weightDefined = false;
5073 fontDescriptionRun05.widthDefined = false;
5074 fontDescriptionRun05.slantDefined = false;
5075 fontDescriptionRun05.sizeDefined = false;
5077 FontDescriptionRun fontDescriptionRun06;
5078 fontDescriptionRun06.characterRun.characterIndex = 60u;
5079 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5080 fontDescriptionRun06.familyLength = fontArabic.size();
5081 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5082 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5083 fontDescriptionRun06.familyDefined = true;
5084 fontDescriptionRun06.weightDefined = false;
5085 fontDescriptionRun06.widthDefined = false;
5086 fontDescriptionRun06.slantDefined = false;
5087 fontDescriptionRun06.sizeDefined = false;
5089 Vector<FontDescriptionRun> fontDescriptionRuns;
5090 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5091 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5092 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5093 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5094 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5095 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5097 float positions[] = { 19.f, 30.f, 33.f, 0.f, 0.f, 0.f };
5099 Size textArea( 100.f, 300.f );
5102 "End alignment for the last paragraph.",
5103 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5106 fontDescriptionRuns.Begin(),
5107 Text::HorizontalAlignment::END,
5108 Text::VerticalAlignment::TOP,
5113 Dali::LayoutDirection::LEFT_TO_RIGHT,
5117 if( !AlignTest( data ) )
5119 tet_result(TET_FAIL);
5122 tet_result(TET_PASS);
5126 int UtcDaliTextAlign12(void)
5128 ToolkitTestApplication application;
5129 tet_infoline(" UtcDaliTextAlign12");
5131 // Calculate text alignment.
5133 const std::string fontLatin( "TizenSans" );
5134 const std::string fontHebrew( "TizenSansHebrew" );
5135 const std::string fontArabic( "TizenSansArabic" );
5137 // Set a known font description
5138 FontDescriptionRun fontDescriptionRun01;
5139 fontDescriptionRun01.characterRun.characterIndex = 0u;
5140 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5141 fontDescriptionRun01.familyLength = fontLatin.size();
5142 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5143 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5144 fontDescriptionRun01.familyDefined = true;
5145 fontDescriptionRun01.weightDefined = false;
5146 fontDescriptionRun01.widthDefined = false;
5147 fontDescriptionRun01.slantDefined = false;
5148 fontDescriptionRun01.sizeDefined = false;
5150 FontDescriptionRun fontDescriptionRun02;
5151 fontDescriptionRun02.characterRun.characterIndex = 12u;
5152 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5153 fontDescriptionRun02.familyLength = fontHebrew.size();
5154 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5155 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5156 fontDescriptionRun02.familyDefined = true;
5157 fontDescriptionRun02.weightDefined = false;
5158 fontDescriptionRun02.widthDefined = false;
5159 fontDescriptionRun02.slantDefined = false;
5160 fontDescriptionRun02.sizeDefined = false;
5162 FontDescriptionRun fontDescriptionRun03;
5163 fontDescriptionRun03.characterRun.characterIndex = 22u;
5164 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5165 fontDescriptionRun03.familyLength = fontArabic.size();
5166 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5167 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5168 fontDescriptionRun03.familyDefined = true;
5169 fontDescriptionRun03.weightDefined = false;
5170 fontDescriptionRun03.widthDefined = false;
5171 fontDescriptionRun03.slantDefined = false;
5172 fontDescriptionRun03.sizeDefined = false;
5174 FontDescriptionRun fontDescriptionRun04;
5175 fontDescriptionRun04.characterRun.characterIndex = 36u;
5176 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5177 fontDescriptionRun04.familyLength = fontLatin.size();
5178 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5179 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5180 fontDescriptionRun04.familyDefined = true;
5181 fontDescriptionRun04.weightDefined = false;
5182 fontDescriptionRun04.widthDefined = false;
5183 fontDescriptionRun04.slantDefined = false;
5184 fontDescriptionRun04.sizeDefined = false;
5186 FontDescriptionRun fontDescriptionRun05;
5187 fontDescriptionRun05.characterRun.characterIndex = 48u;
5188 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5189 fontDescriptionRun05.familyLength = fontLatin.size();
5190 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5191 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5192 fontDescriptionRun05.familyDefined = true;
5193 fontDescriptionRun05.weightDefined = false;
5194 fontDescriptionRun05.widthDefined = false;
5195 fontDescriptionRun05.slantDefined = false;
5196 fontDescriptionRun05.sizeDefined = false;
5198 FontDescriptionRun fontDescriptionRun06;
5199 fontDescriptionRun06.characterRun.characterIndex = 60u;
5200 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5201 fontDescriptionRun06.familyLength = fontArabic.size();
5202 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5203 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5204 fontDescriptionRun06.familyDefined = true;
5205 fontDescriptionRun06.weightDefined = false;
5206 fontDescriptionRun06.widthDefined = false;
5207 fontDescriptionRun06.slantDefined = false;
5208 fontDescriptionRun06.sizeDefined = false;
5210 Vector<FontDescriptionRun> fontDescriptionRuns;
5211 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5212 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5213 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5214 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5215 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5216 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5218 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
5220 Size textArea( 100.f, 300.f );
5223 "Begin alignment for the first paragraph.",
5224 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5227 fontDescriptionRuns.Begin(),
5228 Text::HorizontalAlignment::BEGIN,
5229 Text::VerticalAlignment::TOP,
5234 Dali::LayoutDirection::LEFT_TO_RIGHT,
5238 if( !AlignTest( data ) )
5240 tet_result(TET_FAIL);
5243 tet_result(TET_PASS);
5247 int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
5249 ToolkitTestApplication application;
5250 tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
5252 Layout::Engine engine;
5253 DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5255 engine.SetDefaultLineSpacing( 10.f );
5256 DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5258 tet_result(TET_PASS);
5262 int UtcDaliTextLayoutGetGlyphMetrics(void)
5264 tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
5266 // Test retrieving metrics from group of characters
5268 const std::string fontFamily( "TizenSansHindi" );
5270 // Set a known font description
5271 FontDescriptionRun fontDescriptionRun01;
5272 fontDescriptionRun01.characterRun.characterIndex = 0u;
5273 fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
5274 fontDescriptionRun01.familyLength = fontFamily.size();
5275 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5276 memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
5277 fontDescriptionRun01.familyDefined = true;
5278 fontDescriptionRun01.weightDefined = false;
5279 fontDescriptionRun01.widthDefined = false;
5280 fontDescriptionRun01.slantDefined = false;
5281 fontDescriptionRun01.sizeDefined = false;
5283 // Set a known font description
5284 FontDescriptionRun fontDescriptionRun02;
5285 fontDescriptionRun02.characterRun.characterIndex = 0u;
5286 fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
5287 fontDescriptionRun02.familyLength = fontFamily.size();
5288 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5289 memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
5290 fontDescriptionRun02.familyDefined = true;
5291 fontDescriptionRun02.weightDefined = false;
5292 fontDescriptionRun02.widthDefined = false;
5293 fontDescriptionRun02.slantDefined = false;
5294 fontDescriptionRun02.sizeDefined = false;
5296 // Set a known font description
5297 FontDescriptionRun fontDescriptionRun03;
5298 fontDescriptionRun03.characterRun.characterIndex = 0u;
5299 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
5300 fontDescriptionRun03.familyLength = fontFamily.size();
5301 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5302 memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
5303 fontDescriptionRun03.familyDefined = true;
5304 fontDescriptionRun03.weightDefined = false;
5305 fontDescriptionRun03.widthDefined = false;
5306 fontDescriptionRun03.slantDefined = false;
5307 fontDescriptionRun03.sizeDefined = false;
5309 Vector<FontDescriptionRun> fontDescriptionRuns01;
5310 fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
5312 Vector<FontDescriptionRun> fontDescriptionRuns02;
5313 fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
5315 Vector<FontDescriptionRun> fontDescriptionRuns03;
5316 fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
5319 Size textArea(100.f, 100.f);
5322 // Group: second glyph doesn't exceed the width of the first glyph
5323 float positions01[] = { 0.f, -11.f };
5325 struct LineRun line01 =
5338 Vector<LineRun> lines01;
5339 lines01.PushBack( line01 );
5341 Size layoutSize01 = Vector2(11.f, 20.f);
5343 // Group: second glyph doesn't exceed the width of the first glyph
5344 float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
5346 struct LineRun line02 =
5359 Vector<LineRun> lines02;
5360 lines02.PushBack( line02 );
5362 Size layoutSize02 = Vector2(16.f, 20.f);
5364 // Group: second glyph doesn't exceed the width of the first glyph
5365 float positions03[] = { 0.f, -11.f , 2.f, -15.f };
5367 struct LineRun line03 =
5380 Vector<LineRun> lines03;
5381 lines03.PushBack( line03 );
5383 Size layoutSize03 = Vector2(11.f, 20.f);
5385 /////////////////////////////
5387 struct LayoutTextData data[] =
5394 fontDescriptionRuns01.Begin(),
5400 Layout::Engine::SINGLE_LINE_BOX,
5404 DevelText::EllipsisPosition::END,
5408 "Group: second glyph exceeds the width of the first glyph",
5412 fontDescriptionRuns02.Begin(),
5418 Layout::Engine::SINGLE_LINE_BOX,
5422 DevelText::EllipsisPosition::END,
5426 "Group: second glyph doesn't exceed the width of the first glyph",
5430 fontDescriptionRuns03.Begin(),
5436 Layout::Engine::SINGLE_LINE_BOX,
5440 DevelText::EllipsisPosition::END,
5444 const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
5446 for( unsigned int index = 0u; index < numberOfTests; ++index )
5448 ToolkitTestApplication application;
5449 if( !LayoutTextTest( data[index] ) )
5451 tet_result(TET_FAIL);
5455 tet_result(TET_PASS);