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-utils.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 Layout::Engine::Type layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << line.width << std::endl;
66 std::cout << " ascender : " << line.ascender << std::endl;
67 std::cout << " descender : " << line.descender << std::endl;
68 std::cout << " extraLength : " << line.extraLength << std::endl;
69 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
70 std::cout << " direction : " << line.direction << std::endl;
71 std::cout << " ellipsis : " << line.ellipsis << std::endl;
74 bool LayoutTextTest( const LayoutTextData& data )
77 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
78 fontClient.SetDpi( 96u, 96u );
80 char* pathNamePtr = get_current_dir_name();
81 const std::string pathName( pathNamePtr );
84 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 // 1) Create the model.
89 LogicalModelPtr logicalModel;
90 VisualModelPtr visualModel;
94 Vector<FontDescriptionRun> fontDescriptionRuns;
95 if( 0u != data.numberOfFonts )
97 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
98 data.fontDescriptions,
99 data.fontDescriptions + data.numberOfFonts );
102 LayoutOptions options;
103 options.reorder = false;
104 options.align = false;
105 CreateTextModel( data.text,
114 // 2) Clear the layout.
115 Vector<LineRun>& lines = visualModel->mLines;
117 const Length numberOfCharacters = logicalModel->mText.Count();
118 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
119 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
120 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
122 LineIndex startRemoveIndex = 0u;
124 if( 0u != lines.Count() )
126 startRemoveIndex = lines.Count();
127 LineIndex endRemoveIndex = startRemoveIndex;
128 ClearGlyphRuns( data.startIndex,
129 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
134 // Update the character runs of the lines.
135 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
136 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
137 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
138 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
139 ClearCharacterRuns( startCharacterIndex,
140 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
145 lines.Erase( lines.Begin() + startRemoveIndex,
146 lines.Begin() + endRemoveIndex );
149 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
151 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
152 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
155 Layout::Engine engine;
156 engine.SetMetrics( metrics );
157 engine.SetLayout( data.layout );
159 const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
161 Layout::Parameters layoutParameters( data.textArea,
162 logicalModel->mText.Begin(),
163 logicalModel->mLineBreakInfo.Begin(),
164 logicalModel->mWordBreakInfo.Begin(),
165 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
166 visualModel->mGlyphs.Begin(),
167 visualModel->mGlyphsToCharacters.Begin(),
168 visualModel->mCharactersPerGlyph.Begin(),
169 visualModel->mCharactersToGlyph.Begin(),
170 visualModel->mGlyphsPerCharacter.Begin(),
172 Layout::HORIZONTAL_ALIGN_BEGIN );
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,
190 // 4) Compare the results.
192 if( updated != data.updated )
194 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
198 if( layoutSize != data.layoutSize )
200 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
204 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
206 const Vector2& position = *( glyphPositions.Begin() + index );
208 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
210 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
213 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
215 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
220 if( lines.Count() != data.numberOfLines )
222 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
226 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
228 const LineRun& line = *( lines.Begin() + index );
229 const LineRun& expectedLine = *( data.lines + index );
231 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
233 std::cout << " Different line info for line : " << index << std::endl;
235 std::cout << " expected" << std::endl;
236 Print( expectedLine );
239 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
241 std::cout << " Different line info for line : " << index << std::endl;
243 std::cout << " expected" << std::endl;
244 Print( expectedLine );
248 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
250 std::cout << " Different line info for line : " << index << std::endl;
252 std::cout << " expected" << std::endl;
253 Print( expectedLine );
256 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
258 std::cout << " Different line info for line : " << index << std::endl;
260 std::cout << " expected" << std::endl;
261 Print( expectedLine );
265 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
267 std::cout << " Different line info for line : " << index << std::endl;
269 std::cout << " expected" << std::endl;
270 Print( expectedLine );
274 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
276 std::cout << " Different line info for line : " << index << std::endl;
278 std::cout << " expected" << std::endl;
279 Print( expectedLine );
283 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
285 std::cout << " Different line info for line : " << index << std::endl;
287 std::cout << " expected" << std::endl;
288 Print( expectedLine );
292 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
294 std::cout << " Different line info for line : " << index << std::endl;
296 std::cout << " expected" << std::endl;
297 Print( expectedLine );
301 if( line.ellipsis != expectedLine.ellipsis )
303 std::cout << " Different line info for line : " << index << std::endl;
305 std::cout << " expected" << std::endl;
306 Print( expectedLine );
310 // Do not compare the alignment offset as it's not calculated in the layout.
311 // Do not compare the line direction as it's not set in the layout.
317 //////////////////////////////////////////////////////////
319 struct ReLayoutRightToLeftLinesData
321 std::string description;
324 unsigned int numberOfFonts;
325 FontDescriptionRun* fontDescriptions;
326 unsigned int totalNumberOfGlyphs;
328 unsigned int startIndex;
329 unsigned int numberOfCharacters;
332 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
335 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
336 fontClient.SetDpi( 96u, 96u );
338 char* pathNamePtr = get_current_dir_name();
339 const std::string pathName( pathNamePtr );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
344 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
346 // 1) Create the model.
347 LogicalModelPtr logicalModel;
348 VisualModelPtr visualModel;
352 Vector<FontDescriptionRun> fontDescriptionRuns;
353 if( 0u != data.numberOfFonts )
355 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
356 data.fontDescriptions,
357 data.fontDescriptions + data.numberOfFonts );
360 LayoutOptions options;
361 options.reorder = false;
362 options.align = false;
363 CreateTextModel( data.text,
372 // 2) Call the ReLayoutRightToLeftLines() method.
373 Layout::Engine engine;
374 engine.SetMetrics( metrics );
376 Layout::Parameters layoutParameters( data.textArea,
377 logicalModel->mText.Begin(),
378 logicalModel->mLineBreakInfo.Begin(),
379 logicalModel->mWordBreakInfo.Begin(),
380 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
381 visualModel->mGlyphs.Begin(),
382 visualModel->mGlyphsToCharacters.Begin(),
383 visualModel->mCharactersPerGlyph.Begin(),
384 visualModel->mCharactersToGlyph.Begin(),
385 visualModel->mGlyphsPerCharacter.Begin(),
386 visualModel->mGlyphs.Count(),
387 Layout::HORIZONTAL_ALIGN_BEGIN );
389 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
390 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
392 engine.ReLayoutRightToLeftLines( layoutParameters,
394 data.numberOfCharacters,
395 visualModel->mGlyphPositions );
397 // 3) Compare the results.
398 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
400 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
402 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
406 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
408 const Vector2& position = *( glyphPositions.Begin() + index );
410 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
412 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
415 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
417 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
425 //////////////////////////////////////////////////////////
429 std::string description;
432 unsigned int numberOfFonts;
433 FontDescriptionRun* fontDescriptions;
434 Layout::HorizontalAlignment horizontalAlignment;
435 Layout::VerticalAlignment verticalAlignment;
436 unsigned int startIndex;
437 unsigned int numberOfCharacters;
438 unsigned int numberOfLines;
442 bool AlignTest( const AlignData& data )
445 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
446 fontClient.SetDpi( 96u, 96u );
448 char* pathNamePtr = get_current_dir_name();
449 const std::string pathName( pathNamePtr );
452 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
453 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
454 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
456 // 1) Create the model.
457 LogicalModelPtr logicalModel;
458 VisualModelPtr visualModel;
462 Vector<FontDescriptionRun> fontDescriptionRuns;
463 if( 0u != data.numberOfFonts )
465 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
466 data.fontDescriptions,
467 data.fontDescriptions + data.numberOfFonts );
470 LayoutOptions options;
471 options.align = false;
472 CreateTextModel( data.text,
481 // Call the Align method.
482 Layout::Engine engine;
483 engine.SetMetrics( metrics );
485 engine.Align( data.textArea,
487 data.numberOfCharacters,
488 data.horizontalAlignment,
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");
559 Layout::Engine engine;
561 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
563 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
564 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
566 tet_result(TET_PASS);
570 int UtcDaliTextLayoutSetGetCursorWidth(void)
572 ToolkitTestApplication application;
575 Layout::Engine engine;
577 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
579 engine.SetCursorWidth( 2 );
580 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
582 tet_result(TET_PASS);
586 int UtcDaliTextLayoutNoText(void)
588 ToolkitTestApplication application;
589 tet_infoline(" UtcDaliTextLayoutNoText");
591 Size textArea(100.f, 60.f);
592 Size layoutSize = Vector2::ZERO;
593 LayoutTextData data =
605 Layout::Engine::MULTI_LINE_BOX,
612 if( !LayoutTextTest( data ) )
614 tet_result(TET_FAIL);
617 tet_result(TET_PASS);
621 int UtcDaliTextLayoutSmallTextArea01(void)
623 ToolkitTestApplication application;
624 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
626 // Won't layout the text in multi-line if the width is too small.
628 const std::string fontFamily( "TizenSans" );
630 // Set a known font description
631 FontDescriptionRun fontDescriptionRun;
632 fontDescriptionRun.characterRun.characterIndex = 0u;
633 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
634 fontDescriptionRun.familyLength = fontFamily.size();
635 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
636 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
637 fontDescriptionRun.familyDefined = true;
638 fontDescriptionRun.weightDefined = false;
639 fontDescriptionRun.widthDefined = false;
640 fontDescriptionRun.slantDefined = false;
641 fontDescriptionRun.sizeDefined = false;
643 Vector<FontDescriptionRun> fontDescriptionRuns;
644 fontDescriptionRuns.PushBack( fontDescriptionRun );
645 Size textArea(1.f, 1.f);
646 Size layoutSize = Vector2::ZERO;
647 LayoutTextData data =
649 "Layout text in a small area",
653 fontDescriptionRuns.Begin(),
659 Layout::Engine::MULTI_LINE_BOX,
666 if( !LayoutTextTest( data ) )
668 tet_result(TET_FAIL);
671 tet_result(TET_PASS);
675 int UtcDaliTextLayoutSmallTextArea02(void)
677 ToolkitTestApplication application;
678 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
680 // Will layout the text in single line as it can be scrolled.
682 const std::string fontFamily( "TizenSans" );
684 // Set a known font description
685 FontDescriptionRun fontDescriptionRun;
686 fontDescriptionRun.characterRun.characterIndex = 0u;
687 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
688 fontDescriptionRun.familyLength = fontFamily.size();
689 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
690 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
691 fontDescriptionRun.familyDefined = true;
692 fontDescriptionRun.weightDefined = false;
693 fontDescriptionRun.widthDefined = false;
694 fontDescriptionRun.slantDefined = false;
695 fontDescriptionRun.sizeDefined = false;
697 Vector<FontDescriptionRun> fontDescriptionRuns;
698 fontDescriptionRuns.PushBack( fontDescriptionRun );
699 Size textArea(1.f, 1.f);
700 Size layoutSize(80.f, 20.f);
701 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 };
702 struct LineRun line =
714 Vector<LineRun> lines;
715 lines.PushBack( line );
717 LayoutTextData data =
719 "Layout text in a small area",
723 fontDescriptionRuns.Begin(),
729 Layout::Engine::SINGLE_LINE_BOX,
736 if( !LayoutTextTest( data ) )
738 tet_result(TET_FAIL);
741 tet_result(TET_PASS);
745 int UtcDaliTextLayoutMultilineText01(void)
747 ToolkitTestApplication application;
748 tet_infoline(" UtcDaliTextLayoutMultilineText01");
750 // Layout some lines of left to right text.
752 const std::string fontFamily( "TizenSans" );
754 // Set a known font description
755 FontDescriptionRun fontDescriptionRun1;
756 fontDescriptionRun1.characterRun.characterIndex = 0u;
757 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
758 fontDescriptionRun1.familyLength = fontFamily.size();
759 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
760 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
761 fontDescriptionRun1.familyDefined = true;
762 fontDescriptionRun1.weightDefined = false;
763 fontDescriptionRun1.widthDefined = false;
764 fontDescriptionRun1.slantDefined = false;
765 fontDescriptionRun1.sizeDefined = false;
767 FontDescriptionRun fontDescriptionRun2;
768 fontDescriptionRun2.characterRun.characterIndex = 18u;
769 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
770 fontDescriptionRun2.familyLength = fontFamily.size();
771 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
772 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
773 fontDescriptionRun2.familyDefined = true;
774 fontDescriptionRun2.weightDefined = false;
775 fontDescriptionRun2.widthDefined = false;
776 fontDescriptionRun2.slantDefined = false;
777 fontDescriptionRun2.sizeDefined = false;
779 Vector<FontDescriptionRun> fontDescriptionRuns;
780 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
781 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
782 Size textArea(100.f, 300.f);
783 Size layoutSize(95.f, 97.f);
786 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,
787 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
788 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,
789 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,
790 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
792 struct LineRun line0 =
804 struct LineRun line1 =
816 struct LineRun line2 =
828 struct LineRun line3 =
840 struct LineRun line4 =
852 Vector<LineRun> lines;
853 lines.PushBack( line0 );
854 lines.PushBack( line1 );
855 lines.PushBack( line2 );
856 lines.PushBack( line3 );
857 lines.PushBack( line4 );
859 LayoutTextData data =
861 "Layout simple multi-line text",
862 "Hello world demo.\n"
863 "Layout different lines of text.",
866 fontDescriptionRuns.Begin(),
872 Layout::Engine::MULTI_LINE_BOX,
879 if( !LayoutTextTest( data ) )
881 tet_result(TET_FAIL);
884 tet_result(TET_PASS);
888 int UtcDaliTextLayoutMultilineText02(void)
890 ToolkitTestApplication application;
891 tet_infoline(" UtcDaliTextLayoutMultilineText02");
893 // Layout some lines of bidirectional text.
895 const std::string fontFamily1( "TizenSans" );
897 // Set a known font description
898 FontDescriptionRun fontDescriptionRun1;
899 fontDescriptionRun1.characterRun.characterIndex = 0u;
900 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
901 fontDescriptionRun1.familyLength = fontFamily1.size();
902 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
903 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
904 fontDescriptionRun1.familyDefined = true;
905 fontDescriptionRun1.weightDefined = false;
906 fontDescriptionRun1.widthDefined = false;
907 fontDescriptionRun1.slantDefined = false;
908 fontDescriptionRun1.sizeDefined = false;
910 const std::string fontFamily2( "TizenSansHebrew" );
912 // Set a known font description
913 FontDescriptionRun fontDescriptionRun2;
914 fontDescriptionRun2.characterRun.characterIndex = 17u;
915 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
916 fontDescriptionRun2.familyLength = fontFamily2.size();
917 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
918 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
919 fontDescriptionRun2.familyDefined = true;
920 fontDescriptionRun2.weightDefined = false;
921 fontDescriptionRun2.widthDefined = false;
922 fontDescriptionRun2.slantDefined = false;
923 fontDescriptionRun2.sizeDefined = false;
925 const std::string fontFamily3( "TizenSans" );
927 // Set a known font description
928 FontDescriptionRun fontDescriptionRun3;
929 fontDescriptionRun3.characterRun.characterIndex = 26u;
930 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
931 fontDescriptionRun3.familyLength = fontFamily3.size();
932 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
933 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
934 fontDescriptionRun3.familyDefined = true;
935 fontDescriptionRun3.weightDefined = false;
936 fontDescriptionRun3.widthDefined = false;
937 fontDescriptionRun3.slantDefined = false;
938 fontDescriptionRun3.sizeDefined = false;
940 const std::string fontFamily4( "TizenSansHebrew" );
942 // Set a known font description
943 FontDescriptionRun fontDescriptionRun4;
944 fontDescriptionRun4.characterRun.characterIndex = 28u;
945 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
946 fontDescriptionRun4.familyLength = fontFamily4.size();
947 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
948 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
949 fontDescriptionRun4.familyDefined = true;
950 fontDescriptionRun4.weightDefined = false;
951 fontDescriptionRun4.widthDefined = false;
952 fontDescriptionRun4.slantDefined = false;
953 fontDescriptionRun4.sizeDefined = false;
955 const std::string fontFamily5( "TizenSans" );
957 // Set a known font description
958 FontDescriptionRun fontDescriptionRun5;
959 fontDescriptionRun5.characterRun.characterIndex = 38u;
960 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
961 fontDescriptionRun5.familyLength = fontFamily5.size();
962 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
963 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
964 fontDescriptionRun5.familyDefined = true;
965 fontDescriptionRun5.weightDefined = false;
966 fontDescriptionRun5.widthDefined = false;
967 fontDescriptionRun5.slantDefined = false;
968 fontDescriptionRun5.sizeDefined = false;
970 Vector<FontDescriptionRun> fontDescriptionRuns;
971 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
972 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
973 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
974 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
975 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
976 Size textArea(100.f, 300.f);
977 Size layoutSize(81.f, 120.f);
980 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,
981 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,
982 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
983 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,
984 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,
985 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
987 struct LineRun line0 =
999 struct LineRun line1 =
1011 struct LineRun line2 =
1023 struct LineRun line3 =
1035 struct LineRun line4 =
1047 struct LineRun line5 =
1059 Vector<LineRun> lines;
1060 lines.PushBack( line0 );
1061 lines.PushBack( line1 );
1062 lines.PushBack( line2 );
1063 lines.PushBack( line3 );
1064 lines.PushBack( line4 );
1065 lines.PushBack( line5 );
1067 LayoutTextData data =
1069 "Layout bidirectional text.",
1070 "Hello world demo שלום עולם.\n"
1071 "שלום עולם hello world demo.",
1074 fontDescriptionRuns.Begin(),
1080 Layout::Engine::MULTI_LINE_BOX,
1087 if( !LayoutTextTest( data ) )
1089 tet_result(TET_FAIL);
1092 tet_result(TET_PASS);
1096 int UtcDaliTextLayoutMultilineText03(void)
1098 ToolkitTestApplication application;
1099 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1101 // Layout a long word which doesn't fit in the width of the text area.
1103 const std::string fontFamily( "TizenSans" );
1105 // Set a known font description
1106 FontDescriptionRun fontDescriptionRun;
1107 fontDescriptionRun.characterRun.characterIndex = 0u;
1108 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1109 fontDescriptionRun.familyLength = fontFamily.size();
1110 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1111 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1112 fontDescriptionRun.familyDefined = true;
1113 fontDescriptionRun.weightDefined = false;
1114 fontDescriptionRun.widthDefined = false;
1115 fontDescriptionRun.slantDefined = false;
1116 fontDescriptionRun.sizeDefined = false;
1118 Vector<FontDescriptionRun> fontDescriptionRuns;
1119 fontDescriptionRuns.PushBack( fontDescriptionRun );
1120 Size textArea(100.f, 300.f);
1121 Size layoutSize(96.f, 60.f);
1124 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,
1125 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,
1126 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1128 struct LineRun line0 =
1140 struct LineRun line1 =
1152 struct LineRun line2 =
1164 Vector<LineRun> lines;
1165 lines.PushBack( line0 );
1166 lines.PushBack( line1 );
1167 lines.PushBack( line2 );
1169 LayoutTextData data =
1171 "Layout a long word which doesn't fit in the width of the text area.",
1172 "Helloworlddemohelloworlddemo.",
1175 fontDescriptionRuns.Begin(),
1181 Layout::Engine::MULTI_LINE_BOX,
1188 if( !LayoutTextTest( data ) )
1190 tet_result(TET_FAIL);
1193 tet_result(TET_PASS);
1197 int UtcDaliTextLayoutMultilineText04(void)
1199 ToolkitTestApplication application;
1200 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1202 // Layout simple text ending with a \n. It has to add a void line at the end.
1204 const std::string fontFamily( "TizenSans" );
1206 // Set a known font description
1207 FontDescriptionRun fontDescriptionRun;
1208 fontDescriptionRun.characterRun.characterIndex = 0u;
1209 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1210 fontDescriptionRun.familyLength = fontFamily.size();
1211 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1212 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1213 fontDescriptionRun.familyDefined = true;
1214 fontDescriptionRun.weightDefined = false;
1215 fontDescriptionRun.widthDefined = false;
1216 fontDescriptionRun.slantDefined = false;
1217 fontDescriptionRun.sizeDefined = false;
1219 Vector<FontDescriptionRun> fontDescriptionRuns;
1220 fontDescriptionRuns.PushBack( fontDescriptionRun );
1221 Size textArea(100.f, 300.f);
1222 Size layoutSize(83.f, 40.f);
1225 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
1227 struct LineRun line0 =
1239 struct LineRun line1 =
1251 Vector<LineRun> lines;
1252 lines.PushBack( line0 );
1253 lines.PushBack( line1 );
1255 LayoutTextData data =
1257 "Layout simple text ending with a \n.",
1261 fontDescriptionRuns.Begin(),
1267 Layout::Engine::MULTI_LINE_BOX,
1274 if( !LayoutTextTest( data ) )
1276 tet_result(TET_FAIL);
1279 tet_result(TET_PASS);
1283 int UtcDaliTextLayoutMultilineText05(void)
1285 ToolkitTestApplication application;
1286 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1288 // Layout simple text with one character with a different font size.
1290 const std::string fontFamily( "TizenSans" );
1292 // Set a known font description
1293 FontDescriptionRun fontDescriptionRun1;
1294 fontDescriptionRun1.characterRun.characterIndex = 0u;
1295 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1296 fontDescriptionRun1.familyLength = fontFamily.size();
1297 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1298 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1299 fontDescriptionRun1.familyDefined = true;
1300 fontDescriptionRun1.weightDefined = false;
1301 fontDescriptionRun1.widthDefined = false;
1302 fontDescriptionRun1.slantDefined = false;
1303 fontDescriptionRun1.sizeDefined = false;
1305 FontDescriptionRun fontDescriptionRun2;
1306 fontDescriptionRun2.characterRun.characterIndex = 6u;
1307 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1308 fontDescriptionRun2.familyLength = fontFamily.size();
1309 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1310 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1311 fontDescriptionRun2.size = 1280u;
1312 fontDescriptionRun2.familyDefined = true;
1313 fontDescriptionRun2.weightDefined = false;
1314 fontDescriptionRun2.widthDefined = false;
1315 fontDescriptionRun2.slantDefined = false;
1316 fontDescriptionRun2.sizeDefined = true;
1318 FontDescriptionRun fontDescriptionRun3;
1319 fontDescriptionRun3.characterRun.characterIndex = 7u;
1320 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1321 fontDescriptionRun3.familyLength = fontFamily.size();
1322 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1323 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1324 fontDescriptionRun3.familyDefined = true;
1325 fontDescriptionRun3.weightDefined = false;
1326 fontDescriptionRun3.widthDefined = false;
1327 fontDescriptionRun3.slantDefined = false;
1328 fontDescriptionRun3.sizeDefined = false;
1330 Vector<FontDescriptionRun> fontDescriptionRuns;
1331 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1332 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1333 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1334 Size textArea(100.f, 300.f);
1335 Size layoutSize(88.f, 53.f);
1338 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,
1339 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f
1341 struct LineRun line0 =
1353 struct LineRun line1 =
1365 Vector<LineRun> lines;
1366 lines.PushBack( line0 );
1367 lines.PushBack( line1 );
1369 LayoutTextData data =
1371 "Layout simple text with one character with a different font size.",
1372 "Hello world demo.",
1375 fontDescriptionRuns.Begin(),
1381 Layout::Engine::MULTI_LINE_BOX,
1388 if( !LayoutTextTest( data ) )
1390 tet_result(TET_FAIL);
1393 tet_result(TET_PASS);
1397 int UtcDaliTextUpdateLayout01(void)
1399 ToolkitTestApplication application;
1400 tet_infoline(" UtcDaliTextUpdateLayout01");
1402 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1404 const std::string fontLatin( "TizenSans" );
1405 const std::string fontHebrew( "TizenSansHebrew" );
1406 const std::string fontArabic( "TizenSansArabic" );
1408 // Set a known font description
1409 FontDescriptionRun fontDescriptionRun01;
1410 fontDescriptionRun01.characterRun.characterIndex = 0u;
1411 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1412 fontDescriptionRun01.familyLength = fontLatin.size();
1413 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1414 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1415 fontDescriptionRun01.familyDefined = true;
1416 fontDescriptionRun01.weightDefined = false;
1417 fontDescriptionRun01.widthDefined = false;
1418 fontDescriptionRun01.slantDefined = false;
1419 fontDescriptionRun01.sizeDefined = false;
1421 // Set a known font description
1422 FontDescriptionRun fontDescriptionRun02;
1423 fontDescriptionRun02.characterRun.characterIndex = 17u;
1424 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1425 fontDescriptionRun02.familyLength = fontHebrew.size();
1426 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1427 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1428 fontDescriptionRun02.familyDefined = true;
1429 fontDescriptionRun02.weightDefined = false;
1430 fontDescriptionRun02.widthDefined = false;
1431 fontDescriptionRun02.slantDefined = false;
1432 fontDescriptionRun02.sizeDefined = false;
1434 // Set a known font description
1435 FontDescriptionRun fontDescriptionRun03;
1436 fontDescriptionRun03.characterRun.characterIndex = 26u;
1437 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1438 fontDescriptionRun03.familyLength = fontLatin.size();
1439 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1440 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1441 fontDescriptionRun03.familyDefined = true;
1442 fontDescriptionRun03.weightDefined = false;
1443 fontDescriptionRun03.widthDefined = false;
1444 fontDescriptionRun03.slantDefined = false;
1445 fontDescriptionRun03.sizeDefined = false;
1447 // Set a known font description
1448 FontDescriptionRun fontDescriptionRun04;
1449 fontDescriptionRun04.characterRun.characterIndex = 28u;
1450 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1451 fontDescriptionRun04.familyLength = fontArabic.size();
1452 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1453 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1454 fontDescriptionRun04.familyDefined = true;
1455 fontDescriptionRun04.weightDefined = false;
1456 fontDescriptionRun04.widthDefined = false;
1457 fontDescriptionRun04.slantDefined = false;
1458 fontDescriptionRun04.sizeDefined = false;
1460 // Set a known font description
1461 FontDescriptionRun fontDescriptionRun05;
1462 fontDescriptionRun05.characterRun.characterIndex = 42u;
1463 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1464 fontDescriptionRun05.familyLength = fontLatin.size();
1465 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1466 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1467 fontDescriptionRun05.familyDefined = true;
1468 fontDescriptionRun05.weightDefined = false;
1469 fontDescriptionRun05.widthDefined = false;
1470 fontDescriptionRun05.slantDefined = false;
1471 fontDescriptionRun05.sizeDefined = false;
1473 // Set a known font description
1474 FontDescriptionRun fontDescriptionRun06;
1475 fontDescriptionRun06.characterRun.characterIndex = 54u;
1476 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1477 fontDescriptionRun06.familyLength = fontHebrew.size();
1478 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1479 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1480 fontDescriptionRun06.familyDefined = true;
1481 fontDescriptionRun06.weightDefined = false;
1482 fontDescriptionRun06.widthDefined = false;
1483 fontDescriptionRun06.slantDefined = false;
1484 fontDescriptionRun06.sizeDefined = false;
1486 // Set a known font description
1487 FontDescriptionRun fontDescriptionRun07;
1488 fontDescriptionRun07.characterRun.characterIndex = 64u;
1489 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1490 fontDescriptionRun07.familyLength = fontHebrew.size();
1491 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1492 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1493 fontDescriptionRun07.familyDefined = true;
1494 fontDescriptionRun07.weightDefined = false;
1495 fontDescriptionRun07.widthDefined = false;
1496 fontDescriptionRun07.slantDefined = false;
1497 fontDescriptionRun07.sizeDefined = false;
1499 // Set a known font description
1500 FontDescriptionRun fontDescriptionRun08;
1501 fontDescriptionRun08.characterRun.characterIndex = 74u;
1502 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1503 fontDescriptionRun08.familyLength = fontLatin.size();
1504 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1505 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1506 fontDescriptionRun08.familyDefined = true;
1507 fontDescriptionRun08.weightDefined = false;
1508 fontDescriptionRun08.widthDefined = false;
1509 fontDescriptionRun08.slantDefined = false;
1510 fontDescriptionRun08.sizeDefined = false;
1512 // Set a known font description
1513 FontDescriptionRun fontDescriptionRun09;
1514 fontDescriptionRun09.characterRun.characterIndex = 92u;
1515 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1516 fontDescriptionRun09.familyLength = fontLatin.size();
1517 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1518 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1519 fontDescriptionRun09.familyDefined = true;
1520 fontDescriptionRun09.weightDefined = false;
1521 fontDescriptionRun09.widthDefined = false;
1522 fontDescriptionRun09.slantDefined = false;
1523 fontDescriptionRun09.sizeDefined = false;
1525 // Set a known font description
1526 FontDescriptionRun fontDescriptionRun10;
1527 fontDescriptionRun10.characterRun.characterIndex = 104u;
1528 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1529 fontDescriptionRun10.familyLength = fontArabic.size();
1530 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1531 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1532 fontDescriptionRun10.familyDefined = true;
1533 fontDescriptionRun10.weightDefined = false;
1534 fontDescriptionRun10.widthDefined = false;
1535 fontDescriptionRun10.slantDefined = false;
1536 fontDescriptionRun10.sizeDefined = false;
1538 // Set a known font description
1539 FontDescriptionRun fontDescriptionRun11;
1540 fontDescriptionRun11.characterRun.characterIndex = 118u;
1541 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1542 fontDescriptionRun11.familyLength = fontHebrew.size();
1543 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1544 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1545 fontDescriptionRun11.familyDefined = true;
1546 fontDescriptionRun11.weightDefined = false;
1547 fontDescriptionRun11.widthDefined = false;
1548 fontDescriptionRun11.slantDefined = false;
1549 fontDescriptionRun11.sizeDefined = false;
1551 // Set a known font description
1552 FontDescriptionRun fontDescriptionRun12;
1553 fontDescriptionRun12.characterRun.characterIndex = 128u;
1554 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1555 fontDescriptionRun12.familyLength = fontLatin.size();
1556 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1557 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1558 fontDescriptionRun12.familyDefined = true;
1559 fontDescriptionRun12.weightDefined = false;
1560 fontDescriptionRun12.widthDefined = false;
1561 fontDescriptionRun12.slantDefined = false;
1562 fontDescriptionRun12.sizeDefined = false;
1564 // Set a known font description
1565 FontDescriptionRun fontDescriptionRun13;
1566 fontDescriptionRun13.characterRun.characterIndex = 145u;
1567 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1568 fontDescriptionRun13.familyLength = fontHebrew.size();
1569 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1570 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1571 fontDescriptionRun13.familyDefined = true;
1572 fontDescriptionRun13.weightDefined = false;
1573 fontDescriptionRun13.widthDefined = false;
1574 fontDescriptionRun13.slantDefined = false;
1575 fontDescriptionRun13.sizeDefined = false;
1577 // Set a known font description
1578 FontDescriptionRun fontDescriptionRun14;
1579 fontDescriptionRun14.characterRun.characterIndex = 154u;
1580 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1581 fontDescriptionRun14.familyLength = fontLatin.size();
1582 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1583 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1584 fontDescriptionRun14.familyDefined = true;
1585 fontDescriptionRun14.weightDefined = false;
1586 fontDescriptionRun14.widthDefined = false;
1587 fontDescriptionRun14.slantDefined = false;
1588 fontDescriptionRun14.sizeDefined = false;
1590 // Set a known font description
1591 FontDescriptionRun fontDescriptionRun15;
1592 fontDescriptionRun15.characterRun.characterIndex = 156u;
1593 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1594 fontDescriptionRun15.familyLength = fontHebrew.size();
1595 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1596 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1597 fontDescriptionRun15.familyDefined = true;
1598 fontDescriptionRun15.weightDefined = false;
1599 fontDescriptionRun15.widthDefined = false;
1600 fontDescriptionRun15.slantDefined = false;
1601 fontDescriptionRun15.sizeDefined = false;
1603 // Set a known font description
1604 FontDescriptionRun fontDescriptionRun16;
1605 fontDescriptionRun16.characterRun.characterIndex = 166u;
1606 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1607 fontDescriptionRun16.familyLength = fontLatin.size();
1608 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1609 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1610 fontDescriptionRun16.familyDefined = true;
1611 fontDescriptionRun16.weightDefined = false;
1612 fontDescriptionRun16.widthDefined = false;
1613 fontDescriptionRun16.slantDefined = false;
1614 fontDescriptionRun16.sizeDefined = false;
1616 // Set a known font description
1617 FontDescriptionRun fontDescriptionRun17;
1618 fontDescriptionRun17.characterRun.characterIndex = 178u;
1619 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1620 fontDescriptionRun17.familyLength = fontArabic.size();
1621 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1622 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1623 fontDescriptionRun17.familyDefined = true;
1624 fontDescriptionRun17.weightDefined = false;
1625 fontDescriptionRun17.widthDefined = false;
1626 fontDescriptionRun17.slantDefined = false;
1627 fontDescriptionRun17.sizeDefined = false;
1629 Vector<FontDescriptionRun> fontDescriptionRuns;
1630 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1631 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1632 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1633 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1634 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1635 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1636 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1637 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1638 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1639 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1640 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1641 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1642 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1643 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1644 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1645 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1646 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1647 Size textArea(100.f, 300.f);
1648 Size layoutSize(92.f, 380.f);
1651 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,
1652 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,
1653 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1654 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,
1655 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,
1656 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1657 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,
1658 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,
1659 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
1660 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,
1661 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,
1662 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1663 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,
1664 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,
1665 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1666 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,
1667 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,
1668 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,
1671 struct LineRun line01 =
1683 struct LineRun line02 =
1695 struct LineRun line03 =
1707 struct LineRun line04 =
1719 struct LineRun line05 =
1731 struct LineRun line06 =
1743 struct LineRun line07 =
1755 struct LineRun line08 =
1767 struct LineRun line09 =
1779 struct LineRun line10 =
1791 struct LineRun line11 =
1803 struct LineRun line12 =
1815 struct LineRun line13 =
1827 struct LineRun line14 =
1839 struct LineRun line15 =
1851 struct LineRun line16 =
1863 struct LineRun line17 =
1875 struct LineRun line18 =
1887 struct LineRun line19 =
1899 Vector<LineRun> lines;
1900 lines.PushBack( line01 );
1901 lines.PushBack( line02 );
1902 lines.PushBack( line03 );
1903 lines.PushBack( line04 );
1904 lines.PushBack( line05 );
1905 lines.PushBack( line06 );
1906 lines.PushBack( line07 );
1907 lines.PushBack( line08 );
1908 lines.PushBack( line09 );
1909 lines.PushBack( line10 );
1910 lines.PushBack( line11 );
1911 lines.PushBack( line12 );
1912 lines.PushBack( line13 );
1913 lines.PushBack( line14 );
1914 lines.PushBack( line15 );
1915 lines.PushBack( line16 );
1916 lines.PushBack( line17 );
1917 lines.PushBack( line18 );
1918 lines.PushBack( line19 );
1920 LayoutTextData data =
1922 "Layout bidirectional text.",
1923 "Hello world demo שלום עולם.\n"
1924 "مرحبا بالعالم hello world שלום עולם\n"
1925 "שלום עולם hello world demo.\n"
1926 "hello world مرحبا بالعالم שלום עולם\n"
1927 "Hello world demo שלום עולם.\n"
1928 "שלום עולם hello world مرحبا بالعالم\n",
1931 fontDescriptionRuns.Begin(),
1937 Layout::Engine::MULTI_LINE_BOX,
1944 if( !LayoutTextTest( data ) )
1946 tet_result(TET_FAIL);
1949 tet_result(TET_PASS);
1953 int UtcDaliTextUpdateLayout02(void)
1955 ToolkitTestApplication application;
1956 tet_infoline(" UtcDaliTextUpdateLayout02");
1958 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
1960 const std::string fontLatin( "TizenSans" );
1961 const std::string fontHebrew( "TizenSansHebrew" );
1962 const std::string fontArabic( "TizenSansArabic" );
1964 // Set a known font description
1965 FontDescriptionRun fontDescriptionRun01;
1966 fontDescriptionRun01.characterRun.characterIndex = 0u;
1967 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1968 fontDescriptionRun01.familyLength = fontLatin.size();
1969 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1970 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1971 fontDescriptionRun01.familyDefined = true;
1972 fontDescriptionRun01.weightDefined = false;
1973 fontDescriptionRun01.widthDefined = false;
1974 fontDescriptionRun01.slantDefined = false;
1975 fontDescriptionRun01.sizeDefined = false;
1977 // Set a known font description
1978 FontDescriptionRun fontDescriptionRun02;
1979 fontDescriptionRun02.characterRun.characterIndex = 17u;
1980 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1981 fontDescriptionRun02.familyLength = fontHebrew.size();
1982 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1983 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1984 fontDescriptionRun02.familyDefined = true;
1985 fontDescriptionRun02.weightDefined = false;
1986 fontDescriptionRun02.widthDefined = false;
1987 fontDescriptionRun02.slantDefined = false;
1988 fontDescriptionRun02.sizeDefined = false;
1990 // Set a known font description
1991 FontDescriptionRun fontDescriptionRun03;
1992 fontDescriptionRun03.characterRun.characterIndex = 26u;
1993 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1994 fontDescriptionRun03.familyLength = fontLatin.size();
1995 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1996 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1997 fontDescriptionRun03.familyDefined = true;
1998 fontDescriptionRun03.weightDefined = false;
1999 fontDescriptionRun03.widthDefined = false;
2000 fontDescriptionRun03.slantDefined = false;
2001 fontDescriptionRun03.sizeDefined = false;
2003 // Set a known font description
2004 FontDescriptionRun fontDescriptionRun04;
2005 fontDescriptionRun04.characterRun.characterIndex = 28u;
2006 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2007 fontDescriptionRun04.familyLength = fontArabic.size();
2008 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2009 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2010 fontDescriptionRun04.familyDefined = true;
2011 fontDescriptionRun04.weightDefined = false;
2012 fontDescriptionRun04.widthDefined = false;
2013 fontDescriptionRun04.slantDefined = false;
2014 fontDescriptionRun04.sizeDefined = false;
2016 // Set a known font description
2017 FontDescriptionRun fontDescriptionRun05;
2018 fontDescriptionRun05.characterRun.characterIndex = 42u;
2019 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2020 fontDescriptionRun05.familyLength = fontLatin.size();
2021 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2022 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2023 fontDescriptionRun05.familyDefined = true;
2024 fontDescriptionRun05.weightDefined = false;
2025 fontDescriptionRun05.widthDefined = false;
2026 fontDescriptionRun05.slantDefined = false;
2027 fontDescriptionRun05.sizeDefined = false;
2029 // Set a known font description
2030 FontDescriptionRun fontDescriptionRun06;
2031 fontDescriptionRun06.characterRun.characterIndex = 54u;
2032 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2033 fontDescriptionRun06.familyLength = fontHebrew.size();
2034 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2035 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2036 fontDescriptionRun06.familyDefined = true;
2037 fontDescriptionRun06.weightDefined = false;
2038 fontDescriptionRun06.widthDefined = false;
2039 fontDescriptionRun06.slantDefined = false;
2040 fontDescriptionRun06.sizeDefined = false;
2042 // Set a known font description
2043 FontDescriptionRun fontDescriptionRun07;
2044 fontDescriptionRun07.characterRun.characterIndex = 64u;
2045 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2046 fontDescriptionRun07.familyLength = fontHebrew.size();
2047 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2048 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2049 fontDescriptionRun07.familyDefined = true;
2050 fontDescriptionRun07.weightDefined = false;
2051 fontDescriptionRun07.widthDefined = false;
2052 fontDescriptionRun07.slantDefined = false;
2053 fontDescriptionRun07.sizeDefined = false;
2055 // Set a known font description
2056 FontDescriptionRun fontDescriptionRun08;
2057 fontDescriptionRun08.characterRun.characterIndex = 74u;
2058 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2059 fontDescriptionRun08.familyLength = fontLatin.size();
2060 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2061 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2062 fontDescriptionRun08.familyDefined = true;
2063 fontDescriptionRun08.weightDefined = false;
2064 fontDescriptionRun08.widthDefined = false;
2065 fontDescriptionRun08.slantDefined = false;
2066 fontDescriptionRun08.sizeDefined = false;
2068 // Set a known font description
2069 FontDescriptionRun fontDescriptionRun09;
2070 fontDescriptionRun09.characterRun.characterIndex = 92u;
2071 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2072 fontDescriptionRun09.familyLength = fontLatin.size();
2073 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2074 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2075 fontDescriptionRun09.familyDefined = true;
2076 fontDescriptionRun09.weightDefined = false;
2077 fontDescriptionRun09.widthDefined = false;
2078 fontDescriptionRun09.slantDefined = false;
2079 fontDescriptionRun09.sizeDefined = false;
2081 // Set a known font description
2082 FontDescriptionRun fontDescriptionRun10;
2083 fontDescriptionRun10.characterRun.characterIndex = 104u;
2084 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2085 fontDescriptionRun10.familyLength = fontArabic.size();
2086 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2087 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2088 fontDescriptionRun10.familyDefined = true;
2089 fontDescriptionRun10.weightDefined = false;
2090 fontDescriptionRun10.widthDefined = false;
2091 fontDescriptionRun10.slantDefined = false;
2092 fontDescriptionRun10.sizeDefined = false;
2094 // Set a known font description
2095 FontDescriptionRun fontDescriptionRun11;
2096 fontDescriptionRun11.characterRun.characterIndex = 118u;
2097 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2098 fontDescriptionRun11.familyLength = fontHebrew.size();
2099 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2100 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2101 fontDescriptionRun11.familyDefined = true;
2102 fontDescriptionRun11.weightDefined = false;
2103 fontDescriptionRun11.widthDefined = false;
2104 fontDescriptionRun11.slantDefined = false;
2105 fontDescriptionRun11.sizeDefined = false;
2107 // Set a known font description
2108 FontDescriptionRun fontDescriptionRun12;
2109 fontDescriptionRun12.characterRun.characterIndex = 128u;
2110 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2111 fontDescriptionRun12.familyLength = fontLatin.size();
2112 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2113 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2114 fontDescriptionRun12.familyDefined = true;
2115 fontDescriptionRun12.weightDefined = false;
2116 fontDescriptionRun12.widthDefined = false;
2117 fontDescriptionRun12.slantDefined = false;
2118 fontDescriptionRun12.sizeDefined = false;
2120 // Set a known font description
2121 FontDescriptionRun fontDescriptionRun13;
2122 fontDescriptionRun13.characterRun.characterIndex = 145u;
2123 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2124 fontDescriptionRun13.familyLength = fontHebrew.size();
2125 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2126 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2127 fontDescriptionRun13.familyDefined = true;
2128 fontDescriptionRun13.weightDefined = false;
2129 fontDescriptionRun13.widthDefined = false;
2130 fontDescriptionRun13.slantDefined = false;
2131 fontDescriptionRun13.sizeDefined = false;
2133 // Set a known font description
2134 FontDescriptionRun fontDescriptionRun14;
2135 fontDescriptionRun14.characterRun.characterIndex = 154u;
2136 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2137 fontDescriptionRun14.familyLength = fontLatin.size();
2138 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2139 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2140 fontDescriptionRun14.familyDefined = true;
2141 fontDescriptionRun14.weightDefined = false;
2142 fontDescriptionRun14.widthDefined = false;
2143 fontDescriptionRun14.slantDefined = false;
2144 fontDescriptionRun14.sizeDefined = false;
2146 // Set a known font description
2147 FontDescriptionRun fontDescriptionRun15;
2148 fontDescriptionRun15.characterRun.characterIndex = 156u;
2149 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2150 fontDescriptionRun15.familyLength = fontHebrew.size();
2151 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2152 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2153 fontDescriptionRun15.familyDefined = true;
2154 fontDescriptionRun15.weightDefined = false;
2155 fontDescriptionRun15.widthDefined = false;
2156 fontDescriptionRun15.slantDefined = false;
2157 fontDescriptionRun15.sizeDefined = false;
2159 // Set a known font description
2160 FontDescriptionRun fontDescriptionRun16;
2161 fontDescriptionRun16.characterRun.characterIndex = 166u;
2162 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2163 fontDescriptionRun16.familyLength = fontLatin.size();
2164 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2165 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2166 fontDescriptionRun16.familyDefined = true;
2167 fontDescriptionRun16.weightDefined = false;
2168 fontDescriptionRun16.widthDefined = false;
2169 fontDescriptionRun16.slantDefined = false;
2170 fontDescriptionRun16.sizeDefined = false;
2172 // Set a known font description
2173 FontDescriptionRun fontDescriptionRun17;
2174 fontDescriptionRun17.characterRun.characterIndex = 178u;
2175 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2176 fontDescriptionRun17.familyLength = fontArabic.size();
2177 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2178 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2179 fontDescriptionRun17.familyDefined = true;
2180 fontDescriptionRun17.weightDefined = false;
2181 fontDescriptionRun17.widthDefined = false;
2182 fontDescriptionRun17.slantDefined = false;
2183 fontDescriptionRun17.sizeDefined = false;
2185 Vector<FontDescriptionRun> fontDescriptionRuns;
2186 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2187 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2188 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2189 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2190 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2191 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2192 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2193 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2194 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2195 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2196 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2197 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2198 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2199 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2200 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2201 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2202 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2203 Size textArea(100.f, 300.f);
2204 Size layoutSize(92.f, 380.f);
2207 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,
2208 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,
2209 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2210 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,
2211 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,
2212 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2213 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,
2214 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,
2215 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2216 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,
2217 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,
2218 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2219 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,
2220 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,
2221 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2222 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,
2223 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,
2224 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,
2227 struct LineRun line01 =
2239 struct LineRun line02 =
2251 struct LineRun line03 =
2263 struct LineRun line04 =
2275 struct LineRun line05 =
2287 struct LineRun line06 =
2299 struct LineRun line07 =
2311 struct LineRun line08 =
2323 struct LineRun line09 =
2335 struct LineRun line10 =
2347 struct LineRun line11 =
2359 struct LineRun line12 =
2371 struct LineRun line13 =
2383 struct LineRun line14 =
2395 struct LineRun line15 =
2407 struct LineRun line16 =
2419 struct LineRun line17 =
2431 struct LineRun line18 =
2443 struct LineRun line19 =
2455 Vector<LineRun> lines;
2456 lines.PushBack( line01 );
2457 lines.PushBack( line02 );
2458 lines.PushBack( line03 );
2459 lines.PushBack( line04 );
2460 lines.PushBack( line05 );
2461 lines.PushBack( line06 );
2462 lines.PushBack( line07 );
2463 lines.PushBack( line08 );
2464 lines.PushBack( line09 );
2465 lines.PushBack( line10 );
2466 lines.PushBack( line11 );
2467 lines.PushBack( line12 );
2468 lines.PushBack( line13 );
2469 lines.PushBack( line14 );
2470 lines.PushBack( line15 );
2471 lines.PushBack( line16 );
2472 lines.PushBack( line17 );
2473 lines.PushBack( line18 );
2474 lines.PushBack( line19 );
2476 LayoutTextData data =
2478 "Layout bidirectional text.",
2479 "Hello world demo שלום עולם.\n"
2480 "مرحبا بالعالم hello world שלום עולם\n"
2481 "שלום עולם hello world demo.\n"
2482 "hello world مرحبا بالعالم שלום עולם\n"
2483 "Hello world demo שלום עולם.\n"
2484 "שלום עולם hello world مرحبا بالعالم\n",
2487 fontDescriptionRuns.Begin(),
2493 Layout::Engine::MULTI_LINE_BOX,
2500 if( !LayoutTextTest( data ) )
2502 tet_result(TET_FAIL);
2505 tet_result(TET_PASS);
2509 int UtcDaliTextUpdateLayout03(void)
2511 ToolkitTestApplication application;
2512 tet_infoline(" UtcDaliTextUpdateLayout03");
2514 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2516 const std::string fontLatin( "TizenSans" );
2517 const std::string fontHebrew( "TizenSansHebrew" );
2518 const std::string fontArabic( "TizenSansArabic" );
2520 // Set a known font description
2521 FontDescriptionRun fontDescriptionRun01;
2522 fontDescriptionRun01.characterRun.characterIndex = 0u;
2523 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2524 fontDescriptionRun01.familyLength = fontLatin.size();
2525 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2526 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2527 fontDescriptionRun01.familyDefined = true;
2528 fontDescriptionRun01.weightDefined = false;
2529 fontDescriptionRun01.widthDefined = false;
2530 fontDescriptionRun01.slantDefined = false;
2531 fontDescriptionRun01.sizeDefined = false;
2533 // Set a known font description
2534 FontDescriptionRun fontDescriptionRun02;
2535 fontDescriptionRun02.characterRun.characterIndex = 17u;
2536 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2537 fontDescriptionRun02.familyLength = fontHebrew.size();
2538 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2539 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2540 fontDescriptionRun02.familyDefined = true;
2541 fontDescriptionRun02.weightDefined = false;
2542 fontDescriptionRun02.widthDefined = false;
2543 fontDescriptionRun02.slantDefined = false;
2544 fontDescriptionRun02.sizeDefined = false;
2546 // Set a known font description
2547 FontDescriptionRun fontDescriptionRun03;
2548 fontDescriptionRun03.characterRun.characterIndex = 26u;
2549 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2550 fontDescriptionRun03.familyLength = fontLatin.size();
2551 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2552 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2553 fontDescriptionRun03.familyDefined = true;
2554 fontDescriptionRun03.weightDefined = false;
2555 fontDescriptionRun03.widthDefined = false;
2556 fontDescriptionRun03.slantDefined = false;
2557 fontDescriptionRun03.sizeDefined = false;
2559 // Set a known font description
2560 FontDescriptionRun fontDescriptionRun04;
2561 fontDescriptionRun04.characterRun.characterIndex = 28u;
2562 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2563 fontDescriptionRun04.familyLength = fontArabic.size();
2564 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2565 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2566 fontDescriptionRun04.familyDefined = true;
2567 fontDescriptionRun04.weightDefined = false;
2568 fontDescriptionRun04.widthDefined = false;
2569 fontDescriptionRun04.slantDefined = false;
2570 fontDescriptionRun04.sizeDefined = false;
2572 // Set a known font description
2573 FontDescriptionRun fontDescriptionRun05;
2574 fontDescriptionRun05.characterRun.characterIndex = 42u;
2575 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2576 fontDescriptionRun05.familyLength = fontLatin.size();
2577 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2578 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2579 fontDescriptionRun05.familyDefined = true;
2580 fontDescriptionRun05.weightDefined = false;
2581 fontDescriptionRun05.widthDefined = false;
2582 fontDescriptionRun05.slantDefined = false;
2583 fontDescriptionRun05.sizeDefined = false;
2585 // Set a known font description
2586 FontDescriptionRun fontDescriptionRun06;
2587 fontDescriptionRun06.characterRun.characterIndex = 54u;
2588 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2589 fontDescriptionRun06.familyLength = fontHebrew.size();
2590 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2591 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2592 fontDescriptionRun06.familyDefined = true;
2593 fontDescriptionRun06.weightDefined = false;
2594 fontDescriptionRun06.widthDefined = false;
2595 fontDescriptionRun06.slantDefined = false;
2596 fontDescriptionRun06.sizeDefined = false;
2598 // Set a known font description
2599 FontDescriptionRun fontDescriptionRun07;
2600 fontDescriptionRun07.characterRun.characterIndex = 64u;
2601 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2602 fontDescriptionRun07.familyLength = fontHebrew.size();
2603 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2604 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2605 fontDescriptionRun07.familyDefined = true;
2606 fontDescriptionRun07.weightDefined = false;
2607 fontDescriptionRun07.widthDefined = false;
2608 fontDescriptionRun07.slantDefined = false;
2609 fontDescriptionRun07.sizeDefined = false;
2611 // Set a known font description
2612 FontDescriptionRun fontDescriptionRun08;
2613 fontDescriptionRun08.characterRun.characterIndex = 74u;
2614 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2615 fontDescriptionRun08.familyLength = fontLatin.size();
2616 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2617 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2618 fontDescriptionRun08.familyDefined = true;
2619 fontDescriptionRun08.weightDefined = false;
2620 fontDescriptionRun08.widthDefined = false;
2621 fontDescriptionRun08.slantDefined = false;
2622 fontDescriptionRun08.sizeDefined = false;
2624 // Set a known font description
2625 FontDescriptionRun fontDescriptionRun09;
2626 fontDescriptionRun09.characterRun.characterIndex = 92u;
2627 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2628 fontDescriptionRun09.familyLength = fontLatin.size();
2629 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2630 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2631 fontDescriptionRun09.familyDefined = true;
2632 fontDescriptionRun09.weightDefined = false;
2633 fontDescriptionRun09.widthDefined = false;
2634 fontDescriptionRun09.slantDefined = false;
2635 fontDescriptionRun09.sizeDefined = false;
2637 // Set a known font description
2638 FontDescriptionRun fontDescriptionRun10;
2639 fontDescriptionRun10.characterRun.characterIndex = 104u;
2640 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2641 fontDescriptionRun10.familyLength = fontArabic.size();
2642 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2643 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2644 fontDescriptionRun10.familyDefined = true;
2645 fontDescriptionRun10.weightDefined = false;
2646 fontDescriptionRun10.widthDefined = false;
2647 fontDescriptionRun10.slantDefined = false;
2648 fontDescriptionRun10.sizeDefined = false;
2650 // Set a known font description
2651 FontDescriptionRun fontDescriptionRun11;
2652 fontDescriptionRun11.characterRun.characterIndex = 118u;
2653 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2654 fontDescriptionRun11.familyLength = fontHebrew.size();
2655 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2656 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2657 fontDescriptionRun11.familyDefined = true;
2658 fontDescriptionRun11.weightDefined = false;
2659 fontDescriptionRun11.widthDefined = false;
2660 fontDescriptionRun11.slantDefined = false;
2661 fontDescriptionRun11.sizeDefined = false;
2663 // Set a known font description
2664 FontDescriptionRun fontDescriptionRun12;
2665 fontDescriptionRun12.characterRun.characterIndex = 128u;
2666 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2667 fontDescriptionRun12.familyLength = fontLatin.size();
2668 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2669 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2670 fontDescriptionRun12.familyDefined = true;
2671 fontDescriptionRun12.weightDefined = false;
2672 fontDescriptionRun12.widthDefined = false;
2673 fontDescriptionRun12.slantDefined = false;
2674 fontDescriptionRun12.sizeDefined = false;
2676 // Set a known font description
2677 FontDescriptionRun fontDescriptionRun13;
2678 fontDescriptionRun13.characterRun.characterIndex = 145u;
2679 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2680 fontDescriptionRun13.familyLength = fontHebrew.size();
2681 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2682 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2683 fontDescriptionRun13.familyDefined = true;
2684 fontDescriptionRun13.weightDefined = false;
2685 fontDescriptionRun13.widthDefined = false;
2686 fontDescriptionRun13.slantDefined = false;
2687 fontDescriptionRun13.sizeDefined = false;
2689 // Set a known font description
2690 FontDescriptionRun fontDescriptionRun14;
2691 fontDescriptionRun14.characterRun.characterIndex = 154u;
2692 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2693 fontDescriptionRun14.familyLength = fontLatin.size();
2694 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2695 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2696 fontDescriptionRun14.familyDefined = true;
2697 fontDescriptionRun14.weightDefined = false;
2698 fontDescriptionRun14.widthDefined = false;
2699 fontDescriptionRun14.slantDefined = false;
2700 fontDescriptionRun14.sizeDefined = false;
2702 // Set a known font description
2703 FontDescriptionRun fontDescriptionRun15;
2704 fontDescriptionRun15.characterRun.characterIndex = 156u;
2705 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2706 fontDescriptionRun15.familyLength = fontHebrew.size();
2707 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2708 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2709 fontDescriptionRun15.familyDefined = true;
2710 fontDescriptionRun15.weightDefined = false;
2711 fontDescriptionRun15.widthDefined = false;
2712 fontDescriptionRun15.slantDefined = false;
2713 fontDescriptionRun15.sizeDefined = false;
2715 // Set a known font description
2716 FontDescriptionRun fontDescriptionRun16;
2717 fontDescriptionRun16.characterRun.characterIndex = 166u;
2718 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2719 fontDescriptionRun16.familyLength = fontLatin.size();
2720 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2721 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2722 fontDescriptionRun16.familyDefined = true;
2723 fontDescriptionRun16.weightDefined = false;
2724 fontDescriptionRun16.widthDefined = false;
2725 fontDescriptionRun16.slantDefined = false;
2726 fontDescriptionRun16.sizeDefined = false;
2728 // Set a known font description
2729 FontDescriptionRun fontDescriptionRun17;
2730 fontDescriptionRun17.characterRun.characterIndex = 178u;
2731 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2732 fontDescriptionRun17.familyLength = fontArabic.size();
2733 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2734 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2735 fontDescriptionRun17.familyDefined = true;
2736 fontDescriptionRun17.weightDefined = false;
2737 fontDescriptionRun17.widthDefined = false;
2738 fontDescriptionRun17.slantDefined = false;
2739 fontDescriptionRun17.sizeDefined = false;
2741 Vector<FontDescriptionRun> fontDescriptionRuns;
2742 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2743 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2744 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2745 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2746 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2747 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2748 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2749 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2750 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2751 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2752 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2753 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2754 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2755 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2756 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2757 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2758 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2759 Size textArea(100.f, 300.f);
2760 Size layoutSize(92.f, 380.f);
2763 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,
2764 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,
2765 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2766 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,
2767 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,
2768 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2769 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,
2770 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,
2771 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2772 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,
2773 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,
2774 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2775 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,
2776 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,
2777 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2778 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,
2779 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,
2780 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,
2783 struct LineRun line01 =
2795 struct LineRun line02 =
2807 struct LineRun line03 =
2819 struct LineRun line04 =
2831 struct LineRun line05 =
2843 struct LineRun line06 =
2855 struct LineRun line07 =
2867 struct LineRun line08 =
2879 struct LineRun line09 =
2891 struct LineRun line10 =
2903 struct LineRun line11 =
2915 struct LineRun line12 =
2927 struct LineRun line13 =
2939 struct LineRun line14 =
2951 struct LineRun line15 =
2963 struct LineRun line16 =
2975 struct LineRun line17 =
2987 struct LineRun line18 =
2999 struct LineRun line19 =
3011 Vector<LineRun> lines;
3012 lines.PushBack( line01 );
3013 lines.PushBack( line02 );
3014 lines.PushBack( line03 );
3015 lines.PushBack( line04 );
3016 lines.PushBack( line05 );
3017 lines.PushBack( line06 );
3018 lines.PushBack( line07 );
3019 lines.PushBack( line08 );
3020 lines.PushBack( line09 );
3021 lines.PushBack( line10 );
3022 lines.PushBack( line11 );
3023 lines.PushBack( line12 );
3024 lines.PushBack( line13 );
3025 lines.PushBack( line14 );
3026 lines.PushBack( line15 );
3027 lines.PushBack( line16 );
3028 lines.PushBack( line17 );
3029 lines.PushBack( line18 );
3030 lines.PushBack( line19 );
3032 LayoutTextData data =
3034 "Layout bidirectional text.",
3035 "Hello world demo שלום עולם.\n"
3036 "مرحبا بالعالم hello world שלום עולם\n"
3037 "שלום עולם hello world demo.\n"
3038 "hello world مرحبا بالعالم שלום עולם\n"
3039 "Hello world demo שלום עולם.\n"
3040 "שלום עולם hello world مرحبا بالعالم\n",
3043 fontDescriptionRuns.Begin(),
3049 Layout::Engine::MULTI_LINE_BOX,
3056 if( !LayoutTextTest( data ) )
3058 tet_result(TET_FAIL);
3061 tet_result(TET_PASS);
3065 int UtcDaliTextLayoutEllipsis01(void)
3067 ToolkitTestApplication application;