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,
173 Layout::LineWrap::WORD );
175 layoutParameters.isLastNewParagraph = isLastNewParagraph;
177 // The initial glyph and the number of glyphs to layout.
178 layoutParameters.startGlyphIndex = data.startIndex;
179 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
180 layoutParameters.startLineIndex = startRemoveIndex;
181 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
183 layoutSize = Vector2::ZERO;
185 const bool updated = engine.LayoutText( layoutParameters,
191 // 4) Compare the results.
193 if( updated != data.updated )
195 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
199 if( layoutSize != data.layoutSize )
201 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
205 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
207 const Vector2& position = *( glyphPositions.Begin() + index );
209 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
211 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
214 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
216 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
221 if( lines.Count() != data.numberOfLines )
223 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
227 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
229 const LineRun& line = *( lines.Begin() + index );
230 const LineRun& expectedLine = *( data.lines + index );
232 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
234 std::cout << " Different line info for line : " << index << std::endl;
236 std::cout << " expected" << std::endl;
237 Print( expectedLine );
240 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
242 std::cout << " Different line info for line : " << index << std::endl;
244 std::cout << " expected" << std::endl;
245 Print( expectedLine );
249 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
251 std::cout << " Different line info for line : " << index << std::endl;
253 std::cout << " expected" << std::endl;
254 Print( expectedLine );
257 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
259 std::cout << " Different line info for line : " << index << std::endl;
261 std::cout << " expected" << std::endl;
262 Print( expectedLine );
266 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
268 std::cout << " Different line info for line : " << index << std::endl;
270 std::cout << " expected" << std::endl;
271 Print( expectedLine );
275 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
277 std::cout << " Different line info for line : " << index << std::endl;
279 std::cout << " expected" << std::endl;
280 Print( expectedLine );
284 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
286 std::cout << " Different line info for line : " << index << std::endl;
288 std::cout << " expected" << std::endl;
289 Print( expectedLine );
293 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
295 std::cout << " Different line info for line : " << index << std::endl;
297 std::cout << " expected" << std::endl;
298 Print( expectedLine );
302 if( line.ellipsis != expectedLine.ellipsis )
304 std::cout << " Different line info for line : " << index << std::endl;
306 std::cout << " expected" << std::endl;
307 Print( expectedLine );
311 // Do not compare the alignment offset as it's not calculated in the layout.
312 // Do not compare the line direction as it's not set in the layout.
318 //////////////////////////////////////////////////////////
320 struct ReLayoutRightToLeftLinesData
322 std::string description;
325 unsigned int numberOfFonts;
326 FontDescriptionRun* fontDescriptions;
327 unsigned int totalNumberOfGlyphs;
329 unsigned int startIndex;
330 unsigned int numberOfCharacters;
333 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
336 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
337 fontClient.SetDpi( 96u, 96u );
339 char* pathNamePtr = get_current_dir_name();
340 const std::string pathName( pathNamePtr );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
344 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
345 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
347 // 1) Create the model.
348 LogicalModelPtr logicalModel;
349 VisualModelPtr visualModel;
353 Vector<FontDescriptionRun> fontDescriptionRuns;
354 if( 0u != data.numberOfFonts )
356 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
357 data.fontDescriptions,
358 data.fontDescriptions + data.numberOfFonts );
361 LayoutOptions options;
362 options.reorder = false;
363 options.align = false;
364 CreateTextModel( data.text,
373 // 2) Call the ReLayoutRightToLeftLines() method.
374 Layout::Engine engine;
375 engine.SetMetrics( metrics );
377 Layout::Parameters layoutParameters( data.textArea,
378 logicalModel->mText.Begin(),
379 logicalModel->mLineBreakInfo.Begin(),
380 logicalModel->mWordBreakInfo.Begin(),
381 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
382 visualModel->mGlyphs.Begin(),
383 visualModel->mGlyphsToCharacters.Begin(),
384 visualModel->mCharactersPerGlyph.Begin(),
385 visualModel->mCharactersToGlyph.Begin(),
386 visualModel->mGlyphsPerCharacter.Begin(),
387 visualModel->mGlyphs.Count(),
388 Layout::HORIZONTAL_ALIGN_BEGIN,
389 Layout::LineWrap::WORD );
391 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
392 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
394 engine.ReLayoutRightToLeftLines( layoutParameters,
396 data.numberOfCharacters,
397 visualModel->mGlyphPositions );
399 // 3) Compare the results.
400 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
402 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
404 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
408 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
410 const Vector2& position = *( glyphPositions.Begin() + index );
412 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
414 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
417 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
419 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
427 //////////////////////////////////////////////////////////
431 std::string description;
434 unsigned int numberOfFonts;
435 FontDescriptionRun* fontDescriptions;
436 Layout::HorizontalAlignment horizontalAlignment;
437 Layout::VerticalAlignment verticalAlignment;
438 unsigned int startIndex;
439 unsigned int numberOfCharacters;
440 unsigned int numberOfLines;
444 bool AlignTest( const AlignData& data )
447 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
448 fontClient.SetDpi( 96u, 96u );
450 char* pathNamePtr = get_current_dir_name();
451 const std::string pathName( pathNamePtr );
454 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
455 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
456 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
458 // 1) Create the model.
459 LogicalModelPtr logicalModel;
460 VisualModelPtr visualModel;
464 Vector<FontDescriptionRun> fontDescriptionRuns;
465 if( 0u != data.numberOfFonts )
467 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
468 data.fontDescriptions,
469 data.fontDescriptions + data.numberOfFonts );
472 LayoutOptions options;
473 options.align = false;
474 CreateTextModel( data.text,
483 // Call the Align method.
484 Layout::Engine engine;
485 engine.SetMetrics( metrics );
487 float alignmentOffset = 0.f;
488 engine.Align( data.textArea,
490 data.numberOfCharacters,
491 data.horizontalAlignment,
496 if( data.numberOfLines != visualModel->mLines.Count() )
498 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
502 const LineRun* const linesBuffer = visualModel->mLines.Begin();
503 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
505 const LineRun& line = *( linesBuffer + index );
507 if( line.alignmentOffset != *( data.lineOffsets + index ) )
509 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
519 //////////////////////////////////////////////////////////
521 // UtcDaliTextLayoutSetGetLayout
522 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
523 // UtcDaliTextLayoutSetGetHorizontalAlignment
524 // UtcDaliTextLayoutSetGetVerticalAlignment
525 // UtcDaliTextLayoutSetGetCursorWidth
526 // UtcDaliTextLayoutNoText
527 // UtcDaliTextLayoutSmallTextArea01
528 // UtcDaliTextLayoutSmallTextArea02
529 // UtcDaliTextLayoutMultilineText01
530 // UtcDaliTextLayoutMultilineText02
531 // UtcDaliTextLayoutMultilineText03
532 // UtcDaliTextLayoutMultilineText04
533 // UtcDaliTextLayoutMultilineText05
534 // UtcDaliTextUpdateLayout01
535 // UtcDaliTextUpdateLayout02
536 // UtcDaliTextUpdateLayout03
537 // UtcDaliTextLayoutEllipsis01
538 // UtcDaliTextLayoutEllipsis02
539 // UtcDaliTextLayoutEllipsis03
540 // UtcDaliTextLayoutEllipsis04
541 // UtcDaliTextLayoutEllipsis04
542 // UtcDaliTextReorderLayout01
543 // UtcDaliTextReorderLayout02
544 // UtcDaliTextReorderLayout03
545 // UtcDaliTextReorderLayout04
546 // UtcDaliTextAlign01
547 // UtcDaliTextAlign02
548 // UtcDaliTextAlign03
549 // UtcDaliTextAlign04
550 // UtcDaliTextAlign05
551 // UtcDaliTextAlign06
552 // UtcDaliTextAlign07
553 // UtcDaliTextAlign08
554 // UtcDaliTextAlign09
556 //////////////////////////////////////////////////////////
558 int UtcDaliTextLayoutSetGetLayout(void)
560 ToolkitTestApplication application;
561 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
563 Layout::Engine engine;
565 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
567 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
568 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
570 tet_result(TET_PASS);
574 int UtcDaliTextLayoutSetGetCursorWidth(void)
576 ToolkitTestApplication application;
579 Layout::Engine engine;
581 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
583 engine.SetCursorWidth( 2 );
584 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
586 tet_result(TET_PASS);
590 int UtcDaliTextLayoutNoText(void)
592 ToolkitTestApplication application;
593 tet_infoline(" UtcDaliTextLayoutNoText");
595 Size textArea(100.f, 60.f);
596 Size layoutSize = Vector2::ZERO;
597 LayoutTextData data =
609 Layout::Engine::MULTI_LINE_BOX,
616 if( !LayoutTextTest( data ) )
618 tet_result(TET_FAIL);
621 tet_result(TET_PASS);
625 int UtcDaliTextLayoutSmallTextArea01(void)
627 ToolkitTestApplication application;
628 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
630 // Won't layout the text in multi-line if the width is too small.
632 const std::string fontFamily( "TizenSans" );
634 // Set a known font description
635 FontDescriptionRun fontDescriptionRun;
636 fontDescriptionRun.characterRun.characterIndex = 0u;
637 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
638 fontDescriptionRun.familyLength = fontFamily.size();
639 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
640 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
641 fontDescriptionRun.familyDefined = true;
642 fontDescriptionRun.weightDefined = false;
643 fontDescriptionRun.widthDefined = false;
644 fontDescriptionRun.slantDefined = false;
645 fontDescriptionRun.sizeDefined = false;
647 Vector<FontDescriptionRun> fontDescriptionRuns;
648 fontDescriptionRuns.PushBack( fontDescriptionRun );
649 Size textArea(1.f, 1.f);
650 Size layoutSize = Vector2::ZERO;
651 LayoutTextData data =
653 "Layout text in a small area",
657 fontDescriptionRuns.Begin(),
663 Layout::Engine::MULTI_LINE_BOX,
670 if( !LayoutTextTest( data ) )
672 tet_result(TET_FAIL);
675 tet_result(TET_PASS);
679 int UtcDaliTextLayoutSmallTextArea02(void)
681 ToolkitTestApplication application;
682 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
684 // Will layout the text in single line as it can be scrolled.
686 const std::string fontFamily( "TizenSans" );
688 // Set a known font description
689 FontDescriptionRun fontDescriptionRun;
690 fontDescriptionRun.characterRun.characterIndex = 0u;
691 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
692 fontDescriptionRun.familyLength = fontFamily.size();
693 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
694 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
695 fontDescriptionRun.familyDefined = true;
696 fontDescriptionRun.weightDefined = false;
697 fontDescriptionRun.widthDefined = false;
698 fontDescriptionRun.slantDefined = false;
699 fontDescriptionRun.sizeDefined = false;
701 Vector<FontDescriptionRun> fontDescriptionRuns;
702 fontDescriptionRuns.PushBack( fontDescriptionRun );
703 Size textArea(1.f, 1.f);
704 Size layoutSize(80.f, 20.f);
705 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 };
706 struct LineRun line =
718 Vector<LineRun> lines;
719 lines.PushBack( line );
721 LayoutTextData data =
723 "Layout text in a small area",
727 fontDescriptionRuns.Begin(),
733 Layout::Engine::SINGLE_LINE_BOX,
740 if( !LayoutTextTest( data ) )
742 tet_result(TET_FAIL);
745 tet_result(TET_PASS);
749 int UtcDaliTextLayoutMultilineText01(void)
751 ToolkitTestApplication application;
752 tet_infoline(" UtcDaliTextLayoutMultilineText01");
754 // Layout some lines of left to right text.
756 const std::string fontFamily( "TizenSans" );
758 // Set a known font description
759 FontDescriptionRun fontDescriptionRun1;
760 fontDescriptionRun1.characterRun.characterIndex = 0u;
761 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
762 fontDescriptionRun1.familyLength = fontFamily.size();
763 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
764 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
765 fontDescriptionRun1.familyDefined = true;
766 fontDescriptionRun1.weightDefined = false;
767 fontDescriptionRun1.widthDefined = false;
768 fontDescriptionRun1.slantDefined = false;
769 fontDescriptionRun1.sizeDefined = false;
771 FontDescriptionRun fontDescriptionRun2;
772 fontDescriptionRun2.characterRun.characterIndex = 18u;
773 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
774 fontDescriptionRun2.familyLength = fontFamily.size();
775 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
776 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
777 fontDescriptionRun2.familyDefined = true;
778 fontDescriptionRun2.weightDefined = false;
779 fontDescriptionRun2.widthDefined = false;
780 fontDescriptionRun2.slantDefined = false;
781 fontDescriptionRun2.sizeDefined = false;
783 Vector<FontDescriptionRun> fontDescriptionRuns;
784 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
785 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
786 Size textArea(100.f, 300.f);
787 Size layoutSize(95.f, 97.f);
790 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,
791 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
792 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,
793 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,
794 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
796 struct LineRun line0 =
808 struct LineRun line1 =
820 struct LineRun line2 =
832 struct LineRun line3 =
844 struct LineRun line4 =
856 Vector<LineRun> lines;
857 lines.PushBack( line0 );
858 lines.PushBack( line1 );
859 lines.PushBack( line2 );
860 lines.PushBack( line3 );
861 lines.PushBack( line4 );
863 LayoutTextData data =
865 "Layout simple multi-line text",
866 "Hello world demo.\n"
867 "Layout different lines of text.",
870 fontDescriptionRuns.Begin(),
876 Layout::Engine::MULTI_LINE_BOX,
883 if( !LayoutTextTest( data ) )
885 tet_result(TET_FAIL);
888 tet_result(TET_PASS);
892 int UtcDaliTextLayoutMultilineText02(void)
894 ToolkitTestApplication application;
895 tet_infoline(" UtcDaliTextLayoutMultilineText02");
897 // Layout some lines of bidirectional text.
899 const std::string fontFamily1( "TizenSans" );
901 // Set a known font description
902 FontDescriptionRun fontDescriptionRun1;
903 fontDescriptionRun1.characterRun.characterIndex = 0u;
904 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
905 fontDescriptionRun1.familyLength = fontFamily1.size();
906 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
907 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
908 fontDescriptionRun1.familyDefined = true;
909 fontDescriptionRun1.weightDefined = false;
910 fontDescriptionRun1.widthDefined = false;
911 fontDescriptionRun1.slantDefined = false;
912 fontDescriptionRun1.sizeDefined = false;
914 const std::string fontFamily2( "TizenSansHebrew" );
916 // Set a known font description
917 FontDescriptionRun fontDescriptionRun2;
918 fontDescriptionRun2.characterRun.characterIndex = 17u;
919 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
920 fontDescriptionRun2.familyLength = fontFamily2.size();
921 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
922 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
923 fontDescriptionRun2.familyDefined = true;
924 fontDescriptionRun2.weightDefined = false;
925 fontDescriptionRun2.widthDefined = false;
926 fontDescriptionRun2.slantDefined = false;
927 fontDescriptionRun2.sizeDefined = false;
929 const std::string fontFamily3( "TizenSans" );
931 // Set a known font description
932 FontDescriptionRun fontDescriptionRun3;
933 fontDescriptionRun3.characterRun.characterIndex = 26u;
934 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
935 fontDescriptionRun3.familyLength = fontFamily3.size();
936 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
937 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
938 fontDescriptionRun3.familyDefined = true;
939 fontDescriptionRun3.weightDefined = false;
940 fontDescriptionRun3.widthDefined = false;
941 fontDescriptionRun3.slantDefined = false;
942 fontDescriptionRun3.sizeDefined = false;
944 const std::string fontFamily4( "TizenSansHebrew" );
946 // Set a known font description
947 FontDescriptionRun fontDescriptionRun4;
948 fontDescriptionRun4.characterRun.characterIndex = 28u;
949 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
950 fontDescriptionRun4.familyLength = fontFamily4.size();
951 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
952 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
953 fontDescriptionRun4.familyDefined = true;
954 fontDescriptionRun4.weightDefined = false;
955 fontDescriptionRun4.widthDefined = false;
956 fontDescriptionRun4.slantDefined = false;
957 fontDescriptionRun4.sizeDefined = false;
959 const std::string fontFamily5( "TizenSans" );
961 // Set a known font description
962 FontDescriptionRun fontDescriptionRun5;
963 fontDescriptionRun5.characterRun.characterIndex = 38u;
964 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
965 fontDescriptionRun5.familyLength = fontFamily5.size();
966 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
967 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
968 fontDescriptionRun5.familyDefined = true;
969 fontDescriptionRun5.weightDefined = false;
970 fontDescriptionRun5.widthDefined = false;
971 fontDescriptionRun5.slantDefined = false;
972 fontDescriptionRun5.sizeDefined = false;
974 Vector<FontDescriptionRun> fontDescriptionRuns;
975 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
976 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
977 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
978 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
979 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
980 Size textArea(100.f, 300.f);
981 Size layoutSize(81.f, 120.f);
984 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,
985 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,
986 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
987 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,
988 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,
989 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
991 struct LineRun line0 =
1003 struct LineRun line1 =
1015 struct LineRun line2 =
1027 struct LineRun line3 =
1039 struct LineRun line4 =
1051 struct LineRun line5 =
1063 Vector<LineRun> lines;
1064 lines.PushBack( line0 );
1065 lines.PushBack( line1 );
1066 lines.PushBack( line2 );
1067 lines.PushBack( line3 );
1068 lines.PushBack( line4 );
1069 lines.PushBack( line5 );
1071 LayoutTextData data =
1073 "Layout bidirectional text.",
1074 "Hello world demo שלום עולם.\n"
1075 "שלום עולם hello world demo.",
1078 fontDescriptionRuns.Begin(),
1084 Layout::Engine::MULTI_LINE_BOX,
1091 if( !LayoutTextTest( data ) )
1093 tet_result(TET_FAIL);
1096 tet_result(TET_PASS);
1100 int UtcDaliTextLayoutMultilineText03(void)
1102 ToolkitTestApplication application;
1103 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1105 // Layout a long word which doesn't fit in the width of the text area.
1107 const std::string fontFamily( "TizenSans" );
1109 // Set a known font description
1110 FontDescriptionRun fontDescriptionRun;
1111 fontDescriptionRun.characterRun.characterIndex = 0u;
1112 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1113 fontDescriptionRun.familyLength = fontFamily.size();
1114 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1115 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1116 fontDescriptionRun.familyDefined = true;
1117 fontDescriptionRun.weightDefined = false;
1118 fontDescriptionRun.widthDefined = false;
1119 fontDescriptionRun.slantDefined = false;
1120 fontDescriptionRun.sizeDefined = false;
1122 Vector<FontDescriptionRun> fontDescriptionRuns;
1123 fontDescriptionRuns.PushBack( fontDescriptionRun );
1124 Size textArea(100.f, 300.f);
1125 Size layoutSize(96.f, 60.f);
1128 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,
1129 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,
1130 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1132 struct LineRun line0 =
1144 struct LineRun line1 =
1156 struct LineRun line2 =
1168 Vector<LineRun> lines;
1169 lines.PushBack( line0 );
1170 lines.PushBack( line1 );
1171 lines.PushBack( line2 );
1173 LayoutTextData data =
1175 "Layout a long word which doesn't fit in the width of the text area.",
1176 "Helloworlddemohelloworlddemo.",
1179 fontDescriptionRuns.Begin(),
1185 Layout::Engine::MULTI_LINE_BOX,
1192 if( !LayoutTextTest( data ) )
1194 tet_result(TET_FAIL);
1197 tet_result(TET_PASS);
1201 int UtcDaliTextLayoutMultilineText04(void)
1203 ToolkitTestApplication application;
1204 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1206 // Layout simple text ending with a \n. It has to add a void line at the end.
1208 const std::string fontFamily( "TizenSans" );
1210 // Set a known font description
1211 FontDescriptionRun fontDescriptionRun;
1212 fontDescriptionRun.characterRun.characterIndex = 0u;
1213 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1214 fontDescriptionRun.familyLength = fontFamily.size();
1215 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1216 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1217 fontDescriptionRun.familyDefined = true;
1218 fontDescriptionRun.weightDefined = false;
1219 fontDescriptionRun.widthDefined = false;
1220 fontDescriptionRun.slantDefined = false;
1221 fontDescriptionRun.sizeDefined = false;
1223 Vector<FontDescriptionRun> fontDescriptionRuns;
1224 fontDescriptionRuns.PushBack( fontDescriptionRun );
1225 Size textArea(100.f, 300.f);
1226 Size layoutSize(83.f, 40.f);
1229 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
1231 struct LineRun line0 =
1243 struct LineRun line1 =
1255 Vector<LineRun> lines;
1256 lines.PushBack( line0 );
1257 lines.PushBack( line1 );
1259 LayoutTextData data =
1261 "Layout simple text ending with a \n.",
1265 fontDescriptionRuns.Begin(),
1271 Layout::Engine::MULTI_LINE_BOX,
1278 if( !LayoutTextTest( data ) )
1280 tet_result(TET_FAIL);
1283 tet_result(TET_PASS);
1287 int UtcDaliTextLayoutMultilineText05(void)
1289 ToolkitTestApplication application;
1290 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1292 // Layout simple text with one character with a different font size.
1294 const std::string fontFamily( "TizenSans" );
1296 // Set a known font description
1297 FontDescriptionRun fontDescriptionRun1;
1298 fontDescriptionRun1.characterRun.characterIndex = 0u;
1299 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1300 fontDescriptionRun1.familyLength = fontFamily.size();
1301 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1302 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1303 fontDescriptionRun1.familyDefined = true;
1304 fontDescriptionRun1.weightDefined = false;
1305 fontDescriptionRun1.widthDefined = false;
1306 fontDescriptionRun1.slantDefined = false;
1307 fontDescriptionRun1.sizeDefined = false;
1309 FontDescriptionRun fontDescriptionRun2;
1310 fontDescriptionRun2.characterRun.characterIndex = 6u;
1311 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1312 fontDescriptionRun2.familyLength = fontFamily.size();
1313 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1314 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1315 fontDescriptionRun2.size = 1280u;
1316 fontDescriptionRun2.familyDefined = true;
1317 fontDescriptionRun2.weightDefined = false;
1318 fontDescriptionRun2.widthDefined = false;
1319 fontDescriptionRun2.slantDefined = false;
1320 fontDescriptionRun2.sizeDefined = true;
1322 FontDescriptionRun fontDescriptionRun3;
1323 fontDescriptionRun3.characterRun.characterIndex = 7u;
1324 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1325 fontDescriptionRun3.familyLength = fontFamily.size();
1326 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1327 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1328 fontDescriptionRun3.familyDefined = true;
1329 fontDescriptionRun3.weightDefined = false;
1330 fontDescriptionRun3.widthDefined = false;
1331 fontDescriptionRun3.slantDefined = false;
1332 fontDescriptionRun3.sizeDefined = false;
1334 Vector<FontDescriptionRun> fontDescriptionRuns;
1335 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1336 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1337 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1338 Size textArea(100.f, 300.f);
1339 Size layoutSize(88.f, 53.f);
1342 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,
1343 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f
1345 struct LineRun line0 =
1357 struct LineRun line1 =
1369 Vector<LineRun> lines;
1370 lines.PushBack( line0 );
1371 lines.PushBack( line1 );
1373 LayoutTextData data =
1375 "Layout simple text with one character with a different font size.",
1376 "Hello world demo.",
1379 fontDescriptionRuns.Begin(),
1385 Layout::Engine::MULTI_LINE_BOX,
1392 if( !LayoutTextTest( data ) )
1394 tet_result(TET_FAIL);
1397 tet_result(TET_PASS);
1401 int UtcDaliTextUpdateLayout01(void)
1403 ToolkitTestApplication application;
1404 tet_infoline(" UtcDaliTextUpdateLayout01");
1406 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1408 const std::string fontLatin( "TizenSans" );
1409 const std::string fontHebrew( "TizenSansHebrew" );
1410 const std::string fontArabic( "TizenSansArabic" );
1412 // Set a known font description
1413 FontDescriptionRun fontDescriptionRun01;
1414 fontDescriptionRun01.characterRun.characterIndex = 0u;
1415 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1416 fontDescriptionRun01.familyLength = fontLatin.size();
1417 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1418 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1419 fontDescriptionRun01.familyDefined = true;
1420 fontDescriptionRun01.weightDefined = false;
1421 fontDescriptionRun01.widthDefined = false;
1422 fontDescriptionRun01.slantDefined = false;
1423 fontDescriptionRun01.sizeDefined = false;
1425 // Set a known font description
1426 FontDescriptionRun fontDescriptionRun02;
1427 fontDescriptionRun02.characterRun.characterIndex = 17u;
1428 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1429 fontDescriptionRun02.familyLength = fontHebrew.size();
1430 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1431 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1432 fontDescriptionRun02.familyDefined = true;
1433 fontDescriptionRun02.weightDefined = false;
1434 fontDescriptionRun02.widthDefined = false;
1435 fontDescriptionRun02.slantDefined = false;
1436 fontDescriptionRun02.sizeDefined = false;
1438 // Set a known font description
1439 FontDescriptionRun fontDescriptionRun03;
1440 fontDescriptionRun03.characterRun.characterIndex = 26u;
1441 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1442 fontDescriptionRun03.familyLength = fontLatin.size();
1443 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1444 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1445 fontDescriptionRun03.familyDefined = true;
1446 fontDescriptionRun03.weightDefined = false;
1447 fontDescriptionRun03.widthDefined = false;
1448 fontDescriptionRun03.slantDefined = false;
1449 fontDescriptionRun03.sizeDefined = false;
1451 // Set a known font description
1452 FontDescriptionRun fontDescriptionRun04;
1453 fontDescriptionRun04.characterRun.characterIndex = 28u;
1454 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1455 fontDescriptionRun04.familyLength = fontArabic.size();
1456 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1457 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1458 fontDescriptionRun04.familyDefined = true;
1459 fontDescriptionRun04.weightDefined = false;
1460 fontDescriptionRun04.widthDefined = false;
1461 fontDescriptionRun04.slantDefined = false;
1462 fontDescriptionRun04.sizeDefined = false;
1464 // Set a known font description
1465 FontDescriptionRun fontDescriptionRun05;
1466 fontDescriptionRun05.characterRun.characterIndex = 42u;
1467 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1468 fontDescriptionRun05.familyLength = fontLatin.size();
1469 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1470 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1471 fontDescriptionRun05.familyDefined = true;
1472 fontDescriptionRun05.weightDefined = false;
1473 fontDescriptionRun05.widthDefined = false;
1474 fontDescriptionRun05.slantDefined = false;
1475 fontDescriptionRun05.sizeDefined = false;
1477 // Set a known font description
1478 FontDescriptionRun fontDescriptionRun06;
1479 fontDescriptionRun06.characterRun.characterIndex = 54u;
1480 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1481 fontDescriptionRun06.familyLength = fontHebrew.size();
1482 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1483 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1484 fontDescriptionRun06.familyDefined = true;
1485 fontDescriptionRun06.weightDefined = false;
1486 fontDescriptionRun06.widthDefined = false;
1487 fontDescriptionRun06.slantDefined = false;
1488 fontDescriptionRun06.sizeDefined = false;
1490 // Set a known font description
1491 FontDescriptionRun fontDescriptionRun07;
1492 fontDescriptionRun07.characterRun.characterIndex = 64u;
1493 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1494 fontDescriptionRun07.familyLength = fontHebrew.size();
1495 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1496 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1497 fontDescriptionRun07.familyDefined = true;
1498 fontDescriptionRun07.weightDefined = false;
1499 fontDescriptionRun07.widthDefined = false;
1500 fontDescriptionRun07.slantDefined = false;
1501 fontDescriptionRun07.sizeDefined = false;
1503 // Set a known font description
1504 FontDescriptionRun fontDescriptionRun08;
1505 fontDescriptionRun08.characterRun.characterIndex = 74u;
1506 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1507 fontDescriptionRun08.familyLength = fontLatin.size();
1508 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1509 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1510 fontDescriptionRun08.familyDefined = true;
1511 fontDescriptionRun08.weightDefined = false;
1512 fontDescriptionRun08.widthDefined = false;
1513 fontDescriptionRun08.slantDefined = false;
1514 fontDescriptionRun08.sizeDefined = false;
1516 // Set a known font description
1517 FontDescriptionRun fontDescriptionRun09;
1518 fontDescriptionRun09.characterRun.characterIndex = 92u;
1519 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1520 fontDescriptionRun09.familyLength = fontLatin.size();
1521 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1522 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1523 fontDescriptionRun09.familyDefined = true;
1524 fontDescriptionRun09.weightDefined = false;
1525 fontDescriptionRun09.widthDefined = false;
1526 fontDescriptionRun09.slantDefined = false;
1527 fontDescriptionRun09.sizeDefined = false;
1529 // Set a known font description
1530 FontDescriptionRun fontDescriptionRun10;
1531 fontDescriptionRun10.characterRun.characterIndex = 104u;
1532 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1533 fontDescriptionRun10.familyLength = fontArabic.size();
1534 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1535 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1536 fontDescriptionRun10.familyDefined = true;
1537 fontDescriptionRun10.weightDefined = false;
1538 fontDescriptionRun10.widthDefined = false;
1539 fontDescriptionRun10.slantDefined = false;
1540 fontDescriptionRun10.sizeDefined = false;
1542 // Set a known font description
1543 FontDescriptionRun fontDescriptionRun11;
1544 fontDescriptionRun11.characterRun.characterIndex = 118u;
1545 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1546 fontDescriptionRun11.familyLength = fontHebrew.size();
1547 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1548 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1549 fontDescriptionRun11.familyDefined = true;
1550 fontDescriptionRun11.weightDefined = false;
1551 fontDescriptionRun11.widthDefined = false;
1552 fontDescriptionRun11.slantDefined = false;
1553 fontDescriptionRun11.sizeDefined = false;
1555 // Set a known font description
1556 FontDescriptionRun fontDescriptionRun12;
1557 fontDescriptionRun12.characterRun.characterIndex = 128u;
1558 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1559 fontDescriptionRun12.familyLength = fontLatin.size();
1560 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1561 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1562 fontDescriptionRun12.familyDefined = true;
1563 fontDescriptionRun12.weightDefined = false;
1564 fontDescriptionRun12.widthDefined = false;
1565 fontDescriptionRun12.slantDefined = false;
1566 fontDescriptionRun12.sizeDefined = false;
1568 // Set a known font description
1569 FontDescriptionRun fontDescriptionRun13;
1570 fontDescriptionRun13.characterRun.characterIndex = 145u;
1571 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1572 fontDescriptionRun13.familyLength = fontHebrew.size();
1573 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1574 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1575 fontDescriptionRun13.familyDefined = true;
1576 fontDescriptionRun13.weightDefined = false;
1577 fontDescriptionRun13.widthDefined = false;
1578 fontDescriptionRun13.slantDefined = false;
1579 fontDescriptionRun13.sizeDefined = false;
1581 // Set a known font description
1582 FontDescriptionRun fontDescriptionRun14;
1583 fontDescriptionRun14.characterRun.characterIndex = 154u;
1584 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1585 fontDescriptionRun14.familyLength = fontLatin.size();
1586 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1587 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1588 fontDescriptionRun14.familyDefined = true;
1589 fontDescriptionRun14.weightDefined = false;
1590 fontDescriptionRun14.widthDefined = false;
1591 fontDescriptionRun14.slantDefined = false;
1592 fontDescriptionRun14.sizeDefined = false;
1594 // Set a known font description
1595 FontDescriptionRun fontDescriptionRun15;
1596 fontDescriptionRun15.characterRun.characterIndex = 156u;
1597 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1598 fontDescriptionRun15.familyLength = fontHebrew.size();
1599 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1600 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1601 fontDescriptionRun15.familyDefined = true;
1602 fontDescriptionRun15.weightDefined = false;
1603 fontDescriptionRun15.widthDefined = false;
1604 fontDescriptionRun15.slantDefined = false;
1605 fontDescriptionRun15.sizeDefined = false;
1607 // Set a known font description
1608 FontDescriptionRun fontDescriptionRun16;
1609 fontDescriptionRun16.characterRun.characterIndex = 166u;
1610 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1611 fontDescriptionRun16.familyLength = fontLatin.size();
1612 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1613 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1614 fontDescriptionRun16.familyDefined = true;
1615 fontDescriptionRun16.weightDefined = false;
1616 fontDescriptionRun16.widthDefined = false;
1617 fontDescriptionRun16.slantDefined = false;
1618 fontDescriptionRun16.sizeDefined = false;
1620 // Set a known font description
1621 FontDescriptionRun fontDescriptionRun17;
1622 fontDescriptionRun17.characterRun.characterIndex = 178u;
1623 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1624 fontDescriptionRun17.familyLength = fontArabic.size();
1625 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1626 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1627 fontDescriptionRun17.familyDefined = true;
1628 fontDescriptionRun17.weightDefined = false;
1629 fontDescriptionRun17.widthDefined = false;
1630 fontDescriptionRun17.slantDefined = false;
1631 fontDescriptionRun17.sizeDefined = false;
1633 Vector<FontDescriptionRun> fontDescriptionRuns;
1634 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1635 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1636 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1637 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1638 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1639 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1640 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1641 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1642 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1643 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1644 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1645 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1646 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1647 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1648 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1649 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1650 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1651 Size textArea(100.f, 300.f);
1652 Size layoutSize(92.f, 380.f);
1655 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,
1656 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,
1657 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1658 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,
1659 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,
1660 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1661 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,
1662 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,
1663 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
1664 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,
1665 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,
1666 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1667 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,
1668 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,
1669 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1670 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,
1671 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,
1672 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 Layout::Engine::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 = 9u;
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 = 26u;
1997 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1998 fontDescriptionRun03.familyLength = fontLatin.size();
1999 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2000 memcpy( fontDescriptionRun03.familyName, fontLatin.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 = 28u;
2010 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2011 fontDescriptionRun04.familyLength = fontArabic.size();
2012 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2013 memcpy( fontDescriptionRun04.familyName, fontArabic.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 = 42u;
2023 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2024 fontDescriptionRun05.familyLength = fontLatin.size();
2025 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2026 memcpy( fontDescriptionRun05.familyName, fontLatin.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 = 54u;
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 = 64u;
2049 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2050 fontDescriptionRun07.familyLength = fontHebrew.size();
2051 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2052 memcpy( fontDescriptionRun07.familyName, fontHebrew.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 = 74u;
2062 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
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 = 92u;
2075 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2076 fontDescriptionRun09.familyLength = fontLatin.size();
2077 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2078 memcpy( fontDescriptionRun09.familyName, fontLatin.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 = 104u;
2088 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2089 fontDescriptionRun10.familyLength = fontArabic.size();
2090 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2091 memcpy( fontDescriptionRun10.familyName, fontArabic.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 = 118u;
2101 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2102 fontDescriptionRun11.familyLength = fontHebrew.size();
2103 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2104 memcpy( fontDescriptionRun11.familyName, fontHebrew.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 = 128u;
2114 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2115 fontDescriptionRun12.familyLength = fontLatin.size();
2116 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2117 memcpy( fontDescriptionRun12.familyName, fontLatin.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 = 145u;
2127 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
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 = 154u;
2140 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
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 = 156u;
2153 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2154 fontDescriptionRun15.familyLength = fontHebrew.size();
2155 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2156 memcpy( fontDescriptionRun15.familyName, fontHebrew.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 // Set a known font description
2164 FontDescriptionRun fontDescriptionRun16;
2165 fontDescriptionRun16.characterRun.characterIndex = 166u;
2166 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2167 fontDescriptionRun16.familyLength = fontLatin.size();
2168 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2169 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2170 fontDescriptionRun16.familyDefined = true;
2171 fontDescriptionRun16.weightDefined = false;
2172 fontDescriptionRun16.widthDefined = false;
2173 fontDescriptionRun16.slantDefined = false;
2174 fontDescriptionRun16.sizeDefined = false;
2176 // Set a known font description
2177 FontDescriptionRun fontDescriptionRun17;
2178 fontDescriptionRun17.characterRun.characterIndex = 178u;
2179 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2180 fontDescriptionRun17.familyLength = fontArabic.size();
2181 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2182 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2183 fontDescriptionRun17.familyDefined = true;
2184 fontDescriptionRun17.weightDefined = false;
2185 fontDescriptionRun17.widthDefined = false;
2186 fontDescriptionRun17.slantDefined = false;
2187 fontDescriptionRun17.sizeDefined = false;
2189 Vector<FontDescriptionRun> fontDescriptionRuns;
2190 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2191 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2192 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2193 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2194 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2195 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2196 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2197 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2198 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2199 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2200 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2201 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2202 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2203 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2204 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2205 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2206 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2207 Size textArea(100.f, 300.f);
2208 Size layoutSize(92.f, 380.f);
2211 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,
2212 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,
2213 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2214 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,
2215 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,
2216 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2217 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,
2218 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,
2219 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2220 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,
2221 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,
2222 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2223 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,
2224 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,
2225 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2226 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,
2227 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,
2228 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,
2231 struct LineRun line01 =
2243 struct LineRun line02 =
2255 struct LineRun line03 =
2267 struct LineRun line04 =
2279 struct LineRun line05 =
2291 struct LineRun line06 =
2303 struct LineRun line07 =
2315 struct LineRun line08 =
2327 struct LineRun line09 =
2339 struct LineRun line10 =
2351 struct LineRun line11 =
2363 struct LineRun line12 =
2375 struct LineRun line13 =
2387 struct LineRun line14 =
2399 struct LineRun line15 =
2411 struct LineRun line16 =
2423 struct LineRun line17 =
2435 struct LineRun line18 =
2447 struct LineRun line19 =
2459 Vector<LineRun> lines;
2460 lines.PushBack( line01 );
2461 lines.PushBack( line02 );
2462 lines.PushBack( line03 );
2463 lines.PushBack( line04 );
2464 lines.PushBack( line05 );
2465 lines.PushBack( line06 );
2466 lines.PushBack( line07 );
2467 lines.PushBack( line08 );
2468 lines.PushBack( line09 );
2469 lines.PushBack( line10 );
2470 lines.PushBack( line11 );
2471 lines.PushBack( line12 );
2472 lines.PushBack( line13 );
2473 lines.PushBack( line14 );
2474 lines.PushBack( line15 );
2475 lines.PushBack( line16 );
2476 lines.PushBack( line17 );
2477 lines.PushBack( line18 );
2478 lines.PushBack( line19 );
2480 LayoutTextData data =
2482 "Layout bidirectional text.",
2483 "Hello world demo שלום עולם.\n"
2484 "مرحبا بالعالم hello world שלום עולם\n"
2485 "שלום עולם hello world demo.\n"
2486 "hello world مرحبا بالعالم שלום עולם\n"
2487 "Hello world demo שלום עולם.\n"
2488 "שלום עולם hello world مرحبا بالعالم\n",
2491 fontDescriptionRuns.Begin(),
2497 Layout::Engine::MULTI_LINE_BOX,
2504 if( !LayoutTextTest( data ) )
2506 tet_result(TET_FAIL);
2509 tet_result(TET_PASS);
2513 int UtcDaliTextUpdateLayout03(void)
2515 ToolkitTestApplication application;
2516 tet_infoline(" UtcDaliTextUpdateLayout03");
2518 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2520 const std::string fontLatin( "TizenSans" );
2521 const std::string fontHebrew( "TizenSansHebrew" );
2522 const std::string fontArabic( "TizenSansArabic" );
2524 // Set a known font description
2525 FontDescriptionRun fontDescriptionRun01;
2526 fontDescriptionRun01.characterRun.characterIndex = 0u;
2527 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2528 fontDescriptionRun01.familyLength = fontLatin.size();
2529 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2530 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2531 fontDescriptionRun01.familyDefined = true;
2532 fontDescriptionRun01.weightDefined = false;
2533 fontDescriptionRun01.widthDefined = false;
2534 fontDescriptionRun01.slantDefined = false;
2535 fontDescriptionRun01.sizeDefined = false;
2537 // Set a known font description
2538 FontDescriptionRun fontDescriptionRun02;
2539 fontDescriptionRun02.characterRun.characterIndex = 17u;
2540 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2541 fontDescriptionRun02.familyLength = fontHebrew.size();
2542 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2543 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2544 fontDescriptionRun02.familyDefined = true;
2545 fontDescriptionRun02.weightDefined = false;
2546 fontDescriptionRun02.widthDefined = false;
2547 fontDescriptionRun02.slantDefined = false;
2548 fontDescriptionRun02.sizeDefined = false;
2550 // Set a known font description
2551 FontDescriptionRun fontDescriptionRun03;
2552 fontDescriptionRun03.characterRun.characterIndex = 26u;
2553 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2554 fontDescriptionRun03.familyLength = fontLatin.size();
2555 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2556 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2557 fontDescriptionRun03.familyDefined = true;
2558 fontDescriptionRun03.weightDefined = false;
2559 fontDescriptionRun03.widthDefined = false;
2560 fontDescriptionRun03.slantDefined = false;
2561 fontDescriptionRun03.sizeDefined = false;
2563 // Set a known font description
2564 FontDescriptionRun fontDescriptionRun04;
2565 fontDescriptionRun04.characterRun.characterIndex = 28u;
2566 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2567 fontDescriptionRun04.familyLength = fontArabic.size();
2568 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2569 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2570 fontDescriptionRun04.familyDefined = true;
2571 fontDescriptionRun04.weightDefined = false;
2572 fontDescriptionRun04.widthDefined = false;
2573 fontDescriptionRun04.slantDefined = false;
2574 fontDescriptionRun04.sizeDefined = false;
2576 // Set a known font description
2577 FontDescriptionRun fontDescriptionRun05;
2578 fontDescriptionRun05.characterRun.characterIndex = 42u;
2579 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2580 fontDescriptionRun05.familyLength = fontLatin.size();
2581 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2582 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2583 fontDescriptionRun05.familyDefined = true;
2584 fontDescriptionRun05.weightDefined = false;
2585 fontDescriptionRun05.widthDefined = false;
2586 fontDescriptionRun05.slantDefined = false;
2587 fontDescriptionRun05.sizeDefined = false;
2589 // Set a known font description
2590 FontDescriptionRun fontDescriptionRun06;
2591 fontDescriptionRun06.characterRun.characterIndex = 54u;
2592 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2593 fontDescriptionRun06.familyLength = fontHebrew.size();
2594 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2595 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2596 fontDescriptionRun06.familyDefined = true;
2597 fontDescriptionRun06.weightDefined = false;
2598 fontDescriptionRun06.widthDefined = false;
2599 fontDescriptionRun06.slantDefined = false;
2600 fontDescriptionRun06.sizeDefined = false;
2602 // Set a known font description
2603 FontDescriptionRun fontDescriptionRun07;
2604 fontDescriptionRun07.characterRun.characterIndex = 64u;
2605 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2606 fontDescriptionRun07.familyLength = fontHebrew.size();
2607 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2608 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2609 fontDescriptionRun07.familyDefined = true;
2610 fontDescriptionRun07.weightDefined = false;
2611 fontDescriptionRun07.widthDefined = false;
2612 fontDescriptionRun07.slantDefined = false;
2613 fontDescriptionRun07.sizeDefined = false;
2615 // Set a known font description
2616 FontDescriptionRun fontDescriptionRun08;
2617 fontDescriptionRun08.characterRun.characterIndex = 74u;
2618 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2619 fontDescriptionRun08.familyLength = fontLatin.size();
2620 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2621 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2622 fontDescriptionRun08.familyDefined = true;
2623 fontDescriptionRun08.weightDefined = false;
2624 fontDescriptionRun08.widthDefined = false;
2625 fontDescriptionRun08.slantDefined = false;
2626 fontDescriptionRun08.sizeDefined = false;
2628 // Set a known font description
2629 FontDescriptionRun fontDescriptionRun09;
2630 fontDescriptionRun09.characterRun.characterIndex = 92u;
2631 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2632 fontDescriptionRun09.familyLength = fontLatin.size();
2633 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2634 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2635 fontDescriptionRun09.familyDefined = true;
2636 fontDescriptionRun09.weightDefined = false;
2637 fontDescriptionRun09.widthDefined = false;
2638 fontDescriptionRun09.slantDefined = false;
2639 fontDescriptionRun09.sizeDefined = false;
2641 // Set a known font description
2642 FontDescriptionRun fontDescriptionRun10;
2643 fontDescriptionRun10.characterRun.characterIndex = 104u;
2644 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2645 fontDescriptionRun10.familyLength = fontArabic.size();
2646 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2647 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2648 fontDescriptionRun10.familyDefined = true;
2649 fontDescriptionRun10.weightDefined = false;
2650 fontDescriptionRun10.widthDefined = false;
2651 fontDescriptionRun10.slantDefined = false;
2652 fontDescriptionRun10.sizeDefined = false;
2654 // Set a known font description
2655 FontDescriptionRun fontDescriptionRun11;
2656 fontDescriptionRun11.characterRun.characterIndex = 118u;
2657 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2658 fontDescriptionRun11.familyLength = fontHebrew.size();
2659 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2660 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2661 fontDescriptionRun11.familyDefined = true;
2662 fontDescriptionRun11.weightDefined = false;
2663 fontDescriptionRun11.widthDefined = false;
2664 fontDescriptionRun11.slantDefined = false;
2665 fontDescriptionRun11.sizeDefined = false;
2667 // Set a known font description
2668 FontDescriptionRun fontDescriptionRun12;
2669 fontDescriptionRun12.characterRun.characterIndex = 128u;
2670 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2671 fontDescriptionRun12.familyLength = fontLatin.size();
2672 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2673 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2674 fontDescriptionRun12.familyDefined = true;
2675 fontDescriptionRun12.weightDefined = false;
2676 fontDescriptionRun12.widthDefined = false;
2677 fontDescriptionRun12.slantDefined = false;
2678 fontDescriptionRun12.sizeDefined = false;
2680 // Set a known font description
2681 FontDescriptionRun fontDescriptionRun13;
2682 fontDescriptionRun13.characterRun.characterIndex = 145u;
2683 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2684 fontDescriptionRun13.familyLength = fontHebrew.size();
2685 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2686 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2687 fontDescriptionRun13.familyDefined = true;
2688 fontDescriptionRun13.weightDefined = false;
2689 fontDescriptionRun13.widthDefined = false;
2690 fontDescriptionRun13.slantDefined = false;
2691 fontDescriptionRun13.sizeDefined = false;
2693 // Set a known font description
2694 FontDescriptionRun fontDescriptionRun14;
2695 fontDescriptionRun14.characterRun.characterIndex = 154u;
2696 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2697 fontDescriptionRun14.familyLength = fontLatin.size();
2698 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2699 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2700 fontDescriptionRun14.familyDefined = true;
2701 fontDescriptionRun14.weightDefined = false;
2702 fontDescriptionRun14.widthDefined = false;
2703 fontDescriptionRun14.slantDefined = false;
2704 fontDescriptionRun14.sizeDefined = false;
2706 // Set a known font description
2707 FontDescriptionRun fontDescriptionRun15;
2708 fontDescriptionRun15.characterRun.characterIndex = 156u;
2709 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2710 fontDescriptionRun15.familyLength = fontHebrew.size();
2711 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2712 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2713 fontDescriptionRun15.familyDefined = true;
2714 fontDescriptionRun15.weightDefined = false;
2715 fontDescriptionRun15.widthDefined = false;
2716 fontDescriptionRun15.slantDefined = false;
2717 fontDescriptionRun15.sizeDefined = false;
2719 // Set a known font description
2720 FontDescriptionRun fontDescriptionRun16;
2721 fontDescriptionRun16.characterRun.characterIndex = 166u;
2722 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2723 fontDescriptionRun16.familyLength = fontLatin.size();
2724 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2725 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2726 fontDescriptionRun16.familyDefined = true;
2727 fontDescriptionRun16.weightDefined = false;
2728 fontDescriptionRun16.widthDefined = false;
2729 fontDescriptionRun16.slantDefined = false;
2730 fontDescriptionRun16.sizeDefined = false;
2732 // Set a known font description
2733 FontDescriptionRun fontDescriptionRun17;
2734 fontDescriptionRun17.characterRun.characterIndex = 178u;
2735 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2736 fontDescriptionRun17.familyLength = fontArabic.size();
2737 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2738 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2739 fontDescriptionRun17.familyDefined = true;
2740 fontDescriptionRun17.weightDefined = false;
2741 fontDescriptionRun17.widthDefined = false;
2742 fontDescriptionRun17.slantDefined = false;
2743 fontDescriptionRun17.sizeDefined = false;
2745 Vector<FontDescriptionRun> fontDescriptionRuns;
2746 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2747 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2748 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2749 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2750 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2751 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2752 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2753 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2754 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2755 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2756 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2757 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2758 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2759 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2760 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2761 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2762 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2763 Size textArea(100.f, 300.f);
2764 Size layoutSize(92.f, 380.f);
2767 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,
2768 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,
2769 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2770 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,
2771 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,
2772 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2773 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,
2774 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,
2775 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2776 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,
2777 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,
2778 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2779 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,
2780 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,
2781 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2782 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,
2783 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,
2784 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,
2787 struct LineRun line01 =
2799 struct LineRun line02 =
2811 struct LineRun line03 =
2823 struct LineRun line04 =
2835 struct LineRun line05 =
2847 struct LineRun line06 =
2859 struct LineRun line07 =
2871 struct LineRun line08 =
2883 struct LineRun line09 =
2895 struct LineRun line10 =
2907 struct LineRun line11 =
2919 struct LineRun line12 =
2931 struct LineRun line13 =
2943 struct LineRun line14 =
2955 struct LineRun line15 =
2967 struct LineRun line16 =
2979 struct LineRun line17 =
2991 struct LineRun line18 =
3003 struct LineRun line19 =
3015 Vector<LineRun> lines;
3016 lines.PushBack( line01 );
3017 lines.PushBack( line02 );
3018 lines.PushBack( line03 );
3019 lines.PushBack( line04 );
3020 lines.PushBack( line05 );
3021 lines.PushBack( line06 );
3022 lines.PushBack( line07 );
3023 lines.PushBack( line08 );
3024 lines.PushBack( line09 );
3025 lines.PushBack( line10 );
3026 lines.PushBack( line11 );
3027 lines.PushBack( line12 );
3028 lines.PushBack( line13 );
3029 lines.PushBack( line14 );
3030 lines.PushBack( line15 );
3031 lines.PushBack( line16 );
3032 lines.PushBack( line17 );
3033 lines.PushBack( line18 );
3034 lines.PushBack( line19 );
3036 LayoutTextData data =
3038 "Layout bidirectional text.",
3039 "Hello world demo שלום עולם.\n"
3040 "مرحبا بالعالم hello world שלום עולם\n"
3041 "שלום עולם hello world demo.\n"
3042 "hello world مرحبا بالعالم שלום עולם\n"
3043 "Hello world demo שלום עולם.\n"
3044 "שלום עולם hello world مرحبا بالعالم\n",
3047 fontDescriptionRuns.Begin(),
3053 Layout::Engine::MULTI_LINE_BOX,
3060 if( !LayoutTextTest( data ) )
3062 tet_result(TET_FAIL);
3065 tet_result(TET_PASS);
3069 int UtcDaliTextLayoutEllipsis01(void)
3071 ToolkitTestApplication application;
3072 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3074 // Layout single-line LTR text with ellipsis.
3076 const std::string fontLatin( "TizenSans" );
3078 // Set a known font description
3079 FontDescriptionRun fontDescriptionRun01;
3080 fontDescriptionRun01.characterRun.characterIndex = 0u;
3081 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3082 fontDescriptionRun01.familyLength = fontLatin.size();
3083 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3084 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3085 fontDescriptionRun01.familyDefined = true;
3086 fontDescriptionRun01.weightDefined = false;
3087 fontDescriptionRun01.widthDefined = false;
3088 fontDescriptionRun01.slantDefined = false;
3089 fontDescriptionRun01.sizeDefined = false;
3091 Vector<FontDescriptionRun> fontDescriptionRuns;
3092 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3094 struct LineRun line01 =
3106 Vector<LineRun> lines;
3107 lines.PushBack( line01 );
3111 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,
3114 Size textArea( 100.f, 50.f );
3115 Size layoutSize( 100.f, 20.f );
3117 LayoutTextData data =
3119 "Layout single-line LTR text with ellipsis.",
3120 "Hello world demo hello world demo hello world demo.",
3123 fontDescriptionRuns.Begin(),
3129 Layout::Engine::SINGLE_LINE_BOX,
3136 if( !LayoutTextTest( data ) )
3138 tet_result(TET_FAIL);
3141 tet_result(TET_PASS);
3145 int UtcDaliTextLayoutEllipsis02(void)
3147 ToolkitTestApplication application;
3148 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3150 // Layout multi-line LTR text with ellipsis.
3152 const std::string fontLatin( "TizenSans" );
3154 // Set a known font description
3155 FontDescriptionRun fontDescriptionRun01;
3156 fontDescriptionRun01.characterRun.characterIndex = 0u;
3157 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3158 fontDescriptionRun01.familyLength = fontLatin.size();
3159 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3160 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3161 fontDescriptionRun01.familyDefined = true;
3162 fontDescriptionRun01.weightDefined = false;
3163 fontDescriptionRun01.widthDefined = false;
3164 fontDescriptionRun01.slantDefined = false;
3165 fontDescriptionRun01.sizeDefined = false;
3167 Vector<FontDescriptionRun> fontDescriptionRuns;
3168 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3170 struct LineRun line01 =
3182 struct LineRun line02 =
3194 Vector<LineRun> lines;
3195 lines.PushBack( line01 );
3196 lines.PushBack( line02 );
3200 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,
3201 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,
3204 Size textArea( 100.f, 50.f );
3205 Size layoutSize( 100.f, 40.f );
3207 LayoutTextData data =
3209 "Layout multi-line LTR text with ellipsis.",
3210 "Hello world demo hello world demo hello world demo.",
3213 fontDescriptionRuns.Begin(),
3219 Layout::Engine::MULTI_LINE_BOX,
3226 if( !LayoutTextTest( data ) )
3228 tet_result(TET_FAIL);
3231 tet_result(TET_PASS);
3235 int UtcDaliTextLayoutEllipsis03(void)
3237 ToolkitTestApplication application;
3238 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3240 // Layout single-line RTL text with ellipsis.
3242 const std::string fontHebrew( "TizenSansHebrew" );
3243 const std::string fontArabic( "TizenSansArabic" );
3245 // Set a known font description
3246 FontDescriptionRun fontDescriptionRun01;
3247 fontDescriptionRun01.characterRun.characterIndex = 0u;
3248 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3249 fontDescriptionRun01.familyLength = fontHebrew.size();
3250 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3251 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3252 fontDescriptionRun01.familyDefined = true;
3253 fontDescriptionRun01.weightDefined = false;
3254 fontDescriptionRun01.widthDefined = false;
3255 fontDescriptionRun01.slantDefined = false;
3256 fontDescriptionRun01.sizeDefined = false;
3258 FontDescriptionRun fontDescriptionRun02;
3259 fontDescriptionRun02.characterRun.characterIndex = 10u;
3260 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3261 fontDescriptionRun02.familyLength = fontArabic.size();
3262 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3263 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3264 fontDescriptionRun02.familyDefined = true;
3265 fontDescriptionRun02.weightDefined = false;
3266 fontDescriptionRun02.widthDefined = false;
3267 fontDescriptionRun02.slantDefined = false;
3268 fontDescriptionRun02.sizeDefined = false;
3270 FontDescriptionRun fontDescriptionRun03;
3271 fontDescriptionRun03.characterRun.characterIndex = 24u;
3272 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3273 fontDescriptionRun03.familyLength = fontHebrew.size();
3274 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3275 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3276 fontDescriptionRun03.familyDefined = true;
3277 fontDescriptionRun03.weightDefined = false;
3278 fontDescriptionRun03.widthDefined = false;
3279 fontDescriptionRun03.slantDefined = false;
3280 fontDescriptionRun03.sizeDefined = false;
3282 FontDescriptionRun fontDescriptionRun04;
3283 fontDescriptionRun04.characterRun.characterIndex = 34u;
3284 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3285 fontDescriptionRun04.familyLength = fontArabic.size();
3286 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3287 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3288 fontDescriptionRun04.familyDefined = true;
3289 fontDescriptionRun04.weightDefined = false;
3290 fontDescriptionRun04.widthDefined = false;
3291 fontDescriptionRun04.slantDefined = false;
3292 fontDescriptionRun04.sizeDefined = false;
3294 FontDescriptionRun fontDescriptionRun05;
3295 fontDescriptionRun05.characterRun.characterIndex = 48u;
3296 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3297 fontDescriptionRun05.familyLength = fontHebrew.size();
3298 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3299 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3300 fontDescriptionRun05.familyDefined = true;
3301 fontDescriptionRun05.weightDefined = false;
3302 fontDescriptionRun05.widthDefined = false;
3303 fontDescriptionRun05.slantDefined = false;
3304 fontDescriptionRun05.sizeDefined = false;
3306 FontDescriptionRun fontDescriptionRun06;
3307 fontDescriptionRun06.characterRun.characterIndex = 58u;
3308 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3309 fontDescriptionRun06.familyLength = fontArabic.size();
3310 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3311 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3312 fontDescriptionRun06.familyDefined = true;
3313 fontDescriptionRun06.weightDefined = false;
3314 fontDescriptionRun06.widthDefined = false;
3315 fontDescriptionRun06.slantDefined = false;
3316 fontDescriptionRun06.sizeDefined = false;
3318 Vector<FontDescriptionRun> fontDescriptionRuns;
3319 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3320 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3321 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3322 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3323 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3324 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3326 struct LineRun line01 =
3338 Vector<LineRun> lines;
3339 lines.PushBack( line01 );
3343 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,
3346 Size textArea( 100.f, 50.f );
3347 Size layoutSize( 100.f, 20.f );
3349 LayoutTextData data =
3351 "Layout single-line RTL text with ellipsis.",
3352 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3355 fontDescriptionRuns.Begin(),
3361 Layout::Engine::SINGLE_LINE_BOX,
3368 if( !LayoutTextTest( data ) )
3370 tet_result(TET_FAIL);
3373 tet_result(TET_PASS);
3377 int UtcDaliTextLayoutEllipsis04(void)
3379 ToolkitTestApplication application;
3380 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3382 // Layout multi-line RTL text with ellipsis.
3384 const std::string fontHebrew( "TizenSansHebrew" );
3385 const std::string fontArabic( "TizenSansArabic" );
3387 // Set a known font description
3388 FontDescriptionRun fontDescriptionRun01;
3389 fontDescriptionRun01.characterRun.characterIndex = 0u;
3390 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3391 fontDescriptionRun01.familyLength = fontHebrew.size();
3392 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3393 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3394 fontDescriptionRun01.familyDefined = true;
3395 fontDescriptionRun01.weightDefined = false;
3396 fontDescriptionRun01.widthDefined = false;
3397 fontDescriptionRun01.slantDefined = false;
3398 fontDescriptionRun01.sizeDefined = false;
3400 FontDescriptionRun fontDescriptionRun02;
3401 fontDescriptionRun02.characterRun.characterIndex = 10u;
3402 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3403 fontDescriptionRun02.familyLength = fontArabic.size();
3404 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3405 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3406 fontDescriptionRun02.familyDefined = true;
3407 fontDescriptionRun02.weightDefined = false;
3408 fontDescriptionRun02.widthDefined = false;
3409 fontDescriptionRun02.slantDefined = false;
3410 fontDescriptionRun02.sizeDefined = false;
3412 FontDescriptionRun fontDescriptionRun03;
3413 fontDescriptionRun03.characterRun.characterIndex = 24u;
3414 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3415 fontDescriptionRun03.familyLength = fontHebrew.size();
3416 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3417 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3418 fontDescriptionRun03.familyDefined = true;
3419 fontDescriptionRun03.weightDefined = false;
3420 fontDescriptionRun03.widthDefined = false;
3421 fontDescriptionRun03.slantDefined = false;
3422 fontDescriptionRun03.sizeDefined = false;
3424 FontDescriptionRun fontDescriptionRun04;
3425 fontDescriptionRun04.characterRun.characterIndex = 34u;
3426 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3427 fontDescriptionRun04.familyLength = fontArabic.size();
3428 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3429 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3430 fontDescriptionRun04.familyDefined = true;
3431 fontDescriptionRun04.weightDefined = false;
3432 fontDescriptionRun04.widthDefined = false;
3433 fontDescriptionRun04.slantDefined = false;
3434 fontDescriptionRun04.sizeDefined = false;
3436 FontDescriptionRun fontDescriptionRun05;
3437 fontDescriptionRun05.characterRun.characterIndex = 48u;
3438 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3439 fontDescriptionRun05.familyLength = fontHebrew.size();
3440 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3441 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3442 fontDescriptionRun05.familyDefined = true;
3443 fontDescriptionRun05.weightDefined = false;
3444 fontDescriptionRun05.widthDefined = false;
3445 fontDescriptionRun05.slantDefined = false;
3446 fontDescriptionRun05.sizeDefined = false;
3448 FontDescriptionRun fontDescriptionRun06;
3449 fontDescriptionRun06.characterRun.characterIndex = 58u;
3450 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3451 fontDescriptionRun06.familyLength = fontArabic.size();
3452 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3453 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3454 fontDescriptionRun06.familyDefined = true;
3455 fontDescriptionRun06.weightDefined = false;
3456 fontDescriptionRun06.widthDefined = false;
3457 fontDescriptionRun06.slantDefined = false;
3458 fontDescriptionRun06.sizeDefined = false;
3460 Vector<FontDescriptionRun> fontDescriptionRuns;
3461 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3462 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3463 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3464 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3465 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3466 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3468 struct LineRun line01 =
3480 struct LineRun line02 =
3492 Vector<LineRun> lines;
3493 lines.PushBack( line01 );
3494 lines.PushBack( line02 );
3498 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,
3499 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,
3502 Size textArea( 100.f, 50.f );
3503 Size layoutSize( 100.f, 40.f );
3505 LayoutTextData data =
3507 "Layout single-line RTL text with ellipsis.",
3508 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",