2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
23 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
24 #include <dali-toolkit/internal/text/text-run-container.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <toolkit-text-model.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 LayoutEngine::Layout layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << line.width << std::endl;
66 std::cout << " ascender : " << line.ascender << std::endl;
67 std::cout << " descender : " << line.descender << std::endl;
68 std::cout << " extraLength : " << line.extraLength << std::endl;
69 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
70 std::cout << " direction : " << line.direction << std::endl;
71 std::cout << " ellipsis : " << line.ellipsis << std::endl;
74 bool LayoutTextTest( const LayoutTextData& data )
77 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
78 fontClient.SetDpi( 96u, 96u );
80 char* pathNamePtr = get_current_dir_name();
81 const std::string pathName( pathNamePtr );
84 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 // 1) Create the model.
89 LogicalModelPtr logicalModel;
90 VisualModelPtr visualModel;
94 Vector<FontDescriptionRun> fontDescriptionRuns;
95 if( 0u != data.numberOfFonts )
97 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
98 data.fontDescriptions,
99 data.fontDescriptions + data.numberOfFonts );
102 LayoutOptions options;
103 options.reorder = false;
104 options.align = false;
105 CreateTextModel( data.text,
114 // 2) Clear the layout.
115 Vector<LineRun>& lines = visualModel->mLines;
117 const Length numberOfCharacters = logicalModel->mText.Count();
118 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
119 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
120 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
122 LineIndex startRemoveIndex = 0u;
124 if( 0u != lines.Count() )
126 startRemoveIndex = lines.Count();
127 LineIndex endRemoveIndex = startRemoveIndex;
128 ClearGlyphRuns( data.startIndex,
129 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
134 // Update the character runs of the lines.
135 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
136 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
137 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
138 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
139 ClearCharacterRuns( startCharacterIndex,
140 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
145 lines.Erase( lines.Begin() + startRemoveIndex,
146 lines.Begin() + endRemoveIndex );
149 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
151 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
152 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
156 engine.SetMetrics( metrics );
157 engine.SetTextEllipsisEnabled( data.ellipsis );
158 engine.SetLayout( data.layout );
160 const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
162 LayoutParameters layoutParameters( data.textArea,
163 logicalModel->mText.Begin(),
164 logicalModel->mLineBreakInfo.Begin(),
165 logicalModel->mWordBreakInfo.Begin(),
166 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
167 visualModel->mGlyphs.Begin(),
168 visualModel->mGlyphsToCharacters.Begin(),
169 visualModel->mCharactersPerGlyph.Begin(),
170 visualModel->mCharactersToGlyph.Begin(),
171 visualModel->mGlyphsPerCharacter.Begin(),
172 totalNumberOfGlyphs );
174 layoutParameters.isLastNewParagraph = isLastNewParagraph;
176 // The initial glyph and the number of glyphs to layout.
177 layoutParameters.startGlyphIndex = data.startIndex;
178 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
179 layoutParameters.startLineIndex = startRemoveIndex;
180 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
182 layoutSize = Vector2::ZERO;
184 const bool updated = engine.LayoutText( layoutParameters,
189 // 4) Compare the results.
191 if( updated != data.updated )
193 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
197 if( layoutSize != data.layoutSize )
199 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
203 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
205 const Vector2& position = *( glyphPositions.Begin() + index );
207 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
212 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
214 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
219 if( lines.Count() != data.numberOfLines )
221 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
225 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
227 const LineRun& line = *( lines.Begin() + index );
228 const LineRun& expectedLine = *( data.lines + index );
230 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
232 std::cout << " Different line info for line : " << index << std::endl;
234 std::cout << " expected" << std::endl;
235 Print( expectedLine );
238 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
240 std::cout << " Different line info for line : " << index << std::endl;
242 std::cout << " expected" << std::endl;
243 Print( expectedLine );
247 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
249 std::cout << " Different line info for line : " << index << std::endl;
251 std::cout << " expected" << std::endl;
252 Print( expectedLine );
255 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
257 std::cout << " Different line info for line : " << index << std::endl;
259 std::cout << " expected" << std::endl;
260 Print( expectedLine );
264 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
266 std::cout << " Different line info for line : " << index << std::endl;
268 std::cout << " expected" << std::endl;
269 Print( expectedLine );
273 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
275 std::cout << " Different line info for line : " << index << std::endl;
277 std::cout << " expected" << std::endl;
278 Print( expectedLine );
282 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
284 std::cout << " Different line info for line : " << index << std::endl;
286 std::cout << " expected" << std::endl;
287 Print( expectedLine );
291 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
293 std::cout << " Different line info for line : " << index << std::endl;
295 std::cout << " expected" << std::endl;
296 Print( expectedLine );
300 if( line.ellipsis != expectedLine.ellipsis )
302 std::cout << " Different line info for line : " << index << std::endl;
304 std::cout << " expected" << std::endl;
305 Print( expectedLine );
309 // Do not compare the alignment offset as it's not calculated in the layout.
310 // Do not compare the line direction as it's not set in the layout.
316 //////////////////////////////////////////////////////////
318 struct ReLayoutRightToLeftLinesData
320 std::string description;
323 unsigned int numberOfFonts;
324 FontDescriptionRun* fontDescriptions;
325 unsigned int totalNumberOfGlyphs;
327 unsigned int startIndex;
328 unsigned int numberOfCharacters;
331 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
334 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
335 fontClient.SetDpi( 96u, 96u );
337 char* pathNamePtr = get_current_dir_name();
338 const std::string pathName( pathNamePtr );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
345 // 1) Create the model.
346 LogicalModelPtr logicalModel;
347 VisualModelPtr visualModel;
351 Vector<FontDescriptionRun> fontDescriptionRuns;
352 if( 0u != data.numberOfFonts )
354 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
355 data.fontDescriptions,
356 data.fontDescriptions + data.numberOfFonts );
359 LayoutOptions options;
360 options.reorder = false;
361 options.align = false;
362 CreateTextModel( data.text,
371 // 2) Call the ReLayoutRightToLeftLines() method.
373 engine.SetMetrics( metrics );
375 LayoutParameters layoutParameters( data.textArea,
376 logicalModel->mText.Begin(),
377 logicalModel->mLineBreakInfo.Begin(),
378 logicalModel->mWordBreakInfo.Begin(),
379 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
380 visualModel->mGlyphs.Begin(),
381 visualModel->mGlyphsToCharacters.Begin(),
382 visualModel->mCharactersPerGlyph.Begin(),
383 visualModel->mCharactersToGlyph.Begin(),
384 visualModel->mGlyphsPerCharacter.Begin(),
385 visualModel->mGlyphs.Count() );
387 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
388 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
390 engine.ReLayoutRightToLeftLines( layoutParameters,
392 data.numberOfCharacters,
393 visualModel->mGlyphPositions );
395 // 3) Compare the results.
396 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
398 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
400 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
404 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
406 const Vector2& position = *( glyphPositions.Begin() + index );
408 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
410 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
413 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
415 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
423 //////////////////////////////////////////////////////////
427 std::string description;
430 unsigned int numberOfFonts;
431 FontDescriptionRun* fontDescriptions;
432 LayoutEngine::HorizontalAlignment horizontalAlignment;
433 LayoutEngine::VerticalAlignment verticalAlignment;
434 unsigned int startIndex;
435 unsigned int numberOfCharacters;
436 unsigned int numberOfLines;
440 bool AlignTest( const AlignData& data )
443 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
444 fontClient.SetDpi( 96u, 96u );
446 char* pathNamePtr = get_current_dir_name();
447 const std::string pathName( pathNamePtr );
450 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
451 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
452 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
454 // 1) Create the model.
455 LogicalModelPtr logicalModel;
456 VisualModelPtr visualModel;
460 Vector<FontDescriptionRun> fontDescriptionRuns;
461 if( 0u != data.numberOfFonts )
463 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
464 data.fontDescriptions,
465 data.fontDescriptions + data.numberOfFonts );
468 LayoutOptions options;
469 options.align = false;
470 CreateTextModel( data.text,
479 // Call the Align method.
481 engine.SetMetrics( metrics );
483 engine.SetHorizontalAlignment( data.horizontalAlignment );
484 engine.SetVerticalAlignment( data.verticalAlignment );
486 float alignmentOffset = 0.f;
487 engine.Align( data.textArea,
489 data.numberOfCharacters,
494 if( data.numberOfLines != visualModel->mLines.Count() )
496 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
500 const LineRun* const linesBuffer = visualModel->mLines.Begin();
501 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
503 const LineRun& line = *( linesBuffer + index );
505 if( line.alignmentOffset != *( data.lineOffsets + index ) )
507 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
517 //////////////////////////////////////////////////////////
519 // UtcDaliTextLayoutSetGetLayout
520 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
521 // UtcDaliTextLayoutSetGetHorizontalAlignment
522 // UtcDaliTextLayoutSetGetVerticalAlignment
523 // UtcDaliTextLayoutSetGetCursorWidth
524 // UtcDaliTextLayoutNoText
525 // UtcDaliTextLayoutSmallTextArea01
526 // UtcDaliTextLayoutSmallTextArea02
527 // UtcDaliTextLayoutMultilineText01
528 // UtcDaliTextLayoutMultilineText02
529 // UtcDaliTextLayoutMultilineText03
530 // UtcDaliTextLayoutMultilineText04
531 // UtcDaliTextLayoutMultilineText05
532 // UtcDaliTextUpdateLayout01
533 // UtcDaliTextUpdateLayout02
534 // UtcDaliTextUpdateLayout03
535 // UtcDaliTextLayoutEllipsis01
536 // UtcDaliTextLayoutEllipsis02
537 // UtcDaliTextLayoutEllipsis03
538 // UtcDaliTextLayoutEllipsis04
539 // UtcDaliTextLayoutEllipsis04
540 // UtcDaliTextReorderLayout01
541 // UtcDaliTextReorderLayout02
542 // UtcDaliTextReorderLayout03
543 // UtcDaliTextReorderLayout04
544 // UtcDaliTextAlign01
545 // UtcDaliTextAlign02
546 // UtcDaliTextAlign03
547 // UtcDaliTextAlign04
548 // UtcDaliTextAlign05
549 // UtcDaliTextAlign06
550 // UtcDaliTextAlign07
551 // UtcDaliTextAlign08
552 // UtcDaliTextAlign09
554 //////////////////////////////////////////////////////////
556 int UtcDaliTextLayoutSetGetLayout(void)
558 ToolkitTestApplication application;
559 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
563 DALI_TEST_CHECK( LayoutEngine::SINGLE_LINE_BOX == engine.GetLayout() );
565 engine.SetLayout( LayoutEngine::MULTI_LINE_BOX );
566 DALI_TEST_CHECK( LayoutEngine::MULTI_LINE_BOX == engine.GetLayout() );
568 tet_result(TET_PASS);
572 int UtcDaliTextLayoutSetGetTextEllipsisEnabled(void)
574 ToolkitTestApplication application;
575 tet_infoline(" UtcDaliTextLayoutSetGetTextEllipsisEnabled");
579 DALI_TEST_CHECK( !engine.GetTextEllipsisEnabled() );
581 engine.SetTextEllipsisEnabled( true );
582 DALI_TEST_CHECK( engine.GetTextEllipsisEnabled() );
584 tet_result(TET_PASS);
588 int UtcDaliTextLayoutSetGetHorizontalAlignment(void)
590 ToolkitTestApplication application;
595 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_BEGIN == engine.GetHorizontalAlignment() );
597 engine.SetHorizontalAlignment( LayoutEngine::HORIZONTAL_ALIGN_END );
598 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_END == engine.GetHorizontalAlignment() );
600 tet_result(TET_PASS);
604 int UtcDaliTextLayoutSetGetVerticalAlignment(void)
606 ToolkitTestApplication application;
607 tet_infoline(" UtcDaliTextLayoutSetGetVerticalAlignment");
611 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
613 engine.SetVerticalAlignment( LayoutEngine::VERTICAL_ALIGN_TOP );
614 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
617 tet_result(TET_PASS);
621 int UtcDaliTextLayoutSetGetCursorWidth(void)
623 ToolkitTestApplication application;
628 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
630 engine.SetCursorWidth( 2 );
631 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
633 tet_result(TET_PASS);
637 int UtcDaliTextLayoutNoText(void)
639 ToolkitTestApplication application;
640 tet_infoline(" UtcDaliTextLayoutNoText");
642 Size textArea(100.f, 60.f);
643 Size layoutSize = Vector2::ZERO;
644 LayoutTextData data =
656 LayoutEngine::MULTI_LINE_BOX,
663 if( !LayoutTextTest( data ) )
665 tet_result(TET_FAIL);
668 tet_result(TET_PASS);
672 int UtcDaliTextLayoutSmallTextArea01(void)
674 ToolkitTestApplication application;
675 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
677 // Won't layout the text in multi-line if the width is too small.
679 const std::string fontFamily( "TizenSans" );
681 // Set a known font description
682 FontDescriptionRun fontDescriptionRun;
683 fontDescriptionRun.characterRun.characterIndex = 0u;
684 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
685 fontDescriptionRun.familyLength = fontFamily.size();
686 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
687 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
688 fontDescriptionRun.familyDefined = true;
689 fontDescriptionRun.weightDefined = false;
690 fontDescriptionRun.widthDefined = false;
691 fontDescriptionRun.slantDefined = false;
692 fontDescriptionRun.sizeDefined = false;
694 Vector<FontDescriptionRun> fontDescriptionRuns;
695 fontDescriptionRuns.PushBack( fontDescriptionRun );
696 Size textArea(1.f, 1.f);
697 Size layoutSize = Vector2::ZERO;
698 LayoutTextData data =
700 "Layout text in a small area",
704 fontDescriptionRuns.Begin(),
710 LayoutEngine::MULTI_LINE_BOX,
717 if( !LayoutTextTest( data ) )
719 tet_result(TET_FAIL);
722 tet_result(TET_PASS);
726 int UtcDaliTextLayoutSmallTextArea02(void)
728 ToolkitTestApplication application;
729 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
731 // Will layout the text in single line as it can be scrolled.
733 const std::string fontFamily( "TizenSans" );
735 // Set a known font description
736 FontDescriptionRun fontDescriptionRun;
737 fontDescriptionRun.characterRun.characterIndex = 0u;
738 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
739 fontDescriptionRun.familyLength = fontFamily.size();
740 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
741 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
742 fontDescriptionRun.familyDefined = true;
743 fontDescriptionRun.weightDefined = false;
744 fontDescriptionRun.widthDefined = false;
745 fontDescriptionRun.slantDefined = false;
746 fontDescriptionRun.sizeDefined = false;
748 Vector<FontDescriptionRun> fontDescriptionRuns;
749 fontDescriptionRuns.PushBack( fontDescriptionRun );
750 Size textArea(1.f, 1.f);
751 Size layoutSize(80.f, 20.f);
752 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 };
753 struct LineRun line =
765 Vector<LineRun> lines;
766 lines.PushBack( line );
768 LayoutTextData data =
770 "Layout text in a small area",
774 fontDescriptionRuns.Begin(),
780 LayoutEngine::SINGLE_LINE_BOX,
787 if( !LayoutTextTest( data ) )
789 tet_result(TET_FAIL);
792 tet_result(TET_PASS);
796 int UtcDaliTextLayoutMultilineText01(void)
798 ToolkitTestApplication application;
799 tet_infoline(" UtcDaliTextLayoutMultilineText01");
801 // Layout some lines of left to right text.
803 const std::string fontFamily( "TizenSans" );
805 // Set a known font description
806 FontDescriptionRun fontDescriptionRun1;
807 fontDescriptionRun1.characterRun.characterIndex = 0u;
808 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
809 fontDescriptionRun1.familyLength = fontFamily.size();
810 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
811 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
812 fontDescriptionRun1.familyDefined = true;
813 fontDescriptionRun1.weightDefined = false;
814 fontDescriptionRun1.widthDefined = false;
815 fontDescriptionRun1.slantDefined = false;
816 fontDescriptionRun1.sizeDefined = false;
818 FontDescriptionRun fontDescriptionRun2;
819 fontDescriptionRun2.characterRun.characterIndex = 18u;
820 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
821 fontDescriptionRun2.familyLength = fontFamily.size();
822 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
823 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
824 fontDescriptionRun2.familyDefined = true;
825 fontDescriptionRun2.weightDefined = false;
826 fontDescriptionRun2.widthDefined = false;
827 fontDescriptionRun2.slantDefined = false;
828 fontDescriptionRun2.sizeDefined = false;
830 Vector<FontDescriptionRun> fontDescriptionRuns;
831 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
832 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
833 Size textArea(100.f, 300.f);
834 Size layoutSize(95.f, 97.f);
837 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,
838 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
839 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,
840 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,
841 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
843 struct LineRun line0 =
855 struct LineRun line1 =
867 struct LineRun line2 =
879 struct LineRun line3 =
891 struct LineRun line4 =
903 Vector<LineRun> lines;
904 lines.PushBack( line0 );
905 lines.PushBack( line1 );
906 lines.PushBack( line2 );
907 lines.PushBack( line3 );
908 lines.PushBack( line4 );
910 LayoutTextData data =
912 "Layout simple multi-line text",
913 "Hello world demo.\n"
914 "Layout different lines of text.",
917 fontDescriptionRuns.Begin(),
923 LayoutEngine::MULTI_LINE_BOX,
930 if( !LayoutTextTest( data ) )
932 tet_result(TET_FAIL);
935 tet_result(TET_PASS);
939 int UtcDaliTextLayoutMultilineText02(void)
941 ToolkitTestApplication application;
942 tet_infoline(" UtcDaliTextLayoutMultilineText02");
944 // Layout some lines of bidirectional text.
946 const std::string fontFamily1( "TizenSans" );
948 // Set a known font description
949 FontDescriptionRun fontDescriptionRun1;
950 fontDescriptionRun1.characterRun.characterIndex = 0u;
951 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
952 fontDescriptionRun1.familyLength = fontFamily1.size();
953 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
954 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
955 fontDescriptionRun1.familyDefined = true;
956 fontDescriptionRun1.weightDefined = false;
957 fontDescriptionRun1.widthDefined = false;
958 fontDescriptionRun1.slantDefined = false;
959 fontDescriptionRun1.sizeDefined = false;
961 const std::string fontFamily2( "TizenSansHebrew" );
963 // Set a known font description
964 FontDescriptionRun fontDescriptionRun2;
965 fontDescriptionRun2.characterRun.characterIndex = 17u;
966 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
967 fontDescriptionRun2.familyLength = fontFamily2.size();
968 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
969 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
970 fontDescriptionRun2.familyDefined = true;
971 fontDescriptionRun2.weightDefined = false;
972 fontDescriptionRun2.widthDefined = false;
973 fontDescriptionRun2.slantDefined = false;
974 fontDescriptionRun2.sizeDefined = false;
976 const std::string fontFamily3( "TizenSans" );
978 // Set a known font description
979 FontDescriptionRun fontDescriptionRun3;
980 fontDescriptionRun3.characterRun.characterIndex = 26u;
981 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
982 fontDescriptionRun3.familyLength = fontFamily3.size();
983 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
984 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
985 fontDescriptionRun3.familyDefined = true;
986 fontDescriptionRun3.weightDefined = false;
987 fontDescriptionRun3.widthDefined = false;
988 fontDescriptionRun3.slantDefined = false;
989 fontDescriptionRun3.sizeDefined = false;
991 const std::string fontFamily4( "TizenSansHebrew" );
993 // Set a known font description
994 FontDescriptionRun fontDescriptionRun4;
995 fontDescriptionRun4.characterRun.characterIndex = 28u;
996 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
997 fontDescriptionRun4.familyLength = fontFamily4.size();
998 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
999 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
1000 fontDescriptionRun4.familyDefined = true;
1001 fontDescriptionRun4.weightDefined = false;
1002 fontDescriptionRun4.widthDefined = false;
1003 fontDescriptionRun4.slantDefined = false;
1004 fontDescriptionRun4.sizeDefined = false;
1006 const std::string fontFamily5( "TizenSans" );
1008 // Set a known font description
1009 FontDescriptionRun fontDescriptionRun5;
1010 fontDescriptionRun5.characterRun.characterIndex = 38u;
1011 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
1012 fontDescriptionRun5.familyLength = fontFamily5.size();
1013 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
1014 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
1015 fontDescriptionRun5.familyDefined = true;
1016 fontDescriptionRun5.weightDefined = false;
1017 fontDescriptionRun5.widthDefined = false;
1018 fontDescriptionRun5.slantDefined = false;
1019 fontDescriptionRun5.sizeDefined = false;
1021 Vector<FontDescriptionRun> fontDescriptionRuns;
1022 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1023 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1024 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1025 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
1026 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
1027 Size textArea(100.f, 300.f);
1028 Size layoutSize(81.f, 120.f);
1031 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,
1032 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,
1033 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1034 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,
1035 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,
1036 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1038 struct LineRun line0 =
1050 struct LineRun line1 =
1062 struct LineRun line2 =
1074 struct LineRun line3 =
1086 struct LineRun line4 =
1098 struct LineRun line5 =
1110 Vector<LineRun> lines;
1111 lines.PushBack( line0 );
1112 lines.PushBack( line1 );
1113 lines.PushBack( line2 );
1114 lines.PushBack( line3 );
1115 lines.PushBack( line4 );
1116 lines.PushBack( line5 );
1118 LayoutTextData data =
1120 "Layout bidirectional text.",
1121 "Hello world demo שלום עולם.\n"
1122 "שלום עולם hello world demo.",
1125 fontDescriptionRuns.Begin(),
1131 LayoutEngine::MULTI_LINE_BOX,
1138 if( !LayoutTextTest( data ) )
1140 tet_result(TET_FAIL);
1143 tet_result(TET_PASS);
1147 int UtcDaliTextLayoutMultilineText03(void)
1149 ToolkitTestApplication application;
1150 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1152 // Layout a long word which doesn't fit in the width of the text area.
1154 const std::string fontFamily( "TizenSans" );
1156 // Set a known font description
1157 FontDescriptionRun fontDescriptionRun;
1158 fontDescriptionRun.characterRun.characterIndex = 0u;
1159 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1160 fontDescriptionRun.familyLength = fontFamily.size();
1161 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1162 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1163 fontDescriptionRun.familyDefined = true;
1164 fontDescriptionRun.weightDefined = false;
1165 fontDescriptionRun.widthDefined = false;
1166 fontDescriptionRun.slantDefined = false;
1167 fontDescriptionRun.sizeDefined = false;
1169 Vector<FontDescriptionRun> fontDescriptionRuns;
1170 fontDescriptionRuns.PushBack( fontDescriptionRun );
1171 Size textArea(100.f, 300.f);
1172 Size layoutSize(96.f, 60.f);
1175 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,
1176 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,
1177 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1179 struct LineRun line0 =
1191 struct LineRun line1 =
1203 struct LineRun line2 =
1215 Vector<LineRun> lines;
1216 lines.PushBack( line0 );
1217 lines.PushBack( line1 );
1218 lines.PushBack( line2 );
1220 LayoutTextData data =
1222 "Layout a long word which doesn't fit in the width of the text area.",
1223 "Helloworlddemohelloworlddemo.",
1226 fontDescriptionRuns.Begin(),
1232 LayoutEngine::MULTI_LINE_BOX,
1239 if( !LayoutTextTest( data ) )
1241 tet_result(TET_FAIL);
1244 tet_result(TET_PASS);
1248 int UtcDaliTextLayoutMultilineText04(void)
1250 ToolkitTestApplication application;
1251 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1253 // Layout simple text ending with a \n. It has to add a void line at the end.
1255 const std::string fontFamily( "TizenSans" );
1257 // Set a known font description
1258 FontDescriptionRun fontDescriptionRun;
1259 fontDescriptionRun.characterRun.characterIndex = 0u;
1260 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1261 fontDescriptionRun.familyLength = fontFamily.size();
1262 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1263 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1264 fontDescriptionRun.familyDefined = true;
1265 fontDescriptionRun.weightDefined = false;
1266 fontDescriptionRun.widthDefined = false;
1267 fontDescriptionRun.slantDefined = false;
1268 fontDescriptionRun.sizeDefined = false;
1270 Vector<FontDescriptionRun> fontDescriptionRuns;
1271 fontDescriptionRuns.PushBack( fontDescriptionRun );
1272 Size textArea(100.f, 300.f);
1273 Size layoutSize(83.f, 40.f);
1276 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
1278 struct LineRun line0 =
1290 struct LineRun line1 =
1302 Vector<LineRun> lines;
1303 lines.PushBack( line0 );
1304 lines.PushBack( line1 );
1306 LayoutTextData data =
1308 "Layout simple text ending with a \n.",
1312 fontDescriptionRuns.Begin(),
1318 LayoutEngine::MULTI_LINE_BOX,
1325 if( !LayoutTextTest( data ) )
1327 tet_result(TET_FAIL);
1330 tet_result(TET_PASS);
1334 int UtcDaliTextLayoutMultilineText05(void)
1336 ToolkitTestApplication application;
1337 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1339 // Layout simple text with one character with a different font size.
1341 const std::string fontFamily( "TizenSans" );
1343 // Set a known font description
1344 FontDescriptionRun fontDescriptionRun1;
1345 fontDescriptionRun1.characterRun.characterIndex = 0u;
1346 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1347 fontDescriptionRun1.familyLength = fontFamily.size();
1348 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1349 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1350 fontDescriptionRun1.familyDefined = true;
1351 fontDescriptionRun1.weightDefined = false;
1352 fontDescriptionRun1.widthDefined = false;
1353 fontDescriptionRun1.slantDefined = false;
1354 fontDescriptionRun1.sizeDefined = false;
1356 FontDescriptionRun fontDescriptionRun2;
1357 fontDescriptionRun2.characterRun.characterIndex = 6u;
1358 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1359 fontDescriptionRun2.familyLength = fontFamily.size();
1360 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1361 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1362 fontDescriptionRun2.size = 1280u;
1363 fontDescriptionRun2.familyDefined = true;
1364 fontDescriptionRun2.weightDefined = false;
1365 fontDescriptionRun2.widthDefined = false;
1366 fontDescriptionRun2.slantDefined = false;
1367 fontDescriptionRun2.sizeDefined = true;
1369 FontDescriptionRun fontDescriptionRun3;
1370 fontDescriptionRun3.characterRun.characterIndex = 7u;
1371 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1372 fontDescriptionRun3.familyLength = fontFamily.size();
1373 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1374 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1375 fontDescriptionRun3.familyDefined = true;
1376 fontDescriptionRun3.weightDefined = false;
1377 fontDescriptionRun3.widthDefined = false;
1378 fontDescriptionRun3.slantDefined = false;
1379 fontDescriptionRun3.sizeDefined = false;
1381 Vector<FontDescriptionRun> fontDescriptionRuns;
1382 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1383 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1384 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1385 Size textArea(100.f, 300.f);
1386 Size layoutSize(88.f, 53.f);
1389 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,
1390 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f
1392 struct LineRun line0 =
1404 struct LineRun line1 =
1416 Vector<LineRun> lines;
1417 lines.PushBack( line0 );
1418 lines.PushBack( line1 );
1420 LayoutTextData data =
1422 "Layout simple text with one character with a different font size.",
1423 "Hello world demo.",
1426 fontDescriptionRuns.Begin(),
1432 LayoutEngine::MULTI_LINE_BOX,
1439 if( !LayoutTextTest( data ) )
1441 tet_result(TET_FAIL);
1444 tet_result(TET_PASS);
1448 int UtcDaliTextUpdateLayout01(void)
1450 ToolkitTestApplication application;
1451 tet_infoline(" UtcDaliTextUpdateLayout01");
1453 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1455 const std::string fontLatin( "TizenSans" );
1456 const std::string fontHebrew( "TizenSansHebrew" );
1457 const std::string fontArabic( "TizenSansArabic" );
1459 // Set a known font description
1460 FontDescriptionRun fontDescriptionRun01;
1461 fontDescriptionRun01.characterRun.characterIndex = 0u;
1462 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1463 fontDescriptionRun01.familyLength = fontLatin.size();
1464 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1465 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1466 fontDescriptionRun01.familyDefined = true;
1467 fontDescriptionRun01.weightDefined = false;
1468 fontDescriptionRun01.widthDefined = false;
1469 fontDescriptionRun01.slantDefined = false;
1470 fontDescriptionRun01.sizeDefined = false;
1472 // Set a known font description
1473 FontDescriptionRun fontDescriptionRun02;
1474 fontDescriptionRun02.characterRun.characterIndex = 17u;
1475 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1476 fontDescriptionRun02.familyLength = fontHebrew.size();
1477 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1478 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1479 fontDescriptionRun02.familyDefined = true;
1480 fontDescriptionRun02.weightDefined = false;
1481 fontDescriptionRun02.widthDefined = false;
1482 fontDescriptionRun02.slantDefined = false;
1483 fontDescriptionRun02.sizeDefined = false;
1485 // Set a known font description
1486 FontDescriptionRun fontDescriptionRun03;
1487 fontDescriptionRun03.characterRun.characterIndex = 26u;
1488 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1489 fontDescriptionRun03.familyLength = fontLatin.size();
1490 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1491 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1492 fontDescriptionRun03.familyDefined = true;
1493 fontDescriptionRun03.weightDefined = false;
1494 fontDescriptionRun03.widthDefined = false;
1495 fontDescriptionRun03.slantDefined = false;
1496 fontDescriptionRun03.sizeDefined = false;
1498 // Set a known font description
1499 FontDescriptionRun fontDescriptionRun04;
1500 fontDescriptionRun04.characterRun.characterIndex = 28u;
1501 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1502 fontDescriptionRun04.familyLength = fontArabic.size();
1503 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1504 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1505 fontDescriptionRun04.familyDefined = true;
1506 fontDescriptionRun04.weightDefined = false;
1507 fontDescriptionRun04.widthDefined = false;
1508 fontDescriptionRun04.slantDefined = false;
1509 fontDescriptionRun04.sizeDefined = false;
1511 // Set a known font description
1512 FontDescriptionRun fontDescriptionRun05;
1513 fontDescriptionRun05.characterRun.characterIndex = 42u;
1514 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1515 fontDescriptionRun05.familyLength = fontLatin.size();
1516 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1517 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1518 fontDescriptionRun05.familyDefined = true;
1519 fontDescriptionRun05.weightDefined = false;
1520 fontDescriptionRun05.widthDefined = false;
1521 fontDescriptionRun05.slantDefined = false;
1522 fontDescriptionRun05.sizeDefined = false;
1524 // Set a known font description
1525 FontDescriptionRun fontDescriptionRun06;
1526 fontDescriptionRun06.characterRun.characterIndex = 54u;
1527 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1528 fontDescriptionRun06.familyLength = fontHebrew.size();
1529 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1530 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1531 fontDescriptionRun06.familyDefined = true;
1532 fontDescriptionRun06.weightDefined = false;
1533 fontDescriptionRun06.widthDefined = false;
1534 fontDescriptionRun06.slantDefined = false;
1535 fontDescriptionRun06.sizeDefined = false;
1537 // Set a known font description
1538 FontDescriptionRun fontDescriptionRun07;
1539 fontDescriptionRun07.characterRun.characterIndex = 64u;
1540 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1541 fontDescriptionRun07.familyLength = fontHebrew.size();
1542 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1543 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1544 fontDescriptionRun07.familyDefined = true;
1545 fontDescriptionRun07.weightDefined = false;
1546 fontDescriptionRun07.widthDefined = false;
1547 fontDescriptionRun07.slantDefined = false;
1548 fontDescriptionRun07.sizeDefined = false;
1550 // Set a known font description
1551 FontDescriptionRun fontDescriptionRun08;
1552 fontDescriptionRun08.characterRun.characterIndex = 74u;
1553 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1554 fontDescriptionRun08.familyLength = fontLatin.size();
1555 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1556 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1557 fontDescriptionRun08.familyDefined = true;
1558 fontDescriptionRun08.weightDefined = false;
1559 fontDescriptionRun08.widthDefined = false;
1560 fontDescriptionRun08.slantDefined = false;
1561 fontDescriptionRun08.sizeDefined = false;
1563 // Set a known font description
1564 FontDescriptionRun fontDescriptionRun09;
1565 fontDescriptionRun09.characterRun.characterIndex = 92u;
1566 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1567 fontDescriptionRun09.familyLength = fontLatin.size();
1568 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1569 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1570 fontDescriptionRun09.familyDefined = true;
1571 fontDescriptionRun09.weightDefined = false;
1572 fontDescriptionRun09.widthDefined = false;
1573 fontDescriptionRun09.slantDefined = false;
1574 fontDescriptionRun09.sizeDefined = false;
1576 // Set a known font description
1577 FontDescriptionRun fontDescriptionRun10;
1578 fontDescriptionRun10.characterRun.characterIndex = 104u;
1579 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1580 fontDescriptionRun10.familyLength = fontArabic.size();
1581 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1582 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1583 fontDescriptionRun10.familyDefined = true;
1584 fontDescriptionRun10.weightDefined = false;
1585 fontDescriptionRun10.widthDefined = false;
1586 fontDescriptionRun10.slantDefined = false;
1587 fontDescriptionRun10.sizeDefined = false;
1589 // Set a known font description
1590 FontDescriptionRun fontDescriptionRun11;
1591 fontDescriptionRun11.characterRun.characterIndex = 118u;
1592 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1593 fontDescriptionRun11.familyLength = fontHebrew.size();
1594 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1595 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1596 fontDescriptionRun11.familyDefined = true;
1597 fontDescriptionRun11.weightDefined = false;
1598 fontDescriptionRun11.widthDefined = false;
1599 fontDescriptionRun11.slantDefined = false;
1600 fontDescriptionRun11.sizeDefined = false;
1602 // Set a known font description
1603 FontDescriptionRun fontDescriptionRun12;
1604 fontDescriptionRun12.characterRun.characterIndex = 128u;
1605 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1606 fontDescriptionRun12.familyLength = fontLatin.size();
1607 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1608 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1609 fontDescriptionRun12.familyDefined = true;
1610 fontDescriptionRun12.weightDefined = false;
1611 fontDescriptionRun12.widthDefined = false;
1612 fontDescriptionRun12.slantDefined = false;
1613 fontDescriptionRun12.sizeDefined = false;
1615 // Set a known font description
1616 FontDescriptionRun fontDescriptionRun13;
1617 fontDescriptionRun13.characterRun.characterIndex = 145u;
1618 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1619 fontDescriptionRun13.familyLength = fontHebrew.size();
1620 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1621 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1622 fontDescriptionRun13.familyDefined = true;
1623 fontDescriptionRun13.weightDefined = false;
1624 fontDescriptionRun13.widthDefined = false;
1625 fontDescriptionRun13.slantDefined = false;
1626 fontDescriptionRun13.sizeDefined = false;
1628 // Set a known font description
1629 FontDescriptionRun fontDescriptionRun14;
1630 fontDescriptionRun14.characterRun.characterIndex = 154u;
1631 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1632 fontDescriptionRun14.familyLength = fontLatin.size();
1633 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1634 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1635 fontDescriptionRun14.familyDefined = true;
1636 fontDescriptionRun14.weightDefined = false;
1637 fontDescriptionRun14.widthDefined = false;
1638 fontDescriptionRun14.slantDefined = false;
1639 fontDescriptionRun14.sizeDefined = false;
1641 // Set a known font description
1642 FontDescriptionRun fontDescriptionRun15;
1643 fontDescriptionRun15.characterRun.characterIndex = 156u;
1644 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1645 fontDescriptionRun15.familyLength = fontHebrew.size();
1646 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1647 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1648 fontDescriptionRun15.familyDefined = true;
1649 fontDescriptionRun15.weightDefined = false;
1650 fontDescriptionRun15.widthDefined = false;
1651 fontDescriptionRun15.slantDefined = false;
1652 fontDescriptionRun15.sizeDefined = false;
1654 // Set a known font description
1655 FontDescriptionRun fontDescriptionRun16;
1656 fontDescriptionRun16.characterRun.characterIndex = 166u;
1657 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1658 fontDescriptionRun16.familyLength = fontLatin.size();
1659 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1660 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1661 fontDescriptionRun16.familyDefined = true;
1662 fontDescriptionRun16.weightDefined = false;
1663 fontDescriptionRun16.widthDefined = false;
1664 fontDescriptionRun16.slantDefined = false;
1665 fontDescriptionRun16.sizeDefined = false;
1667 // Set a known font description
1668 FontDescriptionRun fontDescriptionRun17;
1669 fontDescriptionRun17.characterRun.characterIndex = 178u;
1670 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1671 fontDescriptionRun17.familyLength = fontArabic.size();
1672 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1673 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1674 fontDescriptionRun17.familyDefined = true;
1675 fontDescriptionRun17.weightDefined = false;
1676 fontDescriptionRun17.widthDefined = false;
1677 fontDescriptionRun17.slantDefined = false;
1678 fontDescriptionRun17.sizeDefined = false;
1680 Vector<FontDescriptionRun> fontDescriptionRuns;
1681 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1682 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1683 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1684 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1685 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1686 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1687 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1688 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1689 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1690 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1691 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1692 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1693 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1694 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1695 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1696 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1697 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1698 Size textArea(100.f, 300.f);
1699 Size layoutSize(92.f, 380.f);
1702 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,
1703 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,
1704 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1705 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,
1706 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,
1707 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1708 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,
1709 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,
1710 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
1711 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,
1712 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,
1713 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1714 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,
1715 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,
1716 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
1717 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,
1718 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,
1719 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,
1722 struct LineRun line01 =
1734 struct LineRun line02 =
1746 struct LineRun line03 =
1758 struct LineRun line04 =
1770 struct LineRun line05 =
1782 struct LineRun line06 =
1794 struct LineRun line07 =
1806 struct LineRun line08 =
1818 struct LineRun line09 =
1830 struct LineRun line10 =
1842 struct LineRun line11 =
1854 struct LineRun line12 =
1866 struct LineRun line13 =
1878 struct LineRun line14 =
1890 struct LineRun line15 =
1902 struct LineRun line16 =
1914 struct LineRun line17 =
1926 struct LineRun line18 =
1938 struct LineRun line19 =
1950 Vector<LineRun> lines;
1951 lines.PushBack( line01 );
1952 lines.PushBack( line02 );
1953 lines.PushBack( line03 );
1954 lines.PushBack( line04 );
1955 lines.PushBack( line05 );
1956 lines.PushBack( line06 );
1957 lines.PushBack( line07 );
1958 lines.PushBack( line08 );
1959 lines.PushBack( line09 );
1960 lines.PushBack( line10 );
1961 lines.PushBack( line11 );
1962 lines.PushBack( line12 );
1963 lines.PushBack( line13 );
1964 lines.PushBack( line14 );
1965 lines.PushBack( line15 );
1966 lines.PushBack( line16 );
1967 lines.PushBack( line17 );
1968 lines.PushBack( line18 );
1969 lines.PushBack( line19 );
1971 LayoutTextData data =
1973 "Layout bidirectional text.",
1974 "Hello world demo שלום עולם.\n"
1975 "مرحبا بالعالم hello world שלום עולם\n"
1976 "שלום עולם hello world demo.\n"
1977 "hello world مرحبا بالعالم שלום עולם\n"
1978 "Hello world demo שלום עולם.\n"
1979 "שלום עולם hello world مرحبا بالعالم\n",
1982 fontDescriptionRuns.Begin(),
1988 LayoutEngine::MULTI_LINE_BOX,
1995 if( !LayoutTextTest( data ) )
1997 tet_result(TET_FAIL);
2000 tet_result(TET_PASS);
2004 int UtcDaliTextUpdateLayout02(void)
2006 ToolkitTestApplication application;
2007 tet_infoline(" UtcDaliTextUpdateLayout02");
2009 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2011 const std::string fontLatin( "TizenSans" );
2012 const std::string fontHebrew( "TizenSansHebrew" );
2013 const std::string fontArabic( "TizenSansArabic" );
2015 // Set a known font description
2016 FontDescriptionRun fontDescriptionRun01;
2017 fontDescriptionRun01.characterRun.characterIndex = 0u;
2018 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2019 fontDescriptionRun01.familyLength = fontLatin.size();
2020 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2021 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2022 fontDescriptionRun01.familyDefined = true;
2023 fontDescriptionRun01.weightDefined = false;
2024 fontDescriptionRun01.widthDefined = false;
2025 fontDescriptionRun01.slantDefined = false;
2026 fontDescriptionRun01.sizeDefined = false;
2028 // Set a known font description
2029 FontDescriptionRun fontDescriptionRun02;
2030 fontDescriptionRun02.characterRun.characterIndex = 17u;
2031 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2032 fontDescriptionRun02.familyLength = fontHebrew.size();
2033 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2034 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2035 fontDescriptionRun02.familyDefined = true;
2036 fontDescriptionRun02.weightDefined = false;
2037 fontDescriptionRun02.widthDefined = false;
2038 fontDescriptionRun02.slantDefined = false;
2039 fontDescriptionRun02.sizeDefined = false;
2041 // Set a known font description
2042 FontDescriptionRun fontDescriptionRun03;
2043 fontDescriptionRun03.characterRun.characterIndex = 26u;
2044 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2045 fontDescriptionRun03.familyLength = fontLatin.size();
2046 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2047 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2048 fontDescriptionRun03.familyDefined = true;
2049 fontDescriptionRun03.weightDefined = false;
2050 fontDescriptionRun03.widthDefined = false;
2051 fontDescriptionRun03.slantDefined = false;
2052 fontDescriptionRun03.sizeDefined = false;
2054 // Set a known font description
2055 FontDescriptionRun fontDescriptionRun04;
2056 fontDescriptionRun04.characterRun.characterIndex = 28u;
2057 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2058 fontDescriptionRun04.familyLength = fontArabic.size();
2059 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2060 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2061 fontDescriptionRun04.familyDefined = true;
2062 fontDescriptionRun04.weightDefined = false;
2063 fontDescriptionRun04.widthDefined = false;
2064 fontDescriptionRun04.slantDefined = false;
2065 fontDescriptionRun04.sizeDefined = false;
2067 // Set a known font description
2068 FontDescriptionRun fontDescriptionRun05;
2069 fontDescriptionRun05.characterRun.characterIndex = 42u;
2070 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2071 fontDescriptionRun05.familyLength = fontLatin.size();
2072 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2073 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2074 fontDescriptionRun05.familyDefined = true;
2075 fontDescriptionRun05.weightDefined = false;
2076 fontDescriptionRun05.widthDefined = false;
2077 fontDescriptionRun05.slantDefined = false;
2078 fontDescriptionRun05.sizeDefined = false;
2080 // Set a known font description
2081 FontDescriptionRun fontDescriptionRun06;
2082 fontDescriptionRun06.characterRun.characterIndex = 54u;
2083 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2084 fontDescriptionRun06.familyLength = fontHebrew.size();
2085 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2086 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2087 fontDescriptionRun06.familyDefined = true;
2088 fontDescriptionRun06.weightDefined = false;
2089 fontDescriptionRun06.widthDefined = false;
2090 fontDescriptionRun06.slantDefined = false;
2091 fontDescriptionRun06.sizeDefined = false;
2093 // Set a known font description
2094 FontDescriptionRun fontDescriptionRun07;
2095 fontDescriptionRun07.characterRun.characterIndex = 64u;
2096 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2097 fontDescriptionRun07.familyLength = fontHebrew.size();
2098 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2099 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2100 fontDescriptionRun07.familyDefined = true;
2101 fontDescriptionRun07.weightDefined = false;
2102 fontDescriptionRun07.widthDefined = false;
2103 fontDescriptionRun07.slantDefined = false;
2104 fontDescriptionRun07.sizeDefined = false;
2106 // Set a known font description
2107 FontDescriptionRun fontDescriptionRun08;
2108 fontDescriptionRun08.characterRun.characterIndex = 74u;
2109 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2110 fontDescriptionRun08.familyLength = fontLatin.size();
2111 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2112 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2113 fontDescriptionRun08.familyDefined = true;
2114 fontDescriptionRun08.weightDefined = false;
2115 fontDescriptionRun08.widthDefined = false;
2116 fontDescriptionRun08.slantDefined = false;
2117 fontDescriptionRun08.sizeDefined = false;
2119 // Set a known font description
2120 FontDescriptionRun fontDescriptionRun09;
2121 fontDescriptionRun09.characterRun.characterIndex = 92u;
2122 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2123 fontDescriptionRun09.familyLength = fontLatin.size();
2124 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2125 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2126 fontDescriptionRun09.familyDefined = true;
2127 fontDescriptionRun09.weightDefined = false;
2128 fontDescriptionRun09.widthDefined = false;
2129 fontDescriptionRun09.slantDefined = false;
2130 fontDescriptionRun09.sizeDefined = false;
2132 // Set a known font description
2133 FontDescriptionRun fontDescriptionRun10;
2134 fontDescriptionRun10.characterRun.characterIndex = 104u;
2135 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2136 fontDescriptionRun10.familyLength = fontArabic.size();
2137 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2138 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2139 fontDescriptionRun10.familyDefined = true;
2140 fontDescriptionRun10.weightDefined = false;
2141 fontDescriptionRun10.widthDefined = false;
2142 fontDescriptionRun10.slantDefined = false;
2143 fontDescriptionRun10.sizeDefined = false;
2145 // Set a known font description
2146 FontDescriptionRun fontDescriptionRun11;
2147 fontDescriptionRun11.characterRun.characterIndex = 118u;
2148 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2149 fontDescriptionRun11.familyLength = fontHebrew.size();
2150 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2151 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2152 fontDescriptionRun11.familyDefined = true;
2153 fontDescriptionRun11.weightDefined = false;
2154 fontDescriptionRun11.widthDefined = false;
2155 fontDescriptionRun11.slantDefined = false;
2156 fontDescriptionRun11.sizeDefined = false;
2158 // Set a known font description
2159 FontDescriptionRun fontDescriptionRun12;
2160 fontDescriptionRun12.characterRun.characterIndex = 128u;
2161 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2162 fontDescriptionRun12.familyLength = fontLatin.size();
2163 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2164 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2165 fontDescriptionRun12.familyDefined = true;
2166 fontDescriptionRun12.weightDefined = false;
2167 fontDescriptionRun12.widthDefined = false;
2168 fontDescriptionRun12.slantDefined = false;
2169 fontDescriptionRun12.sizeDefined = false;
2171 // Set a known font description
2172 FontDescriptionRun fontDescriptionRun13;
2173 fontDescriptionRun13.characterRun.characterIndex = 145u;
2174 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2175 fontDescriptionRun13.familyLength = fontHebrew.size();
2176 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2177 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2178 fontDescriptionRun13.familyDefined = true;
2179 fontDescriptionRun13.weightDefined = false;
2180 fontDescriptionRun13.widthDefined = false;
2181 fontDescriptionRun13.slantDefined = false;
2182 fontDescriptionRun13.sizeDefined = false;
2184 // Set a known font description
2185 FontDescriptionRun fontDescriptionRun14;
2186 fontDescriptionRun14.characterRun.characterIndex = 154u;
2187 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2188 fontDescriptionRun14.familyLength = fontLatin.size();
2189 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2190 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2191 fontDescriptionRun14.familyDefined = true;
2192 fontDescriptionRun14.weightDefined = false;
2193 fontDescriptionRun14.widthDefined = false;
2194 fontDescriptionRun14.slantDefined = false;
2195 fontDescriptionRun14.sizeDefined = false;
2197 // Set a known font description
2198 FontDescriptionRun fontDescriptionRun15;
2199 fontDescriptionRun15.characterRun.characterIndex = 156u;
2200 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2201 fontDescriptionRun15.familyLength = fontHebrew.size();
2202 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2203 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2204 fontDescriptionRun15.familyDefined = true;
2205 fontDescriptionRun15.weightDefined = false;
2206 fontDescriptionRun15.widthDefined = false;
2207 fontDescriptionRun15.slantDefined = false;
2208 fontDescriptionRun15.sizeDefined = false;
2210 // Set a known font description
2211 FontDescriptionRun fontDescriptionRun16;
2212 fontDescriptionRun16.characterRun.characterIndex = 166u;
2213 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2214 fontDescriptionRun16.familyLength = fontLatin.size();
2215 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2216 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2217 fontDescriptionRun16.familyDefined = true;
2218 fontDescriptionRun16.weightDefined = false;
2219 fontDescriptionRun16.widthDefined = false;
2220 fontDescriptionRun16.slantDefined = false;
2221 fontDescriptionRun16.sizeDefined = false;
2223 // Set a known font description
2224 FontDescriptionRun fontDescriptionRun17;
2225 fontDescriptionRun17.characterRun.characterIndex = 178u;
2226 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2227 fontDescriptionRun17.familyLength = fontArabic.size();
2228 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2229 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2230 fontDescriptionRun17.familyDefined = true;
2231 fontDescriptionRun17.weightDefined = false;
2232 fontDescriptionRun17.widthDefined = false;
2233 fontDescriptionRun17.slantDefined = false;
2234 fontDescriptionRun17.sizeDefined = false;
2236 Vector<FontDescriptionRun> fontDescriptionRuns;
2237 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2238 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2239 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2240 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2241 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2242 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2243 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2244 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2245 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2246 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2247 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2248 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2249 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2250 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2251 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2252 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2253 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2254 Size textArea(100.f, 300.f);
2255 Size layoutSize(92.f, 380.f);
2258 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,
2259 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,
2260 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2261 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,
2262 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,
2263 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2264 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,
2265 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,
2266 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2267 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,
2268 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,
2269 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2270 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,
2271 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,
2272 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2273 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,
2274 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,
2275 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,
2278 struct LineRun line01 =
2290 struct LineRun line02 =
2302 struct LineRun line03 =
2314 struct LineRun line04 =
2326 struct LineRun line05 =
2338 struct LineRun line06 =
2350 struct LineRun line07 =
2362 struct LineRun line08 =
2374 struct LineRun line09 =
2386 struct LineRun line10 =
2398 struct LineRun line11 =
2410 struct LineRun line12 =
2422 struct LineRun line13 =
2434 struct LineRun line14 =
2446 struct LineRun line15 =
2458 struct LineRun line16 =
2470 struct LineRun line17 =
2482 struct LineRun line18 =
2494 struct LineRun line19 =
2506 Vector<LineRun> lines;
2507 lines.PushBack( line01 );
2508 lines.PushBack( line02 );
2509 lines.PushBack( line03 );
2510 lines.PushBack( line04 );
2511 lines.PushBack( line05 );
2512 lines.PushBack( line06 );
2513 lines.PushBack( line07 );
2514 lines.PushBack( line08 );
2515 lines.PushBack( line09 );
2516 lines.PushBack( line10 );
2517 lines.PushBack( line11 );
2518 lines.PushBack( line12 );
2519 lines.PushBack( line13 );
2520 lines.PushBack( line14 );
2521 lines.PushBack( line15 );
2522 lines.PushBack( line16 );
2523 lines.PushBack( line17 );
2524 lines.PushBack( line18 );
2525 lines.PushBack( line19 );
2527 LayoutTextData data =
2529 "Layout bidirectional text.",
2530 "Hello world demo שלום עולם.\n"
2531 "مرحبا بالعالم hello world שלום עולם\n"
2532 "שלום עולם hello world demo.\n"
2533 "hello world مرحبا بالعالم שלום עולם\n"
2534 "Hello world demo שלום עולם.\n"
2535 "שלום עולם hello world مرحبا بالعالم\n",
2538 fontDescriptionRuns.Begin(),
2544 LayoutEngine::MULTI_LINE_BOX,
2551 if( !LayoutTextTest( data ) )
2553 tet_result(TET_FAIL);
2556 tet_result(TET_PASS);
2560 int UtcDaliTextUpdateLayout03(void)
2562 ToolkitTestApplication application;
2563 tet_infoline(" UtcDaliTextUpdateLayout03");
2565 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2567 const std::string fontLatin( "TizenSans" );
2568 const std::string fontHebrew( "TizenSansHebrew" );
2569 const std::string fontArabic( "TizenSansArabic" );
2571 // Set a known font description
2572 FontDescriptionRun fontDescriptionRun01;
2573 fontDescriptionRun01.characterRun.characterIndex = 0u;
2574 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2575 fontDescriptionRun01.familyLength = fontLatin.size();
2576 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2577 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2578 fontDescriptionRun01.familyDefined = true;
2579 fontDescriptionRun01.weightDefined = false;
2580 fontDescriptionRun01.widthDefined = false;
2581 fontDescriptionRun01.slantDefined = false;
2582 fontDescriptionRun01.sizeDefined = false;
2584 // Set a known font description
2585 FontDescriptionRun fontDescriptionRun02;
2586 fontDescriptionRun02.characterRun.characterIndex = 17u;
2587 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2588 fontDescriptionRun02.familyLength = fontHebrew.size();
2589 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2590 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2591 fontDescriptionRun02.familyDefined = true;
2592 fontDescriptionRun02.weightDefined = false;
2593 fontDescriptionRun02.widthDefined = false;
2594 fontDescriptionRun02.slantDefined = false;
2595 fontDescriptionRun02.sizeDefined = false;
2597 // Set a known font description
2598 FontDescriptionRun fontDescriptionRun03;
2599 fontDescriptionRun03.characterRun.characterIndex = 26u;
2600 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2601 fontDescriptionRun03.familyLength = fontLatin.size();
2602 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2603 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2604 fontDescriptionRun03.familyDefined = true;
2605 fontDescriptionRun03.weightDefined = false;
2606 fontDescriptionRun03.widthDefined = false;
2607 fontDescriptionRun03.slantDefined = false;
2608 fontDescriptionRun03.sizeDefined = false;
2610 // Set a known font description
2611 FontDescriptionRun fontDescriptionRun04;
2612 fontDescriptionRun04.characterRun.characterIndex = 28u;
2613 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2614 fontDescriptionRun04.familyLength = fontArabic.size();
2615 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2616 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2617 fontDescriptionRun04.familyDefined = true;
2618 fontDescriptionRun04.weightDefined = false;
2619 fontDescriptionRun04.widthDefined = false;
2620 fontDescriptionRun04.slantDefined = false;
2621 fontDescriptionRun04.sizeDefined = false;
2623 // Set a known font description
2624 FontDescriptionRun fontDescriptionRun05;
2625 fontDescriptionRun05.characterRun.characterIndex = 42u;
2626 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2627 fontDescriptionRun05.familyLength = fontLatin.size();
2628 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2629 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2630 fontDescriptionRun05.familyDefined = true;
2631 fontDescriptionRun05.weightDefined = false;
2632 fontDescriptionRun05.widthDefined = false;
2633 fontDescriptionRun05.slantDefined = false;
2634 fontDescriptionRun05.sizeDefined = false;
2636 // Set a known font description
2637 FontDescriptionRun fontDescriptionRun06;
2638 fontDescriptionRun06.characterRun.characterIndex = 54u;
2639 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2640 fontDescriptionRun06.familyLength = fontHebrew.size();
2641 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2642 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2643 fontDescriptionRun06.familyDefined = true;
2644 fontDescriptionRun06.weightDefined = false;
2645 fontDescriptionRun06.widthDefined = false;
2646 fontDescriptionRun06.slantDefined = false;
2647 fontDescriptionRun06.sizeDefined = false;
2649 // Set a known font description
2650 FontDescriptionRun fontDescriptionRun07;
2651 fontDescriptionRun07.characterRun.characterIndex = 64u;
2652 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2653 fontDescriptionRun07.familyLength = fontHebrew.size();
2654 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2655 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2656 fontDescriptionRun07.familyDefined = true;
2657 fontDescriptionRun07.weightDefined = false;
2658 fontDescriptionRun07.widthDefined = false;
2659 fontDescriptionRun07.slantDefined = false;
2660 fontDescriptionRun07.sizeDefined = false;
2662 // Set a known font description
2663 FontDescriptionRun fontDescriptionRun08;
2664 fontDescriptionRun08.characterRun.characterIndex = 74u;
2665 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2666 fontDescriptionRun08.familyLength = fontLatin.size();
2667 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2668 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2669 fontDescriptionRun08.familyDefined = true;
2670 fontDescriptionRun08.weightDefined = false;
2671 fontDescriptionRun08.widthDefined = false;
2672 fontDescriptionRun08.slantDefined = false;
2673 fontDescriptionRun08.sizeDefined = false;
2675 // Set a known font description
2676 FontDescriptionRun fontDescriptionRun09;
2677 fontDescriptionRun09.characterRun.characterIndex = 92u;
2678 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2679 fontDescriptionRun09.familyLength = fontLatin.size();
2680 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2681 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2682 fontDescriptionRun09.familyDefined = true;
2683 fontDescriptionRun09.weightDefined = false;
2684 fontDescriptionRun09.widthDefined = false;
2685 fontDescriptionRun09.slantDefined = false;
2686 fontDescriptionRun09.sizeDefined = false;
2688 // Set a known font description
2689 FontDescriptionRun fontDescriptionRun10;
2690 fontDescriptionRun10.characterRun.characterIndex = 104u;
2691 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2692 fontDescriptionRun10.familyLength = fontArabic.size();
2693 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2694 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2695 fontDescriptionRun10.familyDefined = true;
2696 fontDescriptionRun10.weightDefined = false;
2697 fontDescriptionRun10.widthDefined = false;
2698 fontDescriptionRun10.slantDefined = false;
2699 fontDescriptionRun10.sizeDefined = false;
2701 // Set a known font description
2702 FontDescriptionRun fontDescriptionRun11;
2703 fontDescriptionRun11.characterRun.characterIndex = 118u;
2704 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2705 fontDescriptionRun11.familyLength = fontHebrew.size();
2706 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2707 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2708 fontDescriptionRun11.familyDefined = true;
2709 fontDescriptionRun11.weightDefined = false;
2710 fontDescriptionRun11.widthDefined = false;
2711 fontDescriptionRun11.slantDefined = false;
2712 fontDescriptionRun11.sizeDefined = false;
2714 // Set a known font description
2715 FontDescriptionRun fontDescriptionRun12;
2716 fontDescriptionRun12.characterRun.characterIndex = 128u;
2717 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2718 fontDescriptionRun12.familyLength = fontLatin.size();
2719 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2720 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2721 fontDescriptionRun12.familyDefined = true;
2722 fontDescriptionRun12.weightDefined = false;
2723 fontDescriptionRun12.widthDefined = false;
2724 fontDescriptionRun12.slantDefined = false;
2725 fontDescriptionRun12.sizeDefined = false;
2727 // Set a known font description
2728 FontDescriptionRun fontDescriptionRun13;
2729 fontDescriptionRun13.characterRun.characterIndex = 145u;
2730 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2731 fontDescriptionRun13.familyLength = fontHebrew.size();
2732 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2733 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2734 fontDescriptionRun13.familyDefined = true;
2735 fontDescriptionRun13.weightDefined = false;
2736 fontDescriptionRun13.widthDefined = false;
2737 fontDescriptionRun13.slantDefined = false;
2738 fontDescriptionRun13.sizeDefined = false;
2740 // Set a known font description
2741 FontDescriptionRun fontDescriptionRun14;
2742 fontDescriptionRun14.characterRun.characterIndex = 154u;
2743 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2744 fontDescriptionRun14.familyLength = fontLatin.size();
2745 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2746 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2747 fontDescriptionRun14.familyDefined = true;
2748 fontDescriptionRun14.weightDefined = false;
2749 fontDescriptionRun14.widthDefined = false;
2750 fontDescriptionRun14.slantDefined = false;
2751 fontDescriptionRun14.sizeDefined = false;
2753 // Set a known font description
2754 FontDescriptionRun fontDescriptionRun15;
2755 fontDescriptionRun15.characterRun.characterIndex = 156u;
2756 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2757 fontDescriptionRun15.familyLength = fontHebrew.size();
2758 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2759 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2760 fontDescriptionRun15.familyDefined = true;
2761 fontDescriptionRun15.weightDefined = false;
2762 fontDescriptionRun15.widthDefined = false;
2763 fontDescriptionRun15.slantDefined = false;
2764 fontDescriptionRun15.sizeDefined = false;
2766 // Set a known font description
2767 FontDescriptionRun fontDescriptionRun16;
2768 fontDescriptionRun16.characterRun.characterIndex = 166u;
2769 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2770 fontDescriptionRun16.familyLength = fontLatin.size();
2771 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2772 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2773 fontDescriptionRun16.familyDefined = true;
2774 fontDescriptionRun16.weightDefined = false;
2775 fontDescriptionRun16.widthDefined = false;
2776 fontDescriptionRun16.slantDefined = false;
2777 fontDescriptionRun16.sizeDefined = false;
2779 // Set a known font description
2780 FontDescriptionRun fontDescriptionRun17;
2781 fontDescriptionRun17.characterRun.characterIndex = 178u;
2782 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2783 fontDescriptionRun17.familyLength = fontArabic.size();
2784 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2785 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2786 fontDescriptionRun17.familyDefined = true;
2787 fontDescriptionRun17.weightDefined = false;
2788 fontDescriptionRun17.widthDefined = false;
2789 fontDescriptionRun17.slantDefined = false;
2790 fontDescriptionRun17.sizeDefined = false;
2792 Vector<FontDescriptionRun> fontDescriptionRuns;
2793 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2794 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2795 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2796 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2797 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2798 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2799 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2800 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2801 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2802 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2803 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2804 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2805 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2806 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2807 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2808 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2809 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2810 Size textArea(100.f, 300.f);
2811 Size layoutSize(92.f, 380.f);
2814 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,
2815 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,
2816 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2817 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,
2818 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,
2819 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2820 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,
2821 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,
2822 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
2823 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,
2824 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,
2825 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2826 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,
2827 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,
2828 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
2829 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,
2830 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,
2831 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,
2834 struct LineRun line01 =
2846 struct LineRun line02 =
2858 struct LineRun line03 =
2870 struct LineRun line04 =
2882 struct LineRun line05 =
2894 struct LineRun line06 =
2906 struct LineRun line07 =
2918 struct LineRun line08 =
2930 struct LineRun line09 =
2942 struct LineRun line10 =
2954 struct LineRun line11 =
2966 struct LineRun line12 =
2978 struct LineRun line13 =
2990 struct LineRun line14 =
3002 struct LineRun line15 =
3014 struct LineRun line16 =
3026 struct LineRun line17 =
3038 struct LineRun line18 =
3050 struct LineRun line19 =
3062 Vector<LineRun> lines;
3063 lines.PushBack( line01 );
3064 lines.PushBack( line02 );
3065 lines.PushBack( line03 );
3066 lines.PushBack( line04 );
3067 lines.PushBack( line05 );
3068 lines.PushBack( line06 );
3069 lines.PushBack( line07 );
3070 lines.PushBack( line08 );
3071 lines.PushBack( line09 );
3072 lines.PushBack( line10 );
3073 lines.PushBack( line11 );
3074 lines.PushBack( line12 );
3075 lines.PushBack( line13 );
3076 lines.PushBack( line14 );
3077 lines.PushBack( line15 );
3078 lines.PushBack( line16 );
3079 lines.PushBack( line17 );
3080 lines.PushBack( line18 );
3081 lines.PushBack( line19 );
3083 LayoutTextData data =
3085 "Layout bidirectional text.",
3086 "Hello world demo שלום עולם.\n"
3087 "مرحبا بالعالم hello world שלום עולם\n"
3088 "שלום עולם hello world demo.\n"
3089 "hello world مرحبا بالعالم שלום עולם\n"
3090 "Hello world demo שלום עולם.\n"
3091 "שלום עולם hello world مرحبا بالعالم\n",
3094 fontDescriptionRuns.Begin(),
3100 LayoutEngine::MULTI_LINE_BOX,
3107 if( !LayoutTextTest( data ) )
3109 tet_result(TET_FAIL);
3112 tet_result(TET_PASS);
3116 int UtcDaliTextLayoutEllipsis01(void)
3118 ToolkitTestApplication application;
3119 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3121 // Layout single-line LTR text with ellipsis.
3123 const std::string fontLatin( "TizenSans" );
3125 // Set a known font description
3126 FontDescriptionRun fontDescriptionRun01;
3127 fontDescriptionRun01.characterRun.characterIndex = 0u;
3128 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3129 fontDescriptionRun01.familyLength = fontLatin.size();
3130 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3131 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3132 fontDescriptionRun01.familyDefined = true;
3133 fontDescriptionRun01.weightDefined = false;
3134 fontDescriptionRun01.widthDefined = false;
3135 fontDescriptionRun01.slantDefined = false;
3136 fontDescriptionRun01.sizeDefined = false;
3138 Vector<FontDescriptionRun> fontDescriptionRuns;
3139 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3141 struct LineRun line01 =
3153 Vector<LineRun> lines;
3154 lines.PushBack( line01 );
3158 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,
3161 Size textArea( 100.f, 50.f );
3162 Size layoutSize( 100.f, 20.f );
3164 LayoutTextData data =
3166 "Layout single-line LTR text with ellipsis.",
3167 "Hello world demo hello world demo hello world demo.",
3170 fontDescriptionRuns.Begin(),
3176 LayoutEngine::SINGLE_LINE_BOX,
3183 if( !LayoutTextTest( data ) )
3185 tet_result(TET_FAIL);
3188 tet_result(TET_PASS);
3192 int UtcDaliTextLayoutEllipsis02(void)
3194 ToolkitTestApplication application;
3195 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3197 // Layout multi-line LTR text with ellipsis.
3199 const std::string fontLatin( "TizenSans" );
3201 // Set a known font description
3202 FontDescriptionRun fontDescriptionRun01;
3203 fontDescriptionRun01.characterRun.characterIndex = 0u;
3204 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3205 fontDescriptionRun01.familyLength = fontLatin.size();
3206 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3207 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3208 fontDescriptionRun01.familyDefined = true;
3209 fontDescriptionRun01.weightDefined = false;
3210 fontDescriptionRun01.widthDefined = false;
3211 fontDescriptionRun01.slantDefined = false;
3212 fontDescriptionRun01.sizeDefined = false;
3214 Vector<FontDescriptionRun> fontDescriptionRuns;
3215 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3217 struct LineRun line01 =
3229 struct LineRun line02 =
3241 Vector<LineRun> lines;
3242 lines.PushBack( line01 );
3243 lines.PushBack( line02 );
3247 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,
3248 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,
3251 Size textArea( 100.f, 50.f );
3252 Size layoutSize( 100.f, 40.f );
3254 LayoutTextData data =
3256 "Layout multi-line LTR text with ellipsis.",
3257 "Hello world demo hello world demo hello world demo.",
3260 fontDescriptionRuns.Begin(),
3266 LayoutEngine::MULTI_LINE_BOX,
3273 if( !LayoutTextTest( data ) )
3275 tet_result(TET_FAIL);
3278 tet_result(TET_PASS);
3282 int UtcDaliTextLayoutEllipsis03(void)
3284 ToolkitTestApplication application;
3285 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3287 // Layout single-line RTL text with ellipsis.
3289 const std::string fontHebrew( "TizenSansHebrew" );
3290 const std::string fontArabic( "TizenSansArabic" );
3292 // Set a known font description
3293 FontDescriptionRun fontDescriptionRun01;
3294 fontDescriptionRun01.characterRun.characterIndex = 0u;
3295 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3296 fontDescriptionRun01.familyLength = fontHebrew.size();
3297 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3298 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3299 fontDescriptionRun01.familyDefined = true;
3300 fontDescriptionRun01.weightDefined = false;
3301 fontDescriptionRun01.widthDefined = false;
3302 fontDescriptionRun01.slantDefined = false;
3303 fontDescriptionRun01.sizeDefined = false;
3305 FontDescriptionRun fontDescriptionRun02;
3306 fontDescriptionRun02.characterRun.characterIndex = 10u;
3307 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3308 fontDescriptionRun02.familyLength = fontArabic.size();
3309 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3310 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3311 fontDescriptionRun02.familyDefined = true;
3312 fontDescriptionRun02.weightDefined = false;
3313 fontDescriptionRun02.widthDefined = false;
3314 fontDescriptionRun02.slantDefined = false;
3315 fontDescriptionRun02.sizeDefined = false;
3317 FontDescriptionRun fontDescriptionRun03;
3318 fontDescriptionRun03.characterRun.characterIndex = 24u;
3319 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3320 fontDescriptionRun03.familyLength = fontHebrew.size();
3321 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3322 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3323 fontDescriptionRun03.familyDefined = true;
3324 fontDescriptionRun03.weightDefined = false;
3325 fontDescriptionRun03.widthDefined = false;
3326 fontDescriptionRun03.slantDefined = false;
3327 fontDescriptionRun03.sizeDefined = false;
3329 FontDescriptionRun fontDescriptionRun04;
3330 fontDescriptionRun04.characterRun.characterIndex = 34u;
3331 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3332 fontDescriptionRun04.familyLength = fontArabic.size();
3333 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3334 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3335 fontDescriptionRun04.familyDefined = true;
3336 fontDescriptionRun04.weightDefined = false;
3337 fontDescriptionRun04.widthDefined = false;
3338 fontDescriptionRun04.slantDefined = false;
3339 fontDescriptionRun04.sizeDefined = false;
3341 FontDescriptionRun fontDescriptionRun05;
3342 fontDescriptionRun05.characterRun.characterIndex = 48u;
3343 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3344 fontDescriptionRun05.familyLength = fontHebrew.size();
3345 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3346 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3347 fontDescriptionRun05.familyDefined = true;
3348 fontDescriptionRun05.weightDefined = false;
3349 fontDescriptionRun05.widthDefined = false;
3350 fontDescriptionRun05.slantDefined = false;
3351 fontDescriptionRun05.sizeDefined = false;
3353 FontDescriptionRun fontDescriptionRun06;
3354 fontDescriptionRun06.characterRun.characterIndex = 58u;
3355 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3356 fontDescriptionRun06.familyLength = fontArabic.size();
3357 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3358 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3359 fontDescriptionRun06.familyDefined = true;
3360 fontDescriptionRun06.weightDefined = false;
3361 fontDescriptionRun06.widthDefined = false;
3362 fontDescriptionRun06.slantDefined = false;
3363 fontDescriptionRun06.sizeDefined = false;
3365 Vector<FontDescriptionRun> fontDescriptionRuns;
3366 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3367 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3368 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3369 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3370 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3371 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3373 struct LineRun line01 =
3385 Vector<LineRun> lines;
3386 lines.PushBack( line01 );
3390 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,
3393 Size textArea( 100.f, 50.f );
3394 Size layoutSize( 100.f, 20.f );
3396 LayoutTextData data =
3398 "Layout single-line RTL text with ellipsis.",
3399 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3402 fontDescriptionRuns.Begin(),
3408 LayoutEngine::SINGLE_LINE_BOX,
3415 if( !LayoutTextTest( data ) )
3417 tet_result(TET_FAIL);
3420 tet_result(TET_PASS);
3424 int UtcDaliTextLayoutEllipsis04(void)
3426 ToolkitTestApplication application;
3427 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3429 // Layout multi-line RTL text with ellipsis.
3431 const std::string fontHebrew( "TizenSansHebrew" );
3432 const std::string fontArabic( "TizenSansArabic" );
3434 // Set a known font description
3435 FontDescriptionRun fontDescriptionRun01;
3436 fontDescriptionRun01.characterRun.characterIndex = 0u;
3437 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3438 fontDescriptionRun01.familyLength = fontHebrew.size();
3439 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3440 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3441 fontDescriptionRun01.familyDefined = true;
3442 fontDescriptionRun01.weightDefined = false;
3443 fontDescriptionRun01.widthDefined = false;
3444 fontDescriptionRun01.slantDefined = false;
3445 fontDescriptionRun01.sizeDefined = false;
3447 FontDescriptionRun fontDescriptionRun02;
3448 fontDescriptionRun02.characterRun.characterIndex = 10u;
3449 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3450 fontDescriptionRun02.familyLength = fontArabic.size();
3451 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3452 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3453 fontDescriptionRun02.familyDefined = true;
3454 fontDescriptionRun02.weightDefined = false;
3455 fontDescriptionRun02.widthDefined = false;
3456 fontDescriptionRun02.slantDefined = false;
3457 fontDescriptionRun02.sizeDefined = false;
3459 FontDescriptionRun fontDescriptionRun03;
3460 fontDescriptionRun03.characterRun.characterIndex = 24u;
3461 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3462 fontDescriptionRun03.familyLength = fontHebrew.size();
3463 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3464 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3465 fontDescriptionRun03.familyDefined = true;
3466 fontDescriptionRun03.weightDefined = false;
3467 fontDescriptionRun03.widthDefined = false;
3468 fontDescriptionRun03.slantDefined = false;
3469 fontDescriptionRun03.sizeDefined = false;
3471 FontDescriptionRun fontDescriptionRun04;
3472 fontDescriptionRun04.characterRun.characterIndex = 34u;
3473 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3474 fontDescriptionRun04.familyLength = fontArabic.size();
3475 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3476 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3477 fontDescriptionRun04.familyDefined = true;
3478 fontDescriptionRun04.weightDefined = false;
3479 fontDescriptionRun04.widthDefined = false;
3480 fontDescriptionRun04.slantDefined = false;
3481 fontDescriptionRun04.sizeDefined = false;
3483 FontDescriptionRun fontDescriptionRun05;
3484 fontDescriptionRun05.characterRun.characterIndex = 48u;
3485 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3486 fontDescriptionRun05.familyLength = fontHebrew.size();
3487 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3488 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3489 fontDescriptionRun05.familyDefined = true;
3490 fontDescriptionRun05.weightDefined = false;
3491 fontDescriptionRun05.widthDefined = false;
3492 fontDescriptionRun05.slantDefined = false;
3493 fontDescriptionRun05.sizeDefined = false;
3495 FontDescriptionRun fontDescriptionRun06;
3496 fontDescriptionRun06.characterRun.characterIndex = 58u;
3497 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3498 fontDescriptionRun06.familyLength = fontArabic.size();
3499 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3500 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3501 fontDescriptionRun06.familyDefined = true;
3502 fontDescriptionRun06.weightDefined = false;
3503 fontDescriptionRun06.widthDefined = false;
3504 fontDescriptionRun06.slantDefined = false;
3505 fontDescriptionRun06.sizeDefined = false;
3507 Vector<FontDescriptionRun> fontDescriptionRuns;
3508 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3509 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3510 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3511 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3512 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3513 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3515 struct LineRun line01 =
3527 struct LineRun line02 =
3539 Vector<LineRun> lines;
3540 lines.PushBack( line01 );
3541 lines.PushBack( line02 );
3545 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,
3546 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,
3549 Size textArea( 100.f, 50.f );
3550 Size layoutSize( 100.f, 40.f );
3552 LayoutTextData data =
3554 "Layout single-line RTL text with ellipsis.",
3555 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3558 fontDescriptionRuns.Begin(),
3564 LayoutEngine::MULTI_LINE_BOX,
3571 if( !LayoutTextTest( data ) )
3573 tet_result(TET_FAIL);
3576 tet_result(TET_PASS);
3580 int UtcDaliTextLayoutEllipsis05(void)
3582 ToolkitTestApplication application;
3583 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3585 const std::string fontLatin( "TizenSans" );
3587 // Set a known font description
3588 FontDescriptionRun fontDescriptionRun01;
3589 fontDescriptionRun01.characterRun.characterIndex = 0u;
3590 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3591 fontDescriptionRun01.familyLength = fontLatin.size();
3592 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3593 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3594 fontDescriptionRun01.familyDefined = true;
3595 fontDescriptionRun01.weightDefined = false;
3596 fontDescriptionRun01.widthDefined = false;
3597 fontDescriptionRun01.slantDefined = false;
3598 fontDescriptionRun01.sizeDefined = false;
3600 Vector<FontDescriptionRun> fontDescriptionRuns;
3601 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3603 struct LineRun line01 =
3615 Vector<LineRun> lines;
3616 lines.PushBack( line01 );
3623 Size textArea( 100.f, 19.f );
3624 Size layoutSize( 100.f, 20.f );
3626 LayoutTextData data =
3628 "Not enough height.",
3632 fontDescriptionRuns.Begin(),
3638 LayoutEngine::MULTI_LINE_BOX,
3645 if( !LayoutTextTest( data ) )
3647 tet_result(TET_FAIL);
3650 tet_result(TET_PASS);
3654 int UtcDaliTextReorderLayout01(void)
3656 ToolkitTestApplication application;
3657 tet_infoline(" UtcDaliTextReorderLayout01");
3659 // Reorder lines. No right to left characters.
3661 const std::string fontLatin( "TizenSans" );
3663 // Set a known font description
3664 FontDescriptionRun fontDescriptionRun01;
3665 fontDescriptionRun01.characterRun.characterIndex = 0u;
3666 fontDescriptionRun01.characterRun.numberOfCharacters = 11u;
3667 fontDescriptionRun01.familyLength = fontLatin.size();
3668 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3669 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3670 fontDescriptionRun01.familyDefined = true;
3671 fontDescriptionRun01.weightDefined = false;
3672 fontDescriptionRun01.widthDefined = false;
3673 fontDescriptionRun01.slantDefined = false;
3674 fontDescriptionRun01.sizeDefined = false;
3676 Vector<FontDescriptionRun> fontDescriptionRuns;
3677 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3681 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,
3684 Size textArea( 100.f, 300.f );
3686 ReLayoutRightToLeftLinesData data =
3688 "Text with no right to left text.",
3692 fontDescriptionRuns.Begin(),
3699 if( !ReLayoutRightToLeftLinesTest( data ) )
3701 tet_result(TET_FAIL);
3704 tet_result(TET_PASS);
3708 int UtcDaliTextReorderLayout02(void)
3710 ToolkitTestApplication application;
3711 tet_infoline(" UtcDaliTextReorderLayout02");
3713 // Reorder lines of the first paragraph.
3715 const std::string fontHebrew( "TizenSansHebrew" );
3716 const std::string fontArabic( "TizenSansArabic" );
3718 // Set a known font description
3719 FontDescriptionRun fontDescriptionRun01;
3720 fontDescriptionRun01.characterRun.characterIndex = 0u;
3721 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3722 fontDescriptionRun01.familyLength = fontHebrew.size();
3723 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3724 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3725 fontDescriptionRun01.familyDefined = true;
3726 fontDescriptionRun01.weightDefined = false;
3727 fontDescriptionRun01.widthDefined = false;
3728 fontDescriptionRun01.slantDefined = false;
3729 fontDescriptionRun01.sizeDefined = false;
3731 FontDescriptionRun fontDescriptionRun02;
3732 fontDescriptionRun02.characterRun.characterIndex = 10u;
3733 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3734 fontDescriptionRun02.familyLength = fontArabic.size();
3735 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3736 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3737 fontDescriptionRun02.familyDefined = true;
3738 fontDescriptionRun02.weightDefined = false;
3739 fontDescriptionRun02.widthDefined = false;
3740 fontDescriptionRun02.slantDefined = false;
3741 fontDescriptionRun02.sizeDefined = false;
3743 FontDescriptionRun fontDescriptionRun03;
3744 fontDescriptionRun03.characterRun.characterIndex = 24u;
3745 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3746 fontDescriptionRun03.familyLength = fontArabic.size();
3747 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3748 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3749 fontDescriptionRun03.familyDefined = true;
3750 fontDescriptionRun03.weightDefined = false;
3751 fontDescriptionRun03.widthDefined = false;
3752 fontDescriptionRun03.slantDefined = false;
3753 fontDescriptionRun03.sizeDefined = false;
3755 FontDescriptionRun fontDescriptionRun04;
3756 fontDescriptionRun04.characterRun.characterIndex = 38u;
3757 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
3758 fontDescriptionRun04.familyLength = fontHebrew.size();
3759 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3760 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
3761 fontDescriptionRun04.familyDefined = true;
3762 fontDescriptionRun04.weightDefined = false;
3763 fontDescriptionRun04.widthDefined = false;
3764 fontDescriptionRun04.slantDefined = false;
3765 fontDescriptionRun04.sizeDefined = false;
3767 FontDescriptionRun fontDescriptionRun05;
3768 fontDescriptionRun05.characterRun.characterIndex = 48u;
3769 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3770 fontDescriptionRun05.familyLength = fontHebrew.size();
3771 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3772 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3773 fontDescriptionRun05.familyDefined = true;
3774 fontDescriptionRun05.weightDefined = false;
3775 fontDescriptionRun05.widthDefined = false;
3776 fontDescriptionRun05.slantDefined = false;
3777 fontDescriptionRun05.sizeDefined = false;
3779 FontDescriptionRun fontDescriptionRun06;
3780 fontDescriptionRun06.characterRun.characterIndex = 58u;
3781 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3782 fontDescriptionRun06.familyLength = fontArabic.size();
3783 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3784 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3785 fontDescriptionRun06.familyDefined = true;
3786 fontDescriptionRun06.weightDefined = false;
3787 fontDescriptionRun06.widthDefined = false;
3788 fontDescriptionRun06.slantDefined = false;
3789 fontDescriptionRun06.sizeDefined = false;
3791 Vector<FontDescriptionRun> fontDescriptionRuns;
3792 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3793 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3794 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3795 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3796 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3797 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3801 87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 66.f, -10.f, 61.f, -0.f, 53.f, -10.f, 48.f, -10.f, 41.f, -13.f, 32.f, -10.f, 27.f, -0.f, 20.f, -8.f, 15.f, -6.f, 8.f, -7.f, 5.f, -7.f, 4.f, -11.f, 0.f, -0.f,
3802 23.f, -7.f, 22.f, -11.f, 17.f, -11.f, 12.f, -8.f, 10.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f,
3803 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,
3804 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
3805 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,
3806 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, 30.f, -2.f,
3809 Size textArea( 100.f, 300.f );
3811 ReLayoutRightToLeftLinesData data =
3813 "Paragraphs with right to left text.",
3814 "שלום עולם مرحبا بالعالم\n"
3815 "مرحبا بالعالم שלום עולם\n"
3816 "שלום עולם مرحبا بالعالم.",
3819 fontDescriptionRuns.Begin(),
3826 if( !ReLayoutRightToLeftLinesTest( data ) )
3828 tet_result(TET_FAIL);
3831 tet_result(TET_PASS);
3835 int UtcDaliTextReorderLayout03(void)
3837 ToolkitTestApplication application;
3838 tet_infoline(" UtcDaliTextReorderLayout03");
3840 // Reorder lines of the mid paragraph.
3842 const std::string fontHebrew( "TizenSansHebrew" );
3843 const std::string fontArabic( "TizenSansArabic" );
3845 // Set a known font description
3846 FontDescriptionRun fontDescriptionRun01;
3847 fontDescriptionRun01.characterRun.characterIndex = 0u;
3848 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3849 fontDescriptionRun01.familyLength = fontHebrew.size();
3850 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3851 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3852 fontDescriptionRun01.familyDefined = true;
3853 fontDescriptionRun01.weightDefined = false;
3854 fontDescriptionRun01.widthDefined = false;
3855 fontDescriptionRun01.slantDefined = false;
3856 fontDescriptionRun01.sizeDefined = false;
3858 FontDescriptionRun fontDescriptionRun02;
3859 fontDescriptionRun02.characterRun.characterIndex = 10u;
3860 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3861 fontDescriptionRun02.familyLength = fontArabic.size();
3862 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3863 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3864 fontDescriptionRun02.familyDefined = true;
3865 fontDescriptionRun02.weightDefined = false;
3866 fontDescriptionRun02.widthDefined = false;
3867 fontDescriptionRun02.slantDefined = false;
3868 fontDescriptionRun02.sizeDefined = false;
3870 FontDescriptionRun fontDescriptionRun03;
3871 fontDescriptionRun03.characterRun.characterIndex = 24u;
3872 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3873 fontDescriptionRun03.familyLength = fontArabic.size();
3874 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3875 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3876 fontDescriptionRun03.familyDefined = true;
3877 fontDescriptionRun03.weightDefined = false;
3878 fontDescriptionRun03.widthDefined = false;
3879 fontDescriptionRun03.slantDefined = false;
3880 fontDescriptionRun03.sizeDefined = false;
3882 FontDescriptionRun fontDescriptionRun04;
3883 fontDescriptionRun04.characterRun.characterIndex = 38u;
3884 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
3885 fontDescriptionRun04.familyLength = fontHebrew.size();
3886 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3887 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
3888 fontDescriptionRun04.familyDefined = true;
3889 fontDescriptionRun04.weightDefined = false;
3890 fontDescriptionRun04.widthDefined = false;
3891 fontDescriptionRun04.slantDefined = false;
3892 fontDescriptionRun04.sizeDefined = false;
3894 FontDescriptionRun fontDescriptionRun05;
3895 fontDescriptionRun05.characterRun.characterIndex = 48u;
3896 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3897 fontDescriptionRun05.familyLength = fontHebrew.size();
3898 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3899 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3900 fontDescriptionRun05.familyDefined = true;
3901 fontDescriptionRun05.weightDefined = false;
3902 fontDescriptionRun05.widthDefined = false;
3903 fontDescriptionRun05.slantDefined = false;
3904 fontDescriptionRun05.sizeDefined = false;
3906 FontDescriptionRun fontDescriptionRun06;
3907 fontDescriptionRun06.characterRun.characterIndex = 58u;
3908 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3909 fontDescriptionRun06.familyLength = fontArabic.size();
3910 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3911 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3912 fontDescriptionRun06.familyDefined = true;
3913 fontDescriptionRun06.weightDefined = false;
3914 fontDescriptionRun06.widthDefined = false;
3915 fontDescriptionRun06.slantDefined = false;
3916 fontDescriptionRun06.sizeDefined = false;
3918 Vector<FontDescriptionRun> fontDescriptionRuns;
3919 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3920 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3921 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3922 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3923 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3924 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3928 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,
3929 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,
3930 86.f, -8.f, 81.f, -6.f, 74.f, -7.f, 71.f, -7.f, 70.f, -11.f, 66.f, -0.f, 62.f, -7.f, 61.f, -11.f, 56.f, -11.f, 51.f, -8.f, 49.f, -11.f, 44.f, -11.f, 39.f, -8.f, 36.f, -0.f, 26.f, -10.f, 18.f, -13.f, 13.f, -10.f, 5.f, -10.f, 0.f, -0.f,
3931 22.f, -10.f, 17.f, -10.f, 10.f, -13.f, 1.f, -10.f, 0.f, -0.f,
3932 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,
3933 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, 30.f, -2.f,
3936 Size textArea( 100.f, 300.f );
3938 ReLayoutRightToLeftLinesData data =
3940 "Paragraphs with right to left text.",
3941 "שלום עולם مرحبا بالعالم\n"
3942 "مرحبا بالعالم שלום עולם\n"
3943 "שלום עולם مرحبا بالعالم.",
3946 fontDescriptionRuns.Begin(),
3953 if( !ReLayoutRightToLeftLinesTest( data ) )
3955 tet_result(TET_FAIL);
3958 tet_result(TET_PASS);
3962 int UtcDaliTextReorderLayout04(void)
3964 ToolkitTestApplication application;
3965 tet_infoline(" UtcDaliTextReorderLayout04");
3967 // Reorder lines of the last paragraph.
3969 const std::string fontHebrew( "TizenSansHebrew" );
3970 const std::string fontArabic( "TizenSansArabic" );
3972 // Set a known font description
3973 FontDescriptionRun fontDescriptionRun01;
3974 fontDescriptionRun01.characterRun.characterIndex = 0u;
3975 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3976 fontDescriptionRun01.familyLength = fontHebrew.size();
3977 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3978 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3979 fontDescriptionRun01.familyDefined = true;
3980 fontDescriptionRun01.weightDefined = false;
3981 fontDescriptionRun01.widthDefined = false;
3982 fontDescriptionRun01.slantDefined = false;
3983 fontDescriptionRun01.sizeDefined = false;
3985 FontDescriptionRun fontDescriptionRun02;
3986 fontDescriptionRun02.characterRun.characterIndex = 10u;
3987 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3988 fontDescriptionRun02.familyLength = fontArabic.size();
3989 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3990 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3991 fontDescriptionRun02.familyDefined = true;
3992 fontDescriptionRun02.weightDefined = false;
3993 fontDescriptionRun02.widthDefined = false;
3994 fontDescriptionRun02.slantDefined = false;
3995 fontDescriptionRun02.sizeDefined = false;
3997 FontDescriptionRun fontDescriptionRun03;
3998 fontDescriptionRun03.characterRun.characterIndex = 24u;
3999 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4000 fontDescriptionRun03.familyLength = fontArabic.size();
4001 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4002 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4003 fontDescriptionRun03.familyDefined = true;
4004 fontDescriptionRun03.weightDefined = false;
4005 fontDescriptionRun03.widthDefined = false;
4006 fontDescriptionRun03.slantDefined = false;
4007 fontDescriptionRun03.sizeDefined = false;
4009 FontDescriptionRun fontDescriptionRun04;
4010 fontDescriptionRun04.characterRun.characterIndex = 38u;
4011 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
4012 fontDescriptionRun04.familyLength = fontHebrew.size();
4013 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4014 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
4015 fontDescriptionRun04.familyDefined = true;
4016 fontDescriptionRun04.weightDefined = false;
4017 fontDescriptionRun04.widthDefined = false;
4018 fontDescriptionRun04.slantDefined = false;
4019 fontDescriptionRun04.sizeDefined = false;
4021 FontDescriptionRun fontDescriptionRun05;
4022 fontDescriptionRun05.characterRun.characterIndex = 48u;
4023 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
4024 fontDescriptionRun05.familyLength = fontHebrew.size();
4025 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4026 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
4027 fontDescriptionRun05.familyDefined = true;
4028 fontDescriptionRun05.weightDefined = false;
4029 fontDescriptionRun05.widthDefined = false;
4030 fontDescriptionRun05.slantDefined = false;
4031 fontDescriptionRun05.sizeDefined = false;
4033 FontDescriptionRun fontDescriptionRun06;
4034 fontDescriptionRun06.characterRun.characterIndex = 58u;
4035 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
4036 fontDescriptionRun06.familyLength = fontArabic.size();
4037 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4038 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4039 fontDescriptionRun06.familyDefined = true;
4040 fontDescriptionRun06.weightDefined = false;
4041 fontDescriptionRun06.widthDefined = false;
4042 fontDescriptionRun06.slantDefined = false;
4043 fontDescriptionRun06.sizeDefined = false;
4045 Vector<FontDescriptionRun> fontDescriptionRuns;
4046 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4047 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4048 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4049 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4050 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4051 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4055 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,
4056 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,
4057 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,
4058 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
4059 87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 66.f, -10.f, 61.f, -0.f, 53.f, -10.f, 48.f, -10.f, 41.f, -13.f, 32.f, -10.f, 27.f, -0.f, 20.f, -8.f, 15.f, -6.f, 8.f, -7.f, 5.f, -7.f, 4.f, -11.f, 0.f, -0.f,
4060 28.f, -7.f, 27.f, -11.f, 22.f, -11.f, 17.f, -8.f, 15.f, -11.f, 10.f, -11.f, 5.f, -8.f, 2.f, -2.f,
4063 Size textArea( 100.f, 300.f );
4065 ReLayoutRightToLeftLinesData data =
4067 "Paragraphs with right to left text.",
4068 "שלום עולם مرحبا بالعالم\n"
4069 "مرحبا بالعالم שלום עולם\n"
4070 "שלום עולם مرحبا بالعالم.",
4073 fontDescriptionRuns.Begin(),
4080 if( !ReLayoutRightToLeftLinesTest( data ) )
4082 tet_result(TET_FAIL);
4085 tet_result(TET_PASS);
4089 int UtcDaliTextAlign01(void)
4091 ToolkitTestApplication application;
4092 tet_infoline(" UtcDaliTextAlign01");
4094 // Calculate text alignment.
4096 const std::string fontLatin( "TizenSans" );
4097 const std::string fontHebrew( "TizenSansHebrew" );
4098 const std::string fontArabic( "TizenSansArabic" );
4100 // Set a known font description
4101 FontDescriptionRun fontDescriptionRun01;
4102 fontDescriptionRun01.characterRun.characterIndex = 0u;
4103 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4104 fontDescriptionRun01.familyLength = fontLatin.size();
4105 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4106 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4107 fontDescriptionRun01.familyDefined = true;
4108 fontDescriptionRun01.weightDefined = false;
4109 fontDescriptionRun01.widthDefined = false;
4110 fontDescriptionRun01.slantDefined = false;
4111 fontDescriptionRun01.sizeDefined = false;
4113 FontDescriptionRun fontDescriptionRun02;
4114 fontDescriptionRun02.characterRun.characterIndex = 12u;
4115 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4116 fontDescriptionRun02.familyLength = fontHebrew.size();
4117 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4118 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4119 fontDescriptionRun02.familyDefined = true;
4120 fontDescriptionRun02.weightDefined = false;
4121 fontDescriptionRun02.widthDefined = false;
4122 fontDescriptionRun02.slantDefined = false;
4123 fontDescriptionRun02.sizeDefined = false;
4125 FontDescriptionRun fontDescriptionRun03;
4126 fontDescriptionRun03.characterRun.characterIndex = 22u;
4127 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4128 fontDescriptionRun03.familyLength = fontArabic.size();
4129 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4130 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4131 fontDescriptionRun03.familyDefined = true;
4132 fontDescriptionRun03.weightDefined = false;
4133 fontDescriptionRun03.widthDefined = false;
4134 fontDescriptionRun03.slantDefined = false;
4135 fontDescriptionRun03.sizeDefined = false;
4137 FontDescriptionRun fontDescriptionRun04;
4138 fontDescriptionRun04.characterRun.characterIndex = 36u;
4139 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4140 fontDescriptionRun04.familyLength = fontLatin.size();
4141 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4142 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4143 fontDescriptionRun04.familyDefined = true;
4144 fontDescriptionRun04.weightDefined = false;
4145 fontDescriptionRun04.widthDefined = false;
4146 fontDescriptionRun04.slantDefined = false;
4147 fontDescriptionRun04.sizeDefined = false;
4149 FontDescriptionRun fontDescriptionRun05;
4150 fontDescriptionRun05.characterRun.characterIndex = 48u;
4151 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4152 fontDescriptionRun05.familyLength = fontLatin.size();
4153 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4154 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4155 fontDescriptionRun05.familyDefined = true;
4156 fontDescriptionRun05.weightDefined = false;
4157 fontDescriptionRun05.widthDefined = false;
4158 fontDescriptionRun05.slantDefined = false;
4159 fontDescriptionRun05.sizeDefined = false;
4161 FontDescriptionRun fontDescriptionRun06;
4162 fontDescriptionRun06.characterRun.characterIndex = 60u;
4163 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4164 fontDescriptionRun06.familyLength = fontArabic.size();
4165 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4166 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4167 fontDescriptionRun06.familyDefined = true;
4168 fontDescriptionRun06.weightDefined = false;
4169 fontDescriptionRun06.widthDefined = false;
4170 fontDescriptionRun06.slantDefined = false;
4171 fontDescriptionRun06.sizeDefined = false;
4173 Vector<FontDescriptionRun> fontDescriptionRuns;
4174 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4175 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4176 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4177 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4178 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4179 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4181 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4183 Size textArea( 100.f, 300.f );
4186 "Begin alignment for the first paragraph.",
4187 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4190 fontDescriptionRuns.Begin(),
4191 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4192 LayoutEngine::VERTICAL_ALIGN_TOP,
4199 if( !AlignTest( data ) )
4201 tet_result(TET_FAIL);
4204 tet_result(TET_PASS);
4208 int UtcDaliTextAlign02(void)
4210 ToolkitTestApplication application;
4211 tet_infoline(" UtcDaliTextAlign02");
4213 // Calculate text alignment.
4215 const std::string fontLatin( "TizenSans" );
4216 const std::string fontHebrew( "TizenSansHebrew" );
4217 const std::string fontArabic( "TizenSansArabic" );
4219 // Set a known font description
4220 FontDescriptionRun fontDescriptionRun01;
4221 fontDescriptionRun01.characterRun.characterIndex = 0u;
4222 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4223 fontDescriptionRun01.familyLength = fontLatin.size();
4224 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4225 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4226 fontDescriptionRun01.familyDefined = true;
4227 fontDescriptionRun01.weightDefined = false;
4228 fontDescriptionRun01.widthDefined = false;
4229 fontDescriptionRun01.slantDefined = false;
4230 fontDescriptionRun01.sizeDefined = false;
4232 FontDescriptionRun fontDescriptionRun02;
4233 fontDescriptionRun02.characterRun.characterIndex = 12u;
4234 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4235 fontDescriptionRun02.familyLength = fontHebrew.size();
4236 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4237 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4238 fontDescriptionRun02.familyDefined = true;
4239 fontDescriptionRun02.weightDefined = false;
4240 fontDescriptionRun02.widthDefined = false;
4241 fontDescriptionRun02.slantDefined = false;
4242 fontDescriptionRun02.sizeDefined = false;
4244 FontDescriptionRun fontDescriptionRun03;
4245 fontDescriptionRun03.characterRun.characterIndex = 22u;
4246 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4247 fontDescriptionRun03.familyLength = fontArabic.size();
4248 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4249 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4250 fontDescriptionRun03.familyDefined = true;
4251 fontDescriptionRun03.weightDefined = false;
4252 fontDescriptionRun03.widthDefined = false;
4253 fontDescriptionRun03.slantDefined = false;
4254 fontDescriptionRun03.sizeDefined = false;
4256 FontDescriptionRun fontDescriptionRun04;
4257 fontDescriptionRun04.characterRun.characterIndex = 36u;
4258 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4259 fontDescriptionRun04.familyLength = fontLatin.size();
4260 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4261 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4262 fontDescriptionRun04.familyDefined = true;
4263 fontDescriptionRun04.weightDefined = false;
4264 fontDescriptionRun04.widthDefined = false;
4265 fontDescriptionRun04.slantDefined = false;
4266 fontDescriptionRun04.sizeDefined = false;
4268 FontDescriptionRun fontDescriptionRun05;
4269 fontDescriptionRun05.characterRun.characterIndex = 48u;
4270 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4271 fontDescriptionRun05.familyLength = fontLatin.size();
4272 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4273 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4274 fontDescriptionRun05.familyDefined = true;
4275 fontDescriptionRun05.weightDefined = false;
4276 fontDescriptionRun05.widthDefined = false;
4277 fontDescriptionRun05.slantDefined = false;
4278 fontDescriptionRun05.sizeDefined = false;
4280 FontDescriptionRun fontDescriptionRun06;
4281 fontDescriptionRun06.characterRun.characterIndex = 60u;
4282 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4283 fontDescriptionRun06.familyLength = fontArabic.size();
4284 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4285 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4286 fontDescriptionRun06.familyDefined = true;
4287 fontDescriptionRun06.weightDefined = false;
4288 fontDescriptionRun06.widthDefined = false;
4289 fontDescriptionRun06.slantDefined = false;
4290 fontDescriptionRun06.sizeDefined = false;
4292 Vector<FontDescriptionRun> fontDescriptionRuns;
4293 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4294 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4295 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4296 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4297 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4298 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4300 float positions[] = { 0.f, 0.f, 2.f, 60.f, 0.f, 0.f };
4302 Size textArea( 100.f, 300.f );
4305 "Begin alignment for the mid paragraph.",
4306 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4309 fontDescriptionRuns.Begin(),
4310 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4311 LayoutEngine::VERTICAL_ALIGN_TOP,
4318 if( !AlignTest( data ) )
4320 tet_result(TET_FAIL);
4323 tet_result(TET_PASS);
4327 int UtcDaliTextAlign03(void)
4329 ToolkitTestApplication application;
4330 tet_infoline(" UtcDaliTextAlign03");
4332 // Calculate text alignment.
4334 const std::string fontLatin( "TizenSans" );
4335 const std::string fontHebrew( "TizenSansHebrew" );
4336 const std::string fontArabic( "TizenSansArabic" );
4338 // Set a known font description
4339 FontDescriptionRun fontDescriptionRun01;
4340 fontDescriptionRun01.characterRun.characterIndex = 0u;
4341 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4342 fontDescriptionRun01.familyLength = fontLatin.size();
4343 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4344 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4345 fontDescriptionRun01.familyDefined = true;
4346 fontDescriptionRun01.weightDefined = false;
4347 fontDescriptionRun01.widthDefined = false;
4348 fontDescriptionRun01.slantDefined = false;
4349 fontDescriptionRun01.sizeDefined = false;
4351 FontDescriptionRun fontDescriptionRun02;
4352 fontDescriptionRun02.characterRun.characterIndex = 12u;
4353 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4354 fontDescriptionRun02.familyLength = fontHebrew.size();
4355 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4356 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4357 fontDescriptionRun02.familyDefined = true;
4358 fontDescriptionRun02.weightDefined = false;
4359 fontDescriptionRun02.widthDefined = false;
4360 fontDescriptionRun02.slantDefined = false;
4361 fontDescriptionRun02.sizeDefined = false;
4363 FontDescriptionRun fontDescriptionRun03;
4364 fontDescriptionRun03.characterRun.characterIndex = 22u;
4365 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4366 fontDescriptionRun03.familyLength = fontArabic.size();
4367 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4368 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4369 fontDescriptionRun03.familyDefined = true;
4370 fontDescriptionRun03.weightDefined = false;
4371 fontDescriptionRun03.widthDefined = false;
4372 fontDescriptionRun03.slantDefined = false;
4373 fontDescriptionRun03.sizeDefined = false;
4375 FontDescriptionRun fontDescriptionRun04;
4376 fontDescriptionRun04.characterRun.characterIndex = 36u;
4377 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4378 fontDescriptionRun04.familyLength = fontLatin.size();
4379 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4380 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4381 fontDescriptionRun04.familyDefined = true;
4382 fontDescriptionRun04.weightDefined = false;
4383 fontDescriptionRun04.widthDefined = false;
4384 fontDescriptionRun04.slantDefined = false;
4385 fontDescriptionRun04.sizeDefined = false;
4387 FontDescriptionRun fontDescriptionRun05;
4388 fontDescriptionRun05.characterRun.characterIndex = 48u;
4389 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4390 fontDescriptionRun05.familyLength = fontLatin.size();
4391 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4392 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4393 fontDescriptionRun05.familyDefined = true;
4394 fontDescriptionRun05.weightDefined = false;
4395 fontDescriptionRun05.widthDefined = false;
4396 fontDescriptionRun05.slantDefined = false;
4397 fontDescriptionRun05.sizeDefined = false;
4399 FontDescriptionRun fontDescriptionRun06;
4400 fontDescriptionRun06.characterRun.characterIndex = 60u;
4401 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4402 fontDescriptionRun06.familyLength = fontArabic.size();
4403 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4404 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4405 fontDescriptionRun06.familyDefined = true;
4406 fontDescriptionRun06.weightDefined = false;
4407 fontDescriptionRun06.widthDefined = false;
4408 fontDescriptionRun06.slantDefined = false;
4409 fontDescriptionRun06.sizeDefined = false;
4411 Vector<FontDescriptionRun> fontDescriptionRuns;
4412 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4413 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4414 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4415 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4416 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4417 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4419 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4421 Size textArea( 100.f, 300.f );
4424 "Begin alignment for the last paragraph.",
4425 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4428 fontDescriptionRuns.Begin(),
4429 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4430 LayoutEngine::VERTICAL_ALIGN_TOP,
4437 if( !AlignTest( data ) )
4439 tet_result(TET_FAIL);
4442 tet_result(TET_PASS);
4446 int UtcDaliTextAlign04(void)
4448 ToolkitTestApplication application;
4449 tet_infoline(" UtcDaliTextAlign04");
4451 // Calculate text alignment.
4453 const std::string fontLatin( "TizenSans" );
4454 const std::string fontHebrew( "TizenSansHebrew" );
4455 const std::string fontArabic( "TizenSansArabic" );
4457 // Set a known font description
4458 FontDescriptionRun fontDescriptionRun01;
4459 fontDescriptionRun01.characterRun.characterIndex = 0u;
4460 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4461 fontDescriptionRun01.familyLength = fontLatin.size();
4462 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4463 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4464 fontDescriptionRun01.familyDefined = true;
4465 fontDescriptionRun01.weightDefined = false;
4466 fontDescriptionRun01.widthDefined = false;
4467 fontDescriptionRun01.slantDefined = false;
4468 fontDescriptionRun01.sizeDefined = false;
4470 FontDescriptionRun fontDescriptionRun02;
4471 fontDescriptionRun02.characterRun.characterIndex = 12u;
4472 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4473 fontDescriptionRun02.familyLength = fontHebrew.size();
4474 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4475 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4476 fontDescriptionRun02.familyDefined = true;
4477 fontDescriptionRun02.weightDefined = false;
4478 fontDescriptionRun02.widthDefined = false;
4479 fontDescriptionRun02.slantDefined = false;
4480 fontDescriptionRun02.sizeDefined = false;
4482 FontDescriptionRun fontDescriptionRun03;
4483 fontDescriptionRun03.characterRun.characterIndex = 22u;
4484 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4485 fontDescriptionRun03.familyLength = fontArabic.size();
4486 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4487 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4488 fontDescriptionRun03.familyDefined = true;
4489 fontDescriptionRun03.weightDefined = false;
4490 fontDescriptionRun03.widthDefined = false;
4491 fontDescriptionRun03.slantDefined = false;
4492 fontDescriptionRun03.sizeDefined = false;
4494 FontDescriptionRun fontDescriptionRun04;
4495 fontDescriptionRun04.characterRun.characterIndex = 36u;
4496 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4497 fontDescriptionRun04.familyLength = fontLatin.size();
4498 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4499 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4500 fontDescriptionRun04.familyDefined = true;
4501 fontDescriptionRun04.weightDefined = false;
4502 fontDescriptionRun04.widthDefined = false;
4503 fontDescriptionRun04.slantDefined = false;
4504 fontDescriptionRun04.sizeDefined = false;
4506 FontDescriptionRun fontDescriptionRun05;
4507 fontDescriptionRun05.characterRun.characterIndex = 48u;
4508 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4509 fontDescriptionRun05.familyLength = fontLatin.size();
4510 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4511 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4512 fontDescriptionRun05.familyDefined = true;
4513 fontDescriptionRun05.weightDefined = false;
4514 fontDescriptionRun05.widthDefined = false;
4515 fontDescriptionRun05.slantDefined = false;
4516 fontDescriptionRun05.sizeDefined = false;
4518 FontDescriptionRun fontDescriptionRun06;
4519 fontDescriptionRun06.characterRun.characterIndex = 60u;
4520 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4521 fontDescriptionRun06.familyLength = fontArabic.size();
4522 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4523 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4524 fontDescriptionRun06.familyDefined = true;
4525 fontDescriptionRun06.weightDefined = false;
4526 fontDescriptionRun06.widthDefined = false;
4527 fontDescriptionRun06.slantDefined = false;
4528 fontDescriptionRun06.sizeDefined = false;
4530 Vector<FontDescriptionRun> fontDescriptionRuns;
4531 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4532 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4533 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4534 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4535 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4536 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4538 float positions[] = { 10.f, 16.f, 0.f, 0.f, 0.f, 0.f };
4540 Size textArea( 100.f, 300.f );
4543 "Center alignment for the first paragraph.",
4544 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4547 fontDescriptionRuns.Begin(),
4548 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4549 LayoutEngine::VERTICAL_ALIGN_TOP,
4556 if( !AlignTest( data ) )
4558 tet_result(TET_FAIL);
4561 tet_result(TET_PASS);
4565 int UtcDaliTextAlign05(void)
4567 ToolkitTestApplication application;
4568 tet_infoline(" UtcDaliTextAlign05");
4570 // Calculate text alignment.
4572 const std::string fontLatin( "TizenSans" );
4573 const std::string fontHebrew( "TizenSansHebrew" );
4574 const std::string fontArabic( "TizenSansArabic" );
4576 // Set a known font description
4577 FontDescriptionRun fontDescriptionRun01;
4578 fontDescriptionRun01.characterRun.characterIndex = 0u;
4579 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4580 fontDescriptionRun01.familyLength = fontLatin.size();
4581 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4582 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4583 fontDescriptionRun01.familyDefined = true;
4584 fontDescriptionRun01.weightDefined = false;
4585 fontDescriptionRun01.widthDefined = false;
4586 fontDescriptionRun01.slantDefined = false;
4587 fontDescriptionRun01.sizeDefined = false;
4589 FontDescriptionRun fontDescriptionRun02;
4590 fontDescriptionRun02.characterRun.characterIndex = 12u;
4591 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4592 fontDescriptionRun02.familyLength = fontHebrew.size();
4593 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4594 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4595 fontDescriptionRun02.familyDefined = true;
4596 fontDescriptionRun02.weightDefined = false;
4597 fontDescriptionRun02.widthDefined = false;
4598 fontDescriptionRun02.slantDefined = false;
4599 fontDescriptionRun02.sizeDefined = false;
4601 FontDescriptionRun fontDescriptionRun03;
4602 fontDescriptionRun03.characterRun.characterIndex = 22u;
4603 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4604 fontDescriptionRun03.familyLength = fontArabic.size();
4605 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4606 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4607 fontDescriptionRun03.familyDefined = true;
4608 fontDescriptionRun03.weightDefined = false;
4609 fontDescriptionRun03.widthDefined = false;
4610 fontDescriptionRun03.slantDefined = false;
4611 fontDescriptionRun03.sizeDefined = false;
4613 FontDescriptionRun fontDescriptionRun04;
4614 fontDescriptionRun04.characterRun.characterIndex = 36u;
4615 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4616 fontDescriptionRun04.familyLength = fontLatin.size();
4617 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4618 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4619 fontDescriptionRun04.familyDefined = true;
4620 fontDescriptionRun04.weightDefined = false;
4621 fontDescriptionRun04.widthDefined = false;
4622 fontDescriptionRun04.slantDefined = false;
4623 fontDescriptionRun04.sizeDefined = false;
4625 FontDescriptionRun fontDescriptionRun05;
4626 fontDescriptionRun05.characterRun.characterIndex = 48u;
4627 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4628 fontDescriptionRun05.familyLength = fontLatin.size();
4629 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4630 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4631 fontDescriptionRun05.familyDefined = true;
4632 fontDescriptionRun05.weightDefined = false;
4633 fontDescriptionRun05.widthDefined = false;
4634 fontDescriptionRun05.slantDefined = false;
4635 fontDescriptionRun05.sizeDefined = false;
4637 FontDescriptionRun fontDescriptionRun06;
4638 fontDescriptionRun06.characterRun.characterIndex = 60u;
4639 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4640 fontDescriptionRun06.familyLength = fontArabic.size();
4641 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4642 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4643 fontDescriptionRun06.familyDefined = true;
4644 fontDescriptionRun06.weightDefined = false;
4645 fontDescriptionRun06.widthDefined = false;
4646 fontDescriptionRun06.slantDefined = false;
4647 fontDescriptionRun06.sizeDefined = false;
4649 Vector<FontDescriptionRun> fontDescriptionRuns;
4650 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4651 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4652 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4653 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4654 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4655 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4657 float positions[] = { 0.f, 0.f, -1.f, 30.f, 0.f, 0.f };
4659 Size textArea( 100.f, 300.f );
4662 "Center alignment for the mid paragraph.",
4663 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4666 fontDescriptionRuns.Begin(),
4667 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4668 LayoutEngine::VERTICAL_ALIGN_TOP,
4675 if( !AlignTest( data ) )
4677 tet_result(TET_FAIL);
4680 tet_result(TET_PASS);
4684 int UtcDaliTextAlign06(void)
4686 ToolkitTestApplication application;
4687 tet_infoline(" UtcDaliTextAlign06");
4689 // Calculate text alignment.
4691 const std::string fontLatin( "TizenSans" );
4692 const std::string fontHebrew( "TizenSansHebrew" );
4693 const std::string fontArabic( "TizenSansArabic" );
4695 // Set a known font description
4696 FontDescriptionRun fontDescriptionRun01;
4697 fontDescriptionRun01.characterRun.characterIndex = 0u;
4698 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4699 fontDescriptionRun01.familyLength = fontLatin.size();
4700 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4701 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4702 fontDescriptionRun01.familyDefined = true;
4703 fontDescriptionRun01.weightDefined = false;
4704 fontDescriptionRun01.widthDefined = false;
4705 fontDescriptionRun01.slantDefined = false;
4706 fontDescriptionRun01.sizeDefined = false;
4708 FontDescriptionRun fontDescriptionRun02;
4709 fontDescriptionRun02.characterRun.characterIndex = 12u;
4710 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4711 fontDescriptionRun02.familyLength = fontHebrew.size();
4712 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4713 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4714 fontDescriptionRun02.familyDefined = true;
4715 fontDescriptionRun02.weightDefined = false;
4716 fontDescriptionRun02.widthDefined = false;
4717 fontDescriptionRun02.slantDefined = false;
4718 fontDescriptionRun02.sizeDefined = false;
4720 FontDescriptionRun fontDescriptionRun03;
4721 fontDescriptionRun03.characterRun.characterIndex = 22u;
4722 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4723 fontDescriptionRun03.familyLength = fontArabic.size();
4724 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4725 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4726 fontDescriptionRun03.familyDefined = true;
4727 fontDescriptionRun03.weightDefined = false;
4728 fontDescriptionRun03.widthDefined = false;
4729 fontDescriptionRun03.slantDefined = false;
4730 fontDescriptionRun03.sizeDefined = false;
4732 FontDescriptionRun fontDescriptionRun04;
4733 fontDescriptionRun04.characterRun.characterIndex = 36u;
4734 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4735 fontDescriptionRun04.familyLength = fontLatin.size();
4736 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4737 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4738 fontDescriptionRun04.familyDefined = true;
4739 fontDescriptionRun04.weightDefined = false;
4740 fontDescriptionRun04.widthDefined = false;
4741 fontDescriptionRun04.slantDefined = false;
4742 fontDescriptionRun04.sizeDefined = false;
4744 FontDescriptionRun fontDescriptionRun05;
4745 fontDescriptionRun05.characterRun.characterIndex = 48u;
4746 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4747 fontDescriptionRun05.familyLength = fontLatin.size();
4748 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4749 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4750 fontDescriptionRun05.familyDefined = true;
4751 fontDescriptionRun05.weightDefined = false;
4752 fontDescriptionRun05.widthDefined = false;
4753 fontDescriptionRun05.slantDefined = false;
4754 fontDescriptionRun05.sizeDefined = false;
4756 FontDescriptionRun fontDescriptionRun06;
4757 fontDescriptionRun06.characterRun.characterIndex = 60u;
4758 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4759 fontDescriptionRun06.familyLength = fontArabic.size();
4760 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4761 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4762 fontDescriptionRun06.familyDefined = true;
4763 fontDescriptionRun06.weightDefined = false;
4764 fontDescriptionRun06.widthDefined = false;
4765 fontDescriptionRun06.slantDefined = false;
4766 fontDescriptionRun06.sizeDefined = false;
4768 Vector<FontDescriptionRun> fontDescriptionRuns;
4769 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4770 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4771 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4772 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4773 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4774 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4776 float positions[] = { 0.f, 0.f, 0.f, 0.f, 10.f, 20.f };
4778 Size textArea( 100.f, 300.f );
4781 "Center alignment for the last paragraph.",
4782 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4785 fontDescriptionRuns.Begin(),
4786 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4787 LayoutEngine::VERTICAL_ALIGN_TOP,
4794 if( !AlignTest( data ) )
4796 tet_result(TET_FAIL);
4799 tet_result(TET_PASS);
4803 int UtcDaliTextAlign07(void)
4805 ToolkitTestApplication application;
4806 tet_infoline(" UtcDaliTextAlign07");
4808 // Calculate text alignment.
4810 const std::string fontLatin( "TizenSans" );
4811 const std::string fontHebrew( "TizenSansHebrew" );
4812 const std::string fontArabic( "TizenSansArabic" );
4814 // Set a known font description
4815 FontDescriptionRun fontDescriptionRun01;
4816 fontDescriptionRun01.characterRun.characterIndex = 0u;
4817 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4818 fontDescriptionRun01.familyLength = fontLatin.size();
4819 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4820 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4821 fontDescriptionRun01.familyDefined = true;
4822 fontDescriptionRun01.weightDefined = false;
4823 fontDescriptionRun01.widthDefined = false;
4824 fontDescriptionRun01.slantDefined = false;
4825 fontDescriptionRun01.sizeDefined = false;
4827 FontDescriptionRun fontDescriptionRun02;
4828 fontDescriptionRun02.characterRun.characterIndex = 12u;
4829 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4830 fontDescriptionRun02.familyLength = fontHebrew.size();
4831 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4832 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4833 fontDescriptionRun02.familyDefined = true;
4834 fontDescriptionRun02.weightDefined = false;
4835 fontDescriptionRun02.widthDefined = false;
4836 fontDescriptionRun02.slantDefined = false;
4837 fontDescriptionRun02.sizeDefined = false;
4839 FontDescriptionRun fontDescriptionRun03;
4840 fontDescriptionRun03.characterRun.characterIndex = 22u;
4841 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4842 fontDescriptionRun03.familyLength = fontArabic.size();
4843 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4844 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4845 fontDescriptionRun03.familyDefined = true;
4846 fontDescriptionRun03.weightDefined = false;
4847 fontDescriptionRun03.widthDefined = false;
4848 fontDescriptionRun03.slantDefined = false;
4849 fontDescriptionRun03.sizeDefined = false;
4851 FontDescriptionRun fontDescriptionRun04;
4852 fontDescriptionRun04.characterRun.characterIndex = 36u;
4853 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4854 fontDescriptionRun04.familyLength = fontLatin.size();
4855 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4856 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4857 fontDescriptionRun04.familyDefined = true;
4858 fontDescriptionRun04.weightDefined = false;
4859 fontDescriptionRun04.widthDefined = false;
4860 fontDescriptionRun04.slantDefined = false;
4861 fontDescriptionRun04.sizeDefined = false;
4863 FontDescriptionRun fontDescriptionRun05;
4864 fontDescriptionRun05.characterRun.characterIndex = 48u;
4865 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4866 fontDescriptionRun05.familyLength = fontLatin.size();
4867 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4868 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4869 fontDescriptionRun05.familyDefined = true;
4870 fontDescriptionRun05.weightDefined = false;
4871 fontDescriptionRun05.widthDefined = false;
4872 fontDescriptionRun05.slantDefined = false;
4873 fontDescriptionRun05.sizeDefined = false;
4875 FontDescriptionRun fontDescriptionRun06;
4876 fontDescriptionRun06.characterRun.characterIndex = 60u;
4877 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4878 fontDescriptionRun06.familyLength = fontArabic.size();
4879 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4880 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4881 fontDescriptionRun06.familyDefined = true;
4882 fontDescriptionRun06.weightDefined = false;
4883 fontDescriptionRun06.widthDefined = false;
4884 fontDescriptionRun06.slantDefined = false;
4885 fontDescriptionRun06.sizeDefined = false;
4887 Vector<FontDescriptionRun> fontDescriptionRuns;
4888 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4889 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4890 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4891 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4892 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4893 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4895 float positions[] = { 20.f, 33.f, 0.f, 0.f, 0.f, 0.f };
4897 Size textArea( 100.f, 300.f );
4900 "End alignment for the first paragraph.",
4901 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4904 fontDescriptionRuns.Begin(),
4905 LayoutEngine::HORIZONTAL_ALIGN_END,
4906 LayoutEngine::VERTICAL_ALIGN_TOP,
4913 if( !AlignTest( data ) )
4915 tet_result(TET_FAIL);
4918 tet_result(TET_PASS);
4922 int UtcDaliTextAlign08(void)
4924 ToolkitTestApplication application;
4925 tet_infoline(" UtcDaliTextAlign08");
4927 // Calculate text alignment.
4929 const std::string fontLatin( "TizenSans" );
4930 const std::string fontHebrew( "TizenSansHebrew" );
4931 const std::string fontArabic( "TizenSansArabic" );
4933 // Set a known font description
4934 FontDescriptionRun fontDescriptionRun01;
4935 fontDescriptionRun01.characterRun.characterIndex = 0u;
4936 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4937 fontDescriptionRun01.familyLength = fontLatin.size();
4938 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4939 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4940 fontDescriptionRun01.familyDefined = true;
4941 fontDescriptionRun01.weightDefined = false;
4942 fontDescriptionRun01.widthDefined = false;
4943 fontDescriptionRun01.slantDefined = false;
4944 fontDescriptionRun01.sizeDefined = false;
4946 FontDescriptionRun fontDescriptionRun02;
4947 fontDescriptionRun02.characterRun.characterIndex = 12u;
4948 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4949 fontDescriptionRun02.familyLength = fontHebrew.size();
4950 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4951 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4952 fontDescriptionRun02.familyDefined = true;
4953 fontDescriptionRun02.weightDefined = false;
4954 fontDescriptionRun02.widthDefined = false;
4955 fontDescriptionRun02.slantDefined = false;
4956 fontDescriptionRun02.sizeDefined = false;
4958 FontDescriptionRun fontDescriptionRun03;
4959 fontDescriptionRun03.characterRun.characterIndex = 22u;
4960 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4961 fontDescriptionRun03.familyLength = fontArabic.size();
4962 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4963 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4964 fontDescriptionRun03.familyDefined = true;
4965 fontDescriptionRun03.weightDefined = false;
4966 fontDescriptionRun03.widthDefined = false;
4967 fontDescriptionRun03.slantDefined = false;
4968 fontDescriptionRun03.sizeDefined = false;
4970 FontDescriptionRun fontDescriptionRun04;
4971 fontDescriptionRun04.characterRun.characterIndex = 36u;
4972 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4973 fontDescriptionRun04.familyLength = fontLatin.size();
4974 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4975 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4976 fontDescriptionRun04.familyDefined = true;
4977 fontDescriptionRun04.weightDefined = false;
4978 fontDescriptionRun04.widthDefined = false;
4979 fontDescriptionRun04.slantDefined = false;
4980 fontDescriptionRun04.sizeDefined = false;
4982 FontDescriptionRun fontDescriptionRun05;
4983 fontDescriptionRun05.characterRun.characterIndex = 48u;
4984 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4985 fontDescriptionRun05.familyLength = fontLatin.size();
4986 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4987 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4988 fontDescriptionRun05.familyDefined = true;
4989 fontDescriptionRun05.weightDefined = false;
4990 fontDescriptionRun05.widthDefined = false;
4991 fontDescriptionRun05.slantDefined = false;
4992 fontDescriptionRun05.sizeDefined = false;
4994 FontDescriptionRun fontDescriptionRun06;
4995 fontDescriptionRun06.characterRun.characterIndex = 60u;
4996 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4997 fontDescriptionRun06.familyLength = fontArabic.size();
4998 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4999 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5000 fontDescriptionRun06.familyDefined = true;
5001 fontDescriptionRun06.weightDefined = false;
5002 fontDescriptionRun06.widthDefined = false;
5003 fontDescriptionRun06.slantDefined = false;
5004 fontDescriptionRun06.sizeDefined = false;
5006 Vector<FontDescriptionRun> fontDescriptionRuns;
5007 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5008 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5009 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5010 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5011 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5012 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5014 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
5016 Size textArea( 100.f, 300.f );
5019 "End alignment for the mid paragraph.",
5020 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5023 fontDescriptionRuns.Begin(),
5024 LayoutEngine::HORIZONTAL_ALIGN_END,
5025 LayoutEngine::VERTICAL_ALIGN_TOP,
5032 if( !AlignTest( data ) )
5034 tet_result(TET_FAIL);
5037 tet_result(TET_PASS);
5041 int UtcDaliTextAlign09(void)
5043 ToolkitTestApplication application;
5044 tet_infoline(" UtcDaliTextAlign09");
5046 // Calculate text alignment.
5048 const std::string fontLatin( "TizenSans" );
5049 const std::string fontHebrew( "TizenSansHebrew" );
5050 const std::string fontArabic( "TizenSansArabic" );
5052 // Set a known font description
5053 FontDescriptionRun fontDescriptionRun01;
5054 fontDescriptionRun01.characterRun.characterIndex = 0u;
5055 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5056 fontDescriptionRun01.familyLength = fontLatin.size();
5057 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5058 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5059 fontDescriptionRun01.familyDefined = true;
5060 fontDescriptionRun01.weightDefined = false;
5061 fontDescriptionRun01.widthDefined = false;
5062 fontDescriptionRun01.slantDefined = false;
5063 fontDescriptionRun01.sizeDefined = false;
5065 FontDescriptionRun fontDescriptionRun02;
5066 fontDescriptionRun02.characterRun.characterIndex = 12u;
5067 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5068 fontDescriptionRun02.familyLength = fontHebrew.size();
5069 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5070 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5071 fontDescriptionRun02.familyDefined = true;
5072 fontDescriptionRun02.weightDefined = false;
5073 fontDescriptionRun02.widthDefined = false;
5074 fontDescriptionRun02.slantDefined = false;
5075 fontDescriptionRun02.sizeDefined = false;
5077 FontDescriptionRun fontDescriptionRun03;
5078 fontDescriptionRun03.characterRun.characterIndex = 22u;
5079 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5080 fontDescriptionRun03.familyLength = fontArabic.size();
5081 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5082 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5083 fontDescriptionRun03.familyDefined = true;
5084 fontDescriptionRun03.weightDefined = false;
5085 fontDescriptionRun03.widthDefined = false;
5086 fontDescriptionRun03.slantDefined = false;
5087 fontDescriptionRun03.sizeDefined = false;
5089 FontDescriptionRun fontDescriptionRun04;
5090 fontDescriptionRun04.characterRun.characterIndex = 36u;
5091 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5092 fontDescriptionRun04.familyLength = fontLatin.size();
5093 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5094 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5095 fontDescriptionRun04.familyDefined = true;
5096 fontDescriptionRun04.weightDefined = false;
5097 fontDescriptionRun04.widthDefined = false;
5098 fontDescriptionRun04.slantDefined = false;
5099 fontDescriptionRun04.sizeDefined = false;
5101 FontDescriptionRun fontDescriptionRun05;
5102 fontDescriptionRun05.characterRun.characterIndex = 48u;
5103 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5104 fontDescriptionRun05.familyLength = fontLatin.size();
5105 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5106 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5107 fontDescriptionRun05.familyDefined = true;
5108 fontDescriptionRun05.weightDefined = false;
5109 fontDescriptionRun05.widthDefined = false;
5110 fontDescriptionRun05.slantDefined = false;
5111 fontDescriptionRun05.sizeDefined = false;
5113 FontDescriptionRun fontDescriptionRun06;
5114 fontDescriptionRun06.characterRun.characterIndex = 60u;
5115 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5116 fontDescriptionRun06.familyLength = fontArabic.size();
5117 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5118 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5119 fontDescriptionRun06.familyDefined = true;
5120 fontDescriptionRun06.weightDefined = false;
5121 fontDescriptionRun06.widthDefined = false;
5122 fontDescriptionRun06.slantDefined = false;
5123 fontDescriptionRun06.sizeDefined = false;
5125 Vector<FontDescriptionRun> fontDescriptionRuns;
5126 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5127 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5128 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5129 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5130 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5131 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5133 float positions[] = { 0.f, 0.f, 0.f, 0.f, 20.f, 40.f };
5135 Size textArea( 100.f, 300.f );
5138 "End alignment for the last paragraph.",
5139 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5142 fontDescriptionRuns.Begin(),
5143 LayoutEngine::HORIZONTAL_ALIGN_END,
5144 LayoutEngine::VERTICAL_ALIGN_TOP,
5151 if( !AlignTest( data ) )
5153 tet_result(TET_FAIL);
5156 tet_result(TET_PASS);