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;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << floor(line.width) << std::endl;
66 std::cout << " ascender : " << line.ascender << std::endl;
67 std::cout << " descender : " << line.descender << std::endl;
68 std::cout << " extraLength : " << line.extraLength << std::endl;
69 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
70 std::cout << " direction : " << line.direction << std::endl;
71 std::cout << " ellipsis : " << line.ellipsis << std::endl;
74 bool LayoutTextTest( const LayoutTextData& data )
77 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
78 fontClient.SetDpi( 96u, 96u );
80 char* pathNamePtr = get_current_dir_name();
81 const std::string pathName( pathNamePtr );
84 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
87 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
89 // 1) Create the model.
94 Vector<FontDescriptionRun> fontDescriptionRuns;
95 if( 0u != data.numberOfFonts )
97 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
98 data.fontDescriptions,
99 data.fontDescriptions + data.numberOfFonts );
102 LayoutOptions options;
103 options.align = false;
104 CreateTextModel( data.text,
114 LogicalModelPtr logicalModel = textModel->mLogicalModel;
115 VisualModelPtr visualModel = textModel->mVisualModel;
117 // 2) Clear the layout.
118 Vector<LineRun>& lines = visualModel->mLines;
120 const Length numberOfCharacters = logicalModel->mText.Count();
121 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
122 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
123 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
125 LineIndex startRemoveIndex = 0u;
127 if( 0u != lines.Count() )
129 startRemoveIndex = lines.Count();
130 LineIndex endRemoveIndex = startRemoveIndex;
131 ClearGlyphRuns( data.startIndex,
132 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
137 // Update the character runs of the lines.
138 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
139 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
140 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
141 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
142 ClearCharacterRuns( startCharacterIndex,
143 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
148 lines.Erase( lines.Begin() + startRemoveIndex,
149 lines.Begin() + endRemoveIndex );
152 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
154 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
155 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
158 Layout::Engine engine;
159 engine.SetMetrics( metrics );
160 engine.SetLayout( data.layout );
162 textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
163 textModel->mLineWrapMode = LineWrap::WORD;
164 textModel->mIgnoreSpacesAfterText = true;
165 Layout::Parameters layoutParameters( data.textArea,
168 layoutParameters.isLastNewParagraph = isLastNewParagraph;
170 // The initial glyph and the number of glyphs to layout.
171 layoutParameters.startGlyphIndex = data.startIndex;
172 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
173 layoutParameters.startLineIndex = startRemoveIndex;
174 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
176 layoutSize = Vector2::ZERO;
178 bool isAutoScroll = false;
179 const bool updated = engine.LayoutText( layoutParameters,
184 // 4) Compare the results.
186 if( updated != data.updated )
188 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
192 if( layoutSize != data.layoutSize )
194 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
198 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
200 const Vector2& position = *( glyphPositions.Begin() + index );
202 if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
204 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
207 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
214 if( lines.Count() != data.numberOfLines )
216 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
220 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
222 const LineRun& line = *( lines.Begin() + index );
223 const LineRun& expectedLine = *( data.lines + index );
225 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
227 std::cout << " Different line info for line : " << index << std::endl;
229 std::cout << " expected" << std::endl;
230 Print( expectedLine );
233 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
235 std::cout << " Different line info for line : " << index << std::endl;
237 std::cout << " expected" << std::endl;
238 Print( expectedLine );
242 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
244 std::cout << " Different line info for line : " << index << std::endl;
246 std::cout << " expected" << std::endl;
247 Print( expectedLine );
250 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
252 std::cout << " Different line info for line : " << index << std::endl;
254 std::cout << " expected" << std::endl;
255 Print( expectedLine );
259 if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
261 std::cout << " Different line info for line : " << index << std::endl;
263 std::cout << " expected" << std::endl;
264 Print( expectedLine );
268 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
270 std::cout << " Different line info for line : " << index << std::endl;
272 std::cout << " expected" << std::endl;
273 Print( expectedLine );
277 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
279 std::cout << " Different line info for line : " << index << std::endl;
281 std::cout << " expected" << std::endl;
282 Print( expectedLine );
286 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
288 std::cout << " Different line info for line : " << index << std::endl;
290 std::cout << " expected" << std::endl;
291 Print( expectedLine );
295 if( line.ellipsis != expectedLine.ellipsis )
297 std::cout << " Different line info for line : " << index << std::endl;
299 std::cout << " expected" << std::endl;
300 Print( expectedLine );
304 // Do not compare the alignment offset as it's not calculated in the layout.
305 // Do not compare the line direction as it's not set in the layout.
311 //////////////////////////////////////////////////////////
315 std::string description;
318 unsigned int numberOfFonts;
319 FontDescriptionRun* fontDescriptions;
320 Text::HorizontalAlignment::Type horizontalAlignment;
321 Text::VerticalAlignment::Type verticalAlignment;
322 unsigned int startIndex;
323 unsigned int numberOfCharacters;
324 unsigned int numberOfLines;
326 Dali::LayoutDirection::Type layoutDirection;
327 bool matchSystemLanguageDirection;
330 bool AlignTest( const AlignData& data )
333 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
334 fontClient.SetDpi( 96u, 96u );
336 char* pathNamePtr = get_current_dir_name();
337 const std::string pathName( pathNamePtr );
340 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
344 // 1) Create the model.
349 Vector<FontDescriptionRun> fontDescriptionRuns;
350 if( 0u != data.numberOfFonts )
352 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
353 data.fontDescriptions,
354 data.fontDescriptions + data.numberOfFonts );
357 LayoutOptions options;
358 options.align = false;
359 CreateTextModel( data.text,
369 LogicalModelPtr logicalModel = textModel->mLogicalModel;
370 VisualModelPtr visualModel = textModel->mVisualModel;
372 // Call the Align method.
373 Layout::Engine engine;
374 engine.SetMetrics( metrics );
376 float alignmentOffset = 0.f;
377 engine.Align( data.textArea,
379 data.numberOfCharacters,
380 data.horizontalAlignment,
383 data.layoutDirection,
384 data.matchSystemLanguageDirection );
387 if( data.numberOfLines != visualModel->mLines.Count() )
389 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
393 const LineRun* const linesBuffer = visualModel->mLines.Begin();
394 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
396 const LineRun& line = *( linesBuffer + index );
398 if( line.alignmentOffset != *( data.lineOffsets + index ) )
400 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
409 //////////////////////////////////////////////////////////
411 // UtcDaliTextLayoutSetGetLayout
412 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
413 // UtcDaliTextLayoutSetGetHorizontalAlignment
414 // UtcDaliTextLayoutSetGetVerticalAlignment
415 // UtcDaliTextLayoutSetGetCursorWidth
416 // UtcDaliTextLayoutNoText
417 // UtcDaliTextLayoutSmallTextArea01
418 // UtcDaliTextLayoutSmallTextArea02
419 // UtcDaliTextLayoutMultilineText01
420 // UtcDaliTextLayoutMultilineText02
421 // UtcDaliTextLayoutMultilineText03
422 // UtcDaliTextLayoutMultilineText04
423 // UtcDaliTextLayoutMultilineText05
424 // UtcDaliTextLayoutMultilineText06
425 // UtcDaliTextUpdateLayout01
426 // UtcDaliTextUpdateLayout02
427 // UtcDaliTextUpdateLayout03
428 // UtcDaliTextLayoutEllipsis01
429 // UtcDaliTextLayoutEllipsis02
430 // UtcDaliTextLayoutEllipsis03
431 // UtcDaliTextLayoutEllipsis04
432 // UtcDaliTextLayoutEllipsis04
433 // UtcDaliTextReorderLayout01
434 // UtcDaliTextReorderLayout02
435 // UtcDaliTextReorderLayout03
436 // UtcDaliTextReorderLayout04
437 // UtcDaliTextAlign01
438 // UtcDaliTextAlign02
439 // UtcDaliTextAlign03
440 // UtcDaliTextAlign04
441 // UtcDaliTextAlign05
442 // UtcDaliTextAlign06
443 // UtcDaliTextAlign07
444 // UtcDaliTextAlign08
445 // UtcDaliTextAlign09
447 //////////////////////////////////////////////////////////
449 int UtcDaliTextLayoutSetGetLayout(void)
451 ToolkitTestApplication application;
452 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
454 Layout::Engine engine;
456 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
458 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
459 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
461 tet_result(TET_PASS);
465 int UtcDaliTextLayoutSetGetCursorWidth(void)
467 ToolkitTestApplication application;
470 Layout::Engine engine;
472 DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
474 engine.SetCursorWidth( 2 );
475 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
477 tet_result(TET_PASS);
481 int UtcDaliTextLayoutNoText(void)
483 ToolkitTestApplication application;
484 tet_infoline(" UtcDaliTextLayoutNoText");
486 Size textArea(100.f, 60.f);
487 Size layoutSize = Vector2::ZERO;
488 LayoutTextData data =
500 Layout::Engine::MULTI_LINE_BOX,
507 if( !LayoutTextTest( data ) )
509 tet_result(TET_FAIL);
512 tet_result(TET_PASS);
516 int UtcDaliTextLayoutSmallTextArea01(void)
518 ToolkitTestApplication application;
519 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
521 // Won't layout the text in multi-line if the width is too small.
523 const std::string fontFamily( "TizenSans" );
525 // Set a known font description
526 FontDescriptionRun fontDescriptionRun;
527 fontDescriptionRun.characterRun.characterIndex = 0u;
528 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
529 fontDescriptionRun.familyLength = fontFamily.size();
530 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
531 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
532 fontDescriptionRun.familyDefined = true;
533 fontDescriptionRun.weightDefined = false;
534 fontDescriptionRun.widthDefined = false;
535 fontDescriptionRun.slantDefined = false;
536 fontDescriptionRun.sizeDefined = false;
538 Vector<FontDescriptionRun> fontDescriptionRuns;
539 fontDescriptionRuns.PushBack( fontDescriptionRun );
540 Size textArea(1.f, 1.f);
541 Size layoutSize = Vector2::ZERO;
542 LayoutTextData data =
544 "Layout text in a small area",
548 fontDescriptionRuns.Begin(),
554 Layout::Engine::MULTI_LINE_BOX,
561 if( !LayoutTextTest( data ) )
563 tet_result(TET_FAIL);
566 tet_result(TET_PASS);
570 int UtcDaliTextLayoutSmallTextArea02(void)
572 ToolkitTestApplication application;
573 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
575 // Will layout the text in single line as it can be scrolled.
577 const std::string fontFamily( "TizenSans" );
579 // Set a known font description
580 FontDescriptionRun fontDescriptionRun;
581 fontDescriptionRun.characterRun.characterIndex = 0u;
582 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
583 fontDescriptionRun.familyLength = fontFamily.size();
584 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
585 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
586 fontDescriptionRun.familyDefined = true;
587 fontDescriptionRun.weightDefined = false;
588 fontDescriptionRun.widthDefined = false;
589 fontDescriptionRun.slantDefined = false;
590 fontDescriptionRun.sizeDefined = false;
592 Vector<FontDescriptionRun> fontDescriptionRuns;
593 fontDescriptionRuns.PushBack( fontDescriptionRun );
594 Size textArea(1.f, 1.f);
595 Size layoutSize(81.f, 19.f);
596 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 };
597 struct LineRun line =
610 Vector<LineRun> lines;
611 lines.PushBack( line );
613 LayoutTextData data =
615 "Layout text in a small area",
619 fontDescriptionRuns.Begin(),
625 Layout::Engine::SINGLE_LINE_BOX,
632 if( !LayoutTextTest( data ) )
634 tet_result(TET_FAIL);
637 tet_result(TET_PASS);
641 int UtcDaliTextLayoutMultilineText01(void)
643 ToolkitTestApplication application;
644 tet_infoline(" UtcDaliTextLayoutMultilineText01");
646 // Layout some lines of left to right text.
648 const std::string fontFamily( "TizenSans" );
650 // Set a known font description
651 FontDescriptionRun fontDescriptionRun1;
652 fontDescriptionRun1.characterRun.characterIndex = 0u;
653 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
654 fontDescriptionRun1.familyLength = fontFamily.size();
655 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
656 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
657 fontDescriptionRun1.familyDefined = true;
658 fontDescriptionRun1.weightDefined = false;
659 fontDescriptionRun1.widthDefined = false;
660 fontDescriptionRun1.slantDefined = false;
661 fontDescriptionRun1.sizeDefined = false;
663 FontDescriptionRun fontDescriptionRun2;
664 fontDescriptionRun2.characterRun.characterIndex = 18u;
665 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
666 fontDescriptionRun2.familyLength = fontFamily.size();
667 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
668 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
669 fontDescriptionRun2.familyDefined = true;
670 fontDescriptionRun2.weightDefined = false;
671 fontDescriptionRun2.widthDefined = false;
672 fontDescriptionRun2.slantDefined = false;
673 fontDescriptionRun2.sizeDefined = false;
675 Vector<FontDescriptionRun> fontDescriptionRuns;
676 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
677 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
678 Size textArea(100.f, 300.f);
679 Size layoutSize(97.f, 95.f);
682 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,
683 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
684 0.f, -12.f, 9.f, -9.f, 18.f, -9.f, 28.f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f,
685 0.f, -12.f, 10.f, -12.f, 15.f, -12.f, 26.f, -9.f, 35.f, -9.f, 42.f, -9.f, 52.f, -9.f, 61.f, -11.f, 67.f, -0.f,
686 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 19.f, -9.f, 29.f, -9.f, 36.f, -0.f, 42.f, -9.f, 52.f, -12.f, 57.f, -0.f, 62.f, -11.f, 69.f, -9.f, 79.f, -9.f, 87.f, -11.f, 95.f, -2.f
688 struct LineRun line0 =
701 struct LineRun line1 =
714 struct LineRun line2 =
727 struct LineRun line3 =
740 struct LineRun line4 =
753 Vector<LineRun> lines;
754 lines.PushBack( line0 );
755 lines.PushBack( line1 );
756 lines.PushBack( line2 );
757 lines.PushBack( line3 );
758 lines.PushBack( line4 );
760 LayoutTextData data =
762 "Layout simple multi-line text",
763 "Hello world demo.\n"
764 "Layout different lines of text.",
767 fontDescriptionRuns.Begin(),
773 Layout::Engine::MULTI_LINE_BOX,
780 if( !LayoutTextTest( data ) )
782 tet_result(TET_FAIL);
785 tet_result(TET_PASS);
789 int UtcDaliTextLayoutMultilineText02(void)
791 ToolkitTestApplication application;
792 tet_infoline(" UtcDaliTextLayoutMultilineText02");
794 // Layout some lines of bidirectional text.
796 const std::string fontFamily1( "TizenSans" );
798 // Set a known font description
799 FontDescriptionRun fontDescriptionRun1;
800 fontDescriptionRun1.characterRun.characterIndex = 0u;
801 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
802 fontDescriptionRun1.familyLength = fontFamily1.size();
803 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
804 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
805 fontDescriptionRun1.familyDefined = true;
806 fontDescriptionRun1.weightDefined = false;
807 fontDescriptionRun1.widthDefined = false;
808 fontDescriptionRun1.slantDefined = false;
809 fontDescriptionRun1.sizeDefined = false;
811 const std::string fontFamily2( "TizenSansHebrew" );
813 // Set a known font description
814 FontDescriptionRun fontDescriptionRun2;
815 fontDescriptionRun2.characterRun.characterIndex = 17u;
816 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
817 fontDescriptionRun2.familyLength = fontFamily2.size();
818 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
819 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
820 fontDescriptionRun2.familyDefined = true;
821 fontDescriptionRun2.weightDefined = false;
822 fontDescriptionRun2.widthDefined = false;
823 fontDescriptionRun2.slantDefined = false;
824 fontDescriptionRun2.sizeDefined = false;
826 const std::string fontFamily3( "TizenSans" );
828 // Set a known font description
829 FontDescriptionRun fontDescriptionRun3;
830 fontDescriptionRun3.characterRun.characterIndex = 26u;
831 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
832 fontDescriptionRun3.familyLength = fontFamily3.size();
833 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
834 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
835 fontDescriptionRun3.familyDefined = true;
836 fontDescriptionRun3.weightDefined = false;
837 fontDescriptionRun3.widthDefined = false;
838 fontDescriptionRun3.slantDefined = false;
839 fontDescriptionRun3.sizeDefined = false;
841 const std::string fontFamily4( "TizenSansHebrew" );
843 // Set a known font description
844 FontDescriptionRun fontDescriptionRun4;
845 fontDescriptionRun4.characterRun.characterIndex = 28u;
846 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
847 fontDescriptionRun4.familyLength = fontFamily4.size();
848 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
849 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
850 fontDescriptionRun4.familyDefined = true;
851 fontDescriptionRun4.weightDefined = false;
852 fontDescriptionRun4.widthDefined = false;
853 fontDescriptionRun4.slantDefined = false;
854 fontDescriptionRun4.sizeDefined = false;
856 const std::string fontFamily5( "TizenSans" );
858 // Set a known font description
859 FontDescriptionRun fontDescriptionRun5;
860 fontDescriptionRun5.characterRun.characterIndex = 38u;
861 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
862 fontDescriptionRun5.familyLength = fontFamily5.size();
863 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
864 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
865 fontDescriptionRun5.familyDefined = true;
866 fontDescriptionRun5.weightDefined = false;
867 fontDescriptionRun5.widthDefined = false;
868 fontDescriptionRun5.slantDefined = false;
869 fontDescriptionRun5.sizeDefined = false;
871 Vector<FontDescriptionRun> fontDescriptionRuns;
872 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
873 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
874 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
875 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
876 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
877 Size textArea(100.f, 300.f);
878 Size layoutSize(81.f, 114.f);
881 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
882 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
883 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
884 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 28 .. 37
885 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
886 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
888 struct LineRun line0 =
901 struct LineRun line1 =
914 struct LineRun line2 =
927 struct LineRun line3 =
940 struct LineRun line4 =
953 struct LineRun line5 =
966 Vector<LineRun> lines;
967 lines.PushBack( line0 );
968 lines.PushBack( line1 );
969 lines.PushBack( line2 );
970 lines.PushBack( line3 );
971 lines.PushBack( line4 );
972 lines.PushBack( line5 );
974 LayoutTextData data =
976 "Layout bidirectional text.",
977 "Hello world demo שלום עולם.\n"
978 "שלום עולם hello world demo.",
981 fontDescriptionRuns.Begin(),
987 Layout::Engine::MULTI_LINE_BOX,
994 if( !LayoutTextTest( data ) )
996 tet_result(TET_FAIL);
999 tet_result(TET_PASS);
1003 int UtcDaliTextLayoutMultilineText03(void)
1005 ToolkitTestApplication application;
1006 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1008 // Layout a long word which doesn't fit in the width of the text area.
1010 const std::string fontFamily( "TizenSans" );
1012 // Set a known font description
1013 FontDescriptionRun fontDescriptionRun;
1014 fontDescriptionRun.characterRun.characterIndex = 0u;
1015 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1016 fontDescriptionRun.familyLength = fontFamily.size();
1017 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1018 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1019 fontDescriptionRun.familyDefined = true;
1020 fontDescriptionRun.weightDefined = false;
1021 fontDescriptionRun.widthDefined = false;
1022 fontDescriptionRun.slantDefined = false;
1023 fontDescriptionRun.sizeDefined = false;
1025 Vector<FontDescriptionRun> fontDescriptionRuns;
1026 fontDescriptionRuns.PushBack( fontDescriptionRun );
1027 Size textArea(100.f, 300.f);
1028 Size layoutSize(98.f, 57.f);
1031 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,
1032 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,
1033 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
1035 struct LineRun line0 =
1048 struct LineRun line1 =
1061 struct LineRun line2 =
1074 Vector<LineRun> lines;
1075 lines.PushBack( line0 );
1076 lines.PushBack( line1 );
1077 lines.PushBack( line2 );
1079 LayoutTextData data =
1081 "Layout a long word which doesn't fit in the width of the text area.",
1082 "Helloworlddemohelloworlddemo.",
1085 fontDescriptionRuns.Begin(),
1091 Layout::Engine::MULTI_LINE_BOX,
1098 if( !LayoutTextTest( data ) )
1100 tet_result(TET_FAIL);
1103 tet_result(TET_PASS);
1107 int UtcDaliTextLayoutMultilineText04(void)
1109 ToolkitTestApplication application;
1110 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1112 // Layout simple text ending with a \n. It has to add a void line at the end.
1114 const std::string fontFamily( "TizenSans" );
1116 // Set a known font description
1117 FontDescriptionRun fontDescriptionRun;
1118 fontDescriptionRun.characterRun.characterIndex = 0u;
1119 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1120 fontDescriptionRun.familyLength = fontFamily.size();
1121 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1122 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1123 fontDescriptionRun.familyDefined = true;
1124 fontDescriptionRun.weightDefined = false;
1125 fontDescriptionRun.widthDefined = false;
1126 fontDescriptionRun.slantDefined = false;
1127 fontDescriptionRun.sizeDefined = false;
1129 Vector<FontDescriptionRun> fontDescriptionRuns;
1130 fontDescriptionRuns.PushBack( fontDescriptionRun );
1131 Size textArea(100.f, 300.f);
1132 Size layoutSize(84.f, 38.f);
1135 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
1137 struct LineRun line0 =
1149 struct LineRun line1 =
1162 Vector<LineRun> lines;
1163 lines.PushBack( line0 );
1164 lines.PushBack( line1 );
1166 LayoutTextData data =
1168 "Layout simple text ending with a \n.",
1172 fontDescriptionRuns.Begin(),
1178 Layout::Engine::MULTI_LINE_BOX,
1185 if( !LayoutTextTest( data ) )
1187 tet_result(TET_FAIL);
1190 tet_result(TET_PASS);
1194 int UtcDaliTextLayoutMultilineText05(void)
1196 ToolkitTestApplication application;
1197 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1199 // Layout simple text with one character with a different font size.
1201 const std::string fontFamily( "TizenSans" );
1203 // Set a known font description
1204 FontDescriptionRun fontDescriptionRun1;
1205 fontDescriptionRun1.characterRun.characterIndex = 0u;
1206 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1207 fontDescriptionRun1.familyLength = fontFamily.size();
1208 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1209 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1210 fontDescriptionRun1.familyDefined = true;
1211 fontDescriptionRun1.weightDefined = false;
1212 fontDescriptionRun1.widthDefined = false;
1213 fontDescriptionRun1.slantDefined = false;
1214 fontDescriptionRun1.sizeDefined = false;
1216 FontDescriptionRun fontDescriptionRun2;
1217 fontDescriptionRun2.characterRun.characterIndex = 6u;
1218 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1219 fontDescriptionRun2.familyLength = fontFamily.size();
1220 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1221 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1222 fontDescriptionRun2.size = 1280u;
1223 fontDescriptionRun2.familyDefined = true;
1224 fontDescriptionRun2.weightDefined = false;
1225 fontDescriptionRun2.widthDefined = false;
1226 fontDescriptionRun2.slantDefined = false;
1227 fontDescriptionRun2.sizeDefined = true;
1229 FontDescriptionRun fontDescriptionRun3;
1230 fontDescriptionRun3.characterRun.characterIndex = 7u;
1231 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1232 fontDescriptionRun3.familyLength = fontFamily.size();
1233 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1234 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1235 fontDescriptionRun3.familyDefined = true;
1236 fontDescriptionRun3.weightDefined = false;
1237 fontDescriptionRun3.widthDefined = false;
1238 fontDescriptionRun3.slantDefined = false;
1239 fontDescriptionRun3.sizeDefined = false;
1241 Vector<FontDescriptionRun> fontDescriptionRuns;
1242 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1243 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1244 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1245 Size textArea(100.f, 300.f);
1246 Size layoutSize(89.f, 51.f);
1249 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, 71.f, -9.f, 77.f, -13.f, 80.f, -13.f, 89.f, -0.f,
1250 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
1252 struct LineRun line0 =
1265 struct LineRun line1 =
1278 Vector<LineRun> lines;
1279 lines.PushBack( line0 );
1280 lines.PushBack( line1 );
1282 LayoutTextData data =
1284 "Layout simple text with one character with a different font size.",
1285 "Hello world demo.",
1288 fontDescriptionRuns.Begin(),
1294 Layout::Engine::MULTI_LINE_BOX,
1301 if( !LayoutTextTest( data ) )
1303 tet_result(TET_FAIL);
1306 tet_result(TET_PASS);
1310 int UtcDaliTextLayoutMultilineText06(void)
1312 ToolkitTestApplication application;
1313 tet_infoline(" UtcDaliTextLayoutMultilineText06");
1315 const std::string fontFamily( "TizenSansHebrew" );
1317 // Set a known font description
1318 FontDescriptionRun fontDescriptionRun;
1319 fontDescriptionRun.characterRun.characterIndex = 0u;
1320 fontDescriptionRun.characterRun.numberOfCharacters = 10u;
1321 fontDescriptionRun.familyLength = fontFamily.size();
1322 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1323 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1324 fontDescriptionRun.familyDefined = true;
1325 fontDescriptionRun.weightDefined = false;
1326 fontDescriptionRun.widthDefined = false;
1327 fontDescriptionRun.slantDefined = false;
1328 fontDescriptionRun.sizeDefined = false;
1330 Vector<FontDescriptionRun> fontDescriptionRuns;
1331 fontDescriptionRuns.PushBack( fontDescriptionRun );
1333 Size textArea(64.f, 100.f);
1334 Size layoutSize(33.f, 38.f);
1337 28.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
1338 23.f, -10.f, 18.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
1340 struct LineRun line0 =
1353 struct LineRun line1 =
1366 Vector<LineRun> lines;
1367 lines.PushBack( line0 );
1368 lines.PushBack( line1 );
1370 LayoutTextData data =
1372 "Layout right to left text that doesn't fit in the text area after reordering.",
1373 "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
1376 fontDescriptionRuns.Begin(),
1382 Layout::Engine::MULTI_LINE_BOX,
1389 if( !LayoutTextTest( data ) )
1391 tet_result(TET_FAIL);
1394 tet_result(TET_PASS);
1398 int UtcDaliTextLayoutMultilineText07(void)
1400 ToolkitTestApplication application;
1401 tet_infoline(" UtcDaliTextLayoutMultilineText07");
1403 const std::string fontFamily( "TizenSansHebrew" );
1405 // Set a known font description
1406 FontDescriptionRun fontDescriptionRun;
1407 fontDescriptionRun.characterRun.characterIndex = 0u;
1408 fontDescriptionRun.characterRun.numberOfCharacters = 9u;
1409 fontDescriptionRun.familyLength = fontFamily.size();
1410 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1411 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1412 fontDescriptionRun.familyDefined = true;
1413 fontDescriptionRun.weightDefined = false;
1414 fontDescriptionRun.widthDefined = false;
1415 fontDescriptionRun.slantDefined = false;
1416 fontDescriptionRun.sizeDefined = false;
1418 Vector<FontDescriptionRun> fontDescriptionRuns;
1419 fontDescriptionRuns.PushBack( fontDescriptionRun );
1421 Size textArea(26.f, 100.f);
1422 Size layoutSize(23.f, 57.f);
1425 11.f, -10.f, 5.f, -10.f, 0.f, -10.f,
1426 12.f, -10.f, 8.f, -10.f, 0.f, -13.f,
1427 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
1429 struct LineRun line0 =
1442 struct LineRun line1 =
1455 struct LineRun line2 =
1468 Vector<LineRun> lines;
1469 lines.PushBack( line0 );
1470 lines.PushBack( line1 );
1471 lines.PushBack( line2 );
1473 LayoutTextData data =
1475 "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.",
1476 "שנורולכאן", // 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.
1479 fontDescriptionRuns.Begin(),
1485 Layout::Engine::MULTI_LINE_BOX,
1492 if( !LayoutTextTest( data ) )
1494 tet_result(TET_FAIL);
1497 tet_result(TET_PASS);
1501 int UtcDaliTextUpdateLayout01(void)
1503 ToolkitTestApplication application;
1504 tet_infoline(" UtcDaliTextUpdateLayout01");
1506 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1508 const std::string fontLatin( "TizenSans" );
1509 const std::string fontHebrew( "TizenSansHebrew" );
1510 const std::string fontArabic( "TizenSansArabic" );
1512 // Set a known font description
1513 FontDescriptionRun fontDescriptionRun01;
1514 fontDescriptionRun01.characterRun.characterIndex = 0u;
1515 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1516 fontDescriptionRun01.familyLength = fontLatin.size();
1517 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1518 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1519 fontDescriptionRun01.familyDefined = true;
1520 fontDescriptionRun01.weightDefined = false;
1521 fontDescriptionRun01.widthDefined = false;
1522 fontDescriptionRun01.slantDefined = false;
1523 fontDescriptionRun01.sizeDefined = false;
1525 // Set a known font description
1526 FontDescriptionRun fontDescriptionRun02;
1527 fontDescriptionRun02.characterRun.characterIndex = 17u;
1528 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1529 fontDescriptionRun02.familyLength = fontHebrew.size();
1530 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1531 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1532 fontDescriptionRun02.familyDefined = true;
1533 fontDescriptionRun02.weightDefined = false;
1534 fontDescriptionRun02.widthDefined = false;
1535 fontDescriptionRun02.slantDefined = false;
1536 fontDescriptionRun02.sizeDefined = false;
1538 // Set a known font description
1539 FontDescriptionRun fontDescriptionRun03;
1540 fontDescriptionRun03.characterRun.characterIndex = 26u;
1541 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1542 fontDescriptionRun03.familyLength = fontLatin.size();
1543 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1544 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1545 fontDescriptionRun03.familyDefined = true;
1546 fontDescriptionRun03.weightDefined = false;
1547 fontDescriptionRun03.widthDefined = false;
1548 fontDescriptionRun03.slantDefined = false;
1549 fontDescriptionRun03.sizeDefined = false;
1551 // Set a known font description
1552 FontDescriptionRun fontDescriptionRun04;
1553 fontDescriptionRun04.characterRun.characterIndex = 28u;
1554 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1555 fontDescriptionRun04.familyLength = fontArabic.size();
1556 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1557 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1558 fontDescriptionRun04.familyDefined = true;
1559 fontDescriptionRun04.weightDefined = false;
1560 fontDescriptionRun04.widthDefined = false;
1561 fontDescriptionRun04.slantDefined = false;
1562 fontDescriptionRun04.sizeDefined = false;
1564 // Set a known font description
1565 FontDescriptionRun fontDescriptionRun05;
1566 fontDescriptionRun05.characterRun.characterIndex = 42u;
1567 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1568 fontDescriptionRun05.familyLength = fontLatin.size();
1569 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1570 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1571 fontDescriptionRun05.familyDefined = true;
1572 fontDescriptionRun05.weightDefined = false;
1573 fontDescriptionRun05.widthDefined = false;
1574 fontDescriptionRun05.slantDefined = false;
1575 fontDescriptionRun05.sizeDefined = false;
1577 // Set a known font description
1578 FontDescriptionRun fontDescriptionRun06;
1579 fontDescriptionRun06.characterRun.characterIndex = 54u;
1580 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1581 fontDescriptionRun06.familyLength = fontHebrew.size();
1582 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1583 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1584 fontDescriptionRun06.familyDefined = true;
1585 fontDescriptionRun06.weightDefined = false;
1586 fontDescriptionRun06.widthDefined = false;
1587 fontDescriptionRun06.slantDefined = false;
1588 fontDescriptionRun06.sizeDefined = false;
1590 // Set a known font description
1591 FontDescriptionRun fontDescriptionRun07;
1592 fontDescriptionRun07.characterRun.characterIndex = 64u;
1593 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1594 fontDescriptionRun07.familyLength = fontHebrew.size();
1595 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1596 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1597 fontDescriptionRun07.familyDefined = true;
1598 fontDescriptionRun07.weightDefined = false;
1599 fontDescriptionRun07.widthDefined = false;
1600 fontDescriptionRun07.slantDefined = false;
1601 fontDescriptionRun07.sizeDefined = false;
1603 // Set a known font description
1604 FontDescriptionRun fontDescriptionRun08;
1605 fontDescriptionRun08.characterRun.characterIndex = 74u;
1606 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1607 fontDescriptionRun08.familyLength = fontLatin.size();
1608 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1609 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1610 fontDescriptionRun08.familyDefined = true;
1611 fontDescriptionRun08.weightDefined = false;
1612 fontDescriptionRun08.widthDefined = false;
1613 fontDescriptionRun08.slantDefined = false;
1614 fontDescriptionRun08.sizeDefined = false;
1616 // Set a known font description
1617 FontDescriptionRun fontDescriptionRun09;
1618 fontDescriptionRun09.characterRun.characterIndex = 92u;
1619 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1620 fontDescriptionRun09.familyLength = fontLatin.size();
1621 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1622 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1623 fontDescriptionRun09.familyDefined = true;
1624 fontDescriptionRun09.weightDefined = false;
1625 fontDescriptionRun09.widthDefined = false;
1626 fontDescriptionRun09.slantDefined = false;
1627 fontDescriptionRun09.sizeDefined = false;
1629 // Set a known font description
1630 FontDescriptionRun fontDescriptionRun10;
1631 fontDescriptionRun10.characterRun.characterIndex = 104u;
1632 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1633 fontDescriptionRun10.familyLength = fontArabic.size();
1634 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1635 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1636 fontDescriptionRun10.familyDefined = true;
1637 fontDescriptionRun10.weightDefined = false;
1638 fontDescriptionRun10.widthDefined = false;
1639 fontDescriptionRun10.slantDefined = false;
1640 fontDescriptionRun10.sizeDefined = false;
1642 // Set a known font description
1643 FontDescriptionRun fontDescriptionRun11;
1644 fontDescriptionRun11.characterRun.characterIndex = 118u;
1645 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1646 fontDescriptionRun11.familyLength = fontHebrew.size();
1647 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1648 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1649 fontDescriptionRun11.familyDefined = true;
1650 fontDescriptionRun11.weightDefined = false;
1651 fontDescriptionRun11.widthDefined = false;
1652 fontDescriptionRun11.slantDefined = false;
1653 fontDescriptionRun11.sizeDefined = false;
1655 // Set a known font description
1656 FontDescriptionRun fontDescriptionRun12;
1657 fontDescriptionRun12.characterRun.characterIndex = 128u;
1658 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1659 fontDescriptionRun12.familyLength = fontLatin.size();
1660 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1661 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1662 fontDescriptionRun12.familyDefined = true;
1663 fontDescriptionRun12.weightDefined = false;
1664 fontDescriptionRun12.widthDefined = false;
1665 fontDescriptionRun12.slantDefined = false;
1666 fontDescriptionRun12.sizeDefined = false;
1668 // Set a known font description
1669 FontDescriptionRun fontDescriptionRun13;
1670 fontDescriptionRun13.characterRun.characterIndex = 145u;
1671 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1672 fontDescriptionRun13.familyLength = fontHebrew.size();
1673 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1674 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1675 fontDescriptionRun13.familyDefined = true;
1676 fontDescriptionRun13.weightDefined = false;
1677 fontDescriptionRun13.widthDefined = false;
1678 fontDescriptionRun13.slantDefined = false;
1679 fontDescriptionRun13.sizeDefined = false;
1681 // Set a known font description
1682 FontDescriptionRun fontDescriptionRun14;
1683 fontDescriptionRun14.characterRun.characterIndex = 154u;
1684 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1685 fontDescriptionRun14.familyLength = fontLatin.size();
1686 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1687 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1688 fontDescriptionRun14.familyDefined = true;
1689 fontDescriptionRun14.weightDefined = false;
1690 fontDescriptionRun14.widthDefined = false;
1691 fontDescriptionRun14.slantDefined = false;
1692 fontDescriptionRun14.sizeDefined = false;
1694 // Set a known font description
1695 FontDescriptionRun fontDescriptionRun15;
1696 fontDescriptionRun15.characterRun.characterIndex = 156u;
1697 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1698 fontDescriptionRun15.familyLength = fontHebrew.size();
1699 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1700 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1701 fontDescriptionRun15.familyDefined = true;
1702 fontDescriptionRun15.weightDefined = false;
1703 fontDescriptionRun15.widthDefined = false;
1704 fontDescriptionRun15.slantDefined = false;
1705 fontDescriptionRun15.sizeDefined = false;
1707 // Set a known font description
1708 FontDescriptionRun fontDescriptionRun16;
1709 fontDescriptionRun16.characterRun.characterIndex = 166u;
1710 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1711 fontDescriptionRun16.familyLength = fontLatin.size();
1712 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1713 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1714 fontDescriptionRun16.familyDefined = true;
1715 fontDescriptionRun16.weightDefined = false;
1716 fontDescriptionRun16.widthDefined = false;
1717 fontDescriptionRun16.slantDefined = false;
1718 fontDescriptionRun16.sizeDefined = false;
1720 // Set a known font description
1721 FontDescriptionRun fontDescriptionRun17;
1722 fontDescriptionRun17.characterRun.characterIndex = 178u;
1723 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1724 fontDescriptionRun17.familyLength = fontArabic.size();
1725 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1726 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1727 fontDescriptionRun17.familyDefined = true;
1728 fontDescriptionRun17.weightDefined = false;
1729 fontDescriptionRun17.widthDefined = false;
1730 fontDescriptionRun17.slantDefined = false;
1731 fontDescriptionRun17.sizeDefined = false;
1733 Vector<FontDescriptionRun> fontDescriptionRuns;
1734 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1735 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1736 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1737 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1738 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1739 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1740 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1741 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1742 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1743 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1744 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1745 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1746 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1747 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1748 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1749 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1750 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1751 Size textArea(100.f, 300.f);
1752 Size layoutSize(100.f, 361.f);
1755 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
1756 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
1757 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
1758 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
1759 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, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
1760 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
1761 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
1762 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
1763 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
1764 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
1765 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
1766 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
1767 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
1768 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
1769 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
1770 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
1771 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
1772 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
1775 struct LineRun line01 =
1788 struct LineRun line02 =
1801 struct LineRun line03 =
1814 struct LineRun line04 =
1827 struct LineRun line05 =
1840 struct LineRun line06 =
1853 struct LineRun line07 =
1866 struct LineRun line08 =
1879 struct LineRun line09 =
1892 struct LineRun line10 =
1905 struct LineRun line11 =
1918 struct LineRun line12 =
1931 struct LineRun line13 =
1944 struct LineRun line14 =
1957 struct LineRun line15 =
1970 struct LineRun line16 =
1983 struct LineRun line17 =
1996 struct LineRun line18 =
2009 struct LineRun line19 =
2022 Vector<LineRun> lines;
2023 lines.PushBack( line01 );
2024 lines.PushBack( line02 );
2025 lines.PushBack( line03 );
2026 lines.PushBack( line04 );
2027 lines.PushBack( line05 );
2028 lines.PushBack( line06 );
2029 lines.PushBack( line07 );
2030 lines.PushBack( line08 );
2031 lines.PushBack( line09 );
2032 lines.PushBack( line10 );
2033 lines.PushBack( line11 );
2034 lines.PushBack( line12 );
2035 lines.PushBack( line13 );
2036 lines.PushBack( line14 );
2037 lines.PushBack( line15 );
2038 lines.PushBack( line16 );
2039 lines.PushBack( line17 );
2040 lines.PushBack( line18 );
2041 lines.PushBack( line19 );
2043 LayoutTextData data =
2045 "Layout bidirectional text.",
2046 "Hello world demo שלום עולם.\n"
2047 "مرحبا بالعالم hello world שלום עולם\n"
2048 "שלום עולם hello world demo.\n"
2049 "hello world مرحبا بالعالم שלום עולם\n"
2050 "Hello world demo שלום עולם.\n"
2051 "שלום עולם hello world مرحبا بالعالم\n",
2054 fontDescriptionRuns.Begin(),
2060 Layout::Engine::MULTI_LINE_BOX,
2067 if( !LayoutTextTest( data ) )
2069 tet_result(TET_FAIL);
2072 tet_result(TET_PASS);
2076 int UtcDaliTextUpdateLayout02(void)
2078 ToolkitTestApplication application;
2079 tet_infoline(" UtcDaliTextUpdateLayout02");
2081 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2083 const std::string fontLatin( "TizenSans" );
2084 const std::string fontHebrew( "TizenSansHebrew" );
2085 const std::string fontArabic( "TizenSansArabic" );
2087 // Set a known font description
2088 FontDescriptionRun fontDescriptionRun01;
2089 fontDescriptionRun01.characterRun.characterIndex = 0u;
2090 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2091 fontDescriptionRun01.familyLength = fontLatin.size();
2092 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2093 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2094 fontDescriptionRun01.familyDefined = true;
2095 fontDescriptionRun01.weightDefined = false;
2096 fontDescriptionRun01.widthDefined = false;
2097 fontDescriptionRun01.slantDefined = false;
2098 fontDescriptionRun01.sizeDefined = false;
2100 // Set a known font description
2101 FontDescriptionRun fontDescriptionRun02;
2102 fontDescriptionRun02.characterRun.characterIndex = 17u;
2103 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2104 fontDescriptionRun02.familyLength = fontHebrew.size();
2105 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2106 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2107 fontDescriptionRun02.familyDefined = true;
2108 fontDescriptionRun02.weightDefined = false;
2109 fontDescriptionRun02.widthDefined = false;
2110 fontDescriptionRun02.slantDefined = false;
2111 fontDescriptionRun02.sizeDefined = false;
2113 // Set a known font description
2114 FontDescriptionRun fontDescriptionRun03;
2115 fontDescriptionRun03.characterRun.characterIndex = 26u;
2116 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2117 fontDescriptionRun03.familyLength = fontLatin.size();
2118 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2119 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2120 fontDescriptionRun03.familyDefined = true;
2121 fontDescriptionRun03.weightDefined = false;
2122 fontDescriptionRun03.widthDefined = false;
2123 fontDescriptionRun03.slantDefined = false;
2124 fontDescriptionRun03.sizeDefined = false;
2126 // Set a known font description
2127 FontDescriptionRun fontDescriptionRun04;
2128 fontDescriptionRun04.characterRun.characterIndex = 28u;
2129 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2130 fontDescriptionRun04.familyLength = fontArabic.size();
2131 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2132 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2133 fontDescriptionRun04.familyDefined = true;
2134 fontDescriptionRun04.weightDefined = false;
2135 fontDescriptionRun04.widthDefined = false;
2136 fontDescriptionRun04.slantDefined = false;
2137 fontDescriptionRun04.sizeDefined = false;
2139 // Set a known font description
2140 FontDescriptionRun fontDescriptionRun05;
2141 fontDescriptionRun05.characterRun.characterIndex = 42u;
2142 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2143 fontDescriptionRun05.familyLength = fontLatin.size();
2144 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2145 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2146 fontDescriptionRun05.familyDefined = true;
2147 fontDescriptionRun05.weightDefined = false;
2148 fontDescriptionRun05.widthDefined = false;
2149 fontDescriptionRun05.slantDefined = false;
2150 fontDescriptionRun05.sizeDefined = false;
2152 // Set a known font description
2153 FontDescriptionRun fontDescriptionRun06;
2154 fontDescriptionRun06.characterRun.characterIndex = 54u;
2155 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2156 fontDescriptionRun06.familyLength = fontHebrew.size();
2157 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2158 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2159 fontDescriptionRun06.familyDefined = true;
2160 fontDescriptionRun06.weightDefined = false;
2161 fontDescriptionRun06.widthDefined = false;
2162 fontDescriptionRun06.slantDefined = false;
2163 fontDescriptionRun06.sizeDefined = false;
2165 // Set a known font description
2166 FontDescriptionRun fontDescriptionRun07;
2167 fontDescriptionRun07.characterRun.characterIndex = 64u;
2168 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2169 fontDescriptionRun07.familyLength = fontHebrew.size();
2170 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2171 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2172 fontDescriptionRun07.familyDefined = true;
2173 fontDescriptionRun07.weightDefined = false;
2174 fontDescriptionRun07.widthDefined = false;
2175 fontDescriptionRun07.slantDefined = false;
2176 fontDescriptionRun07.sizeDefined = false;
2178 // Set a known font description
2179 FontDescriptionRun fontDescriptionRun08;
2180 fontDescriptionRun08.characterRun.characterIndex = 74u;
2181 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2182 fontDescriptionRun08.familyLength = fontLatin.size();
2183 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2184 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2185 fontDescriptionRun08.familyDefined = true;
2186 fontDescriptionRun08.weightDefined = false;
2187 fontDescriptionRun08.widthDefined = false;
2188 fontDescriptionRun08.slantDefined = false;
2189 fontDescriptionRun08.sizeDefined = false;
2191 // Set a known font description
2192 FontDescriptionRun fontDescriptionRun09;
2193 fontDescriptionRun09.characterRun.characterIndex = 92u;
2194 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2195 fontDescriptionRun09.familyLength = fontLatin.size();
2196 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2197 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2198 fontDescriptionRun09.familyDefined = true;
2199 fontDescriptionRun09.weightDefined = false;
2200 fontDescriptionRun09.widthDefined = false;
2201 fontDescriptionRun09.slantDefined = false;
2202 fontDescriptionRun09.sizeDefined = false;
2204 // Set a known font description
2205 FontDescriptionRun fontDescriptionRun10;
2206 fontDescriptionRun10.characterRun.characterIndex = 104u;
2207 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2208 fontDescriptionRun10.familyLength = fontArabic.size();
2209 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2210 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2211 fontDescriptionRun10.familyDefined = true;
2212 fontDescriptionRun10.weightDefined = false;
2213 fontDescriptionRun10.widthDefined = false;
2214 fontDescriptionRun10.slantDefined = false;
2215 fontDescriptionRun10.sizeDefined = false;
2217 // Set a known font description
2218 FontDescriptionRun fontDescriptionRun11;
2219 fontDescriptionRun11.characterRun.characterIndex = 118u;
2220 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2221 fontDescriptionRun11.familyLength = fontHebrew.size();
2222 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2223 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2224 fontDescriptionRun11.familyDefined = true;
2225 fontDescriptionRun11.weightDefined = false;
2226 fontDescriptionRun11.widthDefined = false;
2227 fontDescriptionRun11.slantDefined = false;
2228 fontDescriptionRun11.sizeDefined = false;
2230 // Set a known font description
2231 FontDescriptionRun fontDescriptionRun12;
2232 fontDescriptionRun12.characterRun.characterIndex = 128u;
2233 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2234 fontDescriptionRun12.familyLength = fontLatin.size();
2235 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2236 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2237 fontDescriptionRun12.familyDefined = true;
2238 fontDescriptionRun12.weightDefined = false;
2239 fontDescriptionRun12.widthDefined = false;
2240 fontDescriptionRun12.slantDefined = false;
2241 fontDescriptionRun12.sizeDefined = false;
2243 // Set a known font description
2244 FontDescriptionRun fontDescriptionRun13;
2245 fontDescriptionRun13.characterRun.characterIndex = 145u;
2246 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2247 fontDescriptionRun13.familyLength = fontHebrew.size();
2248 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2249 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2250 fontDescriptionRun13.familyDefined = true;
2251 fontDescriptionRun13.weightDefined = false;
2252 fontDescriptionRun13.widthDefined = false;
2253 fontDescriptionRun13.slantDefined = false;
2254 fontDescriptionRun13.sizeDefined = false;
2256 // Set a known font description
2257 FontDescriptionRun fontDescriptionRun14;
2258 fontDescriptionRun14.characterRun.characterIndex = 154u;
2259 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2260 fontDescriptionRun14.familyLength = fontLatin.size();
2261 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2262 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2263 fontDescriptionRun14.familyDefined = true;
2264 fontDescriptionRun14.weightDefined = false;
2265 fontDescriptionRun14.widthDefined = false;
2266 fontDescriptionRun14.slantDefined = false;
2267 fontDescriptionRun14.sizeDefined = false;
2269 // Set a known font description
2270 FontDescriptionRun fontDescriptionRun15;
2271 fontDescriptionRun15.characterRun.characterIndex = 156u;
2272 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2273 fontDescriptionRun15.familyLength = fontHebrew.size();
2274 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2275 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2276 fontDescriptionRun15.familyDefined = true;
2277 fontDescriptionRun15.weightDefined = false;
2278 fontDescriptionRun15.widthDefined = false;
2279 fontDescriptionRun15.slantDefined = false;
2280 fontDescriptionRun15.sizeDefined = false;
2282 // Set a known font description
2283 FontDescriptionRun fontDescriptionRun16;
2284 fontDescriptionRun16.characterRun.characterIndex = 166u;
2285 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2286 fontDescriptionRun16.familyLength = fontLatin.size();
2287 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2288 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2289 fontDescriptionRun16.familyDefined = true;
2290 fontDescriptionRun16.weightDefined = false;
2291 fontDescriptionRun16.widthDefined = false;
2292 fontDescriptionRun16.slantDefined = false;
2293 fontDescriptionRun16.sizeDefined = false;
2295 // Set a known font description
2296 FontDescriptionRun fontDescriptionRun17;
2297 fontDescriptionRun17.characterRun.characterIndex = 178u;
2298 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2299 fontDescriptionRun17.familyLength = fontArabic.size();
2300 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2301 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2302 fontDescriptionRun17.familyDefined = true;
2303 fontDescriptionRun17.weightDefined = false;
2304 fontDescriptionRun17.widthDefined = false;
2305 fontDescriptionRun17.slantDefined = false;
2306 fontDescriptionRun17.sizeDefined = false;
2308 Vector<FontDescriptionRun> fontDescriptionRuns;
2309 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2310 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2311 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2312 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2313 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2314 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2315 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2316 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2317 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2318 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2319 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2320 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2321 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2322 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2323 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2324 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2325 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2326 Size textArea(100.f, 300.f);
2327 Size layoutSize(100.f, 361.f);
2330 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
2331 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
2332 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
2333 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
2334 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, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
2335 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2336 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2337 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
2338 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
2339 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
2340 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
2341 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2342 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
2343 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
2344 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
2345 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2346 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
2347 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
2350 struct LineRun line01 =
2363 struct LineRun line02 =
2376 struct LineRun line03 =
2389 struct LineRun line04 =
2402 struct LineRun line05 =
2415 struct LineRun line06 =
2428 struct LineRun line07 =
2441 struct LineRun line08 =
2454 struct LineRun line09 =
2467 struct LineRun line10 =
2480 struct LineRun line11 =
2493 struct LineRun line12 =
2506 struct LineRun line13 =
2519 struct LineRun line14 =
2532 struct LineRun line15 =
2545 struct LineRun line16 =
2558 struct LineRun line17 =
2571 struct LineRun line18 =
2584 struct LineRun line19 =
2597 Vector<LineRun> lines;
2598 lines.PushBack( line01 );
2599 lines.PushBack( line02 );
2600 lines.PushBack( line03 );
2601 lines.PushBack( line04 );
2602 lines.PushBack( line05 );
2603 lines.PushBack( line06 );
2604 lines.PushBack( line07 );
2605 lines.PushBack( line08 );
2606 lines.PushBack( line09 );
2607 lines.PushBack( line10 );
2608 lines.PushBack( line11 );
2609 lines.PushBack( line12 );
2610 lines.PushBack( line13 );
2611 lines.PushBack( line14 );
2612 lines.PushBack( line15 );
2613 lines.PushBack( line16 );
2614 lines.PushBack( line17 );
2615 lines.PushBack( line18 );
2616 lines.PushBack( line19 );
2618 LayoutTextData data =
2620 "Layout bidirectional text.",
2621 "Hello world demo שלום עולם.\n"
2622 "مرحبا بالعالم hello world שלום עולם\n"
2623 "שלום עולם hello world demo.\n"
2624 "hello world مرحبا بالعالم שלום עולם\n"
2625 "Hello world demo שלום עולם.\n"
2626 "שלום עולם hello world مرحبا بالعالم\n",
2629 fontDescriptionRuns.Begin(),
2635 Layout::Engine::MULTI_LINE_BOX,
2642 if( !LayoutTextTest( data ) )
2644 tet_result(TET_FAIL);
2647 tet_result(TET_PASS);
2651 int UtcDaliTextUpdateLayout03(void)
2653 ToolkitTestApplication application;
2654 tet_infoline(" UtcDaliTextUpdateLayout03");
2656 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2658 const std::string fontLatin( "TizenSans" );
2659 const std::string fontHebrew( "TizenSansHebrew" );
2660 const std::string fontArabic( "TizenSansArabic" );
2662 // Set a known font description
2663 FontDescriptionRun fontDescriptionRun01;
2664 fontDescriptionRun01.characterRun.characterIndex = 0u;
2665 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2666 fontDescriptionRun01.familyLength = fontLatin.size();
2667 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2668 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2669 fontDescriptionRun01.familyDefined = true;
2670 fontDescriptionRun01.weightDefined = false;
2671 fontDescriptionRun01.widthDefined = false;
2672 fontDescriptionRun01.slantDefined = false;
2673 fontDescriptionRun01.sizeDefined = false;
2675 // Set a known font description
2676 FontDescriptionRun fontDescriptionRun02;
2677 fontDescriptionRun02.characterRun.characterIndex = 17u;
2678 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2679 fontDescriptionRun02.familyLength = fontHebrew.size();
2680 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2681 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2682 fontDescriptionRun02.familyDefined = true;
2683 fontDescriptionRun02.weightDefined = false;
2684 fontDescriptionRun02.widthDefined = false;
2685 fontDescriptionRun02.slantDefined = false;
2686 fontDescriptionRun02.sizeDefined = false;
2688 // Set a known font description
2689 FontDescriptionRun fontDescriptionRun03;
2690 fontDescriptionRun03.characterRun.characterIndex = 26u;
2691 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2692 fontDescriptionRun03.familyLength = fontLatin.size();
2693 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2694 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2695 fontDescriptionRun03.familyDefined = true;
2696 fontDescriptionRun03.weightDefined = false;
2697 fontDescriptionRun03.widthDefined = false;
2698 fontDescriptionRun03.slantDefined = false;
2699 fontDescriptionRun03.sizeDefined = false;
2701 // Set a known font description
2702 FontDescriptionRun fontDescriptionRun04;
2703 fontDescriptionRun04.characterRun.characterIndex = 28u;
2704 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2705 fontDescriptionRun04.familyLength = fontArabic.size();
2706 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2707 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2708 fontDescriptionRun04.familyDefined = true;
2709 fontDescriptionRun04.weightDefined = false;
2710 fontDescriptionRun04.widthDefined = false;
2711 fontDescriptionRun04.slantDefined = false;
2712 fontDescriptionRun04.sizeDefined = false;
2714 // Set a known font description
2715 FontDescriptionRun fontDescriptionRun05;
2716 fontDescriptionRun05.characterRun.characterIndex = 42u;
2717 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2718 fontDescriptionRun05.familyLength = fontLatin.size();
2719 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2720 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2721 fontDescriptionRun05.familyDefined = true;
2722 fontDescriptionRun05.weightDefined = false;
2723 fontDescriptionRun05.widthDefined = false;
2724 fontDescriptionRun05.slantDefined = false;
2725 fontDescriptionRun05.sizeDefined = false;
2727 // Set a known font description
2728 FontDescriptionRun fontDescriptionRun06;
2729 fontDescriptionRun06.characterRun.characterIndex = 54u;
2730 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2731 fontDescriptionRun06.familyLength = fontHebrew.size();
2732 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2733 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2734 fontDescriptionRun06.familyDefined = true;
2735 fontDescriptionRun06.weightDefined = false;
2736 fontDescriptionRun06.widthDefined = false;
2737 fontDescriptionRun06.slantDefined = false;
2738 fontDescriptionRun06.sizeDefined = false;
2740 // Set a known font description
2741 FontDescriptionRun fontDescriptionRun07;
2742 fontDescriptionRun07.characterRun.characterIndex = 64u;
2743 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2744 fontDescriptionRun07.familyLength = fontHebrew.size();
2745 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2746 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2747 fontDescriptionRun07.familyDefined = true;
2748 fontDescriptionRun07.weightDefined = false;
2749 fontDescriptionRun07.widthDefined = false;
2750 fontDescriptionRun07.slantDefined = false;
2751 fontDescriptionRun07.sizeDefined = false;
2753 // Set a known font description
2754 FontDescriptionRun fontDescriptionRun08;
2755 fontDescriptionRun08.characterRun.characterIndex = 74u;
2756 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2757 fontDescriptionRun08.familyLength = fontLatin.size();
2758 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2759 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2760 fontDescriptionRun08.familyDefined = true;
2761 fontDescriptionRun08.weightDefined = false;
2762 fontDescriptionRun08.widthDefined = false;
2763 fontDescriptionRun08.slantDefined = false;
2764 fontDescriptionRun08.sizeDefined = false;
2766 // Set a known font description
2767 FontDescriptionRun fontDescriptionRun09;
2768 fontDescriptionRun09.characterRun.characterIndex = 92u;
2769 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2770 fontDescriptionRun09.familyLength = fontLatin.size();
2771 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2772 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2773 fontDescriptionRun09.familyDefined = true;
2774 fontDescriptionRun09.weightDefined = false;
2775 fontDescriptionRun09.widthDefined = false;
2776 fontDescriptionRun09.slantDefined = false;
2777 fontDescriptionRun09.sizeDefined = false;
2779 // Set a known font description
2780 FontDescriptionRun fontDescriptionRun10;
2781 fontDescriptionRun10.characterRun.characterIndex = 104u;
2782 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2783 fontDescriptionRun10.familyLength = fontArabic.size();
2784 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2785 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2786 fontDescriptionRun10.familyDefined = true;
2787 fontDescriptionRun10.weightDefined = false;
2788 fontDescriptionRun10.widthDefined = false;
2789 fontDescriptionRun10.slantDefined = false;
2790 fontDescriptionRun10.sizeDefined = false;
2792 // Set a known font description
2793 FontDescriptionRun fontDescriptionRun11;
2794 fontDescriptionRun11.characterRun.characterIndex = 118u;
2795 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2796 fontDescriptionRun11.familyLength = fontHebrew.size();
2797 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2798 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2799 fontDescriptionRun11.familyDefined = true;
2800 fontDescriptionRun11.weightDefined = false;
2801 fontDescriptionRun11.widthDefined = false;
2802 fontDescriptionRun11.slantDefined = false;
2803 fontDescriptionRun11.sizeDefined = false;
2805 // Set a known font description
2806 FontDescriptionRun fontDescriptionRun12;
2807 fontDescriptionRun12.characterRun.characterIndex = 128u;
2808 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2809 fontDescriptionRun12.familyLength = fontLatin.size();
2810 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2811 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2812 fontDescriptionRun12.familyDefined = true;
2813 fontDescriptionRun12.weightDefined = false;
2814 fontDescriptionRun12.widthDefined = false;
2815 fontDescriptionRun12.slantDefined = false;
2816 fontDescriptionRun12.sizeDefined = false;
2818 // Set a known font description
2819 FontDescriptionRun fontDescriptionRun13;
2820 fontDescriptionRun13.characterRun.characterIndex = 145u;
2821 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2822 fontDescriptionRun13.familyLength = fontHebrew.size();
2823 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2824 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2825 fontDescriptionRun13.familyDefined = true;
2826 fontDescriptionRun13.weightDefined = false;
2827 fontDescriptionRun13.widthDefined = false;
2828 fontDescriptionRun13.slantDefined = false;
2829 fontDescriptionRun13.sizeDefined = false;
2831 // Set a known font description
2832 FontDescriptionRun fontDescriptionRun14;
2833 fontDescriptionRun14.characterRun.characterIndex = 154u;
2834 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2835 fontDescriptionRun14.familyLength = fontLatin.size();
2836 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2837 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2838 fontDescriptionRun14.familyDefined = true;
2839 fontDescriptionRun14.weightDefined = false;
2840 fontDescriptionRun14.widthDefined = false;
2841 fontDescriptionRun14.slantDefined = false;
2842 fontDescriptionRun14.sizeDefined = false;
2844 // Set a known font description
2845 FontDescriptionRun fontDescriptionRun15;
2846 fontDescriptionRun15.characterRun.characterIndex = 156u;
2847 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2848 fontDescriptionRun15.familyLength = fontHebrew.size();
2849 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2850 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2851 fontDescriptionRun15.familyDefined = true;
2852 fontDescriptionRun15.weightDefined = false;
2853 fontDescriptionRun15.widthDefined = false;
2854 fontDescriptionRun15.slantDefined = false;
2855 fontDescriptionRun15.sizeDefined = false;
2857 // Set a known font description
2858 FontDescriptionRun fontDescriptionRun16;
2859 fontDescriptionRun16.characterRun.characterIndex = 166u;
2860 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2861 fontDescriptionRun16.familyLength = fontLatin.size();
2862 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2863 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2864 fontDescriptionRun16.familyDefined = true;
2865 fontDescriptionRun16.weightDefined = false;
2866 fontDescriptionRun16.widthDefined = false;
2867 fontDescriptionRun16.slantDefined = false;
2868 fontDescriptionRun16.sizeDefined = false;
2870 // Set a known font description
2871 FontDescriptionRun fontDescriptionRun17;
2872 fontDescriptionRun17.characterRun.characterIndex = 178u;
2873 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2874 fontDescriptionRun17.familyLength = fontArabic.size();
2875 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2876 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2877 fontDescriptionRun17.familyDefined = true;
2878 fontDescriptionRun17.weightDefined = false;
2879 fontDescriptionRun17.widthDefined = false;
2880 fontDescriptionRun17.slantDefined = false;
2881 fontDescriptionRun17.sizeDefined = false;
2883 Vector<FontDescriptionRun> fontDescriptionRuns;
2884 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2885 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2886 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2887 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2888 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2889 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2890 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2891 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2892 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2893 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2894 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2895 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2896 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2897 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2898 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2899 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2900 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2901 Size textArea(100.f, 300.f);
2902 Size layoutSize(100.f, 361.f);
2905 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
2906 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
2907 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
2908 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
2909 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, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
2910 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2911 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2912 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
2913 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
2914 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
2915 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
2916 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2917 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
2918 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
2919 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
2920 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2921 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
2922 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
2925 struct LineRun line01 =
2938 struct LineRun line02 =
2951 struct LineRun line03 =
2964 struct LineRun line04 =
2977 struct LineRun line05 =
2990 struct LineRun line06 =
3003 struct LineRun line07 =
3016 struct LineRun line08 =
3029 struct LineRun line09 =
3042 struct LineRun line10 =
3055 struct LineRun line11 =
3068 struct LineRun line12 =
3081 struct LineRun line13 =
3094 struct LineRun line14 =
3107 struct LineRun line15 =
3120 struct LineRun line16 =
3133 struct LineRun line17 =
3146 struct LineRun line18 =
3159 struct LineRun line19 =
3172 Vector<LineRun> lines;
3173 lines.PushBack( line01 );
3174 lines.PushBack( line02 );
3175 lines.PushBack( line03 );
3176 lines.PushBack( line04 );
3177 lines.PushBack( line05 );
3178 lines.PushBack( line06 );
3179 lines.PushBack( line07 );
3180 lines.PushBack( line08 );
3181 lines.PushBack( line09 );
3182 lines.PushBack( line10 );
3183 lines.PushBack( line11 );
3184 lines.PushBack( line12 );
3185 lines.PushBack( line13 );
3186 lines.PushBack( line14 );
3187 lines.PushBack( line15 );
3188 lines.PushBack( line16 );
3189 lines.PushBack( line17 );
3190 lines.PushBack( line18 );
3191 lines.PushBack( line19 );
3193 LayoutTextData data =
3195 "Layout bidirectional text.",
3196 "Hello world demo שלום עולם.\n"
3197 "مرحبا بالعالم hello world שלום עולם\n"
3198 "שלום עולם hello world demo.\n"
3199 "hello world مرحبا بالعالم שלום עולם\n"
3200 "Hello world demo שלום עולם.\n"
3201 "שלום עולם hello world مرحبا بالعالم\n",
3204 fontDescriptionRuns.Begin(),
3210 Layout::Engine::MULTI_LINE_BOX,
3217 if( !LayoutTextTest( data ) )
3219 tet_result(TET_FAIL);
3222 tet_result(TET_PASS);
3226 int UtcDaliTextLayoutEllipsis01(void)
3228 ToolkitTestApplication application;
3229 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3231 // Layout single-line LTR text with ellipsis.
3233 const std::string fontLatin( "TizenSans" );
3235 // Set a known font description
3236 FontDescriptionRun fontDescriptionRun01;
3237 fontDescriptionRun01.characterRun.characterIndex = 0u;
3238 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3239 fontDescriptionRun01.familyLength = fontLatin.size();
3240 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3241 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3242 fontDescriptionRun01.familyDefined = true;
3243 fontDescriptionRun01.weightDefined = false;
3244 fontDescriptionRun01.widthDefined = false;
3245 fontDescriptionRun01.slantDefined = false;
3246 fontDescriptionRun01.sizeDefined = false;
3248 Vector<FontDescriptionRun> fontDescriptionRuns;
3249 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3251 struct LineRun line01 =
3264 Vector<LineRun> lines;
3265 lines.PushBack( line01 );
3269 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,
3272 Size textArea( 100.f, 50.f );
3273 Size layoutSize( 100.f, 19.f );
3275 LayoutTextData data =
3277 "Layout single-line LTR text with ellipsis.",
3278 "Hello world demo hello world demo hello world demo.",
3281 fontDescriptionRuns.Begin(),
3287 Layout::Engine::SINGLE_LINE_BOX,
3294 if( !LayoutTextTest( data ) )
3296 tet_result(TET_FAIL);
3299 tet_result(TET_PASS);
3303 int UtcDaliTextLayoutEllipsis02(void)
3305 ToolkitTestApplication application;
3306 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3308 // Layout multi-line LTR text with ellipsis.
3310 const std::string fontLatin( "TizenSans" );
3312 // Set a known font description
3313 FontDescriptionRun fontDescriptionRun01;
3314 fontDescriptionRun01.characterRun.characterIndex = 0u;
3315 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3316 fontDescriptionRun01.familyLength = fontLatin.size();
3317 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3318 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3319 fontDescriptionRun01.familyDefined = true;
3320 fontDescriptionRun01.weightDefined = false;
3321 fontDescriptionRun01.widthDefined = false;
3322 fontDescriptionRun01.slantDefined = false;
3323 fontDescriptionRun01.sizeDefined = false;
3325 Vector<FontDescriptionRun> fontDescriptionRuns;
3326 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3328 struct LineRun line01 =
3341 struct LineRun line02 =
3354 Vector<LineRun> lines;
3355 lines.PushBack( line01 );
3356 lines.PushBack( line02 );
3360 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,
3361 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,
3364 Size textArea( 100.f, 50.f );
3365 Size layoutSize( 100.f, 38.f );
3367 LayoutTextData data =
3369 "Layout multi-line LTR text with ellipsis.",
3370 "Hello world demo hello world demo hello world demo.",
3373 fontDescriptionRuns.Begin(),
3379 Layout::Engine::MULTI_LINE_BOX,
3386 if( !LayoutTextTest( data ) )
3388 tet_result(TET_FAIL);
3391 tet_result(TET_PASS);
3395 int UtcDaliTextLayoutEllipsis03(void)
3397 ToolkitTestApplication application;
3398 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3400 // Layout single-line RTL text with ellipsis.
3402 const std::string fontHebrew( "TizenSansHebrew" );
3403 const std::string fontArabic( "TizenSansArabic" );
3405 // Set a known font description
3406 FontDescriptionRun fontDescriptionRun01;
3407 fontDescriptionRun01.characterRun.characterIndex = 0u;
3408 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3409 fontDescriptionRun01.familyLength = fontHebrew.size();
3410 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3411 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3412 fontDescriptionRun01.familyDefined = true;
3413 fontDescriptionRun01.weightDefined = false;
3414 fontDescriptionRun01.widthDefined = false;
3415 fontDescriptionRun01.slantDefined = false;
3416 fontDescriptionRun01.sizeDefined = false;
3418 FontDescriptionRun fontDescriptionRun02;
3419 fontDescriptionRun02.characterRun.characterIndex = 10u;
3420 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3421 fontDescriptionRun02.familyLength = fontArabic.size();
3422 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3423 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3424 fontDescriptionRun02.familyDefined = true;
3425 fontDescriptionRun02.weightDefined = false;
3426 fontDescriptionRun02.widthDefined = false;
3427 fontDescriptionRun02.slantDefined = false;
3428 fontDescriptionRun02.sizeDefined = false;
3430 FontDescriptionRun fontDescriptionRun03;
3431 fontDescriptionRun03.characterRun.characterIndex = 24u;
3432 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3433 fontDescriptionRun03.familyLength = fontHebrew.size();
3434 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3435 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3436 fontDescriptionRun03.familyDefined = true;
3437 fontDescriptionRun03.weightDefined = false;
3438 fontDescriptionRun03.widthDefined = false;
3439 fontDescriptionRun03.slantDefined = false;
3440 fontDescriptionRun03.sizeDefined = false;
3442 FontDescriptionRun fontDescriptionRun04;
3443 fontDescriptionRun04.characterRun.characterIndex = 34u;
3444 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3445 fontDescriptionRun04.familyLength = fontArabic.size();
3446 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3447 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3448 fontDescriptionRun04.familyDefined = true;
3449 fontDescriptionRun04.weightDefined = false;
3450 fontDescriptionRun04.widthDefined = false;
3451 fontDescriptionRun04.slantDefined = false;
3452 fontDescriptionRun04.sizeDefined = false;
3454 FontDescriptionRun fontDescriptionRun05;
3455 fontDescriptionRun05.characterRun.characterIndex = 48u;
3456 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3457 fontDescriptionRun05.familyLength = fontHebrew.size();
3458 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3459 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3460 fontDescriptionRun05.familyDefined = true;
3461 fontDescriptionRun05.weightDefined = false;
3462 fontDescriptionRun05.widthDefined = false;
3463 fontDescriptionRun05.slantDefined = false;
3464 fontDescriptionRun05.sizeDefined = false;
3466 FontDescriptionRun fontDescriptionRun06;
3467 fontDescriptionRun06.characterRun.characterIndex = 58u;
3468 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3469 fontDescriptionRun06.familyLength = fontArabic.size();
3470 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3471 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3472 fontDescriptionRun06.familyDefined = true;
3473 fontDescriptionRun06.weightDefined = false;
3474 fontDescriptionRun06.widthDefined = false;
3475 fontDescriptionRun06.slantDefined = false;
3476 fontDescriptionRun06.sizeDefined = false;
3478 Vector<FontDescriptionRun> fontDescriptionRuns;
3479 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3480 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3481 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3482 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3483 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3484 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3486 struct LineRun line01 =
3499 Vector<LineRun> lines;
3500 lines.PushBack( line01 );
3504 88.f, -10.f, 80.f, -13.f, 74.f, -10.f, 66.f, -10.f, 60.f, -0.f, 52.f, -10.f, 47.f, -10.f, 39.f, -13.f, 30.f, -10.f, 24.f, -0.f, 17.f, -8.f, 12.f, -6.f, 4.f, -8.f, 0.f, -7.f, 77.f, -11.f, 72.f, -0.f,
3507 Size textArea( 100.f, 50.f );
3508 Size layoutSize( 100.f, 19.f );
3510 LayoutTextData data =
3512 "Layout single-line RTL text with ellipsis.",
3513 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3516 fontDescriptionRuns.Begin(),
3522 Layout::Engine::SINGLE_LINE_BOX,
3529 if( !LayoutTextTest( data ) )
3531 tet_result(TET_FAIL);
3534 tet_result(TET_PASS);
3538 int UtcDaliTextLayoutEllipsis04(void)
3540 ToolkitTestApplication application;
3541 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3543 // Layout multi-line RTL text with ellipsis.
3545 const std::string fontHebrew( "TizenSansHebrew" );
3546 const std::string fontArabic( "TizenSansArabic" );
3548 // Set a known font description
3549 FontDescriptionRun fontDescriptionRun01;
3550 fontDescriptionRun01.characterRun.characterIndex = 0u;
3551 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3552 fontDescriptionRun01.familyLength = fontHebrew.size();
3553 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3554 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3555 fontDescriptionRun01.familyDefined = true;
3556 fontDescriptionRun01.weightDefined = false;
3557 fontDescriptionRun01.widthDefined = false;
3558 fontDescriptionRun01.slantDefined = false;
3559 fontDescriptionRun01.sizeDefined = false;
3561 FontDescriptionRun fontDescriptionRun02;
3562 fontDescriptionRun02.characterRun.characterIndex = 10u;
3563 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3564 fontDescriptionRun02.familyLength = fontArabic.size();
3565 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3566 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3567 fontDescriptionRun02.familyDefined = true;
3568 fontDescriptionRun02.weightDefined = false;
3569 fontDescriptionRun02.widthDefined = false;
3570 fontDescriptionRun02.slantDefined = false;
3571 fontDescriptionRun02.sizeDefined = false;
3573 FontDescriptionRun fontDescriptionRun03;
3574 fontDescriptionRun03.characterRun.characterIndex = 24u;
3575 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3576 fontDescriptionRun03.familyLength = fontHebrew.size();
3577 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3578 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3579 fontDescriptionRun03.familyDefined = true;
3580 fontDescriptionRun03.weightDefined = false;
3581 fontDescriptionRun03.widthDefined = false;
3582 fontDescriptionRun03.slantDefined = false;
3583 fontDescriptionRun03.sizeDefined = false;
3585 FontDescriptionRun fontDescriptionRun04;
3586 fontDescriptionRun04.characterRun.characterIndex = 34u;
3587 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3588 fontDescriptionRun04.familyLength = fontArabic.size();
3589 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3590 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3591 fontDescriptionRun04.familyDefined = true;
3592 fontDescriptionRun04.weightDefined = false;
3593 fontDescriptionRun04.widthDefined = false;
3594 fontDescriptionRun04.slantDefined = false;
3595 fontDescriptionRun04.sizeDefined = false;
3597 FontDescriptionRun fontDescriptionRun05;
3598 fontDescriptionRun05.characterRun.characterIndex = 48u;
3599 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3600 fontDescriptionRun05.familyLength = fontHebrew.size();
3601 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3602 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3603 fontDescriptionRun05.familyDefined = true;
3604 fontDescriptionRun05.weightDefined = false;
3605 fontDescriptionRun05.widthDefined = false;
3606 fontDescriptionRun05.slantDefined = false;
3607 fontDescriptionRun05.sizeDefined = false;
3609 FontDescriptionRun fontDescriptionRun06;
3610 fontDescriptionRun06.characterRun.characterIndex = 58u;
3611 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3612 fontDescriptionRun06.familyLength = fontArabic.size();
3613 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3614 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3615 fontDescriptionRun06.familyDefined = true;
3616 fontDescriptionRun06.weightDefined = false;
3617 fontDescriptionRun06.widthDefined = false;
3618 fontDescriptionRun06.slantDefined = false;
3619 fontDescriptionRun06.sizeDefined = false;
3621 Vector<FontDescriptionRun> fontDescriptionRuns;
3622 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3623 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3624 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3625 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3626 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3627 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3629 struct LineRun line01 =
3642 struct LineRun line02 =
3655 Vector<LineRun> lines;
3656 lines.PushBack( line01 );
3657 lines.PushBack( line02 );
3661 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, 95.f, -8.f, 90.f, -6.f, 82.f, -8.f, 78.f, -7.f, 77.f, -11.f, 72.f, -0.f,
3662 67.f, -7.f, 66.f, -11.f, 60.f, -11.f, 54.f, -8.f, 52.f, -11.f, 46.f, -11.f, 41.f, -8.f, 37.f, -0.f, 27.f, -10.f, 18.f, -13.f, 13.f, -10.f, 4.f, -10.f, 0.f, -0.f, 93.f, -10.f, 88.f, -10.f, 80.f, -13.f, 71.f, -10.f, 65.f, -0.f,
3665 Size textArea( 100.f, 50.f );
3666 Size layoutSize( 100.f, 38.f );
3668 LayoutTextData data =
3670 "Layout multi-line RTL text with ellipsis.",
3671 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3674 fontDescriptionRuns.Begin(),
3680 Layout::Engine::MULTI_LINE_BOX,
3687 if( !LayoutTextTest( data ) )
3689 tet_result(TET_FAIL);
3692 tet_result(TET_PASS);
3696 int UtcDaliTextLayoutEllipsis05(void)
3698 ToolkitTestApplication application;
3699 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3701 const std::string fontLatin( "TizenSans" );
3703 // Set a known font description
3704 FontDescriptionRun fontDescriptionRun01;
3705 fontDescriptionRun01.characterRun.characterIndex = 0u;
3706 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3707 fontDescriptionRun01.familyLength = fontLatin.size();
3708 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3709 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3710 fontDescriptionRun01.familyDefined = true;
3711 fontDescriptionRun01.weightDefined = false;
3712 fontDescriptionRun01.widthDefined = false;
3713 fontDescriptionRun01.slantDefined = false;
3714 fontDescriptionRun01.sizeDefined = false;
3716 Vector<FontDescriptionRun> fontDescriptionRuns;
3717 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3719 struct LineRun line01 =
3732 Vector<LineRun> lines;
3733 lines.PushBack( line01 );
3740 Size textArea( 100.f, 19.f );
3741 Size layoutSize( 81.f, 19.f );
3743 LayoutTextData data =
3745 "Not enough height.",
3749 fontDescriptionRuns.Begin(),
3755 Layout::Engine::MULTI_LINE_BOX,
3762 if( !LayoutTextTest( data ) )
3764 tet_result(TET_FAIL);
3767 tet_result(TET_PASS);
3771 int UtcDaliTextAlign01(void)
3773 ToolkitTestApplication application;
3774 tet_infoline(" UtcDaliTextAlign01");
3776 // Calculate text alignment.
3778 const std::string fontLatin( "TizenSans" );
3779 const std::string fontHebrew( "TizenSansHebrew" );
3780 const std::string fontArabic( "TizenSansArabic" );
3782 // Set a known font description
3783 FontDescriptionRun fontDescriptionRun01;
3784 fontDescriptionRun01.characterRun.characterIndex = 0u;
3785 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3786 fontDescriptionRun01.familyLength = fontLatin.size();
3787 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3788 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3789 fontDescriptionRun01.familyDefined = true;
3790 fontDescriptionRun01.weightDefined = false;
3791 fontDescriptionRun01.widthDefined = false;
3792 fontDescriptionRun01.slantDefined = false;
3793 fontDescriptionRun01.sizeDefined = false;
3795 FontDescriptionRun fontDescriptionRun02;
3796 fontDescriptionRun02.characterRun.characterIndex = 12u;
3797 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3798 fontDescriptionRun02.familyLength = fontHebrew.size();
3799 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3800 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3801 fontDescriptionRun02.familyDefined = true;
3802 fontDescriptionRun02.weightDefined = false;
3803 fontDescriptionRun02.widthDefined = false;
3804 fontDescriptionRun02.slantDefined = false;
3805 fontDescriptionRun02.sizeDefined = false;
3807 FontDescriptionRun fontDescriptionRun03;
3808 fontDescriptionRun03.characterRun.characterIndex = 22u;
3809 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3810 fontDescriptionRun03.familyLength = fontArabic.size();
3811 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3812 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3813 fontDescriptionRun03.familyDefined = true;
3814 fontDescriptionRun03.weightDefined = false;
3815 fontDescriptionRun03.widthDefined = false;
3816 fontDescriptionRun03.slantDefined = false;
3817 fontDescriptionRun03.sizeDefined = false;
3819 FontDescriptionRun fontDescriptionRun04;
3820 fontDescriptionRun04.characterRun.characterIndex = 36u;
3821 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3822 fontDescriptionRun04.familyLength = fontLatin.size();
3823 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3824 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3825 fontDescriptionRun04.familyDefined = true;
3826 fontDescriptionRun04.weightDefined = false;
3827 fontDescriptionRun04.widthDefined = false;
3828 fontDescriptionRun04.slantDefined = false;
3829 fontDescriptionRun04.sizeDefined = false;
3831 FontDescriptionRun fontDescriptionRun05;
3832 fontDescriptionRun05.characterRun.characterIndex = 48u;
3833 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3834 fontDescriptionRun05.familyLength = fontLatin.size();
3835 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3836 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3837 fontDescriptionRun05.familyDefined = true;
3838 fontDescriptionRun05.weightDefined = false;
3839 fontDescriptionRun05.widthDefined = false;
3840 fontDescriptionRun05.slantDefined = false;
3841 fontDescriptionRun05.sizeDefined = false;
3843 FontDescriptionRun fontDescriptionRun06;
3844 fontDescriptionRun06.characterRun.characterIndex = 60u;
3845 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3846 fontDescriptionRun06.familyLength = fontArabic.size();
3847 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3848 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3849 fontDescriptionRun06.familyDefined = true;
3850 fontDescriptionRun06.weightDefined = false;
3851 fontDescriptionRun06.widthDefined = false;
3852 fontDescriptionRun06.slantDefined = false;
3853 fontDescriptionRun06.sizeDefined = false;
3855 Vector<FontDescriptionRun> fontDescriptionRuns;
3856 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3857 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3858 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3859 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3860 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3861 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3863 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
3865 Size textArea( 100.f, 300.f );
3868 "Begin alignment for the first paragraph.",
3869 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3872 fontDescriptionRuns.Begin(),
3873 Text::HorizontalAlignment::BEGIN,
3874 Text::VerticalAlignment::TOP,
3879 Dali::LayoutDirection::LEFT_TO_RIGHT,
3883 if( !AlignTest( data ) )
3885 tet_result(TET_FAIL);
3888 tet_result(TET_PASS);
3892 int UtcDaliTextAlign02(void)
3894 ToolkitTestApplication application;
3895 tet_infoline(" UtcDaliTextAlign02");
3897 // Calculate text alignment.
3899 const std::string fontLatin( "TizenSans" );
3900 const std::string fontHebrew( "TizenSansHebrew" );
3901 const std::string fontArabic( "TizenSansArabic" );
3903 // Set a known font description
3904 FontDescriptionRun fontDescriptionRun01;
3905 fontDescriptionRun01.characterRun.characterIndex = 0u;
3906 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3907 fontDescriptionRun01.familyLength = fontLatin.size();
3908 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3909 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3910 fontDescriptionRun01.familyDefined = true;
3911 fontDescriptionRun01.weightDefined = false;
3912 fontDescriptionRun01.widthDefined = false;
3913 fontDescriptionRun01.slantDefined = false;
3914 fontDescriptionRun01.sizeDefined = false;
3916 FontDescriptionRun fontDescriptionRun02;
3917 fontDescriptionRun02.characterRun.characterIndex = 12u;
3918 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3919 fontDescriptionRun02.familyLength = fontHebrew.size();
3920 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3921 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3922 fontDescriptionRun02.familyDefined = true;
3923 fontDescriptionRun02.weightDefined = false;
3924 fontDescriptionRun02.widthDefined = false;
3925 fontDescriptionRun02.slantDefined = false;
3926 fontDescriptionRun02.sizeDefined = false;
3928 FontDescriptionRun fontDescriptionRun03;
3929 fontDescriptionRun03.characterRun.characterIndex = 22u;
3930 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3931 fontDescriptionRun03.familyLength = fontArabic.size();
3932 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3933 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3934 fontDescriptionRun03.familyDefined = true;
3935 fontDescriptionRun03.weightDefined = false;
3936 fontDescriptionRun03.widthDefined = false;
3937 fontDescriptionRun03.slantDefined = false;
3938 fontDescriptionRun03.sizeDefined = false;
3940 FontDescriptionRun fontDescriptionRun04;
3941 fontDescriptionRun04.characterRun.characterIndex = 36u;
3942 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3943 fontDescriptionRun04.familyLength = fontLatin.size();
3944 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3945 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3946 fontDescriptionRun04.familyDefined = true;
3947 fontDescriptionRun04.weightDefined = false;
3948 fontDescriptionRun04.widthDefined = false;
3949 fontDescriptionRun04.slantDefined = false;
3950 fontDescriptionRun04.sizeDefined = false;
3952 FontDescriptionRun fontDescriptionRun05;
3953 fontDescriptionRun05.characterRun.characterIndex = 48u;
3954 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3955 fontDescriptionRun05.familyLength = fontLatin.size();
3956 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3957 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3958 fontDescriptionRun05.familyDefined = true;
3959 fontDescriptionRun05.weightDefined = false;
3960 fontDescriptionRun05.widthDefined = false;
3961 fontDescriptionRun05.slantDefined = false;
3962 fontDescriptionRun05.sizeDefined = false;
3964 FontDescriptionRun fontDescriptionRun06;
3965 fontDescriptionRun06.characterRun.characterIndex = 60u;
3966 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3967 fontDescriptionRun06.familyLength = fontArabic.size();
3968 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3969 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3970 fontDescriptionRun06.familyDefined = true;
3971 fontDescriptionRun06.weightDefined = false;
3972 fontDescriptionRun06.widthDefined = false;
3973 fontDescriptionRun06.slantDefined = false;
3974 fontDescriptionRun06.sizeDefined = false;
3976 Vector<FontDescriptionRun> fontDescriptionRuns;
3977 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3978 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3979 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3980 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3981 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3982 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3984 float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
3986 Size textArea( 100.f, 300.f );
3989 "Begin alignment for the mid paragraph.",
3990 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3993 fontDescriptionRuns.Begin(),
3994 Text::HorizontalAlignment::BEGIN,
3995 Text::VerticalAlignment::TOP,
4000 Dali::LayoutDirection::LEFT_TO_RIGHT,
4004 if( !AlignTest( data ) )
4006 tet_result(TET_FAIL);
4009 tet_result(TET_PASS);
4013 int UtcDaliTextAlign03(void)
4015 ToolkitTestApplication application;
4016 tet_infoline(" UtcDaliTextAlign03");
4018 // Calculate text alignment.
4020 const std::string fontLatin( "TizenSans" );
4021 const std::string fontHebrew( "TizenSansHebrew" );
4022 const std::string fontArabic( "TizenSansArabic" );
4024 // Set a known font description
4025 FontDescriptionRun fontDescriptionRun01;
4026 fontDescriptionRun01.characterRun.characterIndex = 0u;
4027 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4028 fontDescriptionRun01.familyLength = fontLatin.size();
4029 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4030 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4031 fontDescriptionRun01.familyDefined = true;
4032 fontDescriptionRun01.weightDefined = false;
4033 fontDescriptionRun01.widthDefined = false;
4034 fontDescriptionRun01.slantDefined = false;
4035 fontDescriptionRun01.sizeDefined = false;
4037 FontDescriptionRun fontDescriptionRun02;
4038 fontDescriptionRun02.characterRun.characterIndex = 12u;
4039 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4040 fontDescriptionRun02.familyLength = fontHebrew.size();
4041 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4042 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4043 fontDescriptionRun02.familyDefined = true;
4044 fontDescriptionRun02.weightDefined = false;
4045 fontDescriptionRun02.widthDefined = false;
4046 fontDescriptionRun02.slantDefined = false;
4047 fontDescriptionRun02.sizeDefined = false;
4049 FontDescriptionRun fontDescriptionRun03;
4050 fontDescriptionRun03.characterRun.characterIndex = 22u;
4051 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4052 fontDescriptionRun03.familyLength = fontArabic.size();
4053 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4054 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4055 fontDescriptionRun03.familyDefined = true;
4056 fontDescriptionRun03.weightDefined = false;
4057 fontDescriptionRun03.widthDefined = false;
4058 fontDescriptionRun03.slantDefined = false;
4059 fontDescriptionRun03.sizeDefined = false;
4061 FontDescriptionRun fontDescriptionRun04;
4062 fontDescriptionRun04.characterRun.characterIndex = 36u;
4063 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4064 fontDescriptionRun04.familyLength = fontLatin.size();
4065 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4066 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4067 fontDescriptionRun04.familyDefined = true;
4068 fontDescriptionRun04.weightDefined = false;
4069 fontDescriptionRun04.widthDefined = false;
4070 fontDescriptionRun04.slantDefined = false;
4071 fontDescriptionRun04.sizeDefined = false;
4073 FontDescriptionRun fontDescriptionRun05;
4074 fontDescriptionRun05.characterRun.characterIndex = 48u;
4075 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4076 fontDescriptionRun05.familyLength = fontLatin.size();
4077 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4078 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4079 fontDescriptionRun05.familyDefined = true;
4080 fontDescriptionRun05.weightDefined = false;
4081 fontDescriptionRun05.widthDefined = false;
4082 fontDescriptionRun05.slantDefined = false;
4083 fontDescriptionRun05.sizeDefined = false;
4085 FontDescriptionRun fontDescriptionRun06;
4086 fontDescriptionRun06.characterRun.characterIndex = 60u;
4087 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4088 fontDescriptionRun06.familyLength = fontArabic.size();
4089 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4090 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4091 fontDescriptionRun06.familyDefined = true;
4092 fontDescriptionRun06.weightDefined = false;
4093 fontDescriptionRun06.widthDefined = false;
4094 fontDescriptionRun06.slantDefined = false;
4095 fontDescriptionRun06.sizeDefined = false;
4097 Vector<FontDescriptionRun> fontDescriptionRuns;
4098 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4099 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4100 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4101 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4102 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4103 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4105 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4107 Size textArea( 100.f, 300.f );
4110 "Begin alignment for the last paragraph.",
4111 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4114 fontDescriptionRuns.Begin(),
4115 Text::HorizontalAlignment::BEGIN,
4116 Text::VerticalAlignment::TOP,
4121 Dali::LayoutDirection::LEFT_TO_RIGHT,
4125 if( !AlignTest( data ) )
4127 tet_result(TET_FAIL);
4130 tet_result(TET_PASS);
4134 int UtcDaliTextAlign04(void)
4136 ToolkitTestApplication application;
4137 tet_infoline(" UtcDaliTextAlign04");
4139 // Calculate text alignment.
4141 const std::string fontLatin( "TizenSans" );
4142 const std::string fontHebrew( "TizenSansHebrew" );
4143 const std::string fontArabic( "TizenSansArabic" );
4145 // Set a known font description
4146 FontDescriptionRun fontDescriptionRun01;
4147 fontDescriptionRun01.characterRun.characterIndex = 0u;
4148 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4149 fontDescriptionRun01.familyLength = fontLatin.size();
4150 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4151 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4152 fontDescriptionRun01.familyDefined = true;
4153 fontDescriptionRun01.weightDefined = false;
4154 fontDescriptionRun01.widthDefined = false;
4155 fontDescriptionRun01.slantDefined = false;
4156 fontDescriptionRun01.sizeDefined = false;
4158 FontDescriptionRun fontDescriptionRun02;
4159 fontDescriptionRun02.characterRun.characterIndex = 12u;
4160 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4161 fontDescriptionRun02.familyLength = fontHebrew.size();
4162 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4163 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4164 fontDescriptionRun02.familyDefined = true;
4165 fontDescriptionRun02.weightDefined = false;
4166 fontDescriptionRun02.widthDefined = false;
4167 fontDescriptionRun02.slantDefined = false;
4168 fontDescriptionRun02.sizeDefined = false;
4170 FontDescriptionRun fontDescriptionRun03;
4171 fontDescriptionRun03.characterRun.characterIndex = 22u;
4172 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4173 fontDescriptionRun03.familyLength = fontArabic.size();
4174 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4175 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4176 fontDescriptionRun03.familyDefined = true;
4177 fontDescriptionRun03.weightDefined = false;
4178 fontDescriptionRun03.widthDefined = false;
4179 fontDescriptionRun03.slantDefined = false;
4180 fontDescriptionRun03.sizeDefined = false;
4182 FontDescriptionRun fontDescriptionRun04;
4183 fontDescriptionRun04.characterRun.characterIndex = 36u;
4184 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4185 fontDescriptionRun04.familyLength = fontLatin.size();
4186 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4187 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4188 fontDescriptionRun04.familyDefined = true;
4189 fontDescriptionRun04.weightDefined = false;
4190 fontDescriptionRun04.widthDefined = false;
4191 fontDescriptionRun04.slantDefined = false;
4192 fontDescriptionRun04.sizeDefined = false;
4194 FontDescriptionRun fontDescriptionRun05;
4195 fontDescriptionRun05.characterRun.characterIndex = 48u;
4196 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4197 fontDescriptionRun05.familyLength = fontLatin.size();
4198 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4199 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4200 fontDescriptionRun05.familyDefined = true;
4201 fontDescriptionRun05.weightDefined = false;
4202 fontDescriptionRun05.widthDefined = false;
4203 fontDescriptionRun05.slantDefined = false;
4204 fontDescriptionRun05.sizeDefined = false;
4206 FontDescriptionRun fontDescriptionRun06;
4207 fontDescriptionRun06.characterRun.characterIndex = 60u;
4208 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4209 fontDescriptionRun06.familyLength = fontArabic.size();
4210 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4211 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4212 fontDescriptionRun06.familyDefined = true;
4213 fontDescriptionRun06.weightDefined = false;
4214 fontDescriptionRun06.widthDefined = false;
4215 fontDescriptionRun06.slantDefined = false;
4216 fontDescriptionRun06.sizeDefined = false;
4218 Vector<FontDescriptionRun> fontDescriptionRuns;
4219 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4220 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4221 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4222 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4223 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4224 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4226 float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
4228 Size textArea( 100.f, 300.f );
4231 "Center alignment for the first paragraph.",
4232 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4235 fontDescriptionRuns.Begin(),
4236 Text::HorizontalAlignment::CENTER,
4237 Text::VerticalAlignment::TOP,
4242 Dali::LayoutDirection::LEFT_TO_RIGHT,
4246 if( !AlignTest( data ) )
4248 tet_result(TET_FAIL);
4251 tet_result(TET_PASS);
4255 int UtcDaliTextAlign05(void)
4257 ToolkitTestApplication application;
4258 tet_infoline(" UtcDaliTextAlign05");
4260 // Calculate text alignment.
4262 const std::string fontLatin( "TizenSans" );
4263 const std::string fontHebrew( "TizenSansHebrew" );
4264 const std::string fontArabic( "TizenSansArabic" );
4266 // Set a known font description
4267 FontDescriptionRun fontDescriptionRun01;
4268 fontDescriptionRun01.characterRun.characterIndex = 0u;
4269 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4270 fontDescriptionRun01.familyLength = fontLatin.size();
4271 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4272 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4273 fontDescriptionRun01.familyDefined = true;
4274 fontDescriptionRun01.weightDefined = false;
4275 fontDescriptionRun01.widthDefined = false;
4276 fontDescriptionRun01.slantDefined = false;
4277 fontDescriptionRun01.sizeDefined = false;
4279 FontDescriptionRun fontDescriptionRun02;
4280 fontDescriptionRun02.characterRun.characterIndex = 12u;
4281 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4282 fontDescriptionRun02.familyLength = fontHebrew.size();
4283 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4284 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4285 fontDescriptionRun02.familyDefined = true;
4286 fontDescriptionRun02.weightDefined = false;
4287 fontDescriptionRun02.widthDefined = false;
4288 fontDescriptionRun02.slantDefined = false;
4289 fontDescriptionRun02.sizeDefined = false;
4291 FontDescriptionRun fontDescriptionRun03;
4292 fontDescriptionRun03.characterRun.characterIndex = 22u;
4293 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4294 fontDescriptionRun03.familyLength = fontArabic.size();
4295 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4296 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4297 fontDescriptionRun03.familyDefined = true;
4298 fontDescriptionRun03.weightDefined = false;
4299 fontDescriptionRun03.widthDefined = false;
4300 fontDescriptionRun03.slantDefined = false;
4301 fontDescriptionRun03.sizeDefined = false;
4303 FontDescriptionRun fontDescriptionRun04;
4304 fontDescriptionRun04.characterRun.characterIndex = 36u;
4305 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4306 fontDescriptionRun04.familyLength = fontLatin.size();
4307 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4308 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4309 fontDescriptionRun04.familyDefined = true;
4310 fontDescriptionRun04.weightDefined = false;
4311 fontDescriptionRun04.widthDefined = false;
4312 fontDescriptionRun04.slantDefined = false;
4313 fontDescriptionRun04.sizeDefined = false;
4315 FontDescriptionRun fontDescriptionRun05;
4316 fontDescriptionRun05.characterRun.characterIndex = 48u;
4317 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4318 fontDescriptionRun05.familyLength = fontLatin.size();
4319 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4320 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4321 fontDescriptionRun05.familyDefined = true;
4322 fontDescriptionRun05.weightDefined = false;
4323 fontDescriptionRun05.widthDefined = false;
4324 fontDescriptionRun05.slantDefined = false;
4325 fontDescriptionRun05.sizeDefined = false;
4327 FontDescriptionRun fontDescriptionRun06;
4328 fontDescriptionRun06.characterRun.characterIndex = 60u;
4329 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4330 fontDescriptionRun06.familyLength = fontArabic.size();
4331 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4332 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4333 fontDescriptionRun06.familyDefined = true;
4334 fontDescriptionRun06.weightDefined = false;
4335 fontDescriptionRun06.widthDefined = false;
4336 fontDescriptionRun06.slantDefined = false;
4337 fontDescriptionRun06.sizeDefined = false;
4339 Vector<FontDescriptionRun> fontDescriptionRuns;
4340 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4341 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4342 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4343 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4344 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4345 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4347 float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
4349 Size textArea( 100.f, 300.f );
4352 "Center alignment for the mid paragraph.",
4353 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4356 fontDescriptionRuns.Begin(),
4357 Text::HorizontalAlignment::CENTER,
4358 Text::VerticalAlignment::TOP,
4363 Dali::LayoutDirection::LEFT_TO_RIGHT,
4367 if( !AlignTest( data ) )
4369 tet_result(TET_FAIL);
4372 tet_result(TET_PASS);
4376 int UtcDaliTextAlign06(void)
4378 ToolkitTestApplication application;
4379 tet_infoline(" UtcDaliTextAlign06");
4381 // Calculate text alignment.
4383 const std::string fontLatin( "TizenSans" );
4384 const std::string fontHebrew( "TizenSansHebrew" );
4385 const std::string fontArabic( "TizenSansArabic" );
4387 // Set a known font description
4388 FontDescriptionRun fontDescriptionRun01;
4389 fontDescriptionRun01.characterRun.characterIndex = 0u;
4390 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4391 fontDescriptionRun01.familyLength = fontLatin.size();
4392 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4393 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4394 fontDescriptionRun01.familyDefined = true;
4395 fontDescriptionRun01.weightDefined = false;
4396 fontDescriptionRun01.widthDefined = false;
4397 fontDescriptionRun01.slantDefined = false;
4398 fontDescriptionRun01.sizeDefined = false;
4400 FontDescriptionRun fontDescriptionRun02;
4401 fontDescriptionRun02.characterRun.characterIndex = 12u;
4402 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4403 fontDescriptionRun02.familyLength = fontHebrew.size();
4404 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4405 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4406 fontDescriptionRun02.familyDefined = true;
4407 fontDescriptionRun02.weightDefined = false;
4408 fontDescriptionRun02.widthDefined = false;
4409 fontDescriptionRun02.slantDefined = false;
4410 fontDescriptionRun02.sizeDefined = false;
4412 FontDescriptionRun fontDescriptionRun03;
4413 fontDescriptionRun03.characterRun.characterIndex = 22u;
4414 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4415 fontDescriptionRun03.familyLength = fontArabic.size();
4416 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4417 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4418 fontDescriptionRun03.familyDefined = true;
4419 fontDescriptionRun03.weightDefined = false;
4420 fontDescriptionRun03.widthDefined = false;
4421 fontDescriptionRun03.slantDefined = false;
4422 fontDescriptionRun03.sizeDefined = false;
4424 FontDescriptionRun fontDescriptionRun04;
4425 fontDescriptionRun04.characterRun.characterIndex = 36u;
4426 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4427 fontDescriptionRun04.familyLength = fontLatin.size();
4428 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4429 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4430 fontDescriptionRun04.familyDefined = true;
4431 fontDescriptionRun04.weightDefined = false;
4432 fontDescriptionRun04.widthDefined = false;
4433 fontDescriptionRun04.slantDefined = false;
4434 fontDescriptionRun04.sizeDefined = false;
4436 FontDescriptionRun fontDescriptionRun05;
4437 fontDescriptionRun05.characterRun.characterIndex = 48u;
4438 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4439 fontDescriptionRun05.familyLength = fontLatin.size();
4440 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4441 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4442 fontDescriptionRun05.familyDefined = true;
4443 fontDescriptionRun05.weightDefined = false;
4444 fontDescriptionRun05.widthDefined = false;
4445 fontDescriptionRun05.slantDefined = false;
4446 fontDescriptionRun05.sizeDefined = false;
4448 FontDescriptionRun fontDescriptionRun06;
4449 fontDescriptionRun06.characterRun.characterIndex = 60u;
4450 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4451 fontDescriptionRun06.familyLength = fontArabic.size();
4452 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4453 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4454 fontDescriptionRun06.familyDefined = true;
4455 fontDescriptionRun06.weightDefined = false;
4456 fontDescriptionRun06.widthDefined = false;
4457 fontDescriptionRun06.slantDefined = false;
4458 fontDescriptionRun06.sizeDefined = false;
4460 Vector<FontDescriptionRun> fontDescriptionRuns;
4461 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4462 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4463 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4464 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4465 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4466 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4468 float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 17.f };
4470 Size textArea( 100.f, 300.f );
4473 "Center alignment for the last paragraph.",
4474 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4477 fontDescriptionRuns.Begin(),
4478 Text::HorizontalAlignment::CENTER,
4479 Text::VerticalAlignment::TOP,
4484 Dali::LayoutDirection::LEFT_TO_RIGHT,
4488 if( !AlignTest( data ) )
4490 tet_result(TET_FAIL);
4493 tet_result(TET_PASS);
4497 int UtcDaliTextAlign07(void)
4499 ToolkitTestApplication application;
4500 tet_infoline(" UtcDaliTextAlign07");
4502 // Calculate text alignment.
4504 const std::string fontLatin( "TizenSans" );
4505 const std::string fontHebrew( "TizenSansHebrew" );
4506 const std::string fontArabic( "TizenSansArabic" );
4508 // Set a known font description
4509 FontDescriptionRun fontDescriptionRun01;
4510 fontDescriptionRun01.characterRun.characterIndex = 0u;
4511 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4512 fontDescriptionRun01.familyLength = fontLatin.size();
4513 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4514 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4515 fontDescriptionRun01.familyDefined = true;
4516 fontDescriptionRun01.weightDefined = false;
4517 fontDescriptionRun01.widthDefined = false;
4518 fontDescriptionRun01.slantDefined = false;
4519 fontDescriptionRun01.sizeDefined = false;
4521 FontDescriptionRun fontDescriptionRun02;
4522 fontDescriptionRun02.characterRun.characterIndex = 12u;
4523 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4524 fontDescriptionRun02.familyLength = fontHebrew.size();
4525 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4526 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4527 fontDescriptionRun02.familyDefined = true;
4528 fontDescriptionRun02.weightDefined = false;
4529 fontDescriptionRun02.widthDefined = false;
4530 fontDescriptionRun02.slantDefined = false;
4531 fontDescriptionRun02.sizeDefined = false;
4533 FontDescriptionRun fontDescriptionRun03;
4534 fontDescriptionRun03.characterRun.characterIndex = 22u;
4535 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4536 fontDescriptionRun03.familyLength = fontArabic.size();
4537 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4538 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4539 fontDescriptionRun03.familyDefined = true;
4540 fontDescriptionRun03.weightDefined = false;
4541 fontDescriptionRun03.widthDefined = false;
4542 fontDescriptionRun03.slantDefined = false;
4543 fontDescriptionRun03.sizeDefined = false;
4545 FontDescriptionRun fontDescriptionRun04;
4546 fontDescriptionRun04.characterRun.characterIndex = 36u;
4547 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4548 fontDescriptionRun04.familyLength = fontLatin.size();
4549 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4550 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4551 fontDescriptionRun04.familyDefined = true;
4552 fontDescriptionRun04.weightDefined = false;
4553 fontDescriptionRun04.widthDefined = false;
4554 fontDescriptionRun04.slantDefined = false;
4555 fontDescriptionRun04.sizeDefined = false;
4557 FontDescriptionRun fontDescriptionRun05;
4558 fontDescriptionRun05.characterRun.characterIndex = 48u;
4559 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4560 fontDescriptionRun05.familyLength = fontLatin.size();
4561 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4562 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4563 fontDescriptionRun05.familyDefined = true;
4564 fontDescriptionRun05.weightDefined = false;
4565 fontDescriptionRun05.widthDefined = false;
4566 fontDescriptionRun05.slantDefined = false;
4567 fontDescriptionRun05.sizeDefined = false;
4569 FontDescriptionRun fontDescriptionRun06;
4570 fontDescriptionRun06.characterRun.characterIndex = 60u;
4571 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4572 fontDescriptionRun06.familyLength = fontArabic.size();
4573 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4574 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4575 fontDescriptionRun06.familyDefined = true;
4576 fontDescriptionRun06.weightDefined = false;
4577 fontDescriptionRun06.widthDefined = false;
4578 fontDescriptionRun06.slantDefined = false;
4579 fontDescriptionRun06.sizeDefined = false;
4581 Vector<FontDescriptionRun> fontDescriptionRuns;
4582 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4583 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4584 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4585 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4586 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4587 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4589 float positions[] = { 19.f, 31.f, 0.f, 0.f, 0.f, 0.f };
4591 Size textArea( 100.f, 300.f );
4594 "End alignment for the first paragraph.",
4595 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4598 fontDescriptionRuns.Begin(),
4599 Text::HorizontalAlignment::END,
4600 Text::VerticalAlignment::TOP,
4605 Dali::LayoutDirection::LEFT_TO_RIGHT,
4609 if( !AlignTest( data ) )
4611 tet_result(TET_FAIL);
4614 tet_result(TET_PASS);
4618 int UtcDaliTextAlign08(void)
4620 ToolkitTestApplication application;
4621 tet_infoline(" UtcDaliTextAlign08");
4623 // Calculate text alignment.
4625 const std::string fontLatin( "TizenSans" );
4626 const std::string fontHebrew( "TizenSansHebrew" );
4627 const std::string fontArabic( "TizenSansArabic" );
4629 // Set a known font description
4630 FontDescriptionRun fontDescriptionRun01;
4631 fontDescriptionRun01.characterRun.characterIndex = 0u;
4632 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4633 fontDescriptionRun01.familyLength = fontLatin.size();
4634 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4635 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4636 fontDescriptionRun01.familyDefined = true;
4637 fontDescriptionRun01.weightDefined = false;
4638 fontDescriptionRun01.widthDefined = false;
4639 fontDescriptionRun01.slantDefined = false;
4640 fontDescriptionRun01.sizeDefined = false;
4642 FontDescriptionRun fontDescriptionRun02;
4643 fontDescriptionRun02.characterRun.characterIndex = 12u;
4644 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4645 fontDescriptionRun02.familyLength = fontHebrew.size();
4646 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4647 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4648 fontDescriptionRun02.familyDefined = true;
4649 fontDescriptionRun02.weightDefined = false;
4650 fontDescriptionRun02.widthDefined = false;
4651 fontDescriptionRun02.slantDefined = false;
4652 fontDescriptionRun02.sizeDefined = false;
4654 FontDescriptionRun fontDescriptionRun03;
4655 fontDescriptionRun03.characterRun.characterIndex = 22u;
4656 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4657 fontDescriptionRun03.familyLength = fontArabic.size();
4658 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4659 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4660 fontDescriptionRun03.familyDefined = true;
4661 fontDescriptionRun03.weightDefined = false;
4662 fontDescriptionRun03.widthDefined = false;
4663 fontDescriptionRun03.slantDefined = false;
4664 fontDescriptionRun03.sizeDefined = false;
4666 FontDescriptionRun fontDescriptionRun04;
4667 fontDescriptionRun04.characterRun.characterIndex = 36u;
4668 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4669 fontDescriptionRun04.familyLength = fontLatin.size();
4670 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4671 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4672 fontDescriptionRun04.familyDefined = true;
4673 fontDescriptionRun04.weightDefined = false;
4674 fontDescriptionRun04.widthDefined = false;
4675 fontDescriptionRun04.slantDefined = false;
4676 fontDescriptionRun04.sizeDefined = false;
4678 FontDescriptionRun fontDescriptionRun05;
4679 fontDescriptionRun05.characterRun.characterIndex = 48u;
4680 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4681 fontDescriptionRun05.familyLength = fontLatin.size();
4682 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4683 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4684 fontDescriptionRun05.familyDefined = true;
4685 fontDescriptionRun05.weightDefined = false;
4686 fontDescriptionRun05.widthDefined = false;
4687 fontDescriptionRun05.slantDefined = false;
4688 fontDescriptionRun05.sizeDefined = false;
4690 FontDescriptionRun fontDescriptionRun06;
4691 fontDescriptionRun06.characterRun.characterIndex = 60u;
4692 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4693 fontDescriptionRun06.familyLength = fontArabic.size();
4694 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4695 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4696 fontDescriptionRun06.familyDefined = true;
4697 fontDescriptionRun06.weightDefined = false;
4698 fontDescriptionRun06.widthDefined = false;
4699 fontDescriptionRun06.slantDefined = false;
4700 fontDescriptionRun06.sizeDefined = false;
4702 Vector<FontDescriptionRun> fontDescriptionRuns;
4703 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4704 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4705 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4706 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4707 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4708 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4710 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4712 Size textArea( 100.f, 300.f );
4715 "End alignment for the mid paragraph.",
4716 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4719 fontDescriptionRuns.Begin(),
4720 Text::HorizontalAlignment::END,
4721 Text::VerticalAlignment::TOP,
4726 Dali::LayoutDirection::LEFT_TO_RIGHT,
4730 if( !AlignTest( data ) )
4732 tet_result(TET_FAIL);
4735 tet_result(TET_PASS);
4739 int UtcDaliTextAlign09(void)
4741 ToolkitTestApplication application;
4742 tet_infoline(" UtcDaliTextAlign09");
4744 // Calculate text alignment.
4746 const std::string fontLatin( "TizenSans" );
4747 const std::string fontHebrew( "TizenSansHebrew" );
4748 const std::string fontArabic( "TizenSansArabic" );
4750 // Set a known font description
4751 FontDescriptionRun fontDescriptionRun01;
4752 fontDescriptionRun01.characterRun.characterIndex = 0u;
4753 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4754 fontDescriptionRun01.familyLength = fontLatin.size();
4755 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4756 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4757 fontDescriptionRun01.familyDefined = true;
4758 fontDescriptionRun01.weightDefined = false;
4759 fontDescriptionRun01.widthDefined = false;
4760 fontDescriptionRun01.slantDefined = false;
4761 fontDescriptionRun01.sizeDefined = false;
4763 FontDescriptionRun fontDescriptionRun02;
4764 fontDescriptionRun02.characterRun.characterIndex = 12u;
4765 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4766 fontDescriptionRun02.familyLength = fontHebrew.size();
4767 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4768 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4769 fontDescriptionRun02.familyDefined = true;
4770 fontDescriptionRun02.weightDefined = false;
4771 fontDescriptionRun02.widthDefined = false;
4772 fontDescriptionRun02.slantDefined = false;
4773 fontDescriptionRun02.sizeDefined = false;
4775 FontDescriptionRun fontDescriptionRun03;
4776 fontDescriptionRun03.characterRun.characterIndex = 22u;
4777 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4778 fontDescriptionRun03.familyLength = fontArabic.size();
4779 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4780 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4781 fontDescriptionRun03.familyDefined = true;
4782 fontDescriptionRun03.weightDefined = false;
4783 fontDescriptionRun03.widthDefined = false;
4784 fontDescriptionRun03.slantDefined = false;
4785 fontDescriptionRun03.sizeDefined = false;
4787 FontDescriptionRun fontDescriptionRun04;
4788 fontDescriptionRun04.characterRun.characterIndex = 36u;
4789 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4790 fontDescriptionRun04.familyLength = fontLatin.size();
4791 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4792 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4793 fontDescriptionRun04.familyDefined = true;
4794 fontDescriptionRun04.weightDefined = false;
4795 fontDescriptionRun04.widthDefined = false;
4796 fontDescriptionRun04.slantDefined = false;
4797 fontDescriptionRun04.sizeDefined = false;
4799 FontDescriptionRun fontDescriptionRun05;
4800 fontDescriptionRun05.characterRun.characterIndex = 48u;
4801 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4802 fontDescriptionRun05.familyLength = fontLatin.size();
4803 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4804 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4805 fontDescriptionRun05.familyDefined = true;
4806 fontDescriptionRun05.weightDefined = false;
4807 fontDescriptionRun05.widthDefined = false;
4808 fontDescriptionRun05.slantDefined = false;
4809 fontDescriptionRun05.sizeDefined = false;
4811 FontDescriptionRun fontDescriptionRun06;
4812 fontDescriptionRun06.characterRun.characterIndex = 60u;
4813 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4814 fontDescriptionRun06.familyLength = fontArabic.size();
4815 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4816 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4817 fontDescriptionRun06.familyDefined = true;
4818 fontDescriptionRun06.weightDefined = false;
4819 fontDescriptionRun06.widthDefined = false;
4820 fontDescriptionRun06.slantDefined = false;
4821 fontDescriptionRun06.sizeDefined = false;
4823 Vector<FontDescriptionRun> fontDescriptionRuns;
4824 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4825 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4826 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4827 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4828 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4829 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4831 float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 34.f };
4833 Size textArea( 100.f, 300.f );
4836 "End alignment for the last paragraph.",
4837 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4840 fontDescriptionRuns.Begin(),
4841 Text::HorizontalAlignment::END,
4842 Text::VerticalAlignment::TOP,
4847 Dali::LayoutDirection::LEFT_TO_RIGHT,
4851 if( !AlignTest( data ) )
4853 tet_result(TET_FAIL);
4856 tet_result(TET_PASS);
4860 int UtcDaliTextAlign10(void)
4862 ToolkitTestApplication application;
4863 tet_infoline(" UtcDaliTextAlign10");
4865 // Calculate text alignment.
4867 const std::string fontLatin( "TizenSans" );
4868 const std::string fontHebrew( "TizenSansHebrew" );
4869 const std::string fontArabic( "TizenSansArabic" );
4871 // Set a known font description
4872 FontDescriptionRun fontDescriptionRun01;
4873 fontDescriptionRun01.characterRun.characterIndex = 0u;
4874 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4875 fontDescriptionRun01.familyLength = fontLatin.size();
4876 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4877 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4878 fontDescriptionRun01.familyDefined = true;
4879 fontDescriptionRun01.weightDefined = false;
4880 fontDescriptionRun01.widthDefined = false;
4881 fontDescriptionRun01.slantDefined = false;
4882 fontDescriptionRun01.sizeDefined = false;
4884 FontDescriptionRun fontDescriptionRun02;
4885 fontDescriptionRun02.characterRun.characterIndex = 12u;
4886 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4887 fontDescriptionRun02.familyLength = fontHebrew.size();
4888 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4889 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4890 fontDescriptionRun02.familyDefined = true;
4891 fontDescriptionRun02.weightDefined = false;
4892 fontDescriptionRun02.widthDefined = false;
4893 fontDescriptionRun02.slantDefined = false;
4894 fontDescriptionRun02.sizeDefined = false;
4896 FontDescriptionRun fontDescriptionRun03;
4897 fontDescriptionRun03.characterRun.characterIndex = 22u;
4898 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4899 fontDescriptionRun03.familyLength = fontArabic.size();
4900 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4901 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4902 fontDescriptionRun03.familyDefined = true;
4903 fontDescriptionRun03.weightDefined = false;
4904 fontDescriptionRun03.widthDefined = false;
4905 fontDescriptionRun03.slantDefined = false;
4906 fontDescriptionRun03.sizeDefined = false;
4908 FontDescriptionRun fontDescriptionRun04;
4909 fontDescriptionRun04.characterRun.characterIndex = 36u;
4910 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4911 fontDescriptionRun04.familyLength = fontLatin.size();
4912 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4913 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4914 fontDescriptionRun04.familyDefined = true;
4915 fontDescriptionRun04.weightDefined = false;
4916 fontDescriptionRun04.widthDefined = false;
4917 fontDescriptionRun04.slantDefined = false;
4918 fontDescriptionRun04.sizeDefined = false;
4920 FontDescriptionRun fontDescriptionRun05;
4921 fontDescriptionRun05.characterRun.characterIndex = 48u;
4922 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4923 fontDescriptionRun05.familyLength = fontLatin.size();
4924 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4925 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4926 fontDescriptionRun05.familyDefined = true;
4927 fontDescriptionRun05.weightDefined = false;
4928 fontDescriptionRun05.widthDefined = false;
4929 fontDescriptionRun05.slantDefined = false;
4930 fontDescriptionRun05.sizeDefined = false;
4932 FontDescriptionRun fontDescriptionRun06;
4933 fontDescriptionRun06.characterRun.characterIndex = 60u;
4934 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4935 fontDescriptionRun06.familyLength = fontArabic.size();
4936 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4937 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4938 fontDescriptionRun06.familyDefined = true;
4939 fontDescriptionRun06.weightDefined = false;
4940 fontDescriptionRun06.widthDefined = false;
4941 fontDescriptionRun06.slantDefined = false;
4942 fontDescriptionRun06.sizeDefined = false;
4944 Vector<FontDescriptionRun> fontDescriptionRuns;
4945 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4946 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4947 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4948 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4949 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4950 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4952 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4954 Size textArea( 100.f, 300.f );
4957 "Begin alignment for the first paragraph.",
4958 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4961 fontDescriptionRuns.Begin(),
4962 Text::HorizontalAlignment::END,
4963 Text::VerticalAlignment::TOP,
4968 Dali::LayoutDirection::RIGHT_TO_LEFT,
4972 if( !AlignTest( data ) )
4974 tet_result(TET_FAIL);
4977 tet_result(TET_PASS);
4981 int UtcDaliTextAlign11(void)
4983 ToolkitTestApplication application;
4984 tet_infoline(" UtcDaliTextAlign11");
4986 // Calculate text alignment.
4988 const std::string fontLatin( "TizenSans" );
4989 const std::string fontHebrew( "TizenSansHebrew" );
4990 const std::string fontArabic( "TizenSansArabic" );
4992 // Set a known font description
4993 FontDescriptionRun fontDescriptionRun01;
4994 fontDescriptionRun01.characterRun.characterIndex = 0u;
4995 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4996 fontDescriptionRun01.familyLength = fontLatin.size();
4997 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4998 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4999 fontDescriptionRun01.familyDefined = true;
5000 fontDescriptionRun01.weightDefined = false;
5001 fontDescriptionRun01.widthDefined = false;
5002 fontDescriptionRun01.slantDefined = false;
5003 fontDescriptionRun01.sizeDefined = false;
5005 FontDescriptionRun fontDescriptionRun02;
5006 fontDescriptionRun02.characterRun.characterIndex = 12u;
5007 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5008 fontDescriptionRun02.familyLength = fontHebrew.size();
5009 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5010 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5011 fontDescriptionRun02.familyDefined = true;
5012 fontDescriptionRun02.weightDefined = false;
5013 fontDescriptionRun02.widthDefined = false;
5014 fontDescriptionRun02.slantDefined = false;
5015 fontDescriptionRun02.sizeDefined = false;
5017 FontDescriptionRun fontDescriptionRun03;
5018 fontDescriptionRun03.characterRun.characterIndex = 22u;
5019 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5020 fontDescriptionRun03.familyLength = fontArabic.size();
5021 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5022 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5023 fontDescriptionRun03.familyDefined = true;
5024 fontDescriptionRun03.weightDefined = false;
5025 fontDescriptionRun03.widthDefined = false;
5026 fontDescriptionRun03.slantDefined = false;
5027 fontDescriptionRun03.sizeDefined = false;
5029 FontDescriptionRun fontDescriptionRun04;
5030 fontDescriptionRun04.characterRun.characterIndex = 36u;
5031 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5032 fontDescriptionRun04.familyLength = fontLatin.size();
5033 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5034 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5035 fontDescriptionRun04.familyDefined = true;
5036 fontDescriptionRun04.weightDefined = false;
5037 fontDescriptionRun04.widthDefined = false;
5038 fontDescriptionRun04.slantDefined = false;
5039 fontDescriptionRun04.sizeDefined = false;
5041 FontDescriptionRun fontDescriptionRun05;
5042 fontDescriptionRun05.characterRun.characterIndex = 48u;
5043 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5044 fontDescriptionRun05.familyLength = fontLatin.size();
5045 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5046 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5047 fontDescriptionRun05.familyDefined = true;
5048 fontDescriptionRun05.weightDefined = false;
5049 fontDescriptionRun05.widthDefined = false;
5050 fontDescriptionRun05.slantDefined = false;
5051 fontDescriptionRun05.sizeDefined = false;
5053 FontDescriptionRun fontDescriptionRun06;
5054 fontDescriptionRun06.characterRun.characterIndex = 60u;
5055 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5056 fontDescriptionRun06.familyLength = fontArabic.size();
5057 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5058 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5059 fontDescriptionRun06.familyDefined = true;
5060 fontDescriptionRun06.weightDefined = false;
5061 fontDescriptionRun06.widthDefined = false;
5062 fontDescriptionRun06.slantDefined = false;
5063 fontDescriptionRun06.sizeDefined = false;
5065 Vector<FontDescriptionRun> fontDescriptionRuns;
5066 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5067 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5068 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5069 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5070 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5071 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5073 float positions[] = { 19.f, 31.f, 33.f, 0.f, 0.f, 0.f };
5075 Size textArea( 100.f, 300.f );
5078 "End alignment for the last paragraph.",
5079 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5082 fontDescriptionRuns.Begin(),
5083 Text::HorizontalAlignment::END,
5084 Text::VerticalAlignment::TOP,
5089 Dali::LayoutDirection::LEFT_TO_RIGHT,
5093 if( !AlignTest( data ) )
5095 tet_result(TET_FAIL);
5098 tet_result(TET_PASS);
5102 int UtcDaliTextAlign12(void)
5104 ToolkitTestApplication application;
5105 tet_infoline(" UtcDaliTextAlign12");
5107 // Calculate text alignment.
5109 const std::string fontLatin( "TizenSans" );
5110 const std::string fontHebrew( "TizenSansHebrew" );
5111 const std::string fontArabic( "TizenSansArabic" );
5113 // Set a known font description
5114 FontDescriptionRun fontDescriptionRun01;
5115 fontDescriptionRun01.characterRun.characterIndex = 0u;
5116 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5117 fontDescriptionRun01.familyLength = fontLatin.size();
5118 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5119 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5120 fontDescriptionRun01.familyDefined = true;
5121 fontDescriptionRun01.weightDefined = false;
5122 fontDescriptionRun01.widthDefined = false;
5123 fontDescriptionRun01.slantDefined = false;
5124 fontDescriptionRun01.sizeDefined = false;
5126 FontDescriptionRun fontDescriptionRun02;
5127 fontDescriptionRun02.characterRun.characterIndex = 12u;
5128 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5129 fontDescriptionRun02.familyLength = fontHebrew.size();
5130 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5131 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5132 fontDescriptionRun02.familyDefined = true;
5133 fontDescriptionRun02.weightDefined = false;
5134 fontDescriptionRun02.widthDefined = false;
5135 fontDescriptionRun02.slantDefined = false;
5136 fontDescriptionRun02.sizeDefined = false;
5138 FontDescriptionRun fontDescriptionRun03;
5139 fontDescriptionRun03.characterRun.characterIndex = 22u;
5140 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5141 fontDescriptionRun03.familyLength = fontArabic.size();
5142 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5143 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5144 fontDescriptionRun03.familyDefined = true;
5145 fontDescriptionRun03.weightDefined = false;
5146 fontDescriptionRun03.widthDefined = false;
5147 fontDescriptionRun03.slantDefined = false;
5148 fontDescriptionRun03.sizeDefined = false;
5150 FontDescriptionRun fontDescriptionRun04;
5151 fontDescriptionRun04.characterRun.characterIndex = 36u;
5152 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5153 fontDescriptionRun04.familyLength = fontLatin.size();
5154 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5155 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5156 fontDescriptionRun04.familyDefined = true;
5157 fontDescriptionRun04.weightDefined = false;
5158 fontDescriptionRun04.widthDefined = false;
5159 fontDescriptionRun04.slantDefined = false;
5160 fontDescriptionRun04.sizeDefined = false;
5162 FontDescriptionRun fontDescriptionRun05;
5163 fontDescriptionRun05.characterRun.characterIndex = 48u;
5164 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5165 fontDescriptionRun05.familyLength = fontLatin.size();
5166 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5167 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5168 fontDescriptionRun05.familyDefined = true;
5169 fontDescriptionRun05.weightDefined = false;
5170 fontDescriptionRun05.widthDefined = false;
5171 fontDescriptionRun05.slantDefined = false;
5172 fontDescriptionRun05.sizeDefined = false;
5174 FontDescriptionRun fontDescriptionRun06;
5175 fontDescriptionRun06.characterRun.characterIndex = 60u;
5176 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5177 fontDescriptionRun06.familyLength = fontArabic.size();
5178 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5179 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5180 fontDescriptionRun06.familyDefined = true;
5181 fontDescriptionRun06.weightDefined = false;
5182 fontDescriptionRun06.widthDefined = false;
5183 fontDescriptionRun06.slantDefined = false;
5184 fontDescriptionRun06.sizeDefined = false;
5186 Vector<FontDescriptionRun> fontDescriptionRuns;
5187 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5188 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5189 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5190 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5191 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5192 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5194 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
5196 Size textArea( 100.f, 300.f );
5199 "Begin alignment for the first paragraph.",
5200 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5203 fontDescriptionRuns.Begin(),
5204 Text::HorizontalAlignment::BEGIN,
5205 Text::VerticalAlignment::TOP,
5210 Dali::LayoutDirection::LEFT_TO_RIGHT,
5214 if( !AlignTest( data ) )
5216 tet_result(TET_FAIL);
5219 tet_result(TET_PASS);
5223 int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
5225 ToolkitTestApplication application;
5226 tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
5228 Layout::Engine engine;
5229 DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5231 engine.SetDefaultLineSpacing( 10.f );
5232 DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5234 tet_result(TET_PASS);
5238 int UtcDaliTextLayoutGetGlyphMetrics(void)
5240 tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
5242 // Test retrieving metrics from group of characters
5244 const std::string fontFamily( "TizenSansHindi" );
5246 // Set a known font description
5247 FontDescriptionRun fontDescriptionRun01;
5248 fontDescriptionRun01.characterRun.characterIndex = 0u;
5249 fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
5250 fontDescriptionRun01.familyLength = fontFamily.size();
5251 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5252 memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
5253 fontDescriptionRun01.familyDefined = true;
5254 fontDescriptionRun01.weightDefined = false;
5255 fontDescriptionRun01.widthDefined = false;
5256 fontDescriptionRun01.slantDefined = false;
5257 fontDescriptionRun01.sizeDefined = false;
5259 // Set a known font description
5260 FontDescriptionRun fontDescriptionRun02;
5261 fontDescriptionRun02.characterRun.characterIndex = 0u;
5262 fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
5263 fontDescriptionRun02.familyLength = fontFamily.size();
5264 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5265 memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
5266 fontDescriptionRun02.familyDefined = true;
5267 fontDescriptionRun02.weightDefined = false;
5268 fontDescriptionRun02.widthDefined = false;
5269 fontDescriptionRun02.slantDefined = false;
5270 fontDescriptionRun02.sizeDefined = false;
5272 // Set a known font description
5273 FontDescriptionRun fontDescriptionRun03;
5274 fontDescriptionRun03.characterRun.characterIndex = 0u;
5275 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
5276 fontDescriptionRun03.familyLength = fontFamily.size();
5277 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5278 memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
5279 fontDescriptionRun03.familyDefined = true;
5280 fontDescriptionRun03.weightDefined = false;
5281 fontDescriptionRun03.widthDefined = false;
5282 fontDescriptionRun03.slantDefined = false;
5283 fontDescriptionRun03.sizeDefined = false;
5285 Vector<FontDescriptionRun> fontDescriptionRuns01;
5286 fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
5288 Vector<FontDescriptionRun> fontDescriptionRuns02;
5289 fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
5291 Vector<FontDescriptionRun> fontDescriptionRuns03;
5292 fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
5295 Size textArea(100.f, 100.f);
5298 // Group: second glyph doesn't exceed the width of the first glyph
5299 float positions01[] = { 0.f, -11.f };
5301 struct LineRun line01 =
5314 Vector<LineRun> lines01;
5315 lines01.PushBack( line01 );
5317 Size layoutSize01 = Vector2(11.f, 19.f);
5319 // Group: second glyph doesn't exceed the width of the first glyph
5320 float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
5322 struct LineRun line02 =
5335 Vector<LineRun> lines02;
5336 lines02.PushBack( line02 );
5338 Size layoutSize02 = Vector2(16.f, 19.f);
5340 // Group: second glyph doesn't exceed the width of the first glyph
5341 float positions03[] = { 0.f, -11.f , 2.f, -15.f };
5343 struct LineRun line03 =
5356 Vector<LineRun> lines03;
5357 lines03.PushBack( line03 );
5359 Size layoutSize03 = Vector2(11.f, 19.f);
5361 /////////////////////////////
5363 struct LayoutTextData data[] =
5370 fontDescriptionRuns01.Begin(),
5376 Layout::Engine::SINGLE_LINE_BOX,
5383 "Group: second glyph exceeds the width of the first glyph",
5387 fontDescriptionRuns02.Begin(),
5393 Layout::Engine::SINGLE_LINE_BOX,
5400 "Group: second glyph doesn't exceed the width of the first glyph",
5404 fontDescriptionRuns03.Begin(),
5410 Layout::Engine::SINGLE_LINE_BOX,
5417 const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
5419 for( unsigned int index = 0u; index < numberOfTests; ++index )
5421 ToolkitTestApplication application;
5422 if( !LayoutTextTest( data[index] ) )
5424 tet_result(TET_FAIL);
5428 tet_result(TET_PASS);