2 * Copyright (c) 2016 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-model.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 LayoutEngine::Layout 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 : " << 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" );
88 // 1) Create the model.
89 LogicalModelPtr logicalModel;
90 VisualModelPtr visualModel;
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.reorder = false;
104 options.align = false;
105 CreateTextModel( data.text,
114 // 2) Clear the layout.
115 Vector<LineRun>& lines = visualModel->mLines;
117 const Length numberOfCharacters = logicalModel->mText.Count();
118 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
119 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
120 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
122 LineIndex startRemoveIndex = 0u;
124 if( 0u != lines.Count() )
126 startRemoveIndex = lines.Count();
127 LineIndex endRemoveIndex = startRemoveIndex;
128 ClearGlyphRuns( data.startIndex,
129 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
134 // Update the character runs of the lines.
135 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
136 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
137 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
138 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
139 ClearCharacterRuns( startCharacterIndex,
140 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
145 lines.Erase( lines.Begin() + startRemoveIndex,
146 lines.Begin() + endRemoveIndex );
149 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
151 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
152 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
156 engine.SetMetrics( metrics );
157 engine.SetTextEllipsisEnabled( data.ellipsis );
158 engine.SetLayout( data.layout );
160 const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
162 LayoutParameters layoutParameters( data.textArea,
163 logicalModel->mText.Begin(),
164 logicalModel->mLineBreakInfo.Begin(),
165 logicalModel->mWordBreakInfo.Begin(),
166 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
167 visualModel->mGlyphs.Begin(),
168 visualModel->mGlyphsToCharacters.Begin(),
169 visualModel->mCharactersPerGlyph.Begin(),
170 visualModel->mCharactersToGlyph.Begin(),
171 visualModel->mGlyphsPerCharacter.Begin(),
172 totalNumberOfGlyphs );
174 layoutParameters.isLastNewParagraph = isLastNewParagraph;
176 // The initial glyph and the number of glyphs to layout.
177 layoutParameters.startGlyphIndex = data.startIndex;
178 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
179 layoutParameters.startLineIndex = startRemoveIndex;
180 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
182 layoutSize = Vector2::ZERO;
184 const bool updated = engine.LayoutText( layoutParameters,
189 // 4) Compare the results.
191 if( updated != data.updated )
193 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
197 if( layoutSize != data.layoutSize )
199 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
203 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
205 const Vector2& position = *( glyphPositions.Begin() + index );
207 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
212 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
214 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
219 if( lines.Count() != data.numberOfLines )
221 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
225 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
227 const LineRun& line = *( lines.Begin() + index );
228 const LineRun& expectedLine = *( data.lines + index );
230 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
232 std::cout << " Different line info for line : " << index << std::endl;
234 std::cout << " expected" << std::endl;
235 Print( expectedLine );
238 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
240 std::cout << " Different line info for line : " << index << std::endl;
242 std::cout << " expected" << std::endl;
243 Print( expectedLine );
247 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
249 std::cout << " Different line info for line : " << index << std::endl;
251 std::cout << " expected" << std::endl;
252 Print( expectedLine );
255 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
257 std::cout << " Different line info for line : " << index << std::endl;
259 std::cout << " expected" << std::endl;
260 Print( expectedLine );
264 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
266 std::cout << " Different line info for line : " << index << std::endl;
268 std::cout << " expected" << std::endl;
269 Print( expectedLine );
273 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
275 std::cout << " Different line info for line : " << index << std::endl;
277 std::cout << " expected" << std::endl;
278 Print( expectedLine );
282 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
284 std::cout << " Different line info for line : " << index << std::endl;
286 std::cout << " expected" << std::endl;
287 Print( expectedLine );
291 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
293 std::cout << " Different line info for line : " << index << std::endl;
295 std::cout << " expected" << std::endl;
296 Print( expectedLine );
300 if( line.ellipsis != expectedLine.ellipsis )
302 std::cout << " Different line info for line : " << index << std::endl;
304 std::cout << " expected" << std::endl;
305 Print( expectedLine );
309 // Do not compare the alignment offset as it's not calculated in the layout.
310 // Do not compare the line direction as it's not set in the layout.
316 //////////////////////////////////////////////////////////
318 struct ReLayoutRightToLeftLinesData
320 std::string description;
323 unsigned int numberOfFonts;
324 FontDescriptionRun* fontDescriptions;
325 unsigned int totalNumberOfGlyphs;
327 unsigned int startIndex;
328 unsigned int numberOfCharacters;
331 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
334 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
335 fontClient.SetDpi( 96u, 96u );
337 char* pathNamePtr = get_current_dir_name();
338 const std::string pathName( pathNamePtr );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
345 // 1) Create the model.
346 LogicalModelPtr logicalModel;
347 VisualModelPtr visualModel;
351 Vector<FontDescriptionRun> fontDescriptionRuns;
352 if( 0u != data.numberOfFonts )
354 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
355 data.fontDescriptions,
356 data.fontDescriptions + data.numberOfFonts );
359 LayoutOptions options;
360 options.reorder = false;
361 options.align = false;
362 CreateTextModel( data.text,
371 // 2) Call the ReLayoutRightToLeftLines() method.
373 engine.SetMetrics( metrics );
375 LayoutParameters layoutParameters( data.textArea,
376 logicalModel->mText.Begin(),
377 logicalModel->mLineBreakInfo.Begin(),
378 logicalModel->mWordBreakInfo.Begin(),
379 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
380 visualModel->mGlyphs.Begin(),
381 visualModel->mGlyphsToCharacters.Begin(),
382 visualModel->mCharactersPerGlyph.Begin(),
383 visualModel->mCharactersToGlyph.Begin(),
384 visualModel->mGlyphsPerCharacter.Begin(),
385 visualModel->mGlyphs.Count() );
387 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
388 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
390 engine.ReLayoutRightToLeftLines( layoutParameters,
392 data.numberOfCharacters,
393 visualModel->mGlyphPositions );
395 // 3) Compare the results.
396 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
398 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
400 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
404 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
406 const Vector2& position = *( glyphPositions.Begin() + index );
408 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
410 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
413 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
415 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
423 //////////////////////////////////////////////////////////
427 std::string description;
430 unsigned int numberOfFonts;
431 FontDescriptionRun* fontDescriptions;
432 LayoutEngine::HorizontalAlignment horizontalAlignment;
433 LayoutEngine::VerticalAlignment verticalAlignment;
434 unsigned int startIndex;
435 unsigned int numberOfCharacters;
436 unsigned int numberOfLines;
440 bool AlignTest( const AlignData& data )
443 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
444 fontClient.SetDpi( 96u, 96u );
446 char* pathNamePtr = get_current_dir_name();
447 const std::string pathName( pathNamePtr );
450 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
451 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
452 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
454 // 1) Create the model.
455 LogicalModelPtr logicalModel;
456 VisualModelPtr visualModel;
460 Vector<FontDescriptionRun> fontDescriptionRuns;
461 if( 0u != data.numberOfFonts )
463 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
464 data.fontDescriptions,
465 data.fontDescriptions + data.numberOfFonts );
468 LayoutOptions options;
469 options.align = false;
470 CreateTextModel( data.text,
479 // Call the Align method.
481 engine.SetMetrics( metrics );
483 engine.SetHorizontalAlignment( data.horizontalAlignment );
484 engine.SetVerticalAlignment( data.verticalAlignment );
486 engine.Align( data.textArea,
488 data.numberOfCharacters,
489 visualModel->mLines );
492 if( data.numberOfLines != visualModel->mLines.Count() )
494 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
498 const LineRun* const linesBuffer = visualModel->mLines.Begin();
499 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
501 const LineRun& line = *( linesBuffer + index );
503 if( line.alignmentOffset != *( data.lineOffsets + index ) )
505 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
515 //////////////////////////////////////////////////////////
517 // UtcDaliTextLayoutSetGetLayout
518 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
519 // UtcDaliTextLayoutSetGetHorizontalAlignment
520 // UtcDaliTextLayoutSetGetVerticalAlignment
521 // UtcDaliTextLayoutSetGetCursorWidth
522 // UtcDaliTextLayoutNoText
523 // UtcDaliTextLayoutSmallTextArea01
524 // UtcDaliTextLayoutSmallTextArea02
525 // UtcDaliTextLayoutMultilineText01
526 // UtcDaliTextLayoutMultilineText02
527 // UtcDaliTextLayoutMultilineText03
528 // UtcDaliTextLayoutMultilineText04
529 // UtcDaliTextLayoutMultilineText05
530 // UtcDaliTextUpdateLayout01
531 // UtcDaliTextUpdateLayout02
532 // UtcDaliTextUpdateLayout03
533 // UtcDaliTextLayoutEllipsis01
534 // UtcDaliTextLayoutEllipsis02
535 // UtcDaliTextLayoutEllipsis03
536 // UtcDaliTextLayoutEllipsis04
537 // UtcDaliTextLayoutEllipsis04
538 // UtcDaliTextReorderLayout01
539 // UtcDaliTextReorderLayout02
540 // UtcDaliTextReorderLayout03
541 // UtcDaliTextReorderLayout04
542 // UtcDaliTextAlign01
543 // UtcDaliTextAlign02
544 // UtcDaliTextAlign03
545 // UtcDaliTextAlign04
546 // UtcDaliTextAlign05
547 // UtcDaliTextAlign06
548 // UtcDaliTextAlign07
549 // UtcDaliTextAlign08
550 // UtcDaliTextAlign09
552 //////////////////////////////////////////////////////////
554 int UtcDaliTextLayoutSetGetLayout(void)
556 ToolkitTestApplication application;
557 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
561 DALI_TEST_CHECK( LayoutEngine::SINGLE_LINE_BOX == engine.GetLayout() );
563 engine.SetLayout( LayoutEngine::MULTI_LINE_BOX );
564 DALI_TEST_CHECK( LayoutEngine::MULTI_LINE_BOX == engine.GetLayout() );
566 tet_result(TET_PASS);
570 int UtcDaliTextLayoutSetGetTextEllipsisEnabled(void)
572 ToolkitTestApplication application;
573 tet_infoline(" UtcDaliTextLayoutSetGetTextEllipsisEnabled");
577 DALI_TEST_CHECK( !engine.GetTextEllipsisEnabled() );
579 engine.SetTextEllipsisEnabled( true );
580 DALI_TEST_CHECK( engine.GetTextEllipsisEnabled() );
582 tet_result(TET_PASS);
586 int UtcDaliTextLayoutSetGetHorizontalAlignment(void)
588 ToolkitTestApplication application;
593 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_BEGIN == engine.GetHorizontalAlignment() );
595 engine.SetHorizontalAlignment( LayoutEngine::HORIZONTAL_ALIGN_END );
596 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_END == engine.GetHorizontalAlignment() );
598 tet_result(TET_PASS);
602 int UtcDaliTextLayoutSetGetVerticalAlignment(void)
604 ToolkitTestApplication application;
605 tet_infoline(" UtcDaliTextLayoutSetGetVerticalAlignment");
609 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
611 engine.SetVerticalAlignment( LayoutEngine::VERTICAL_ALIGN_TOP );
612 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
615 tet_result(TET_PASS);
619 int UtcDaliTextLayoutSetGetCursorWidth(void)
621 ToolkitTestApplication application;
626 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
628 engine.SetCursorWidth( 2 );
629 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
631 tet_result(TET_PASS);
635 int UtcDaliTextLayoutNoText(void)
637 ToolkitTestApplication application;
638 tet_infoline(" UtcDaliTextLayoutNoText");
640 Size textArea(100.f, 60.f);
641 Size layoutSize = Vector2::ZERO;
642 LayoutTextData data =
654 LayoutEngine::MULTI_LINE_BOX,
661 if( !LayoutTextTest( data ) )
663 tet_result(TET_FAIL);
666 tet_result(TET_PASS);
670 int UtcDaliTextLayoutSmallTextArea01(void)
672 ToolkitTestApplication application;
673 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
675 // Won't layout the text in multi-line if the width is too small.
677 const std::string fontFamily( "TizenSans" );
679 // Set a known font description
680 FontDescriptionRun fontDescriptionRun;
681 fontDescriptionRun.characterRun.characterIndex = 0u;
682 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
683 fontDescriptionRun.familyLength = fontFamily.size();
684 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
685 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
686 fontDescriptionRun.familyDefined = true;
687 fontDescriptionRun.weightDefined = false;
688 fontDescriptionRun.widthDefined = false;
689 fontDescriptionRun.slantDefined = false;
690 fontDescriptionRun.sizeDefined = false;
692 Vector<FontDescriptionRun> fontDescriptionRuns;
693 fontDescriptionRuns.PushBack( fontDescriptionRun );
694 Size textArea(1.f, 1.f);
695 Size layoutSize = Vector2::ZERO;
696 LayoutTextData data =
698 "Layout text in a small area",
702 fontDescriptionRuns.Begin(),
708 LayoutEngine::MULTI_LINE_BOX,
715 if( !LayoutTextTest( data ) )
717 tet_result(TET_FAIL);
720 tet_result(TET_PASS);
724 int UtcDaliTextLayoutSmallTextArea02(void)
726 ToolkitTestApplication application;
727 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
729 // Will layout the text in single line as it can be scrolled.
731 const std::string fontFamily( "TizenSans" );
733 // Set a known font description
734 FontDescriptionRun fontDescriptionRun;
735 fontDescriptionRun.characterRun.characterIndex = 0u;
736 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
737 fontDescriptionRun.familyLength = fontFamily.size();
738 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
739 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
740 fontDescriptionRun.familyDefined = true;
741 fontDescriptionRun.weightDefined = false;
742 fontDescriptionRun.widthDefined = false;
743 fontDescriptionRun.slantDefined = false;
744 fontDescriptionRun.sizeDefined = false;
746 Vector<FontDescriptionRun> fontDescriptionRuns;
747 fontDescriptionRuns.PushBack( fontDescriptionRun );
748 Size textArea(1.f, 1.f);
749 Size layoutSize(80.f, 20.f);
750 float positions[] = { 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f };
751 struct LineRun line =
763 Vector<LineRun> lines;
764 lines.PushBack( line );
766 LayoutTextData data =
768 "Layout text in a small area",
772 fontDescriptionRuns.Begin(),
778 LayoutEngine::SINGLE_LINE_BOX,
785 if( !LayoutTextTest( data ) )
787 tet_result(TET_FAIL);
790 tet_result(TET_PASS);
794 int UtcDaliTextLayoutMultilineText01(void)
796 ToolkitTestApplication application;
797 tet_infoline(" UtcDaliTextLayoutMultilineText01");
799 // Layout some lines of left to right text.
801 const std::string fontFamily( "TizenSans" );
803 // Set a known font description
804 FontDescriptionRun fontDescriptionRun1;
805 fontDescriptionRun1.characterRun.characterIndex = 0u;
806 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
807 fontDescriptionRun1.familyLength = fontFamily.size();
808 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
809 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
810 fontDescriptionRun1.familyDefined = true;
811 fontDescriptionRun1.weightDefined = false;
812 fontDescriptionRun1.widthDefined = false;
813 fontDescriptionRun1.slantDefined = false;
814 fontDescriptionRun1.sizeDefined = false;
816 FontDescriptionRun fontDescriptionRun2;
817 fontDescriptionRun2.characterRun.characterIndex = 18u;
818 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
819 fontDescriptionRun2.familyLength = fontFamily.size();
820 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
821 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
822 fontDescriptionRun2.familyDefined = true;
823 fontDescriptionRun2.weightDefined = false;
824 fontDescriptionRun2.widthDefined = false;
825 fontDescriptionRun2.slantDefined = false;
826 fontDescriptionRun2.sizeDefined = false;
828 Vector<FontDescriptionRun> fontDescriptionRuns;
829 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
830 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
831 Size textArea(100.f, 300.f);
832 Size layoutSize(95.f, 97.f);
835 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
836 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
837 1.f, -12.f, 9.f, -9.f, 17.f, -9.f, 27.f, -9.f, 36.f, -9.f, 45.f, -11.f, 51.f, -0.f,
838 1.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 35.f, -9.f, 41.f, -9.f, 50.f, -9.f, 59.f, -11.f, 65.f, -0.f,
839 1.f, -12.f, 5.f, -12.f, 9.f, -9.f, 19.f, -9.f, 28.f, -9.f, 35.f, -0.f, 41.f, -9.f, 50.f, -12.f, 54.f, -0.f, 59.f, -11.f, 66.f, -9.f, 75.f, -9.f, 83.f, -11.f, 91.f, -2.f
841 struct LineRun line0 =
853 struct LineRun line1 =
865 struct LineRun line2 =
877 struct LineRun line3 =
889 struct LineRun line4 =
901 Vector<LineRun> lines;
902 lines.PushBack( line0 );
903 lines.PushBack( line1 );
904 lines.PushBack( line2 );
905 lines.PushBack( line3 );
906 lines.PushBack( line4 );
908 LayoutTextData data =
910 "Layout simple multi-line text",
911 "Hello world demo.\n"
912 "Layout different lines of text.",
915 fontDescriptionRuns.Begin(),
921 LayoutEngine::MULTI_LINE_BOX,
928 if( !LayoutTextTest( data ) )
930 tet_result(TET_FAIL);
933 tet_result(TET_PASS);
937 int UtcDaliTextLayoutMultilineText02(void)
939 ToolkitTestApplication application;
940 tet_infoline(" UtcDaliTextLayoutMultilineText02");
942 // Layout some lines of bidirectional text.
944 const std::string fontFamily1( "TizenSans" );
946 // Set a known font description
947 FontDescriptionRun fontDescriptionRun1;
948 fontDescriptionRun1.characterRun.characterIndex = 0u;
949 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
950 fontDescriptionRun1.familyLength = fontFamily1.size();
951 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
952 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
953 fontDescriptionRun1.familyDefined = true;
954 fontDescriptionRun1.weightDefined = false;
955 fontDescriptionRun1.widthDefined = false;
956 fontDescriptionRun1.slantDefined = false;
957 fontDescriptionRun1.sizeDefined = false;
959 const std::string fontFamily2( "TizenSansHebrew" );
961 // Set a known font description
962 FontDescriptionRun fontDescriptionRun2;
963 fontDescriptionRun2.characterRun.characterIndex = 17u;
964 fontDescriptionRun2.characterRun.numberOfCharacters = 11u;
965 fontDescriptionRun2.familyLength = fontFamily2.size();
966 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
967 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
968 fontDescriptionRun2.familyDefined = true;
969 fontDescriptionRun2.weightDefined = false;
970 fontDescriptionRun2.widthDefined = false;
971 fontDescriptionRun2.slantDefined = false;
972 fontDescriptionRun2.sizeDefined = false;
974 const std::string fontFamily3( "TizenSansHebrew" );
976 // Set a known font description
977 FontDescriptionRun fontDescriptionRun3;
978 fontDescriptionRun3.characterRun.characterIndex = 28u;
979 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
980 fontDescriptionRun3.familyLength = fontFamily3.size();
981 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
982 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
983 fontDescriptionRun3.familyDefined = true;
984 fontDescriptionRun3.weightDefined = false;
985 fontDescriptionRun3.widthDefined = false;
986 fontDescriptionRun3.slantDefined = false;
987 fontDescriptionRun3.sizeDefined = false;
989 const std::string fontFamily4( "TizenSans" );
991 // Set a known font description
992 FontDescriptionRun fontDescriptionRun4;
993 fontDescriptionRun4.characterRun.characterIndex = 38u;
994 fontDescriptionRun4.characterRun.numberOfCharacters = 17u;
995 fontDescriptionRun4.familyLength = fontFamily4.size();
996 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
997 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
998 fontDescriptionRun4.familyDefined = true;
999 fontDescriptionRun4.weightDefined = false;
1000 fontDescriptionRun4.widthDefined = false;
1001 fontDescriptionRun4.slantDefined = false;
1002 fontDescriptionRun4.sizeDefined = false;
1004 Vector<FontDescriptionRun> fontDescriptionRuns;
1005 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1006 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1007 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1008 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
1009 Size textArea(100.f, 300.f);
1010 Size layoutSize(81.f, 120.f);
1013 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1014 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1015 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1016 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1017 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1018 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1020 struct LineRun line0 =
1032 struct LineRun line1 =
1044 struct LineRun line2 =
1056 struct LineRun line3 =
1068 struct LineRun line4 =
1080 struct LineRun line5 =
1092 Vector<LineRun> lines;
1093 lines.PushBack( line0 );
1094 lines.PushBack( line1 );
1095 lines.PushBack( line2 );
1096 lines.PushBack( line3 );
1097 lines.PushBack( line4 );
1098 lines.PushBack( line5 );
1100 LayoutTextData data =
1102 "Layout bidirectional text.",
1103 "Hello world demo שלום עולם.\n"
1104 "שלום עולם hello world demo.",
1107 fontDescriptionRuns.Begin(),
1113 LayoutEngine::MULTI_LINE_BOX,
1120 if( !LayoutTextTest( data ) )
1122 tet_result(TET_FAIL);
1125 tet_result(TET_PASS);
1129 int UtcDaliTextLayoutMultilineText03(void)
1131 ToolkitTestApplication application;
1132 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1134 // Layout a long word which doesn't fit in the width of the text area.
1136 const std::string fontFamily( "TizenSans" );
1138 // Set a known font description
1139 FontDescriptionRun fontDescriptionRun;
1140 fontDescriptionRun.characterRun.characterIndex = 0u;
1141 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1142 fontDescriptionRun.familyLength = fontFamily.size();
1143 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1144 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1145 fontDescriptionRun.familyDefined = true;
1146 fontDescriptionRun.weightDefined = false;
1147 fontDescriptionRun.widthDefined = false;
1148 fontDescriptionRun.slantDefined = false;
1149 fontDescriptionRun.sizeDefined = false;
1151 Vector<FontDescriptionRun> fontDescriptionRuns;
1152 fontDescriptionRuns.PushBack( fontDescriptionRun );
1153 Size textArea(100.f, 300.f);
1154 Size layoutSize(96.f, 60.f);
1157 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -9.f, 47.f, -9.f, 57.f, -9.f, 63.f, -13.f, 66.f, -13.f, 75.f, -13.f, 85.f, -9.f,
1158 1.f, -9.f, 13.f, -9.f, 23.f, -13.f, 32.f, -9.f, 40.f, -13.f, 44.f, -13.f, 47.f, -9.f, 56.f, -9.f, 67.f, -9.f, 77.f, -9.f, 83.f, -13.f, 86.f, -13.f,
1159 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1161 struct LineRun line0 =
1173 struct LineRun line1 =
1185 struct LineRun line2 =
1197 Vector<LineRun> lines;
1198 lines.PushBack( line0 );
1199 lines.PushBack( line1 );
1200 lines.PushBack( line2 );
1202 LayoutTextData data =
1204 "Layout a long word which doesn't fit in the width of the text area.",
1205 "Helloworlddemohelloworlddemo.",
1208 fontDescriptionRuns.Begin(),
1214 LayoutEngine::MULTI_LINE_BOX,
1221 if( !LayoutTextTest( data ) )
1223 tet_result(TET_FAIL);
1226 tet_result(TET_PASS);
1230 int UtcDaliTextLayoutMultilineText04(void)
1232 ToolkitTestApplication application;
1233 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1235 // Layout simple text ending with a \n. It has to add a void line at the end.
1237 const std::string fontFamily( "TizenSans" );
1239 // Set a known font description
1240 FontDescriptionRun fontDescriptionRun;
1241 fontDescriptionRun.characterRun.characterIndex = 0u;
1242 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1243 fontDescriptionRun.familyLength = fontFamily.size();
1244 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1245 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1246 fontDescriptionRun.familyDefined = true;
1247 fontDescriptionRun.weightDefined = false;
1248 fontDescriptionRun.widthDefined = false;
1249 fontDescriptionRun.slantDefined = false;
1250 fontDescriptionRun.sizeDefined = false;
1252 Vector<FontDescriptionRun> fontDescriptionRuns;
1253 fontDescriptionRuns.PushBack( fontDescriptionRun );
1254 Size textArea(100.f, 300.f);
1255 Size layoutSize(83.f, 40.f);
1258 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -3.f, 82.f, -12.f
1260 struct LineRun line0 =
1272 struct LineRun line1 =
1284 Vector<LineRun> lines;
1285 lines.PushBack( line0 );
1286 lines.PushBack( line1 );
1288 LayoutTextData data =
1290 "Layout simple text ending with a \n.",
1294 fontDescriptionRuns.Begin(),
1300 LayoutEngine::MULTI_LINE_BOX,
1307 if( !LayoutTextTest( data ) )
1309 tet_result(TET_FAIL);
1312 tet_result(TET_PASS);
1316 int UtcDaliTextLayoutMultilineText05(void)
1318 ToolkitTestApplication application;
1319 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1321 // Layout simple text with one character with a different font size.
1323 const std::string fontFamily( "TizenSans" );
1325 // Set a known font description
1326 FontDescriptionRun fontDescriptionRun1;
1327 fontDescriptionRun1.characterRun.characterIndex = 0u;
1328 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1329 fontDescriptionRun1.familyLength = fontFamily.size();
1330 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1331 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1332 fontDescriptionRun1.familyDefined = true;
1333 fontDescriptionRun1.weightDefined = false;
1334 fontDescriptionRun1.widthDefined = false;
1335 fontDescriptionRun1.slantDefined = false;
1336 fontDescriptionRun1.sizeDefined = false;
1338 FontDescriptionRun fontDescriptionRun2;
1339 fontDescriptionRun2.characterRun.characterIndex = 6u;
1340 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1341 fontDescriptionRun2.familyLength = fontFamily.size();
1342 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1343 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1344 fontDescriptionRun2.size = 1280u;
1345 fontDescriptionRun2.familyDefined = true;
1346 fontDescriptionRun2.weightDefined = false;
1347 fontDescriptionRun2.widthDefined = false;
1348 fontDescriptionRun2.slantDefined = false;
1349 fontDescriptionRun2.sizeDefined = true;
1351 FontDescriptionRun fontDescriptionRun3;
1352 fontDescriptionRun3.characterRun.characterIndex = 7u;
1353 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1354 fontDescriptionRun3.familyLength = fontFamily.size();
1355 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1356 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1357 fontDescriptionRun3.familyDefined = true;
1358 fontDescriptionRun3.weightDefined = false;
1359 fontDescriptionRun3.widthDefined = false;
1360 fontDescriptionRun3.slantDefined = false;
1361 fontDescriptionRun3.sizeDefined = false;
1363 Vector<FontDescriptionRun> fontDescriptionRuns;
1364 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1365 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1366 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1367 Size textArea(100.f, 300.f);
1368 Size layoutSize(88.f, 53.f);
1371 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 59.f, -9.f, 69.f, -9.f, 75.f, -13.f, 78.f, -13.f, 87.f, -0.f,
1372 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f
1374 struct LineRun line0 =
1386 struct LineRun line1 =
1398 Vector<LineRun> lines;
1399 lines.PushBack( line0 );
1400 lines.PushBack( line1 );
1402 LayoutTextData data =
1404 "Layout simple text with one character with a different font size.",
1405 "Hello world demo.",
1408 fontDescriptionRuns.Begin(),
1414 LayoutEngine::MULTI_LINE_BOX,
1421 if( !LayoutTextTest( data ) )
1423 tet_result(TET_FAIL);
1426 tet_result(TET_PASS);
1430 int UtcDaliTextUpdateLayout01(void)
1432 ToolkitTestApplication application;
1433 tet_infoline(" UtcDaliTextUpdateLayout01");
1435 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1437 const std::string fontLatin( "TizenSans" );
1438 const std::string fontHebrew( "TizenSansHebrew" );
1439 const std::string fontArabic( "TizenSansArabic" );
1441 // Set a known font description
1442 FontDescriptionRun fontDescriptionRun01;
1443 fontDescriptionRun01.characterRun.characterIndex = 0u;
1444 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1445 fontDescriptionRun01.familyLength = fontLatin.size();
1446 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1447 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1448 fontDescriptionRun01.familyDefined = true;
1449 fontDescriptionRun01.weightDefined = false;
1450 fontDescriptionRun01.widthDefined = false;
1451 fontDescriptionRun01.slantDefined = false;
1452 fontDescriptionRun01.sizeDefined = false;
1454 // Set a known font description
1455 FontDescriptionRun fontDescriptionRun02;
1456 fontDescriptionRun02.characterRun.characterIndex = 17u;
1457 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
1458 fontDescriptionRun02.familyLength = fontHebrew.size();
1459 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1460 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1461 fontDescriptionRun02.familyDefined = true;
1462 fontDescriptionRun02.weightDefined = false;
1463 fontDescriptionRun02.widthDefined = false;
1464 fontDescriptionRun02.slantDefined = false;
1465 fontDescriptionRun02.sizeDefined = false;
1467 // Set a known font description
1468 FontDescriptionRun fontDescriptionRun03;
1469 fontDescriptionRun03.characterRun.characterIndex = 28u;
1470 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
1471 fontDescriptionRun03.familyLength = fontArabic.size();
1472 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1473 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
1474 fontDescriptionRun03.familyDefined = true;
1475 fontDescriptionRun03.weightDefined = false;
1476 fontDescriptionRun03.widthDefined = false;
1477 fontDescriptionRun03.slantDefined = false;
1478 fontDescriptionRun03.sizeDefined = false;
1480 // Set a known font description
1481 FontDescriptionRun fontDescriptionRun04;
1482 fontDescriptionRun04.characterRun.characterIndex = 42u;
1483 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
1484 fontDescriptionRun04.familyLength = fontLatin.size();
1485 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1486 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
1487 fontDescriptionRun04.familyDefined = true;
1488 fontDescriptionRun04.weightDefined = false;
1489 fontDescriptionRun04.widthDefined = false;
1490 fontDescriptionRun04.slantDefined = false;
1491 fontDescriptionRun04.sizeDefined = false;
1493 // Set a known font description
1494 FontDescriptionRun fontDescriptionRun05;
1495 fontDescriptionRun05.characterRun.characterIndex = 54u;
1496 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
1497 fontDescriptionRun05.familyLength = fontHebrew.size();
1498 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1499 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
1500 fontDescriptionRun05.familyDefined = true;
1501 fontDescriptionRun05.weightDefined = false;
1502 fontDescriptionRun05.widthDefined = false;
1503 fontDescriptionRun05.slantDefined = false;
1504 fontDescriptionRun05.sizeDefined = false;
1506 // Set a known font description
1507 FontDescriptionRun fontDescriptionRun06;
1508 fontDescriptionRun06.characterRun.characterIndex = 64u;
1509 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1510 fontDescriptionRun06.familyLength = fontHebrew.size();
1511 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1512 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1513 fontDescriptionRun06.familyDefined = true;
1514 fontDescriptionRun06.weightDefined = false;
1515 fontDescriptionRun06.widthDefined = false;
1516 fontDescriptionRun06.slantDefined = false;
1517 fontDescriptionRun06.sizeDefined = false;
1519 // Set a known font description
1520 FontDescriptionRun fontDescriptionRun07;
1521 fontDescriptionRun07.characterRun.characterIndex = 74u;
1522 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
1523 fontDescriptionRun07.familyLength = fontLatin.size();
1524 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1525 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
1526 fontDescriptionRun07.familyDefined = true;
1527 fontDescriptionRun07.weightDefined = false;
1528 fontDescriptionRun07.widthDefined = false;
1529 fontDescriptionRun07.slantDefined = false;
1530 fontDescriptionRun07.sizeDefined = false;
1532 // Set a known font description
1533 FontDescriptionRun fontDescriptionRun08;
1534 fontDescriptionRun08.characterRun.characterIndex = 92u;
1535 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
1536 fontDescriptionRun08.familyLength = fontLatin.size();
1537 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1538 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1539 fontDescriptionRun08.familyDefined = true;
1540 fontDescriptionRun08.weightDefined = false;
1541 fontDescriptionRun08.widthDefined = false;
1542 fontDescriptionRun08.slantDefined = false;
1543 fontDescriptionRun08.sizeDefined = false;
1545 // Set a known font description
1546 FontDescriptionRun fontDescriptionRun09;
1547 fontDescriptionRun09.characterRun.characterIndex = 104u;
1548 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
1549 fontDescriptionRun09.familyLength = fontArabic.size();
1550 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1551 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
1552 fontDescriptionRun09.familyDefined = true;
1553 fontDescriptionRun09.weightDefined = false;
1554 fontDescriptionRun09.widthDefined = false;
1555 fontDescriptionRun09.slantDefined = false;
1556 fontDescriptionRun09.sizeDefined = false;
1558 // Set a known font description
1559 FontDescriptionRun fontDescriptionRun10;
1560 fontDescriptionRun10.characterRun.characterIndex = 118u;
1561 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
1562 fontDescriptionRun10.familyLength = fontHebrew.size();
1563 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1564 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
1565 fontDescriptionRun10.familyDefined = true;
1566 fontDescriptionRun10.weightDefined = false;
1567 fontDescriptionRun10.widthDefined = false;
1568 fontDescriptionRun10.slantDefined = false;
1569 fontDescriptionRun10.sizeDefined = false;
1571 // Set a known font description
1572 FontDescriptionRun fontDescriptionRun11;
1573 fontDescriptionRun11.characterRun.characterIndex = 128u;
1574 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
1575 fontDescriptionRun11.familyLength = fontLatin.size();
1576 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1577 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
1578 fontDescriptionRun11.familyDefined = true;
1579 fontDescriptionRun11.weightDefined = false;
1580 fontDescriptionRun11.widthDefined = false;
1581 fontDescriptionRun11.slantDefined = false;
1582 fontDescriptionRun11.sizeDefined = false;
1584 // Set a known font description
1585 FontDescriptionRun fontDescriptionRun12;
1586 fontDescriptionRun12.characterRun.characterIndex = 145u;
1587 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
1588 fontDescriptionRun12.familyLength = fontHebrew.size();
1589 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1590 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
1591 fontDescriptionRun12.familyDefined = true;
1592 fontDescriptionRun12.weightDefined = false;
1593 fontDescriptionRun12.widthDefined = false;
1594 fontDescriptionRun12.slantDefined = false;
1595 fontDescriptionRun12.sizeDefined = false;
1597 // Set a known font description
1598 FontDescriptionRun fontDescriptionRun13;
1599 fontDescriptionRun13.characterRun.characterIndex = 156u;
1600 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
1601 fontDescriptionRun13.familyLength = fontHebrew.size();
1602 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1603 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1604 fontDescriptionRun13.familyDefined = true;
1605 fontDescriptionRun13.weightDefined = false;
1606 fontDescriptionRun13.widthDefined = false;
1607 fontDescriptionRun13.slantDefined = false;
1608 fontDescriptionRun13.sizeDefined = false;
1610 // Set a known font description
1611 FontDescriptionRun fontDescriptionRun14;
1612 fontDescriptionRun14.characterRun.characterIndex = 166u;
1613 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
1614 fontDescriptionRun14.familyLength = fontLatin.size();
1615 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1616 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1617 fontDescriptionRun14.familyDefined = true;
1618 fontDescriptionRun14.weightDefined = false;
1619 fontDescriptionRun14.widthDefined = false;
1620 fontDescriptionRun14.slantDefined = false;
1621 fontDescriptionRun14.sizeDefined = false;
1623 // Set a known font description
1624 FontDescriptionRun fontDescriptionRun15;
1625 fontDescriptionRun15.characterRun.characterIndex = 178u;
1626 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
1627 fontDescriptionRun15.familyLength = fontArabic.size();
1628 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1629 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
1630 fontDescriptionRun15.familyDefined = true;
1631 fontDescriptionRun15.weightDefined = false;
1632 fontDescriptionRun15.widthDefined = false;
1633 fontDescriptionRun15.slantDefined = false;
1634 fontDescriptionRun15.sizeDefined = false;
1636 Vector<FontDescriptionRun> fontDescriptionRuns;
1637 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1638 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1639 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1640 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1641 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1642 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1643 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1644 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1645 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1646 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1647 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1648 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1649 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1650 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1651 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1652 Size textArea(100.f, 300.f);
1653 Size layoutSize(92.f, 380.f);
1656 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1657 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1658 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1659 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
1660 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1661 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1662 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1663 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1664 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
1665 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1666 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
1667 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1668 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1669 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1670 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1671 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1672 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1673 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
1676 struct LineRun line01 =
1688 struct LineRun line02 =
1700 struct LineRun line03 =
1712 struct LineRun line04 =
1724 struct LineRun line05 =
1736 struct LineRun line06 =
1748 struct LineRun line07 =
1760 struct LineRun line08 =
1772 struct LineRun line09 =
1784 struct LineRun line10 =
1796 struct LineRun line11 =
1808 struct LineRun line12 =
1820 struct LineRun line13 =
1832 struct LineRun line14 =
1844 struct LineRun line15 =
1856 struct LineRun line16 =
1868 struct LineRun line17 =
1880 struct LineRun line18 =
1892 struct LineRun line19 =
1904 Vector<LineRun> lines;
1905 lines.PushBack( line01 );
1906 lines.PushBack( line02 );
1907 lines.PushBack( line03 );
1908 lines.PushBack( line04 );
1909 lines.PushBack( line05 );
1910 lines.PushBack( line06 );
1911 lines.PushBack( line07 );
1912 lines.PushBack( line08 );
1913 lines.PushBack( line09 );
1914 lines.PushBack( line10 );
1915 lines.PushBack( line11 );
1916 lines.PushBack( line12 );
1917 lines.PushBack( line13 );
1918 lines.PushBack( line14 );
1919 lines.PushBack( line15 );
1920 lines.PushBack( line16 );
1921 lines.PushBack( line17 );
1922 lines.PushBack( line18 );
1923 lines.PushBack( line19 );
1925 LayoutTextData data =
1927 "Layout bidirectional text.",
1928 "Hello world demo שלום עולם.\n"
1929 "مرحبا بالعالم hello world שלום עולם\n"
1930 "שלום עולם hello world demo.\n"
1931 "hello world مرحبا بالعالم שלום עולם\n"
1932 "Hello world demo שלום עולם.\n"
1933 "שלום עולם hello world مرحبا بالعالم\n",
1936 fontDescriptionRuns.Begin(),
1942 LayoutEngine::MULTI_LINE_BOX,
1949 if( !LayoutTextTest( data ) )
1951 tet_result(TET_FAIL);
1954 tet_result(TET_PASS);
1958 int UtcDaliTextUpdateLayout02(void)
1960 ToolkitTestApplication application;
1961 tet_infoline(" UtcDaliTextUpdateLayout02");
1963 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
1965 const std::string fontLatin( "TizenSans" );
1966 const std::string fontHebrew( "TizenSansHebrew" );
1967 const std::string fontArabic( "TizenSansArabic" );
1969 // Set a known font description
1970 FontDescriptionRun fontDescriptionRun01;
1971 fontDescriptionRun01.characterRun.characterIndex = 0u;
1972 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1973 fontDescriptionRun01.familyLength = fontLatin.size();
1974 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1975 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1976 fontDescriptionRun01.familyDefined = true;
1977 fontDescriptionRun01.weightDefined = false;
1978 fontDescriptionRun01.widthDefined = false;
1979 fontDescriptionRun01.slantDefined = false;
1980 fontDescriptionRun01.sizeDefined = false;
1982 // Set a known font description
1983 FontDescriptionRun fontDescriptionRun02;
1984 fontDescriptionRun02.characterRun.characterIndex = 17u;
1985 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
1986 fontDescriptionRun02.familyLength = fontHebrew.size();
1987 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1988 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1989 fontDescriptionRun02.familyDefined = true;
1990 fontDescriptionRun02.weightDefined = false;
1991 fontDescriptionRun02.widthDefined = false;
1992 fontDescriptionRun02.slantDefined = false;
1993 fontDescriptionRun02.sizeDefined = false;
1995 // Set a known font description
1996 FontDescriptionRun fontDescriptionRun03;
1997 fontDescriptionRun03.characterRun.characterIndex = 28u;
1998 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
1999 fontDescriptionRun03.familyLength = fontArabic.size();
2000 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2001 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2002 fontDescriptionRun03.familyDefined = true;
2003 fontDescriptionRun03.weightDefined = false;
2004 fontDescriptionRun03.widthDefined = false;
2005 fontDescriptionRun03.slantDefined = false;
2006 fontDescriptionRun03.sizeDefined = false;
2008 // Set a known font description
2009 FontDescriptionRun fontDescriptionRun04;
2010 fontDescriptionRun04.characterRun.characterIndex = 42u;
2011 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2012 fontDescriptionRun04.familyLength = fontLatin.size();
2013 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2014 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2015 fontDescriptionRun04.familyDefined = true;
2016 fontDescriptionRun04.weightDefined = false;
2017 fontDescriptionRun04.widthDefined = false;
2018 fontDescriptionRun04.slantDefined = false;
2019 fontDescriptionRun04.sizeDefined = false;
2021 // Set a known font description
2022 FontDescriptionRun fontDescriptionRun05;
2023 fontDescriptionRun05.characterRun.characterIndex = 54u;
2024 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2025 fontDescriptionRun05.familyLength = fontHebrew.size();
2026 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2027 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2028 fontDescriptionRun05.familyDefined = true;
2029 fontDescriptionRun05.weightDefined = false;
2030 fontDescriptionRun05.widthDefined = false;
2031 fontDescriptionRun05.slantDefined = false;
2032 fontDescriptionRun05.sizeDefined = false;
2034 // Set a known font description
2035 FontDescriptionRun fontDescriptionRun06;
2036 fontDescriptionRun06.characterRun.characterIndex = 64u;
2037 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2038 fontDescriptionRun06.familyLength = fontHebrew.size();
2039 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2040 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2041 fontDescriptionRun06.familyDefined = true;
2042 fontDescriptionRun06.weightDefined = false;
2043 fontDescriptionRun06.widthDefined = false;
2044 fontDescriptionRun06.slantDefined = false;
2045 fontDescriptionRun06.sizeDefined = false;
2047 // Set a known font description
2048 FontDescriptionRun fontDescriptionRun07;
2049 fontDescriptionRun07.characterRun.characterIndex = 74u;
2050 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2051 fontDescriptionRun07.familyLength = fontLatin.size();
2052 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2053 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2054 fontDescriptionRun07.familyDefined = true;
2055 fontDescriptionRun07.weightDefined = false;
2056 fontDescriptionRun07.widthDefined = false;
2057 fontDescriptionRun07.slantDefined = false;
2058 fontDescriptionRun07.sizeDefined = false;
2060 // Set a known font description
2061 FontDescriptionRun fontDescriptionRun08;
2062 fontDescriptionRun08.characterRun.characterIndex = 92u;
2063 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2064 fontDescriptionRun08.familyLength = fontLatin.size();
2065 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2066 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2067 fontDescriptionRun08.familyDefined = true;
2068 fontDescriptionRun08.weightDefined = false;
2069 fontDescriptionRun08.widthDefined = false;
2070 fontDescriptionRun08.slantDefined = false;
2071 fontDescriptionRun08.sizeDefined = false;
2073 // Set a known font description
2074 FontDescriptionRun fontDescriptionRun09;
2075 fontDescriptionRun09.characterRun.characterIndex = 104u;
2076 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2077 fontDescriptionRun09.familyLength = fontArabic.size();
2078 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2079 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2080 fontDescriptionRun09.familyDefined = true;
2081 fontDescriptionRun09.weightDefined = false;
2082 fontDescriptionRun09.widthDefined = false;
2083 fontDescriptionRun09.slantDefined = false;
2084 fontDescriptionRun09.sizeDefined = false;
2086 // Set a known font description
2087 FontDescriptionRun fontDescriptionRun10;
2088 fontDescriptionRun10.characterRun.characterIndex = 118u;
2089 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2090 fontDescriptionRun10.familyLength = fontHebrew.size();
2091 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2092 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2093 fontDescriptionRun10.familyDefined = true;
2094 fontDescriptionRun10.weightDefined = false;
2095 fontDescriptionRun10.widthDefined = false;
2096 fontDescriptionRun10.slantDefined = false;
2097 fontDescriptionRun10.sizeDefined = false;
2099 // Set a known font description
2100 FontDescriptionRun fontDescriptionRun11;
2101 fontDescriptionRun11.characterRun.characterIndex = 128u;
2102 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2103 fontDescriptionRun11.familyLength = fontLatin.size();
2104 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2105 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2106 fontDescriptionRun11.familyDefined = true;
2107 fontDescriptionRun11.weightDefined = false;
2108 fontDescriptionRun11.widthDefined = false;
2109 fontDescriptionRun11.slantDefined = false;
2110 fontDescriptionRun11.sizeDefined = false;
2112 // Set a known font description
2113 FontDescriptionRun fontDescriptionRun12;
2114 fontDescriptionRun12.characterRun.characterIndex = 145u;
2115 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2116 fontDescriptionRun12.familyLength = fontHebrew.size();
2117 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2118 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2119 fontDescriptionRun12.familyDefined = true;
2120 fontDescriptionRun12.weightDefined = false;
2121 fontDescriptionRun12.widthDefined = false;
2122 fontDescriptionRun12.slantDefined = false;
2123 fontDescriptionRun12.sizeDefined = false;
2125 // Set a known font description
2126 FontDescriptionRun fontDescriptionRun13;
2127 fontDescriptionRun13.characterRun.characterIndex = 156u;
2128 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2129 fontDescriptionRun13.familyLength = fontHebrew.size();
2130 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2131 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2132 fontDescriptionRun13.familyDefined = true;
2133 fontDescriptionRun13.weightDefined = false;
2134 fontDescriptionRun13.widthDefined = false;
2135 fontDescriptionRun13.slantDefined = false;
2136 fontDescriptionRun13.sizeDefined = false;
2138 // Set a known font description
2139 FontDescriptionRun fontDescriptionRun14;
2140 fontDescriptionRun14.characterRun.characterIndex = 166u;
2141 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2142 fontDescriptionRun14.familyLength = fontLatin.size();
2143 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2144 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2145 fontDescriptionRun14.familyDefined = true;
2146 fontDescriptionRun14.weightDefined = false;
2147 fontDescriptionRun14.widthDefined = false;
2148 fontDescriptionRun14.slantDefined = false;
2149 fontDescriptionRun14.sizeDefined = false;
2151 // Set a known font description
2152 FontDescriptionRun fontDescriptionRun15;
2153 fontDescriptionRun15.characterRun.characterIndex = 178u;
2154 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2155 fontDescriptionRun15.familyLength = fontArabic.size();
2156 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2157 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2158 fontDescriptionRun15.familyDefined = true;
2159 fontDescriptionRun15.weightDefined = false;
2160 fontDescriptionRun15.widthDefined = false;
2161 fontDescriptionRun15.slantDefined = false;
2162 fontDescriptionRun15.sizeDefined = false;
2164 Vector<FontDescriptionRun> fontDescriptionRuns;
2165 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2166 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2167 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2168 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2169 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2170 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2171 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2172 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2173 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2174 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2175 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2176 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2177 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2178 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2179 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2180 Size textArea(100.f, 300.f);
2181 Size layoutSize(92.f, 380.f);
2184 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2185 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2186 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2187 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2188 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2189 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2190 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2191 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2192 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
2193 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2194 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2195 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2196 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2197 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2198 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2199 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2200 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2201 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2204 struct LineRun line01 =
2216 struct LineRun line02 =
2228 struct LineRun line03 =
2240 struct LineRun line04 =
2252 struct LineRun line05 =
2264 struct LineRun line06 =
2276 struct LineRun line07 =
2288 struct LineRun line08 =
2300 struct LineRun line09 =
2312 struct LineRun line10 =
2324 struct LineRun line11 =
2336 struct LineRun line12 =
2348 struct LineRun line13 =
2360 struct LineRun line14 =
2372 struct LineRun line15 =
2384 struct LineRun line16 =
2396 struct LineRun line17 =
2408 struct LineRun line18 =
2420 struct LineRun line19 =
2432 Vector<LineRun> lines;
2433 lines.PushBack( line01 );
2434 lines.PushBack( line02 );
2435 lines.PushBack( line03 );
2436 lines.PushBack( line04 );
2437 lines.PushBack( line05 );
2438 lines.PushBack( line06 );
2439 lines.PushBack( line07 );
2440 lines.PushBack( line08 );
2441 lines.PushBack( line09 );
2442 lines.PushBack( line10 );
2443 lines.PushBack( line11 );
2444 lines.PushBack( line12 );
2445 lines.PushBack( line13 );
2446 lines.PushBack( line14 );
2447 lines.PushBack( line15 );
2448 lines.PushBack( line16 );
2449 lines.PushBack( line17 );
2450 lines.PushBack( line18 );
2451 lines.PushBack( line19 );
2453 LayoutTextData data =
2455 "Layout bidirectional text.",
2456 "Hello world demo שלום עולם.\n"
2457 "مرحبا بالعالم hello world שלום עולם\n"
2458 "שלום עולם hello world demo.\n"
2459 "hello world مرحبا بالعالم שלום עולם\n"
2460 "Hello world demo שלום עולם.\n"
2461 "שלום עולם hello world مرحبا بالعالم\n",
2464 fontDescriptionRuns.Begin(),
2470 LayoutEngine::MULTI_LINE_BOX,
2477 if( !LayoutTextTest( data ) )
2479 tet_result(TET_FAIL);
2482 tet_result(TET_PASS);
2486 int UtcDaliTextUpdateLayout03(void)
2488 ToolkitTestApplication application;
2489 tet_infoline(" UtcDaliTextUpdateLayout03");
2491 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2493 const std::string fontLatin( "TizenSans" );
2494 const std::string fontHebrew( "TizenSansHebrew" );
2495 const std::string fontArabic( "TizenSansArabic" );
2497 // Set a known font description
2498 FontDescriptionRun fontDescriptionRun01;
2499 fontDescriptionRun01.characterRun.characterIndex = 0u;
2500 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2501 fontDescriptionRun01.familyLength = fontLatin.size();
2502 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2503 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2504 fontDescriptionRun01.familyDefined = true;
2505 fontDescriptionRun01.weightDefined = false;
2506 fontDescriptionRun01.widthDefined = false;
2507 fontDescriptionRun01.slantDefined = false;
2508 fontDescriptionRun01.sizeDefined = false;
2510 // Set a known font description
2511 FontDescriptionRun fontDescriptionRun02;
2512 fontDescriptionRun02.characterRun.characterIndex = 17u;
2513 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
2514 fontDescriptionRun02.familyLength = fontHebrew.size();
2515 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2516 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2517 fontDescriptionRun02.familyDefined = true;
2518 fontDescriptionRun02.weightDefined = false;
2519 fontDescriptionRun02.widthDefined = false;
2520 fontDescriptionRun02.slantDefined = false;
2521 fontDescriptionRun02.sizeDefined = false;
2523 // Set a known font description
2524 FontDescriptionRun fontDescriptionRun03;
2525 fontDescriptionRun03.characterRun.characterIndex = 28u;
2526 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
2527 fontDescriptionRun03.familyLength = fontArabic.size();
2528 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2529 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2530 fontDescriptionRun03.familyDefined = true;
2531 fontDescriptionRun03.weightDefined = false;
2532 fontDescriptionRun03.widthDefined = false;
2533 fontDescriptionRun03.slantDefined = false;
2534 fontDescriptionRun03.sizeDefined = false;
2536 // Set a known font description
2537 FontDescriptionRun fontDescriptionRun04;
2538 fontDescriptionRun04.characterRun.characterIndex = 42u;
2539 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2540 fontDescriptionRun04.familyLength = fontLatin.size();
2541 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2542 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2543 fontDescriptionRun04.familyDefined = true;
2544 fontDescriptionRun04.weightDefined = false;
2545 fontDescriptionRun04.widthDefined = false;
2546 fontDescriptionRun04.slantDefined = false;
2547 fontDescriptionRun04.sizeDefined = false;
2549 // Set a known font description
2550 FontDescriptionRun fontDescriptionRun05;
2551 fontDescriptionRun05.characterRun.characterIndex = 54u;
2552 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2553 fontDescriptionRun05.familyLength = fontHebrew.size();
2554 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2555 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2556 fontDescriptionRun05.familyDefined = true;
2557 fontDescriptionRun05.weightDefined = false;
2558 fontDescriptionRun05.widthDefined = false;
2559 fontDescriptionRun05.slantDefined = false;
2560 fontDescriptionRun05.sizeDefined = false;
2562 // Set a known font description
2563 FontDescriptionRun fontDescriptionRun06;
2564 fontDescriptionRun06.characterRun.characterIndex = 64u;
2565 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2566 fontDescriptionRun06.familyLength = fontHebrew.size();
2567 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2568 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2569 fontDescriptionRun06.familyDefined = true;
2570 fontDescriptionRun06.weightDefined = false;
2571 fontDescriptionRun06.widthDefined = false;
2572 fontDescriptionRun06.slantDefined = false;
2573 fontDescriptionRun06.sizeDefined = false;
2575 // Set a known font description
2576 FontDescriptionRun fontDescriptionRun07;
2577 fontDescriptionRun07.characterRun.characterIndex = 74u;
2578 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2579 fontDescriptionRun07.familyLength = fontLatin.size();
2580 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2581 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2582 fontDescriptionRun07.familyDefined = true;
2583 fontDescriptionRun07.weightDefined = false;
2584 fontDescriptionRun07.widthDefined = false;
2585 fontDescriptionRun07.slantDefined = false;
2586 fontDescriptionRun07.sizeDefined = false;
2588 // Set a known font description
2589 FontDescriptionRun fontDescriptionRun08;
2590 fontDescriptionRun08.characterRun.characterIndex = 92u;
2591 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2592 fontDescriptionRun08.familyLength = fontLatin.size();
2593 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2594 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2595 fontDescriptionRun08.familyDefined = true;
2596 fontDescriptionRun08.weightDefined = false;
2597 fontDescriptionRun08.widthDefined = false;
2598 fontDescriptionRun08.slantDefined = false;
2599 fontDescriptionRun08.sizeDefined = false;
2601 // Set a known font description
2602 FontDescriptionRun fontDescriptionRun09;
2603 fontDescriptionRun09.characterRun.characterIndex = 104u;
2604 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2605 fontDescriptionRun09.familyLength = fontArabic.size();
2606 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2607 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2608 fontDescriptionRun09.familyDefined = true;
2609 fontDescriptionRun09.weightDefined = false;
2610 fontDescriptionRun09.widthDefined = false;
2611 fontDescriptionRun09.slantDefined = false;
2612 fontDescriptionRun09.sizeDefined = false;
2614 // Set a known font description
2615 FontDescriptionRun fontDescriptionRun10;
2616 fontDescriptionRun10.characterRun.characterIndex = 118u;
2617 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2618 fontDescriptionRun10.familyLength = fontHebrew.size();
2619 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2620 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2621 fontDescriptionRun10.familyDefined = true;
2622 fontDescriptionRun10.weightDefined = false;
2623 fontDescriptionRun10.widthDefined = false;
2624 fontDescriptionRun10.slantDefined = false;
2625 fontDescriptionRun10.sizeDefined = false;
2627 // Set a known font description
2628 FontDescriptionRun fontDescriptionRun11;
2629 fontDescriptionRun11.characterRun.characterIndex = 128u;
2630 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2631 fontDescriptionRun11.familyLength = fontLatin.size();
2632 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2633 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2634 fontDescriptionRun11.familyDefined = true;
2635 fontDescriptionRun11.weightDefined = false;
2636 fontDescriptionRun11.widthDefined = false;
2637 fontDescriptionRun11.slantDefined = false;
2638 fontDescriptionRun11.sizeDefined = false;
2640 // Set a known font description
2641 FontDescriptionRun fontDescriptionRun12;
2642 fontDescriptionRun12.characterRun.characterIndex = 145u;
2643 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2644 fontDescriptionRun12.familyLength = fontHebrew.size();
2645 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2646 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2647 fontDescriptionRun12.familyDefined = true;
2648 fontDescriptionRun12.weightDefined = false;
2649 fontDescriptionRun12.widthDefined = false;
2650 fontDescriptionRun12.slantDefined = false;
2651 fontDescriptionRun12.sizeDefined = false;
2653 // Set a known font description
2654 FontDescriptionRun fontDescriptionRun13;
2655 fontDescriptionRun13.characterRun.characterIndex = 156u;
2656 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2657 fontDescriptionRun13.familyLength = fontHebrew.size();
2658 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2659 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2660 fontDescriptionRun13.familyDefined = true;
2661 fontDescriptionRun13.weightDefined = false;
2662 fontDescriptionRun13.widthDefined = false;
2663 fontDescriptionRun13.slantDefined = false;
2664 fontDescriptionRun13.sizeDefined = false;
2666 // Set a known font description
2667 FontDescriptionRun fontDescriptionRun14;
2668 fontDescriptionRun14.characterRun.characterIndex = 166u;
2669 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2670 fontDescriptionRun14.familyLength = fontLatin.size();
2671 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2672 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2673 fontDescriptionRun14.familyDefined = true;
2674 fontDescriptionRun14.weightDefined = false;
2675 fontDescriptionRun14.widthDefined = false;
2676 fontDescriptionRun14.slantDefined = false;
2677 fontDescriptionRun14.sizeDefined = false;
2679 // Set a known font description
2680 FontDescriptionRun fontDescriptionRun15;
2681 fontDescriptionRun15.characterRun.characterIndex = 178u;
2682 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2683 fontDescriptionRun15.familyLength = fontArabic.size();
2684 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2685 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2686 fontDescriptionRun15.familyDefined = true;
2687 fontDescriptionRun15.weightDefined = false;
2688 fontDescriptionRun15.widthDefined = false;
2689 fontDescriptionRun15.slantDefined = false;
2690 fontDescriptionRun15.sizeDefined = false;
2692 Vector<FontDescriptionRun> fontDescriptionRuns;
2693 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2694 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2695 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2696 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2697 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2698 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2699 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2700 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2701 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2702 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2703 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2704 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2705 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2706 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2707 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2708 Size textArea(100.f, 300.f);
2709 Size layoutSize(92.f, 380.f);
2712 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2713 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2714 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2715 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2716 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2717 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2718 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2719 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2720 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
2721 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2722 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2723 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2724 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2725 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2726 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2727 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2728 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2729 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2732 struct LineRun line01 =
2744 struct LineRun line02 =
2756 struct LineRun line03 =
2768 struct LineRun line04 =
2780 struct LineRun line05 =
2792 struct LineRun line06 =
2804 struct LineRun line07 =
2816 struct LineRun line08 =
2828 struct LineRun line09 =
2840 struct LineRun line10 =
2852 struct LineRun line11 =
2864 struct LineRun line12 =
2876 struct LineRun line13 =
2888 struct LineRun line14 =
2900 struct LineRun line15 =
2912 struct LineRun line16 =
2924 struct LineRun line17 =
2936 struct LineRun line18 =
2948 struct LineRun line19 =
2961 Vector<LineRun> lines;
2962 lines.PushBack( line01 );
2963 lines.PushBack( line02 );
2964 lines.PushBack( line03 );
2965 lines.PushBack( line04 );
2966 lines.PushBack( line05 );
2967 lines.PushBack( line06 );
2968 lines.PushBack( line07 );
2969 lines.PushBack( line08 );
2970 lines.PushBack( line09 );
2971 lines.PushBack( line10 );
2972 lines.PushBack( line11 );
2973 lines.PushBack( line12 );
2974 lines.PushBack( line13 );
2975 lines.PushBack( line14 );
2976 lines.PushBack( line15 );
2977 lines.PushBack( line16 );
2978 lines.PushBack( line17 );
2979 lines.PushBack( line18 );
2980 lines.PushBack( line19 );
2982 LayoutTextData data =
2984 "Layout bidirectional text.",
2985 "Hello world demo שלום עולם.\n"
2986 "مرحبا بالعالم hello world שלום עולם\n"
2987 "שלום עולם hello world demo.\n"
2988 "hello world مرحبا بالعالم שלום עולם\n"
2989 "Hello world demo שלום עולם.\n"
2990 "שלום עולם hello world مرحبا بالعالم\n",
2993 fontDescriptionRuns.Begin(),
2999 LayoutEngine::MULTI_LINE_BOX,
3006 if( !LayoutTextTest( data ) )
3008 tet_result(TET_FAIL);
3011 tet_result(TET_PASS);
3015 int UtcDaliTextLayoutEllipsis01(void)
3017 ToolkitTestApplication application;
3018 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3020 // Layout single-line LTR text with ellipsis.
3022 const std::string fontLatin( "TizenSans" );
3024 // Set a known font description
3025 FontDescriptionRun fontDescriptionRun01;
3026 fontDescriptionRun01.characterRun.characterIndex = 0u;
3027 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3028 fontDescriptionRun01.familyLength = fontLatin.size();
3029 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3030 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3031 fontDescriptionRun01.familyDefined = true;
3032 fontDescriptionRun01.weightDefined = false;
3033 fontDescriptionRun01.widthDefined = false;
3034 fontDescriptionRun01.slantDefined = false;
3035 fontDescriptionRun01.sizeDefined = false;
3037 Vector<FontDescriptionRun> fontDescriptionRuns;
3038 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3040 struct LineRun line01 =
3052 Vector<LineRun> lines;
3053 lines.PushBack( line01 );
3057 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f, 83.f, -13.f,
3060 Size textArea( 100.f, 50.f );
3061 Size layoutSize( 100.f, 20.f );
3063 LayoutTextData data =
3065 "Layout single-line LTR text with ellipsis.",
3066 "Hello world demo hello world demo hello world demo.",
3069 fontDescriptionRuns.Begin(),