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 = LogicalModel::New();
90 VisualModelPtr visualModel = VisualModel::New();
93 Vector<FontDescriptionRun> fontDescriptionRuns;
94 if( 0u != data.numberOfFonts )
96 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
97 data.fontDescriptions,
98 data.fontDescriptions + data.numberOfFonts );
101 LayoutOptions options;
102 options.reorder = false;
103 options.align = false;
104 CreateTextModel( data.text,
112 // 2) Clear the layout.
113 Vector<LineRun>& lines = visualModel->mLines;
115 const Length numberOfCharacters = logicalModel->mText.Count();
116 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
117 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
118 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
120 LineIndex startRemoveIndex = 0u;
122 if( 0u != lines.Count() )
124 startRemoveIndex = lines.Count();
125 LineIndex endRemoveIndex = startRemoveIndex;
126 ClearGlyphRuns( data.startIndex,
127 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
132 // Update the character runs of the lines.
133 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
134 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
135 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
136 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
137 ClearCharacterRuns( startCharacterIndex,
138 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
143 lines.Erase( lines.Begin() + startRemoveIndex,
144 lines.Begin() + endRemoveIndex );
147 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
149 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
150 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
153 MetricsPtr metrics = Metrics::New( fontClient );
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 = LogicalModel::New();
347 VisualModelPtr visualModel = VisualModel::New();
350 Vector<FontDescriptionRun> fontDescriptionRuns;
351 if( 0u != data.numberOfFonts )
353 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
354 data.fontDescriptions,
355 data.fontDescriptions + data.numberOfFonts );
358 LayoutOptions options;
359 options.reorder = false;
360 options.align = false;
361 CreateTextModel( data.text,
369 // 2) Call the ReLayoutRightToLeftLines() method.
370 MetricsPtr metrics = Metrics::New( fontClient );
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 = LogicalModel::New();
456 VisualModelPtr visualModel = VisualModel::New();
459 Vector<FontDescriptionRun> fontDescriptionRuns;
460 if( 0u != data.numberOfFonts )
462 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
463 data.fontDescriptions,
464 data.fontDescriptions + data.numberOfFonts );
467 LayoutOptions options;
468 options.align = false;
469 CreateTextModel( data.text,
477 // Call the Align method.
478 MetricsPtr metrics = Metrics::New( fontClient );
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, -12.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,
1675 struct LineRun line01 =
1687 struct LineRun line02 =
1699 struct LineRun line03 =
1711 struct LineRun line04 =
1723 struct LineRun line05 =
1735 struct LineRun line06 =
1747 struct LineRun line07 =
1759 struct LineRun line08 =
1771 struct LineRun line09 =
1783 struct LineRun line10 =
1795 struct LineRun line11 =
1807 struct LineRun line12 =
1819 struct LineRun line13 =
1831 struct LineRun line14 =
1843 struct LineRun line15 =
1855 struct LineRun line16 =
1867 struct LineRun line17 =
1879 struct LineRun line18 =
1891 struct LineRun line19 =
1903 Vector<LineRun> lines;
1904 lines.PushBack( line01 );
1905 lines.PushBack( line02 );
1906 lines.PushBack( line03 );
1907 lines.PushBack( line04 );
1908 lines.PushBack( line05 );
1909 lines.PushBack( line06 );
1910 lines.PushBack( line07 );
1911 lines.PushBack( line08 );
1912 lines.PushBack( line09 );
1913 lines.PushBack( line10 );
1914 lines.PushBack( line11 );
1915 lines.PushBack( line12 );
1916 lines.PushBack( line13 );
1917 lines.PushBack( line14 );
1918 lines.PushBack( line15 );
1919 lines.PushBack( line16 );
1920 lines.PushBack( line17 );
1921 lines.PushBack( line18 );
1922 lines.PushBack( line19 );
1924 LayoutTextData data =
1926 "Layout bidirectional text.",
1927 "Hello world demo שלום עולם.\n"
1928 "مرحبا بالعالم hello world שלום עולם\n"
1929 "שלום עולם hello world demo.\n"
1930 "hello world مرحبا بالعالم שלום עולם\n"
1931 "Hello world demo שלום עולם.\n"
1932 "שלום עולם hello world مرحبا بالعالم\n",
1935 fontDescriptionRuns.Begin(),
1941 LayoutEngine::MULTI_LINE_BOX,
1948 if( !LayoutTextTest( data ) )
1950 tet_result(TET_FAIL);
1953 tet_result(TET_PASS);
1957 int UtcDaliTextUpdateLayout02(void)
1959 ToolkitTestApplication application;
1960 tet_infoline(" UtcDaliTextUpdateLayout02");
1962 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
1964 const std::string fontLatin( "TizenSans" );
1965 const std::string fontHebrew( "TizenSansHebrew" );
1966 const std::string fontArabic( "TizenSansArabic" );
1968 // Set a known font description
1969 FontDescriptionRun fontDescriptionRun01;
1970 fontDescriptionRun01.characterRun.characterIndex = 0u;
1971 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1972 fontDescriptionRun01.familyLength = fontLatin.size();
1973 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1974 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1975 fontDescriptionRun01.familyDefined = true;
1976 fontDescriptionRun01.weightDefined = false;
1977 fontDescriptionRun01.widthDefined = false;
1978 fontDescriptionRun01.slantDefined = false;
1979 fontDescriptionRun01.sizeDefined = false;
1981 // Set a known font description
1982 FontDescriptionRun fontDescriptionRun02;
1983 fontDescriptionRun02.characterRun.characterIndex = 17u;
1984 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
1985 fontDescriptionRun02.familyLength = fontHebrew.size();
1986 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1987 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1988 fontDescriptionRun02.familyDefined = true;
1989 fontDescriptionRun02.weightDefined = false;
1990 fontDescriptionRun02.widthDefined = false;
1991 fontDescriptionRun02.slantDefined = false;
1992 fontDescriptionRun02.sizeDefined = false;
1994 // Set a known font description
1995 FontDescriptionRun fontDescriptionRun03;
1996 fontDescriptionRun03.characterRun.characterIndex = 28u;
1997 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
1998 fontDescriptionRun03.familyLength = fontArabic.size();
1999 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2000 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2001 fontDescriptionRun03.familyDefined = true;
2002 fontDescriptionRun03.weightDefined = false;
2003 fontDescriptionRun03.widthDefined = false;
2004 fontDescriptionRun03.slantDefined = false;
2005 fontDescriptionRun03.sizeDefined = false;
2007 // Set a known font description
2008 FontDescriptionRun fontDescriptionRun04;
2009 fontDescriptionRun04.characterRun.characterIndex = 42u;
2010 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2011 fontDescriptionRun04.familyLength = fontLatin.size();
2012 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2013 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2014 fontDescriptionRun04.familyDefined = true;
2015 fontDescriptionRun04.weightDefined = false;
2016 fontDescriptionRun04.widthDefined = false;
2017 fontDescriptionRun04.slantDefined = false;
2018 fontDescriptionRun04.sizeDefined = false;
2020 // Set a known font description
2021 FontDescriptionRun fontDescriptionRun05;
2022 fontDescriptionRun05.characterRun.characterIndex = 54u;
2023 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2024 fontDescriptionRun05.familyLength = fontHebrew.size();
2025 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2026 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2027 fontDescriptionRun05.familyDefined = true;
2028 fontDescriptionRun05.weightDefined = false;
2029 fontDescriptionRun05.widthDefined = false;
2030 fontDescriptionRun05.slantDefined = false;
2031 fontDescriptionRun05.sizeDefined = false;
2033 // Set a known font description
2034 FontDescriptionRun fontDescriptionRun06;
2035 fontDescriptionRun06.characterRun.characterIndex = 64u;
2036 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2037 fontDescriptionRun06.familyLength = fontHebrew.size();
2038 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2039 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2040 fontDescriptionRun06.familyDefined = true;
2041 fontDescriptionRun06.weightDefined = false;
2042 fontDescriptionRun06.widthDefined = false;
2043 fontDescriptionRun06.slantDefined = false;
2044 fontDescriptionRun06.sizeDefined = false;
2046 // Set a known font description
2047 FontDescriptionRun fontDescriptionRun07;
2048 fontDescriptionRun07.characterRun.characterIndex = 74u;
2049 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2050 fontDescriptionRun07.familyLength = fontLatin.size();
2051 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2052 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2053 fontDescriptionRun07.familyDefined = true;
2054 fontDescriptionRun07.weightDefined = false;
2055 fontDescriptionRun07.widthDefined = false;
2056 fontDescriptionRun07.slantDefined = false;
2057 fontDescriptionRun07.sizeDefined = false;
2059 // Set a known font description
2060 FontDescriptionRun fontDescriptionRun08;
2061 fontDescriptionRun08.characterRun.characterIndex = 92u;
2062 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2063 fontDescriptionRun08.familyLength = fontLatin.size();
2064 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2065 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2066 fontDescriptionRun08.familyDefined = true;
2067 fontDescriptionRun08.weightDefined = false;
2068 fontDescriptionRun08.widthDefined = false;
2069 fontDescriptionRun08.slantDefined = false;
2070 fontDescriptionRun08.sizeDefined = false;
2072 // Set a known font description
2073 FontDescriptionRun fontDescriptionRun09;
2074 fontDescriptionRun09.characterRun.characterIndex = 104u;
2075 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2076 fontDescriptionRun09.familyLength = fontArabic.size();
2077 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2078 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2079 fontDescriptionRun09.familyDefined = true;
2080 fontDescriptionRun09.weightDefined = false;
2081 fontDescriptionRun09.widthDefined = false;
2082 fontDescriptionRun09.slantDefined = false;
2083 fontDescriptionRun09.sizeDefined = false;
2085 // Set a known font description
2086 FontDescriptionRun fontDescriptionRun10;
2087 fontDescriptionRun10.characterRun.characterIndex = 118u;
2088 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2089 fontDescriptionRun10.familyLength = fontHebrew.size();
2090 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2091 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2092 fontDescriptionRun10.familyDefined = true;
2093 fontDescriptionRun10.weightDefined = false;
2094 fontDescriptionRun10.widthDefined = false;
2095 fontDescriptionRun10.slantDefined = false;
2096 fontDescriptionRun10.sizeDefined = false;
2098 // Set a known font description
2099 FontDescriptionRun fontDescriptionRun11;
2100 fontDescriptionRun11.characterRun.characterIndex = 128u;
2101 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2102 fontDescriptionRun11.familyLength = fontLatin.size();
2103 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2104 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2105 fontDescriptionRun11.familyDefined = true;
2106 fontDescriptionRun11.weightDefined = false;
2107 fontDescriptionRun11.widthDefined = false;
2108 fontDescriptionRun11.slantDefined = false;
2109 fontDescriptionRun11.sizeDefined = false;
2111 // Set a known font description
2112 FontDescriptionRun fontDescriptionRun12;
2113 fontDescriptionRun12.characterRun.characterIndex = 145u;
2114 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2115 fontDescriptionRun12.familyLength = fontHebrew.size();
2116 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2117 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2118 fontDescriptionRun12.familyDefined = true;
2119 fontDescriptionRun12.weightDefined = false;
2120 fontDescriptionRun12.widthDefined = false;
2121 fontDescriptionRun12.slantDefined = false;
2122 fontDescriptionRun12.sizeDefined = false;
2124 // Set a known font description
2125 FontDescriptionRun fontDescriptionRun13;
2126 fontDescriptionRun13.characterRun.characterIndex = 156u;
2127 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2128 fontDescriptionRun13.familyLength = fontHebrew.size();
2129 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2130 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2131 fontDescriptionRun13.familyDefined = true;
2132 fontDescriptionRun13.weightDefined = false;
2133 fontDescriptionRun13.widthDefined = false;
2134 fontDescriptionRun13.slantDefined = false;
2135 fontDescriptionRun13.sizeDefined = false;
2137 // Set a known font description
2138 FontDescriptionRun fontDescriptionRun14;
2139 fontDescriptionRun14.characterRun.characterIndex = 166u;
2140 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2141 fontDescriptionRun14.familyLength = fontLatin.size();
2142 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2143 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2144 fontDescriptionRun14.familyDefined = true;
2145 fontDescriptionRun14.weightDefined = false;
2146 fontDescriptionRun14.widthDefined = false;
2147 fontDescriptionRun14.slantDefined = false;
2148 fontDescriptionRun14.sizeDefined = false;
2150 // Set a known font description
2151 FontDescriptionRun fontDescriptionRun15;
2152 fontDescriptionRun15.characterRun.characterIndex = 178u;
2153 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2154 fontDescriptionRun15.familyLength = fontArabic.size();
2155 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2156 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2157 fontDescriptionRun15.familyDefined = true;
2158 fontDescriptionRun15.weightDefined = false;
2159 fontDescriptionRun15.widthDefined = false;
2160 fontDescriptionRun15.slantDefined = false;
2161 fontDescriptionRun15.sizeDefined = false;
2163 Vector<FontDescriptionRun> fontDescriptionRuns;
2164 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2165 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2166 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2167 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2168 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2169 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2170 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2171 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2172 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2173 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2174 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2175 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2176 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2177 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2178 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2179 Size textArea(100.f, 300.f);
2180 Size layoutSize(92.f, 380.f);
2183 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,
2184 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,
2185 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2186 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,
2187 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,
2188 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2189 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,
2190 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,
2191 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2192 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,
2193 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,
2194 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2195 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,
2196 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,
2197 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2198 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,
2199 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,
2200 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,
2202 struct LineRun line01 =
2214 struct LineRun line02 =
2226 struct LineRun line03 =
2238 struct LineRun line04 =
2250 struct LineRun line05 =
2262 struct LineRun line06 =
2274 struct LineRun line07 =
2286 struct LineRun line08 =
2298 struct LineRun line09 =
2310 struct LineRun line10 =
2322 struct LineRun line11 =
2334 struct LineRun line12 =
2346 struct LineRun line13 =
2358 struct LineRun line14 =
2370 struct LineRun line15 =
2382 struct LineRun line16 =
2394 struct LineRun line17 =
2406 struct LineRun line18 =
2418 struct LineRun line19 =
2430 Vector<LineRun> lines;
2431 lines.PushBack( line01 );
2432 lines.PushBack( line02 );
2433 lines.PushBack( line03 );
2434 lines.PushBack( line04 );
2435 lines.PushBack( line05 );
2436 lines.PushBack( line06 );
2437 lines.PushBack( line07 );
2438 lines.PushBack( line08 );
2439 lines.PushBack( line09 );
2440 lines.PushBack( line10 );
2441 lines.PushBack( line11 );
2442 lines.PushBack( line12 );
2443 lines.PushBack( line13 );
2444 lines.PushBack( line14 );
2445 lines.PushBack( line15 );
2446 lines.PushBack( line16 );
2447 lines.PushBack( line17 );
2448 lines.PushBack( line18 );
2449 lines.PushBack( line19 );
2451 LayoutTextData data =
2453 "Layout bidirectional text.",
2454 "Hello world demo שלום עולם.\n"
2455 "مرحبا بالعالم hello world שלום עולם\n"
2456 "שלום עולם hello world demo.\n"
2457 "hello world مرحبا بالعالم שלום עולם\n"
2458 "Hello world demo שלום עולם.\n"
2459 "שלום עולם hello world مرحبا بالعالم\n",
2462 fontDescriptionRuns.Begin(),
2468 LayoutEngine::MULTI_LINE_BOX,
2475 if( !LayoutTextTest( data ) )
2477 tet_result(TET_FAIL);
2480 tet_result(TET_PASS);
2484 int UtcDaliTextUpdateLayout03(void)
2486 ToolkitTestApplication application;
2487 tet_infoline(" UtcDaliTextUpdateLayout03");
2489 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2491 const std::string fontLatin( "TizenSans" );
2492 const std::string fontHebrew( "TizenSansHebrew" );
2493 const std::string fontArabic( "TizenSansArabic" );
2495 // Set a known font description
2496 FontDescriptionRun fontDescriptionRun01;
2497 fontDescriptionRun01.characterRun.characterIndex = 0u;
2498 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2499 fontDescriptionRun01.familyLength = fontLatin.size();
2500 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2501 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2502 fontDescriptionRun01.familyDefined = true;
2503 fontDescriptionRun01.weightDefined = false;
2504 fontDescriptionRun01.widthDefined = false;
2505 fontDescriptionRun01.slantDefined = false;
2506 fontDescriptionRun01.sizeDefined = false;
2508 // Set a known font description
2509 FontDescriptionRun fontDescriptionRun02;
2510 fontDescriptionRun02.characterRun.characterIndex = 17u;
2511 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
2512 fontDescriptionRun02.familyLength = fontHebrew.size();
2513 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2514 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2515 fontDescriptionRun02.familyDefined = true;
2516 fontDescriptionRun02.weightDefined = false;
2517 fontDescriptionRun02.widthDefined = false;
2518 fontDescriptionRun02.slantDefined = false;
2519 fontDescriptionRun02.sizeDefined = false;
2521 // Set a known font description
2522 FontDescriptionRun fontDescriptionRun03;
2523 fontDescriptionRun03.characterRun.characterIndex = 28u;
2524 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
2525 fontDescriptionRun03.familyLength = fontArabic.size();
2526 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2527 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2528 fontDescriptionRun03.familyDefined = true;
2529 fontDescriptionRun03.weightDefined = false;
2530 fontDescriptionRun03.widthDefined = false;
2531 fontDescriptionRun03.slantDefined = false;
2532 fontDescriptionRun03.sizeDefined = false;
2534 // Set a known font description
2535 FontDescriptionRun fontDescriptionRun04;
2536 fontDescriptionRun04.characterRun.characterIndex = 42u;
2537 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2538 fontDescriptionRun04.familyLength = fontLatin.size();
2539 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2540 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2541 fontDescriptionRun04.familyDefined = true;
2542 fontDescriptionRun04.weightDefined = false;
2543 fontDescriptionRun04.widthDefined = false;
2544 fontDescriptionRun04.slantDefined = false;
2545 fontDescriptionRun04.sizeDefined = false;
2547 // Set a known font description
2548 FontDescriptionRun fontDescriptionRun05;
2549 fontDescriptionRun05.characterRun.characterIndex = 54u;
2550 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2551 fontDescriptionRun05.familyLength = fontHebrew.size();
2552 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2553 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2554 fontDescriptionRun05.familyDefined = true;
2555 fontDescriptionRun05.weightDefined = false;
2556 fontDescriptionRun05.widthDefined = false;
2557 fontDescriptionRun05.slantDefined = false;
2558 fontDescriptionRun05.sizeDefined = false;
2560 // Set a known font description
2561 FontDescriptionRun fontDescriptionRun06;
2562 fontDescriptionRun06.characterRun.characterIndex = 64u;
2563 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2564 fontDescriptionRun06.familyLength = fontHebrew.size();
2565 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2566 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2567 fontDescriptionRun06.familyDefined = true;
2568 fontDescriptionRun06.weightDefined = false;
2569 fontDescriptionRun06.widthDefined = false;
2570 fontDescriptionRun06.slantDefined = false;
2571 fontDescriptionRun06.sizeDefined = false;
2573 // Set a known font description
2574 FontDescriptionRun fontDescriptionRun07;
2575 fontDescriptionRun07.characterRun.characterIndex = 74u;
2576 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2577 fontDescriptionRun07.familyLength = fontLatin.size();
2578 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2579 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2580 fontDescriptionRun07.familyDefined = true;
2581 fontDescriptionRun07.weightDefined = false;
2582 fontDescriptionRun07.widthDefined = false;
2583 fontDescriptionRun07.slantDefined = false;
2584 fontDescriptionRun07.sizeDefined = false;
2586 // Set a known font description
2587 FontDescriptionRun fontDescriptionRun08;
2588 fontDescriptionRun08.characterRun.characterIndex = 92u;
2589 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2590 fontDescriptionRun08.familyLength = fontLatin.size();
2591 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2592 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2593 fontDescriptionRun08.familyDefined = true;
2594 fontDescriptionRun08.weightDefined = false;
2595 fontDescriptionRun08.widthDefined = false;
2596 fontDescriptionRun08.slantDefined = false;
2597 fontDescriptionRun08.sizeDefined = false;
2599 // Set a known font description
2600 FontDescriptionRun fontDescriptionRun09;
2601 fontDescriptionRun09.characterRun.characterIndex = 104u;
2602 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2603 fontDescriptionRun09.familyLength = fontArabic.size();
2604 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2605 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2606 fontDescriptionRun09.familyDefined = true;
2607 fontDescriptionRun09.weightDefined = false;
2608 fontDescriptionRun09.widthDefined = false;
2609 fontDescriptionRun09.slantDefined = false;
2610 fontDescriptionRun09.sizeDefined = false;
2612 // Set a known font description
2613 FontDescriptionRun fontDescriptionRun10;
2614 fontDescriptionRun10.characterRun.characterIndex = 118u;
2615 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2616 fontDescriptionRun10.familyLength = fontHebrew.size();
2617 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2618 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2619 fontDescriptionRun10.familyDefined = true;
2620 fontDescriptionRun10.weightDefined = false;
2621 fontDescriptionRun10.widthDefined = false;
2622 fontDescriptionRun10.slantDefined = false;
2623 fontDescriptionRun10.sizeDefined = false;
2625 // Set a known font description
2626 FontDescriptionRun fontDescriptionRun11;
2627 fontDescriptionRun11.characterRun.characterIndex = 128u;
2628 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2629 fontDescriptionRun11.familyLength = fontLatin.size();
2630 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2631 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2632 fontDescriptionRun11.familyDefined = true;
2633 fontDescriptionRun11.weightDefined = false;
2634 fontDescriptionRun11.widthDefined = false;
2635 fontDescriptionRun11.slantDefined = false;
2636 fontDescriptionRun11.sizeDefined = false;
2638 // Set a known font description
2639 FontDescriptionRun fontDescriptionRun12;
2640 fontDescriptionRun12.characterRun.characterIndex = 145u;
2641 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2642 fontDescriptionRun12.familyLength = fontHebrew.size();
2643 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2644 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2645 fontDescriptionRun12.familyDefined = true;
2646 fontDescriptionRun12.weightDefined = false;
2647 fontDescriptionRun12.widthDefined = false;
2648 fontDescriptionRun12.slantDefined = false;
2649 fontDescriptionRun12.sizeDefined = false;
2651 // Set a known font description
2652 FontDescriptionRun fontDescriptionRun13;
2653 fontDescriptionRun13.characterRun.characterIndex = 156u;
2654 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2655 fontDescriptionRun13.familyLength = fontHebrew.size();
2656 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2657 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2658 fontDescriptionRun13.familyDefined = true;
2659 fontDescriptionRun13.weightDefined = false;
2660 fontDescriptionRun13.widthDefined = false;
2661 fontDescriptionRun13.slantDefined = false;
2662 fontDescriptionRun13.sizeDefined = false;
2664 // Set a known font description
2665 FontDescriptionRun fontDescriptionRun14;
2666 fontDescriptionRun14.characterRun.characterIndex = 166u;
2667 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2668 fontDescriptionRun14.familyLength = fontLatin.size();
2669 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2670 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2671 fontDescriptionRun14.familyDefined = true;
2672 fontDescriptionRun14.weightDefined = false;
2673 fontDescriptionRun14.widthDefined = false;
2674 fontDescriptionRun14.slantDefined = false;
2675 fontDescriptionRun14.sizeDefined = false;
2677 // Set a known font description
2678 FontDescriptionRun fontDescriptionRun15;
2679 fontDescriptionRun15.characterRun.characterIndex = 178u;
2680 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2681 fontDescriptionRun15.familyLength = fontArabic.size();
2682 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2683 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2684 fontDescriptionRun15.familyDefined = true;
2685 fontDescriptionRun15.weightDefined = false;
2686 fontDescriptionRun15.widthDefined = false;
2687 fontDescriptionRun15.slantDefined = false;
2688 fontDescriptionRun15.sizeDefined = false;
2690 Vector<FontDescriptionRun> fontDescriptionRuns;
2691 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2692 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2693 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2694 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2695 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2696 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2697 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2698 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2699 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2700 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2701 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2702 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2703 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2704 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2705 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2706 Size textArea(100.f, 300.f);
2707 Size layoutSize(92.f, 380.f);
2710 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,
2711 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,
2712 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2713 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,
2714 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,
2715 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2716 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,
2717 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,
2718 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.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, -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,
2721 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2722 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,
2723 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,
2724 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2725 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,
2726 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,
2727 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,
2729 struct LineRun line01 =
2741 struct LineRun line02 =
2753 struct LineRun line03 =
2765 struct LineRun line04 =
2777 struct LineRun line05 =
2789 struct LineRun line06 =
2801 struct LineRun line07 =
2813 struct LineRun line08 =
2825 struct LineRun line09 =
2837 struct LineRun line10 =
2849 struct LineRun line11 =
2861 struct LineRun line12 =
2873 struct LineRun line13 =
2885 struct LineRun line14 =
2897 struct LineRun line15 =
2909 struct LineRun line16 =
2921 struct LineRun line17 =
2933 struct LineRun line18 =
2945 struct LineRun line19 =
2957 Vector<LineRun> lines;
2958 lines.PushBack( line01 );
2959 lines.PushBack( line02 );
2960 lines.PushBack( line03 );
2961 lines.PushBack( line04 );
2962 lines.PushBack( line05 );
2963 lines.PushBack( line06 );
2964 lines.PushBack( line07 );
2965 lines.PushBack( line08 );
2966 lines.PushBack( line09 );
2967 lines.PushBack( line10 );
2968 lines.PushBack( line11 );
2969 lines.PushBack( line12 );
2970 lines.PushBack( line13 );
2971 lines.PushBack( line14 );
2972 lines.PushBack( line15 );
2973 lines.PushBack( line16 );
2974 lines.PushBack( line17 );
2975 lines.PushBack( line18 );
2976 lines.PushBack( line19 );
2978 LayoutTextData data =
2980 "Layout bidirectional text.",
2981 "Hello world demo שלום עולם.\n"
2982 "مرحبا بالعالم hello world שלום עולם\n"
2983 "שלום עולם hello world demo.\n"
2984 "hello world مرحبا بالعالم שלום עולם\n"
2985 "Hello world demo שלום עולם.\n"
2986 "שלום עולם hello world مرحبا بالعالم\n",
2989 fontDescriptionRuns.Begin(),
2995 LayoutEngine::MULTI_LINE_BOX,
3002 if( !LayoutTextTest( data ) )
3004 tet_result(TET_FAIL);
3007 tet_result(TET_PASS);
3011 int UtcDaliTextLayoutEllipsis01(void)
3013 ToolkitTestApplication application;
3014 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3016 // Layout single-line LTR text with ellipsis.
3018 const std::string fontLatin( "TizenSans" );
3020 // Set a known font description
3021 FontDescriptionRun fontDescriptionRun01;
3022 fontDescriptionRun01.characterRun.characterIndex = 0u;
3023 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3024 fontDescriptionRun01.familyLength = fontLatin.size();
3025 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3026 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3027 fontDescriptionRun01.familyDefined = true;
3028 fontDescriptionRun01.weightDefined = false;
3029 fontDescriptionRun01.widthDefined = false;
3030 fontDescriptionRun01.slantDefined = false;
3031 fontDescriptionRun01.sizeDefined = false;
3033 Vector<FontDescriptionRun> fontDescriptionRuns;
3034 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3036 struct LineRun line01 =
3048 Vector<LineRun> lines;
3049 lines.PushBack( line01 );
3053 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,
3056 Size textArea( 100.f, 50.f );
3057 Size layoutSize( 100.f, 20.f );
3059 LayoutTextData data =
3061 "Layout single-line LTR text with ellipsis.",
3062 "Hello world demo hello world demo hello world demo.",
3065 fontDescriptionRuns.Begin(),
3071 LayoutEngine::SINGLE_LINE_BOX,
3078 if( !LayoutTextTest( data ) )
3080 tet_result(TET_FAIL);
3083 tet_result(TET_PASS);
3087 int UtcDaliTextLayoutEllipsis02(void)
3089 ToolkitTestApplication application;
3090 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3092 // Layout multi-line LTR text with ellipsis.
3094 const std::string fontLatin( "TizenSans" );
3096 // Set a known font description
3097 FontDescriptionRun fontDescriptionRun01;
3098 fontDescriptionRun01.characterRun.characterIndex = 0u;
3099 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3100 fontDescriptionRun01.familyLength = fontLatin.size();
3101 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3102 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3103 fontDescriptionRun01.familyDefined = true;
3104 fontDescriptionRun01.weightDefined = false;
3105 fontDescriptionRun01.widthDefined = false;
3106 fontDescriptionRun01.slantDefined = false;
3107 fontDescriptionRun01.sizeDefined = false;
3109 Vector<FontDescriptionRun> fontDescriptionRuns;
3110 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3112 struct LineRun line01 =
3124 struct LineRun line02 =
3136 Vector<LineRun> lines;
3137 lines.PushBack( line01 );
3138 lines.PushBack( line02 );
3142 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,
3143 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -13.f, 53.f, -9.f, 61.f, -13.f, 65.f, -13.f, 68.f, -9.f, 77.f, -0.f, 81.f, -9.f,
3146 Size textArea( 100.f, 50.f );
3147 Size layoutSize( 100.f, 60.f );
3149 LayoutTextData data =
3151 "Layout multi-line LTR text with ellipsis.",
3152 "Hello world demo hello world demo hello world demo.",
3155 fontDescriptionRuns.Begin(),
3161 LayoutEngine::MULTI_LINE_BOX,
3168 if( !LayoutTextTest( data ) )
3170 tet_result(TET_FAIL);
3173 tet_result(TET_PASS);
3177 int UtcDaliTextLayoutEllipsis03(void)
3179 ToolkitTestApplication application;
3180 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3182 // Layout single-line RTL text with ellipsis.
3184 const std::string fontHebrew( "TizenSansHebrew" );
3185 const std::string fontArabic( "TizenSansArabic" );
3187 // Set a known font description
3188 FontDescriptionRun fontDescriptionRun01;
3189 fontDescriptionRun01.characterRun.characterIndex = 0u;
3190 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3191 fontDescriptionRun01.familyLength = fontHebrew.size();
3192 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3193 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3194 fontDescriptionRun01.familyDefined = true;
3195 fontDescriptionRun01.weightDefined = false;
3196 fontDescriptionRun01.widthDefined = false;
3197 fontDescriptionRun01.slantDefined = false;
3198 fontDescriptionRun01.sizeDefined = false;
3200 FontDescriptionRun fontDescriptionRun02;
3201 fontDescriptionRun02.characterRun.characterIndex = 10u;
3202 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3203 fontDescriptionRun02.familyLength = fontArabic.size();
3204 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3205 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3206 fontDescriptionRun02.familyDefined = true;
3207 fontDescriptionRun02.weightDefined = false;
3208 fontDescriptionRun02.widthDefined = false;
3209 fontDescriptionRun02.slantDefined = false;
3210 fontDescriptionRun02.sizeDefined = false;
3212 FontDescriptionRun fontDescriptionRun03;
3213 fontDescriptionRun03.characterRun.characterIndex = 24u;
3214 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3215 fontDescriptionRun03.familyLength = fontHebrew.size();
3216 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3217 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3218 fontDescriptionRun03.familyDefined = true;
3219 fontDescriptionRun03.weightDefined = false;
3220 fontDescriptionRun03.widthDefined = false;
3221 fontDescriptionRun03.slantDefined = false;
3222 fontDescriptionRun03.sizeDefined = false;
3224 FontDescriptionRun fontDescriptionRun04;
3225 fontDescriptionRun04.characterRun.characterIndex = 34u;
3226 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3227 fontDescriptionRun04.familyLength = fontArabic.size();
3228 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3229 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3230 fontDescriptionRun04.familyDefined = true;
3231 fontDescriptionRun04.weightDefined = false;
3232 fontDescriptionRun04.widthDefined = false;
3233 fontDescriptionRun04.slantDefined = false;
3234 fontDescriptionRun04.sizeDefined = false;
3236 FontDescriptionRun fontDescriptionRun05;
3237 fontDescriptionRun05.characterRun.characterIndex = 48u;
3238 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3239 fontDescriptionRun05.familyLength = fontHebrew.size();
3240 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3241 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3242 fontDescriptionRun05.familyDefined = true;
3243 fontDescriptionRun05.weightDefined = false;
3244 fontDescriptionRun05.widthDefined = false;
3245 fontDescriptionRun05.slantDefined = false;
3246 fontDescriptionRun05.sizeDefined = false;
3248 FontDescriptionRun fontDescriptionRun06;
3249 fontDescriptionRun06.characterRun.characterIndex = 58u;
3250 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3251 fontDescriptionRun06.familyLength = fontArabic.size();
3252 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3253 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3254 fontDescriptionRun06.familyDefined = true;
3255 fontDescriptionRun06.weightDefined = false;
3256 fontDescriptionRun06.widthDefined = false;
3257 fontDescriptionRun06.slantDefined = false;
3258 fontDescriptionRun06.sizeDefined = false;
3260 Vector<FontDescriptionRun> fontDescriptionRuns;
3261 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3262 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3263 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3264 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3265 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3266 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3268 struct LineRun line01 =
3280 Vector<LineRun> lines;
3281 lines.PushBack( line01 );
3285 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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
3288 Size textArea( 100.f, 50.f );
3289 Size layoutSize( 100.f, 20.f );
3291 LayoutTextData data =
3293 "Layout single-line RTL text with ellipsis.",
3294 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3297 fontDescriptionRuns.Begin(),
3303 LayoutEngine::SINGLE_LINE_BOX,
3310 if( !LayoutTextTest( data ) )
3312 tet_result(TET_FAIL);
3315 tet_result(TET_PASS);
3319 int UtcDaliTextLayoutEllipsis04(void)
3321 ToolkitTestApplication application;
3322 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3324 // Layout multi-line RTL text with ellipsis.
3326 const std::string fontHebrew( "TizenSansHebrew" );
3327 const std::string fontArabic( "TizenSansArabic" );
3329 // Set a known font description
3330 FontDescriptionRun fontDescriptionRun01;
3331 fontDescriptionRun01.characterRun.characterIndex = 0u;
3332 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3333 fontDescriptionRun01.familyLength = fontHebrew.size();
3334 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3335 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3336 fontDescriptionRun01.familyDefined = true;
3337 fontDescriptionRun01.weightDefined = false;
3338 fontDescriptionRun01.widthDefined = false;
3339 fontDescriptionRun01.slantDefined = false;
3340 fontDescriptionRun01.sizeDefined = false;
3342 FontDescriptionRun fontDescriptionRun02;
3343 fontDescriptionRun02.characterRun.characterIndex = 10u;
3344 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3345 fontDescriptionRun02.familyLength = fontArabic.size();
3346 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3347 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3348 fontDescriptionRun02.familyDefined = true;
3349 fontDescriptionRun02.weightDefined = false;
3350 fontDescriptionRun02.widthDefined = false;
3351 fontDescriptionRun02.slantDefined = false;
3352 fontDescriptionRun02.sizeDefined = false;
3354 FontDescriptionRun fontDescriptionRun03;
3355 fontDescriptionRun03.characterRun.characterIndex = 24u;
3356 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3357 fontDescriptionRun03.familyLength = fontHebrew.size();
3358 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3359 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3360 fontDescriptionRun03.familyDefined = true;
3361 fontDescriptionRun03.weightDefined = false;
3362 fontDescriptionRun03.widthDefined = false;
3363 fontDescriptionRun03.slantDefined = false;
3364 fontDescriptionRun03.sizeDefined = false;
3366 FontDescriptionRun fontDescriptionRun04;
3367 fontDescriptionRun04.characterRun.characterIndex = 34u;
3368 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3369 fontDescriptionRun04.familyLength = fontArabic.size();
3370 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3371 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3372 fontDescriptionRun04.familyDefined = true;
3373 fontDescriptionRun04.weightDefined = false;
3374 fontDescriptionRun04.widthDefined = false;
3375 fontDescriptionRun04.slantDefined = false;
3376 fontDescriptionRun04.sizeDefined = false;
3378 FontDescriptionRun fontDescriptionRun05;
3379 fontDescriptionRun05.characterRun.characterIndex = 48u;
3380 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3381 fontDescriptionRun05.familyLength = fontHebrew.size();
3382 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3383 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3384 fontDescriptionRun05.familyDefined = true;
3385 fontDescriptionRun05.weightDefined = false;
3386 fontDescriptionRun05.widthDefined = false;
3387 fontDescriptionRun05.slantDefined = false;
3388 fontDescriptionRun05.sizeDefined = false;
3390 FontDescriptionRun fontDescriptionRun06;
3391 fontDescriptionRun06.characterRun.characterIndex = 58u;
3392 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3393 fontDescriptionRun06.familyLength = fontArabic.size();
3394 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3395 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3396 fontDescriptionRun06.familyDefined = true;
3397 fontDescriptionRun06.weightDefined = false;
3398 fontDescriptionRun06.widthDefined = false;
3399 fontDescriptionRun06.slantDefined = false;
3400 fontDescriptionRun06.sizeDefined = false;
3402 Vector<FontDescriptionRun> fontDescriptionRuns;
3403 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3404 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3405 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3406 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3407 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3408 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3410 struct LineRun line01 =
3422 struct LineRun line02 =
3434 Vector<LineRun> lines;
3435 lines.PushBack( line01 );
3436 lines.PushBack( line02 );
3440 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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
3441 0.f, -7.f, 5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 28.f, -0.f, 32.f, -10.f, 43.f, -13.f, 50.f, -10.f, 55.f, -10.f, 63.f, -0.f, 68.f, -10.f, 76.f, -10.f, 81.f, -13.f, 89.f, -10.f, 97.f, -0.f,
3444 Size textArea( 100.f, 50.f );
3445 Size layoutSize( 100.f, 60.f );
3447 LayoutTextData data =
3449 "Layout single-line RTL text with ellipsis.",
3450 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3453 fontDescriptionRuns.Begin(),
3459 LayoutEngine::MULTI_LINE_BOX,
3466 if( !LayoutTextTest( data ) )
3468 tet_result(TET_FAIL);
3471 tet_result(TET_PASS);
3475 int UtcDaliTextReorderLayout01(void)
3477 ToolkitTestApplication application;
3478 tet_infoline(" UtcDaliTextReorderLayout01");
3480 // Reorder lines. No right to left characters.
3482 const std::string fontLatin( "TizenSans" );
3484 // Set a known font description
3485 FontDescriptionRun fontDescriptionRun01;
3486 fontDescriptionRun01.characterRun.characterIndex = 0u;
3487 fontDescriptionRun01.characterRun.numberOfCharacters = 11u;
3488 fontDescriptionRun01.familyLength = fontLatin.size();
3489 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3490 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3491 fontDescriptionRun01.familyDefined = true;
3492 fontDescriptionRun01.weightDefined = false;
3493 fontDescriptionRun01.widthDefined = false;
3494 fontDescriptionRun01.slantDefined = false;
3495 fontDescriptionRun01.sizeDefined = false;
3497 Vector<FontDescriptionRun> fontDescriptionRuns;
3498 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3502 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,
3505 Size textArea( 100.f, 300.f );
3507 ReLayoutRightToLeftLinesData data =
3509 "Text with no right to left text.",
3513 fontDescriptionRuns.Begin(),
3520 if( !ReLayoutRightToLeftLinesTest( data ) )
3522 tet_result(TET_FAIL);
3525 tet_result(TET_PASS);