2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
23 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
24 #include <dali-toolkit/internal/text/text-run-container.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <toolkit-text-model.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 LayoutEngine::Layout layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << line.width << std::endl;
66 std::cout << " ascender : " << line.ascender << std::endl;
67 std::cout << " descender : " << line.descender << std::endl;
68 std::cout << " extraLength : " << line.extraLength << std::endl;
69 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
70 std::cout << " direction : " << line.direction << std::endl;
71 std::cout << " ellipsis : " << line.ellipsis << std::endl;
74 bool LayoutTextTest( const LayoutTextData& data )
77 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
78 fontClient.SetDpi( 96u, 96u );
80 char* pathNamePtr = get_current_dir_name();
81 const std::string pathName( pathNamePtr );
84 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 // 1) Create the model.
89 LogicalModelPtr logicalModel;
90 VisualModelPtr visualModel;
94 Vector<FontDescriptionRun> fontDescriptionRuns;
95 if( 0u != data.numberOfFonts )
97 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
98 data.fontDescriptions,
99 data.fontDescriptions + data.numberOfFonts );
102 LayoutOptions options;
103 options.reorder = false;
104 options.align = false;
105 CreateTextModel( data.text,
114 // 2) Clear the layout.
115 Vector<LineRun>& lines = visualModel->mLines;
117 const Length numberOfCharacters = logicalModel->mText.Count();
118 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
119 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
120 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
122 LineIndex startRemoveIndex = 0u;
124 if( 0u != lines.Count() )
126 startRemoveIndex = lines.Count();
127 LineIndex endRemoveIndex = startRemoveIndex;
128 ClearGlyphRuns( data.startIndex,
129 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
134 // Update the character runs of the lines.
135 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
136 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
137 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
138 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
139 ClearCharacterRuns( startCharacterIndex,
140 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
145 lines.Erase( lines.Begin() + startRemoveIndex,
146 lines.Begin() + endRemoveIndex );
149 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
151 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
152 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
156 engine.SetMetrics( metrics );
157 engine.SetTextEllipsisEnabled( data.ellipsis );
158 engine.SetLayout( data.layout );
160 const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
162 LayoutParameters layoutParameters( data.textArea,
163 logicalModel->mText.Begin(),
164 logicalModel->mLineBreakInfo.Begin(),
165 logicalModel->mWordBreakInfo.Begin(),
166 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
167 visualModel->mGlyphs.Begin(),
168 visualModel->mGlyphsToCharacters.Begin(),
169 visualModel->mCharactersPerGlyph.Begin(),
170 visualModel->mCharactersToGlyph.Begin(),
171 visualModel->mGlyphsPerCharacter.Begin(),
172 totalNumberOfGlyphs );
174 layoutParameters.isLastNewParagraph = isLastNewParagraph;
176 // The initial glyph and the number of glyphs to layout.
177 layoutParameters.startGlyphIndex = data.startIndex;
178 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
179 layoutParameters.startLineIndex = startRemoveIndex;
180 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
182 layoutSize = Vector2::ZERO;
184 const bool updated = engine.LayoutText( layoutParameters,
189 // 4) Compare the results.
191 if( updated != data.updated )
193 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
197 if( layoutSize != data.layoutSize )
199 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
203 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
205 const Vector2& position = *( glyphPositions.Begin() + index );
207 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
212 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
214 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
219 if( lines.Count() != data.numberOfLines )
221 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
225 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
227 const LineRun& line = *( lines.Begin() + index );
228 const LineRun& expectedLine = *( data.lines + index );
230 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
232 std::cout << " Different line info for line : " << index << std::endl;
234 std::cout << " expected" << std::endl;
235 Print( expectedLine );
238 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
240 std::cout << " Different line info for line : " << index << std::endl;
242 std::cout << " expected" << std::endl;
243 Print( expectedLine );
247 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
249 std::cout << " Different line info for line : " << index << std::endl;
251 std::cout << " expected" << std::endl;
252 Print( expectedLine );
255 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
257 std::cout << " Different line info for line : " << index << std::endl;
259 std::cout << " expected" << std::endl;
260 Print( expectedLine );
264 if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
266 std::cout << " Different line info for line : " << index << std::endl;
268 std::cout << " expected" << std::endl;
269 Print( expectedLine );
273 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
275 std::cout << " Different line info for line : " << index << std::endl;
277 std::cout << " expected" << std::endl;
278 Print( expectedLine );
282 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
284 std::cout << " Different line info for line : " << index << std::endl;
286 std::cout << " expected" << std::endl;
287 Print( expectedLine );
291 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
293 std::cout << " Different line info for line : " << index << std::endl;
295 std::cout << " expected" << std::endl;
296 Print( expectedLine );
300 if( line.ellipsis != expectedLine.ellipsis )
302 std::cout << " Different line info for line : " << index << std::endl;
304 std::cout << " expected" << std::endl;
305 Print( expectedLine );
309 // Do not compare the alignment offset as it's not calculated in the layout.
310 // Do not compare the line direction as it's not set in the layout.
316 //////////////////////////////////////////////////////////
318 struct ReLayoutRightToLeftLinesData
320 std::string description;
323 unsigned int numberOfFonts;
324 FontDescriptionRun* fontDescriptions;
325 unsigned int totalNumberOfGlyphs;
327 unsigned int startIndex;
328 unsigned int numberOfCharacters;
331 bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
334 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
335 fontClient.SetDpi( 96u, 96u );
337 char* pathNamePtr = get_current_dir_name();
338 const std::string pathName( pathNamePtr );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
345 // 1) Create the model.
346 LogicalModelPtr logicalModel;
347 VisualModelPtr visualModel;
351 Vector<FontDescriptionRun> fontDescriptionRuns;
352 if( 0u != data.numberOfFonts )
354 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
355 data.fontDescriptions,
356 data.fontDescriptions + data.numberOfFonts );
359 LayoutOptions options;
360 options.reorder = false;
361 options.align = false;
362 CreateTextModel( data.text,
371 // 2) Call the ReLayoutRightToLeftLines() method.
373 engine.SetMetrics( metrics );
375 LayoutParameters layoutParameters( data.textArea,
376 logicalModel->mText.Begin(),
377 logicalModel->mLineBreakInfo.Begin(),
378 logicalModel->mWordBreakInfo.Begin(),
379 ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
380 visualModel->mGlyphs.Begin(),
381 visualModel->mGlyphsToCharacters.Begin(),
382 visualModel->mCharactersPerGlyph.Begin(),
383 visualModel->mCharactersToGlyph.Begin(),
384 visualModel->mGlyphsPerCharacter.Begin(),
385 visualModel->mGlyphs.Count() );
387 layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
388 layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
390 engine.ReLayoutRightToLeftLines( layoutParameters,
392 data.numberOfCharacters,
393 visualModel->mGlyphPositions );
395 // 3) Compare the results.
396 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
398 if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
400 std::cout << " Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
404 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
406 const Vector2& position = *( glyphPositions.Begin() + index );
408 if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
410 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
413 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
415 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
423 //////////////////////////////////////////////////////////
427 std::string description;
430 unsigned int numberOfFonts;
431 FontDescriptionRun* fontDescriptions;
432 LayoutEngine::HorizontalAlignment horizontalAlignment;
433 LayoutEngine::VerticalAlignment verticalAlignment;
434 unsigned int startIndex;
435 unsigned int numberOfCharacters;
436 unsigned int numberOfLines;
440 bool AlignTest( const AlignData& data )
443 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
444 fontClient.SetDpi( 96u, 96u );
446 char* pathNamePtr = get_current_dir_name();
447 const std::string pathName( pathNamePtr );
450 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
451 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
452 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
454 // 1) Create the model.
455 LogicalModelPtr logicalModel;
456 VisualModelPtr visualModel;
460 Vector<FontDescriptionRun> fontDescriptionRuns;
461 if( 0u != data.numberOfFonts )
463 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
464 data.fontDescriptions,
465 data.fontDescriptions + data.numberOfFonts );
468 LayoutOptions options;
469 options.align = false;
470 CreateTextModel( data.text,
479 // Call the Align method.
481 engine.SetMetrics( metrics );
483 engine.SetHorizontalAlignment( data.horizontalAlignment );
484 engine.SetVerticalAlignment( data.verticalAlignment );
486 engine.Align( data.textArea,
488 data.numberOfCharacters,
489 visualModel->mLines );
492 if( data.numberOfLines != visualModel->mLines.Count() )
494 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
498 const LineRun* const linesBuffer = visualModel->mLines.Begin();
499 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
501 const LineRun& line = *( linesBuffer + index );
503 if( line.alignmentOffset != *( data.lineOffsets + index ) )
505 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
515 //////////////////////////////////////////////////////////
517 // UtcDaliTextLayoutSetGetLayout
518 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
519 // UtcDaliTextLayoutSetGetHorizontalAlignment
520 // UtcDaliTextLayoutSetGetVerticalAlignment
521 // UtcDaliTextLayoutSetGetCursorWidth
522 // UtcDaliTextLayoutNoText
523 // UtcDaliTextLayoutSmallTextArea01
524 // UtcDaliTextLayoutSmallTextArea02
525 // UtcDaliTextLayoutMultilineText01
526 // UtcDaliTextLayoutMultilineText02
527 // UtcDaliTextLayoutMultilineText03
528 // UtcDaliTextLayoutMultilineText04
529 // UtcDaliTextLayoutMultilineText05
530 // UtcDaliTextUpdateLayout01
531 // UtcDaliTextUpdateLayout02
532 // UtcDaliTextUpdateLayout03
533 // UtcDaliTextLayoutEllipsis01
534 // UtcDaliTextLayoutEllipsis02
535 // UtcDaliTextLayoutEllipsis03
536 // UtcDaliTextLayoutEllipsis04
537 // UtcDaliTextLayoutEllipsis04
538 // UtcDaliTextReorderLayout01
539 // UtcDaliTextReorderLayout02
540 // UtcDaliTextReorderLayout03
541 // UtcDaliTextReorderLayout04
542 // UtcDaliTextAlign01
543 // UtcDaliTextAlign02
544 // UtcDaliTextAlign03
545 // UtcDaliTextAlign04
546 // UtcDaliTextAlign05
547 // UtcDaliTextAlign06
548 // UtcDaliTextAlign07
549 // UtcDaliTextAlign08
550 // UtcDaliTextAlign09
552 //////////////////////////////////////////////////////////
554 int UtcDaliTextLayoutSetGetLayout(void)
556 ToolkitTestApplication application;
557 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
561 DALI_TEST_CHECK( LayoutEngine::SINGLE_LINE_BOX == engine.GetLayout() );
563 engine.SetLayout( LayoutEngine::MULTI_LINE_BOX );
564 DALI_TEST_CHECK( LayoutEngine::MULTI_LINE_BOX == engine.GetLayout() );
566 tet_result(TET_PASS);
570 int UtcDaliTextLayoutSetGetTextEllipsisEnabled(void)
572 ToolkitTestApplication application;
573 tet_infoline(" UtcDaliTextLayoutSetGetTextEllipsisEnabled");
577 DALI_TEST_CHECK( !engine.GetTextEllipsisEnabled() );
579 engine.SetTextEllipsisEnabled( true );
580 DALI_TEST_CHECK( engine.GetTextEllipsisEnabled() );
582 tet_result(TET_PASS);
586 int UtcDaliTextLayoutSetGetHorizontalAlignment(void)
588 ToolkitTestApplication application;
593 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_BEGIN == engine.GetHorizontalAlignment() );
595 engine.SetHorizontalAlignment( LayoutEngine::HORIZONTAL_ALIGN_END );
596 DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_END == engine.GetHorizontalAlignment() );
598 tet_result(TET_PASS);
602 int UtcDaliTextLayoutSetGetVerticalAlignment(void)
604 ToolkitTestApplication application;
605 tet_infoline(" UtcDaliTextLayoutSetGetVerticalAlignment");
609 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
611 engine.SetVerticalAlignment( LayoutEngine::VERTICAL_ALIGN_TOP );
612 DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
615 tet_result(TET_PASS);
619 int UtcDaliTextLayoutSetGetCursorWidth(void)
621 ToolkitTestApplication application;
626 DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
628 engine.SetCursorWidth( 2 );
629 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
631 tet_result(TET_PASS);
635 int UtcDaliTextLayoutNoText(void)
637 ToolkitTestApplication application;
638 tet_infoline(" UtcDaliTextLayoutNoText");
640 Size textArea(100.f, 60.f);
641 Size layoutSize = Vector2::ZERO;
642 LayoutTextData data =
654 LayoutEngine::MULTI_LINE_BOX,
661 if( !LayoutTextTest( data ) )
663 tet_result(TET_FAIL);
666 tet_result(TET_PASS);
670 int UtcDaliTextLayoutSmallTextArea01(void)
672 ToolkitTestApplication application;
673 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
675 // Won't layout the text in multi-line if the width is too small.
677 const std::string fontFamily( "TizenSans" );
679 // Set a known font description
680 FontDescriptionRun fontDescriptionRun;
681 fontDescriptionRun.characterRun.characterIndex = 0u;
682 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
683 fontDescriptionRun.familyLength = fontFamily.size();
684 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
685 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
686 fontDescriptionRun.familyDefined = true;
687 fontDescriptionRun.weightDefined = false;
688 fontDescriptionRun.widthDefined = false;
689 fontDescriptionRun.slantDefined = false;
690 fontDescriptionRun.sizeDefined = false;
692 Vector<FontDescriptionRun> fontDescriptionRuns;
693 fontDescriptionRuns.PushBack( fontDescriptionRun );
694 Size textArea(1.f, 1.f);
695 Size layoutSize = Vector2::ZERO;
696 LayoutTextData data =
698 "Layout text in a small area",
702 fontDescriptionRuns.Begin(),
708 LayoutEngine::MULTI_LINE_BOX,
715 if( !LayoutTextTest( data ) )
717 tet_result(TET_FAIL);
720 tet_result(TET_PASS);
724 int UtcDaliTextLayoutSmallTextArea02(void)
726 ToolkitTestApplication application;
727 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
729 // Will layout the text in single line as it can be scrolled.
731 const std::string fontFamily( "TizenSans" );
733 // Set a known font description
734 FontDescriptionRun fontDescriptionRun;
735 fontDescriptionRun.characterRun.characterIndex = 0u;
736 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
737 fontDescriptionRun.familyLength = fontFamily.size();
738 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
739 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
740 fontDescriptionRun.familyDefined = true;
741 fontDescriptionRun.weightDefined = false;
742 fontDescriptionRun.widthDefined = false;
743 fontDescriptionRun.slantDefined = false;
744 fontDescriptionRun.sizeDefined = false;
746 Vector<FontDescriptionRun> fontDescriptionRuns;
747 fontDescriptionRuns.PushBack( fontDescriptionRun );
748 Size textArea(1.f, 1.f);
749 Size layoutSize(80.f, 20.f);
750 float positions[] = { 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f };
751 struct LineRun line =
763 Vector<LineRun> lines;
764 lines.PushBack( line );
766 LayoutTextData data =
768 "Layout text in a small area",
772 fontDescriptionRuns.Begin(),
778 LayoutEngine::SINGLE_LINE_BOX,
785 if( !LayoutTextTest( data ) )
787 tet_result(TET_FAIL);
790 tet_result(TET_PASS);
794 int UtcDaliTextLayoutMultilineText01(void)
796 ToolkitTestApplication application;
797 tet_infoline(" UtcDaliTextLayoutMultilineText01");
799 // Layout some lines of left to right text.
801 const std::string fontFamily( "TizenSans" );
803 // Set a known font description
804 FontDescriptionRun fontDescriptionRun1;
805 fontDescriptionRun1.characterRun.characterIndex = 0u;
806 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
807 fontDescriptionRun1.familyLength = fontFamily.size();
808 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
809 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
810 fontDescriptionRun1.familyDefined = true;
811 fontDescriptionRun1.weightDefined = false;
812 fontDescriptionRun1.widthDefined = false;
813 fontDescriptionRun1.slantDefined = false;
814 fontDescriptionRun1.sizeDefined = false;
816 FontDescriptionRun fontDescriptionRun2;
817 fontDescriptionRun2.characterRun.characterIndex = 18u;
818 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
819 fontDescriptionRun2.familyLength = fontFamily.size();
820 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
821 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
822 fontDescriptionRun2.familyDefined = true;
823 fontDescriptionRun2.weightDefined = false;
824 fontDescriptionRun2.widthDefined = false;
825 fontDescriptionRun2.slantDefined = false;
826 fontDescriptionRun2.sizeDefined = false;
828 Vector<FontDescriptionRun> fontDescriptionRuns;
829 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
830 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
831 Size textArea(100.f, 300.f);
832 Size layoutSize(95.f, 97.f);
835 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
836 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
837 1.f, -12.f, 9.f, -9.f, 17.f, -9.f, 27.f, -9.f, 36.f, -9.f, 45.f, -11.f, 51.f, -0.f,
838 1.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 35.f, -9.f, 41.f, -9.f, 50.f, -9.f, 59.f, -11.f, 65.f, -0.f,
839 1.f, -12.f, 5.f, -12.f, 9.f, -9.f, 19.f, -9.f, 28.f, -9.f, 35.f, -0.f, 41.f, -9.f, 50.f, -12.f, 54.f, -0.f, 59.f, -11.f, 66.f, -9.f, 75.f, -9.f, 83.f, -11.f, 91.f, -2.f
841 struct LineRun line0 =
853 struct LineRun line1 =
865 struct LineRun line2 =
877 struct LineRun line3 =
889 struct LineRun line4 =
901 Vector<LineRun> lines;
902 lines.PushBack( line0 );
903 lines.PushBack( line1 );
904 lines.PushBack( line2 );
905 lines.PushBack( line3 );
906 lines.PushBack( line4 );
908 LayoutTextData data =
910 "Layout simple multi-line text",
911 "Hello world demo.\n"
912 "Layout different lines of text.",
915 fontDescriptionRuns.Begin(),
921 LayoutEngine::MULTI_LINE_BOX,
928 if( !LayoutTextTest( data ) )
930 tet_result(TET_FAIL);
933 tet_result(TET_PASS);
937 int UtcDaliTextLayoutMultilineText02(void)
939 ToolkitTestApplication application;
940 tet_infoline(" UtcDaliTextLayoutMultilineText02");
942 // Layout some lines of bidirectional text.
944 const std::string fontFamily1( "TizenSans" );
946 // Set a known font description
947 FontDescriptionRun fontDescriptionRun1;
948 fontDescriptionRun1.characterRun.characterIndex = 0u;
949 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
950 fontDescriptionRun1.familyLength = fontFamily1.size();
951 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
952 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
953 fontDescriptionRun1.familyDefined = true;
954 fontDescriptionRun1.weightDefined = false;
955 fontDescriptionRun1.widthDefined = false;
956 fontDescriptionRun1.slantDefined = false;
957 fontDescriptionRun1.sizeDefined = false;
959 const std::string fontFamily2( "TizenSansHebrew" );
961 // Set a known font description
962 FontDescriptionRun fontDescriptionRun2;
963 fontDescriptionRun2.characterRun.characterIndex = 17u;
964 fontDescriptionRun2.characterRun.numberOfCharacters = 11u;
965 fontDescriptionRun2.familyLength = fontFamily2.size();
966 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
967 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
968 fontDescriptionRun2.familyDefined = true;
969 fontDescriptionRun2.weightDefined = false;
970 fontDescriptionRun2.widthDefined = false;
971 fontDescriptionRun2.slantDefined = false;
972 fontDescriptionRun2.sizeDefined = false;
974 const std::string fontFamily3( "TizenSansHebrew" );
976 // Set a known font description
977 FontDescriptionRun fontDescriptionRun3;
978 fontDescriptionRun3.characterRun.characterIndex = 28u;
979 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
980 fontDescriptionRun3.familyLength = fontFamily3.size();
981 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
982 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
983 fontDescriptionRun3.familyDefined = true;
984 fontDescriptionRun3.weightDefined = false;
985 fontDescriptionRun3.widthDefined = false;
986 fontDescriptionRun3.slantDefined = false;
987 fontDescriptionRun3.sizeDefined = false;
989 const std::string fontFamily4( "TizenSans" );
991 // Set a known font description
992 FontDescriptionRun fontDescriptionRun4;
993 fontDescriptionRun4.characterRun.characterIndex = 38u;
994 fontDescriptionRun4.characterRun.numberOfCharacters = 17u;
995 fontDescriptionRun4.familyLength = fontFamily4.size();
996 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
997 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
998 fontDescriptionRun4.familyDefined = true;
999 fontDescriptionRun4.weightDefined = false;
1000 fontDescriptionRun4.widthDefined = false;
1001 fontDescriptionRun4.slantDefined = false;
1002 fontDescriptionRun4.sizeDefined = false;
1004 Vector<FontDescriptionRun> fontDescriptionRuns;
1005 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1006 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1007 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1008 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
1009 Size textArea(100.f, 300.f);
1010 Size layoutSize(81.f, 120.f);
1013 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1014 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1015 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1016 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1017 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1018 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1020 struct LineRun line0 =
1032 struct LineRun line1 =
1044 struct LineRun line2 =
1056 struct LineRun line3 =
1068 struct LineRun line4 =
1080 struct LineRun line5 =
1092 Vector<LineRun> lines;
1093 lines.PushBack( line0 );
1094 lines.PushBack( line1 );
1095 lines.PushBack( line2 );
1096 lines.PushBack( line3 );
1097 lines.PushBack( line4 );
1098 lines.PushBack( line5 );
1100 LayoutTextData data =
1102 "Layout bidirectional text.",
1103 "Hello world demo שלום עולם.\n"
1104 "שלום עולם hello world demo.",
1107 fontDescriptionRuns.Begin(),
1113 LayoutEngine::MULTI_LINE_BOX,
1120 if( !LayoutTextTest( data ) )
1122 tet_result(TET_FAIL);
1125 tet_result(TET_PASS);
1129 int UtcDaliTextLayoutMultilineText03(void)
1131 ToolkitTestApplication application;
1132 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1134 // Layout a long word which doesn't fit in the width of the text area.
1136 const std::string fontFamily( "TizenSans" );
1138 // Set a known font description
1139 FontDescriptionRun fontDescriptionRun;
1140 fontDescriptionRun.characterRun.characterIndex = 0u;
1141 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1142 fontDescriptionRun.familyLength = fontFamily.size();
1143 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1144 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1145 fontDescriptionRun.familyDefined = true;
1146 fontDescriptionRun.weightDefined = false;
1147 fontDescriptionRun.widthDefined = false;
1148 fontDescriptionRun.slantDefined = false;
1149 fontDescriptionRun.sizeDefined = false;
1151 Vector<FontDescriptionRun> fontDescriptionRuns;
1152 fontDescriptionRuns.PushBack( fontDescriptionRun );
1153 Size textArea(100.f, 300.f);
1154 Size layoutSize(96.f, 60.f);
1157 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -9.f, 47.f, -9.f, 57.f, -9.f, 63.f, -13.f, 66.f, -13.f, 75.f, -13.f, 85.f, -9.f,
1158 1.f, -9.f, 13.f, -9.f, 23.f, -13.f, 32.f, -9.f, 40.f, -13.f, 44.f, -13.f, 47.f, -9.f, 56.f, -9.f, 67.f, -9.f, 77.f, -9.f, 83.f, -13.f, 86.f, -13.f,
1159 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f,
1161 struct LineRun line0 =
1173 struct LineRun line1 =
1185 struct LineRun line2 =
1197 Vector<LineRun> lines;
1198 lines.PushBack( line0 );
1199 lines.PushBack( line1 );
1200 lines.PushBack( line2 );
1202 LayoutTextData data =
1204 "Layout a long word which doesn't fit in the width of the text area.",
1205 "Helloworlddemohelloworlddemo.",
1208 fontDescriptionRuns.Begin(),
1214 LayoutEngine::MULTI_LINE_BOX,
1221 if( !LayoutTextTest( data ) )
1223 tet_result(TET_FAIL);
1226 tet_result(TET_PASS);
1230 int UtcDaliTextLayoutMultilineText04(void)
1232 ToolkitTestApplication application;
1233 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1235 // Layout simple text ending with a \n. It has to add a void line at the end.
1237 const std::string fontFamily( "TizenSans" );
1239 // Set a known font description
1240 FontDescriptionRun fontDescriptionRun;
1241 fontDescriptionRun.characterRun.characterIndex = 0u;
1242 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1243 fontDescriptionRun.familyLength = fontFamily.size();
1244 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1245 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1246 fontDescriptionRun.familyDefined = true;
1247 fontDescriptionRun.weightDefined = false;
1248 fontDescriptionRun.widthDefined = false;
1249 fontDescriptionRun.slantDefined = false;
1250 fontDescriptionRun.sizeDefined = false;
1252 Vector<FontDescriptionRun> fontDescriptionRuns;
1253 fontDescriptionRuns.PushBack( fontDescriptionRun );
1254 Size textArea(100.f, 300.f);
1255 Size layoutSize(83.f, 40.f);
1258 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -3.f, 82.f, -12.f
1260 struct LineRun line0 =
1272 struct LineRun line1 =
1284 Vector<LineRun> lines;
1285 lines.PushBack( line0 );
1286 lines.PushBack( line1 );
1288 LayoutTextData data =
1290 "Layout simple text ending with a \n.",
1294 fontDescriptionRuns.Begin(),
1300 LayoutEngine::MULTI_LINE_BOX,
1307 if( !LayoutTextTest( data ) )
1309 tet_result(TET_FAIL);
1312 tet_result(TET_PASS);
1316 int UtcDaliTextLayoutMultilineText05(void)
1318 ToolkitTestApplication application;
1319 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1321 // Layout simple text with one character with a different font size.
1323 const std::string fontFamily( "TizenSans" );
1325 // Set a known font description
1326 FontDescriptionRun fontDescriptionRun1;
1327 fontDescriptionRun1.characterRun.characterIndex = 0u;
1328 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1329 fontDescriptionRun1.familyLength = fontFamily.size();
1330 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1331 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1332 fontDescriptionRun1.familyDefined = true;
1333 fontDescriptionRun1.weightDefined = false;
1334 fontDescriptionRun1.widthDefined = false;
1335 fontDescriptionRun1.slantDefined = false;
1336 fontDescriptionRun1.sizeDefined = false;
1338 FontDescriptionRun fontDescriptionRun2;
1339 fontDescriptionRun2.characterRun.characterIndex = 6u;
1340 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1341 fontDescriptionRun2.familyLength = fontFamily.size();
1342 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1343 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1344 fontDescriptionRun2.size = 1280u;
1345 fontDescriptionRun2.familyDefined = true;
1346 fontDescriptionRun2.weightDefined = false;
1347 fontDescriptionRun2.widthDefined = false;
1348 fontDescriptionRun2.slantDefined = false;
1349 fontDescriptionRun2.sizeDefined = true;
1351 FontDescriptionRun fontDescriptionRun3;
1352 fontDescriptionRun3.characterRun.characterIndex = 7u;
1353 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1354 fontDescriptionRun3.familyLength = fontFamily.size();
1355 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1356 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1357 fontDescriptionRun3.familyDefined = true;
1358 fontDescriptionRun3.weightDefined = false;
1359 fontDescriptionRun3.widthDefined = false;
1360 fontDescriptionRun3.slantDefined = false;
1361 fontDescriptionRun3.sizeDefined = false;
1363 Vector<FontDescriptionRun> fontDescriptionRuns;
1364 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1365 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1366 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1367 Size textArea(100.f, 300.f);
1368 Size layoutSize(88.f, 53.f);
1371 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 59.f, -9.f, 69.f, -9.f, 75.f, -13.f, 78.f, -13.f, 87.f, -0.f,
1372 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f
1374 struct LineRun line0 =
1386 struct LineRun line1 =
1398 Vector<LineRun> lines;
1399 lines.PushBack( line0 );
1400 lines.PushBack( line1 );
1402 LayoutTextData data =
1404 "Layout simple text with one character with a different font size.",
1405 "Hello world demo.",
1408 fontDescriptionRuns.Begin(),
1414 LayoutEngine::MULTI_LINE_BOX,
1421 if( !LayoutTextTest( data ) )
1423 tet_result(TET_FAIL);
1426 tet_result(TET_PASS);
1430 int UtcDaliTextUpdateLayout01(void)
1432 ToolkitTestApplication application;
1433 tet_infoline(" UtcDaliTextUpdateLayout01");
1435 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1437 const std::string fontLatin( "TizenSans" );
1438 const std::string fontHebrew( "TizenSansHebrew" );
1439 const std::string fontArabic( "TizenSansArabic" );
1441 // Set a known font description
1442 FontDescriptionRun fontDescriptionRun01;
1443 fontDescriptionRun01.characterRun.characterIndex = 0u;
1444 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1445 fontDescriptionRun01.familyLength = fontLatin.size();
1446 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1447 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1448 fontDescriptionRun01.familyDefined = true;
1449 fontDescriptionRun01.weightDefined = false;
1450 fontDescriptionRun01.widthDefined = false;
1451 fontDescriptionRun01.slantDefined = false;
1452 fontDescriptionRun01.sizeDefined = false;
1454 // Set a known font description
1455 FontDescriptionRun fontDescriptionRun02;
1456 fontDescriptionRun02.characterRun.characterIndex = 17u;
1457 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
1458 fontDescriptionRun02.familyLength = fontHebrew.size();
1459 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1460 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1461 fontDescriptionRun02.familyDefined = true;
1462 fontDescriptionRun02.weightDefined = false;
1463 fontDescriptionRun02.widthDefined = false;
1464 fontDescriptionRun02.slantDefined = false;
1465 fontDescriptionRun02.sizeDefined = false;
1467 // Set a known font description
1468 FontDescriptionRun fontDescriptionRun03;
1469 fontDescriptionRun03.characterRun.characterIndex = 28u;
1470 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
1471 fontDescriptionRun03.familyLength = fontArabic.size();
1472 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1473 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
1474 fontDescriptionRun03.familyDefined = true;
1475 fontDescriptionRun03.weightDefined = false;
1476 fontDescriptionRun03.widthDefined = false;
1477 fontDescriptionRun03.slantDefined = false;
1478 fontDescriptionRun03.sizeDefined = false;
1480 // Set a known font description
1481 FontDescriptionRun fontDescriptionRun04;
1482 fontDescriptionRun04.characterRun.characterIndex = 42u;
1483 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
1484 fontDescriptionRun04.familyLength = fontLatin.size();
1485 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1486 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
1487 fontDescriptionRun04.familyDefined = true;
1488 fontDescriptionRun04.weightDefined = false;
1489 fontDescriptionRun04.widthDefined = false;
1490 fontDescriptionRun04.slantDefined = false;
1491 fontDescriptionRun04.sizeDefined = false;
1493 // Set a known font description
1494 FontDescriptionRun fontDescriptionRun05;
1495 fontDescriptionRun05.characterRun.characterIndex = 54u;
1496 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
1497 fontDescriptionRun05.familyLength = fontHebrew.size();
1498 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1499 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
1500 fontDescriptionRun05.familyDefined = true;
1501 fontDescriptionRun05.weightDefined = false;
1502 fontDescriptionRun05.widthDefined = false;
1503 fontDescriptionRun05.slantDefined = false;
1504 fontDescriptionRun05.sizeDefined = false;
1506 // Set a known font description
1507 FontDescriptionRun fontDescriptionRun06;
1508 fontDescriptionRun06.characterRun.characterIndex = 64u;
1509 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1510 fontDescriptionRun06.familyLength = fontHebrew.size();
1511 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1512 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1513 fontDescriptionRun06.familyDefined = true;
1514 fontDescriptionRun06.weightDefined = false;
1515 fontDescriptionRun06.widthDefined = false;
1516 fontDescriptionRun06.slantDefined = false;
1517 fontDescriptionRun06.sizeDefined = false;
1519 // Set a known font description
1520 FontDescriptionRun fontDescriptionRun07;
1521 fontDescriptionRun07.characterRun.characterIndex = 74u;
1522 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
1523 fontDescriptionRun07.familyLength = fontLatin.size();
1524 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1525 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
1526 fontDescriptionRun07.familyDefined = true;
1527 fontDescriptionRun07.weightDefined = false;
1528 fontDescriptionRun07.widthDefined = false;
1529 fontDescriptionRun07.slantDefined = false;
1530 fontDescriptionRun07.sizeDefined = false;
1532 // Set a known font description
1533 FontDescriptionRun fontDescriptionRun08;
1534 fontDescriptionRun08.characterRun.characterIndex = 92u;
1535 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
1536 fontDescriptionRun08.familyLength = fontLatin.size();
1537 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1538 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1539 fontDescriptionRun08.familyDefined = true;
1540 fontDescriptionRun08.weightDefined = false;
1541 fontDescriptionRun08.widthDefined = false;
1542 fontDescriptionRun08.slantDefined = false;
1543 fontDescriptionRun08.sizeDefined = false;
1545 // Set a known font description
1546 FontDescriptionRun fontDescriptionRun09;
1547 fontDescriptionRun09.characterRun.characterIndex = 104u;
1548 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
1549 fontDescriptionRun09.familyLength = fontArabic.size();
1550 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1551 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
1552 fontDescriptionRun09.familyDefined = true;
1553 fontDescriptionRun09.weightDefined = false;
1554 fontDescriptionRun09.widthDefined = false;
1555 fontDescriptionRun09.slantDefined = false;
1556 fontDescriptionRun09.sizeDefined = false;
1558 // Set a known font description
1559 FontDescriptionRun fontDescriptionRun10;
1560 fontDescriptionRun10.characterRun.characterIndex = 118u;
1561 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
1562 fontDescriptionRun10.familyLength = fontHebrew.size();
1563 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1564 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
1565 fontDescriptionRun10.familyDefined = true;
1566 fontDescriptionRun10.weightDefined = false;
1567 fontDescriptionRun10.widthDefined = false;
1568 fontDescriptionRun10.slantDefined = false;
1569 fontDescriptionRun10.sizeDefined = false;
1571 // Set a known font description
1572 FontDescriptionRun fontDescriptionRun11;
1573 fontDescriptionRun11.characterRun.characterIndex = 128u;
1574 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
1575 fontDescriptionRun11.familyLength = fontLatin.size();
1576 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1577 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
1578 fontDescriptionRun11.familyDefined = true;
1579 fontDescriptionRun11.weightDefined = false;
1580 fontDescriptionRun11.widthDefined = false;
1581 fontDescriptionRun11.slantDefined = false;
1582 fontDescriptionRun11.sizeDefined = false;
1584 // Set a known font description
1585 FontDescriptionRun fontDescriptionRun12;
1586 fontDescriptionRun12.characterRun.characterIndex = 145u;
1587 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
1588 fontDescriptionRun12.familyLength = fontHebrew.size();
1589 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1590 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
1591 fontDescriptionRun12.familyDefined = true;
1592 fontDescriptionRun12.weightDefined = false;
1593 fontDescriptionRun12.widthDefined = false;
1594 fontDescriptionRun12.slantDefined = false;
1595 fontDescriptionRun12.sizeDefined = false;
1597 // Set a known font description
1598 FontDescriptionRun fontDescriptionRun13;
1599 fontDescriptionRun13.characterRun.characterIndex = 156u;
1600 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
1601 fontDescriptionRun13.familyLength = fontHebrew.size();
1602 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1603 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1604 fontDescriptionRun13.familyDefined = true;
1605 fontDescriptionRun13.weightDefined = false;
1606 fontDescriptionRun13.widthDefined = false;
1607 fontDescriptionRun13.slantDefined = false;
1608 fontDescriptionRun13.sizeDefined = false;
1610 // Set a known font description
1611 FontDescriptionRun fontDescriptionRun14;
1612 fontDescriptionRun14.characterRun.characterIndex = 166u;
1613 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
1614 fontDescriptionRun14.familyLength = fontLatin.size();
1615 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1616 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1617 fontDescriptionRun14.familyDefined = true;
1618 fontDescriptionRun14.weightDefined = false;
1619 fontDescriptionRun14.widthDefined = false;
1620 fontDescriptionRun14.slantDefined = false;
1621 fontDescriptionRun14.sizeDefined = false;
1623 // Set a known font description
1624 FontDescriptionRun fontDescriptionRun15;
1625 fontDescriptionRun15.characterRun.characterIndex = 178u;
1626 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
1627 fontDescriptionRun15.familyLength = fontArabic.size();
1628 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1629 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
1630 fontDescriptionRun15.familyDefined = true;
1631 fontDescriptionRun15.weightDefined = false;
1632 fontDescriptionRun15.widthDefined = false;
1633 fontDescriptionRun15.slantDefined = false;
1634 fontDescriptionRun15.sizeDefined = false;
1636 Vector<FontDescriptionRun> fontDescriptionRuns;
1637 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1638 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1639 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1640 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1641 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1642 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1643 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1644 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1645 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1646 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1647 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1648 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1649 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1650 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1651 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1652 Size textArea(100.f, 300.f);
1653 Size layoutSize(92.f, 380.f);
1656 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1657 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1658 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1659 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
1660 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1661 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1662 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1663 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1664 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
1665 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1666 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
1667 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
1668 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
1669 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
1670 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
1671 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
1672 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
1673 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
1676 struct LineRun line01 =
1688 struct LineRun line02 =
1700 struct LineRun line03 =
1712 struct LineRun line04 =
1724 struct LineRun line05 =
1736 struct LineRun line06 =
1748 struct LineRun line07 =
1760 struct LineRun line08 =
1772 struct LineRun line09 =
1784 struct LineRun line10 =
1796 struct LineRun line11 =
1808 struct LineRun line12 =
1820 struct LineRun line13 =
1832 struct LineRun line14 =
1844 struct LineRun line15 =
1856 struct LineRun line16 =
1868 struct LineRun line17 =
1880 struct LineRun line18 =
1892 struct LineRun line19 =
1904 Vector<LineRun> lines;
1905 lines.PushBack( line01 );
1906 lines.PushBack( line02 );
1907 lines.PushBack( line03 );
1908 lines.PushBack( line04 );
1909 lines.PushBack( line05 );
1910 lines.PushBack( line06 );
1911 lines.PushBack( line07 );
1912 lines.PushBack( line08 );
1913 lines.PushBack( line09 );
1914 lines.PushBack( line10 );
1915 lines.PushBack( line11 );
1916 lines.PushBack( line12 );
1917 lines.PushBack( line13 );
1918 lines.PushBack( line14 );
1919 lines.PushBack( line15 );
1920 lines.PushBack( line16 );
1921 lines.PushBack( line17 );
1922 lines.PushBack( line18 );
1923 lines.PushBack( line19 );
1925 LayoutTextData data =
1927 "Layout bidirectional text.",
1928 "Hello world demo שלום עולם.\n"
1929 "مرحبا بالعالم hello world שלום עולם\n"
1930 "שלום עולם hello world demo.\n"
1931 "hello world مرحبا بالعالم שלום עולם\n"
1932 "Hello world demo שלום עולם.\n"
1933 "שלום עולם hello world مرحبا بالعالم\n",
1936 fontDescriptionRuns.Begin(),
1942 LayoutEngine::MULTI_LINE_BOX,
1949 if( !LayoutTextTest( data ) )
1951 tet_result(TET_FAIL);
1954 tet_result(TET_PASS);
1958 int UtcDaliTextUpdateLayout02(void)
1960 ToolkitTestApplication application;
1961 tet_infoline(" UtcDaliTextUpdateLayout02");
1963 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
1965 const std::string fontLatin( "TizenSans" );
1966 const std::string fontHebrew( "TizenSansHebrew" );
1967 const std::string fontArabic( "TizenSansArabic" );
1969 // Set a known font description
1970 FontDescriptionRun fontDescriptionRun01;
1971 fontDescriptionRun01.characterRun.characterIndex = 0u;
1972 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1973 fontDescriptionRun01.familyLength = fontLatin.size();
1974 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1975 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1976 fontDescriptionRun01.familyDefined = true;
1977 fontDescriptionRun01.weightDefined = false;
1978 fontDescriptionRun01.widthDefined = false;
1979 fontDescriptionRun01.slantDefined = false;
1980 fontDescriptionRun01.sizeDefined = false;
1982 // Set a known font description
1983 FontDescriptionRun fontDescriptionRun02;
1984 fontDescriptionRun02.characterRun.characterIndex = 17u;
1985 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
1986 fontDescriptionRun02.familyLength = fontHebrew.size();
1987 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1988 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1989 fontDescriptionRun02.familyDefined = true;
1990 fontDescriptionRun02.weightDefined = false;
1991 fontDescriptionRun02.widthDefined = false;
1992 fontDescriptionRun02.slantDefined = false;
1993 fontDescriptionRun02.sizeDefined = false;
1995 // Set a known font description
1996 FontDescriptionRun fontDescriptionRun03;
1997 fontDescriptionRun03.characterRun.characterIndex = 28u;
1998 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
1999 fontDescriptionRun03.familyLength = fontArabic.size();
2000 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2001 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2002 fontDescriptionRun03.familyDefined = true;
2003 fontDescriptionRun03.weightDefined = false;
2004 fontDescriptionRun03.widthDefined = false;
2005 fontDescriptionRun03.slantDefined = false;
2006 fontDescriptionRun03.sizeDefined = false;
2008 // Set a known font description
2009 FontDescriptionRun fontDescriptionRun04;
2010 fontDescriptionRun04.characterRun.characterIndex = 42u;
2011 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2012 fontDescriptionRun04.familyLength = fontLatin.size();
2013 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2014 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2015 fontDescriptionRun04.familyDefined = true;
2016 fontDescriptionRun04.weightDefined = false;
2017 fontDescriptionRun04.widthDefined = false;
2018 fontDescriptionRun04.slantDefined = false;
2019 fontDescriptionRun04.sizeDefined = false;
2021 // Set a known font description
2022 FontDescriptionRun fontDescriptionRun05;
2023 fontDescriptionRun05.characterRun.characterIndex = 54u;
2024 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2025 fontDescriptionRun05.familyLength = fontHebrew.size();
2026 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2027 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2028 fontDescriptionRun05.familyDefined = true;
2029 fontDescriptionRun05.weightDefined = false;
2030 fontDescriptionRun05.widthDefined = false;
2031 fontDescriptionRun05.slantDefined = false;
2032 fontDescriptionRun05.sizeDefined = false;
2034 // Set a known font description
2035 FontDescriptionRun fontDescriptionRun06;
2036 fontDescriptionRun06.characterRun.characterIndex = 64u;
2037 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2038 fontDescriptionRun06.familyLength = fontHebrew.size();
2039 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2040 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2041 fontDescriptionRun06.familyDefined = true;
2042 fontDescriptionRun06.weightDefined = false;
2043 fontDescriptionRun06.widthDefined = false;
2044 fontDescriptionRun06.slantDefined = false;
2045 fontDescriptionRun06.sizeDefined = false;
2047 // Set a known font description
2048 FontDescriptionRun fontDescriptionRun07;
2049 fontDescriptionRun07.characterRun.characterIndex = 74u;
2050 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2051 fontDescriptionRun07.familyLength = fontLatin.size();
2052 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2053 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2054 fontDescriptionRun07.familyDefined = true;
2055 fontDescriptionRun07.weightDefined = false;
2056 fontDescriptionRun07.widthDefined = false;
2057 fontDescriptionRun07.slantDefined = false;
2058 fontDescriptionRun07.sizeDefined = false;
2060 // Set a known font description
2061 FontDescriptionRun fontDescriptionRun08;
2062 fontDescriptionRun08.characterRun.characterIndex = 92u;
2063 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2064 fontDescriptionRun08.familyLength = fontLatin.size();
2065 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2066 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2067 fontDescriptionRun08.familyDefined = true;
2068 fontDescriptionRun08.weightDefined = false;
2069 fontDescriptionRun08.widthDefined = false;
2070 fontDescriptionRun08.slantDefined = false;
2071 fontDescriptionRun08.sizeDefined = false;
2073 // Set a known font description
2074 FontDescriptionRun fontDescriptionRun09;
2075 fontDescriptionRun09.characterRun.characterIndex = 104u;
2076 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2077 fontDescriptionRun09.familyLength = fontArabic.size();
2078 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2079 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2080 fontDescriptionRun09.familyDefined = true;
2081 fontDescriptionRun09.weightDefined = false;
2082 fontDescriptionRun09.widthDefined = false;
2083 fontDescriptionRun09.slantDefined = false;
2084 fontDescriptionRun09.sizeDefined = false;
2086 // Set a known font description
2087 FontDescriptionRun fontDescriptionRun10;
2088 fontDescriptionRun10.characterRun.characterIndex = 118u;
2089 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2090 fontDescriptionRun10.familyLength = fontHebrew.size();
2091 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2092 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2093 fontDescriptionRun10.familyDefined = true;
2094 fontDescriptionRun10.weightDefined = false;
2095 fontDescriptionRun10.widthDefined = false;
2096 fontDescriptionRun10.slantDefined = false;
2097 fontDescriptionRun10.sizeDefined = false;
2099 // Set a known font description
2100 FontDescriptionRun fontDescriptionRun11;
2101 fontDescriptionRun11.characterRun.characterIndex = 128u;
2102 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2103 fontDescriptionRun11.familyLength = fontLatin.size();
2104 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2105 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2106 fontDescriptionRun11.familyDefined = true;
2107 fontDescriptionRun11.weightDefined = false;
2108 fontDescriptionRun11.widthDefined = false;
2109 fontDescriptionRun11.slantDefined = false;
2110 fontDescriptionRun11.sizeDefined = false;
2112 // Set a known font description
2113 FontDescriptionRun fontDescriptionRun12;
2114 fontDescriptionRun12.characterRun.characterIndex = 145u;
2115 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2116 fontDescriptionRun12.familyLength = fontHebrew.size();
2117 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2118 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2119 fontDescriptionRun12.familyDefined = true;
2120 fontDescriptionRun12.weightDefined = false;
2121 fontDescriptionRun12.widthDefined = false;
2122 fontDescriptionRun12.slantDefined = false;
2123 fontDescriptionRun12.sizeDefined = false;
2125 // Set a known font description
2126 FontDescriptionRun fontDescriptionRun13;
2127 fontDescriptionRun13.characterRun.characterIndex = 156u;
2128 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2129 fontDescriptionRun13.familyLength = fontHebrew.size();
2130 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2131 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2132 fontDescriptionRun13.familyDefined = true;
2133 fontDescriptionRun13.weightDefined = false;
2134 fontDescriptionRun13.widthDefined = false;
2135 fontDescriptionRun13.slantDefined = false;
2136 fontDescriptionRun13.sizeDefined = false;
2138 // Set a known font description
2139 FontDescriptionRun fontDescriptionRun14;
2140 fontDescriptionRun14.characterRun.characterIndex = 166u;
2141 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2142 fontDescriptionRun14.familyLength = fontLatin.size();
2143 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2144 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2145 fontDescriptionRun14.familyDefined = true;
2146 fontDescriptionRun14.weightDefined = false;
2147 fontDescriptionRun14.widthDefined = false;
2148 fontDescriptionRun14.slantDefined = false;
2149 fontDescriptionRun14.sizeDefined = false;
2151 // Set a known font description
2152 FontDescriptionRun fontDescriptionRun15;
2153 fontDescriptionRun15.characterRun.characterIndex = 178u;
2154 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2155 fontDescriptionRun15.familyLength = fontArabic.size();
2156 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2157 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2158 fontDescriptionRun15.familyDefined = true;
2159 fontDescriptionRun15.weightDefined = false;
2160 fontDescriptionRun15.widthDefined = false;
2161 fontDescriptionRun15.slantDefined = false;
2162 fontDescriptionRun15.sizeDefined = false;
2164 Vector<FontDescriptionRun> fontDescriptionRuns;
2165 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2166 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2167 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2168 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2169 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2170 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2171 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2172 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2173 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2174 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2175 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2176 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2177 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2178 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2179 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2180 Size textArea(100.f, 300.f);
2181 Size layoutSize(92.f, 380.f);
2184 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2185 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2186 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2187 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2188 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2189 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2190 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2191 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2192 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
2193 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2194 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2195 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2196 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2197 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2198 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2199 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2200 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2201 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2204 struct LineRun line01 =
2216 struct LineRun line02 =
2228 struct LineRun line03 =
2240 struct LineRun line04 =
2252 struct LineRun line05 =
2264 struct LineRun line06 =
2276 struct LineRun line07 =
2288 struct LineRun line08 =
2300 struct LineRun line09 =
2312 struct LineRun line10 =
2324 struct LineRun line11 =
2336 struct LineRun line12 =
2348 struct LineRun line13 =
2360 struct LineRun line14 =
2372 struct LineRun line15 =
2384 struct LineRun line16 =
2396 struct LineRun line17 =
2408 struct LineRun line18 =
2420 struct LineRun line19 =
2432 Vector<LineRun> lines;
2433 lines.PushBack( line01 );
2434 lines.PushBack( line02 );
2435 lines.PushBack( line03 );
2436 lines.PushBack( line04 );
2437 lines.PushBack( line05 );
2438 lines.PushBack( line06 );
2439 lines.PushBack( line07 );
2440 lines.PushBack( line08 );
2441 lines.PushBack( line09 );
2442 lines.PushBack( line10 );
2443 lines.PushBack( line11 );
2444 lines.PushBack( line12 );
2445 lines.PushBack( line13 );
2446 lines.PushBack( line14 );
2447 lines.PushBack( line15 );
2448 lines.PushBack( line16 );
2449 lines.PushBack( line17 );
2450 lines.PushBack( line18 );
2451 lines.PushBack( line19 );
2453 LayoutTextData data =
2455 "Layout bidirectional text.",
2456 "Hello world demo שלום עולם.\n"
2457 "مرحبا بالعالم hello world שלום עולם\n"
2458 "שלום עולם hello world demo.\n"
2459 "hello world مرحبا بالعالم שלום עולם\n"
2460 "Hello world demo שלום עולם.\n"
2461 "שלום עולם hello world مرحبا بالعالم\n",
2464 fontDescriptionRuns.Begin(),
2470 LayoutEngine::MULTI_LINE_BOX,
2477 if( !LayoutTextTest( data ) )
2479 tet_result(TET_FAIL);
2482 tet_result(TET_PASS);
2486 int UtcDaliTextUpdateLayout03(void)
2488 ToolkitTestApplication application;
2489 tet_infoline(" UtcDaliTextUpdateLayout03");
2491 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2493 const std::string fontLatin( "TizenSans" );
2494 const std::string fontHebrew( "TizenSansHebrew" );
2495 const std::string fontArabic( "TizenSansArabic" );
2497 // Set a known font description
2498 FontDescriptionRun fontDescriptionRun01;
2499 fontDescriptionRun01.characterRun.characterIndex = 0u;
2500 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2501 fontDescriptionRun01.familyLength = fontLatin.size();
2502 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2503 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2504 fontDescriptionRun01.familyDefined = true;
2505 fontDescriptionRun01.weightDefined = false;
2506 fontDescriptionRun01.widthDefined = false;
2507 fontDescriptionRun01.slantDefined = false;
2508 fontDescriptionRun01.sizeDefined = false;
2510 // Set a known font description
2511 FontDescriptionRun fontDescriptionRun02;
2512 fontDescriptionRun02.characterRun.characterIndex = 17u;
2513 fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
2514 fontDescriptionRun02.familyLength = fontHebrew.size();
2515 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2516 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2517 fontDescriptionRun02.familyDefined = true;
2518 fontDescriptionRun02.weightDefined = false;
2519 fontDescriptionRun02.widthDefined = false;
2520 fontDescriptionRun02.slantDefined = false;
2521 fontDescriptionRun02.sizeDefined = false;
2523 // Set a known font description
2524 FontDescriptionRun fontDescriptionRun03;
2525 fontDescriptionRun03.characterRun.characterIndex = 28u;
2526 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
2527 fontDescriptionRun03.familyLength = fontArabic.size();
2528 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2529 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
2530 fontDescriptionRun03.familyDefined = true;
2531 fontDescriptionRun03.weightDefined = false;
2532 fontDescriptionRun03.widthDefined = false;
2533 fontDescriptionRun03.slantDefined = false;
2534 fontDescriptionRun03.sizeDefined = false;
2536 // Set a known font description
2537 FontDescriptionRun fontDescriptionRun04;
2538 fontDescriptionRun04.characterRun.characterIndex = 42u;
2539 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
2540 fontDescriptionRun04.familyLength = fontLatin.size();
2541 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2542 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
2543 fontDescriptionRun04.familyDefined = true;
2544 fontDescriptionRun04.weightDefined = false;
2545 fontDescriptionRun04.widthDefined = false;
2546 fontDescriptionRun04.slantDefined = false;
2547 fontDescriptionRun04.sizeDefined = false;
2549 // Set a known font description
2550 FontDescriptionRun fontDescriptionRun05;
2551 fontDescriptionRun05.characterRun.characterIndex = 54u;
2552 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
2553 fontDescriptionRun05.familyLength = fontHebrew.size();
2554 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2555 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
2556 fontDescriptionRun05.familyDefined = true;
2557 fontDescriptionRun05.weightDefined = false;
2558 fontDescriptionRun05.widthDefined = false;
2559 fontDescriptionRun05.slantDefined = false;
2560 fontDescriptionRun05.sizeDefined = false;
2562 // Set a known font description
2563 FontDescriptionRun fontDescriptionRun06;
2564 fontDescriptionRun06.characterRun.characterIndex = 64u;
2565 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2566 fontDescriptionRun06.familyLength = fontHebrew.size();
2567 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2568 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2569 fontDescriptionRun06.familyDefined = true;
2570 fontDescriptionRun06.weightDefined = false;
2571 fontDescriptionRun06.widthDefined = false;
2572 fontDescriptionRun06.slantDefined = false;
2573 fontDescriptionRun06.sizeDefined = false;
2575 // Set a known font description
2576 FontDescriptionRun fontDescriptionRun07;
2577 fontDescriptionRun07.characterRun.characterIndex = 74u;
2578 fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
2579 fontDescriptionRun07.familyLength = fontLatin.size();
2580 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2581 memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
2582 fontDescriptionRun07.familyDefined = true;
2583 fontDescriptionRun07.weightDefined = false;
2584 fontDescriptionRun07.widthDefined = false;
2585 fontDescriptionRun07.slantDefined = false;
2586 fontDescriptionRun07.sizeDefined = false;
2588 // Set a known font description
2589 FontDescriptionRun fontDescriptionRun08;
2590 fontDescriptionRun08.characterRun.characterIndex = 92u;
2591 fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
2592 fontDescriptionRun08.familyLength = fontLatin.size();
2593 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2594 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2595 fontDescriptionRun08.familyDefined = true;
2596 fontDescriptionRun08.weightDefined = false;
2597 fontDescriptionRun08.widthDefined = false;
2598 fontDescriptionRun08.slantDefined = false;
2599 fontDescriptionRun08.sizeDefined = false;
2601 // Set a known font description
2602 FontDescriptionRun fontDescriptionRun09;
2603 fontDescriptionRun09.characterRun.characterIndex = 104u;
2604 fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
2605 fontDescriptionRun09.familyLength = fontArabic.size();
2606 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2607 memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
2608 fontDescriptionRun09.familyDefined = true;
2609 fontDescriptionRun09.weightDefined = false;
2610 fontDescriptionRun09.widthDefined = false;
2611 fontDescriptionRun09.slantDefined = false;
2612 fontDescriptionRun09.sizeDefined = false;
2614 // Set a known font description
2615 FontDescriptionRun fontDescriptionRun10;
2616 fontDescriptionRun10.characterRun.characterIndex = 118u;
2617 fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
2618 fontDescriptionRun10.familyLength = fontHebrew.size();
2619 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2620 memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
2621 fontDescriptionRun10.familyDefined = true;
2622 fontDescriptionRun10.weightDefined = false;
2623 fontDescriptionRun10.widthDefined = false;
2624 fontDescriptionRun10.slantDefined = false;
2625 fontDescriptionRun10.sizeDefined = false;
2627 // Set a known font description
2628 FontDescriptionRun fontDescriptionRun11;
2629 fontDescriptionRun11.characterRun.characterIndex = 128u;
2630 fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
2631 fontDescriptionRun11.familyLength = fontLatin.size();
2632 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2633 memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
2634 fontDescriptionRun11.familyDefined = true;
2635 fontDescriptionRun11.weightDefined = false;
2636 fontDescriptionRun11.widthDefined = false;
2637 fontDescriptionRun11.slantDefined = false;
2638 fontDescriptionRun11.sizeDefined = false;
2640 // Set a known font description
2641 FontDescriptionRun fontDescriptionRun12;
2642 fontDescriptionRun12.characterRun.characterIndex = 145u;
2643 fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
2644 fontDescriptionRun12.familyLength = fontHebrew.size();
2645 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2646 memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
2647 fontDescriptionRun12.familyDefined = true;
2648 fontDescriptionRun12.weightDefined = false;
2649 fontDescriptionRun12.widthDefined = false;
2650 fontDescriptionRun12.slantDefined = false;
2651 fontDescriptionRun12.sizeDefined = false;
2653 // Set a known font description
2654 FontDescriptionRun fontDescriptionRun13;
2655 fontDescriptionRun13.characterRun.characterIndex = 156u;
2656 fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
2657 fontDescriptionRun13.familyLength = fontHebrew.size();
2658 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2659 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2660 fontDescriptionRun13.familyDefined = true;
2661 fontDescriptionRun13.weightDefined = false;
2662 fontDescriptionRun13.widthDefined = false;
2663 fontDescriptionRun13.slantDefined = false;
2664 fontDescriptionRun13.sizeDefined = false;
2666 // Set a known font description
2667 FontDescriptionRun fontDescriptionRun14;
2668 fontDescriptionRun14.characterRun.characterIndex = 166u;
2669 fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
2670 fontDescriptionRun14.familyLength = fontLatin.size();
2671 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2672 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2673 fontDescriptionRun14.familyDefined = true;
2674 fontDescriptionRun14.weightDefined = false;
2675 fontDescriptionRun14.widthDefined = false;
2676 fontDescriptionRun14.slantDefined = false;
2677 fontDescriptionRun14.sizeDefined = false;
2679 // Set a known font description
2680 FontDescriptionRun fontDescriptionRun15;
2681 fontDescriptionRun15.characterRun.characterIndex = 178u;
2682 fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
2683 fontDescriptionRun15.familyLength = fontArabic.size();
2684 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2685 memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
2686 fontDescriptionRun15.familyDefined = true;
2687 fontDescriptionRun15.weightDefined = false;
2688 fontDescriptionRun15.widthDefined = false;
2689 fontDescriptionRun15.slantDefined = false;
2690 fontDescriptionRun15.sizeDefined = false;
2692 Vector<FontDescriptionRun> fontDescriptionRuns;
2693 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2694 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2695 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2696 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2697 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2698 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2699 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2700 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2701 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2702 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2703 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2704 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2705 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2706 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2707 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2708 Size textArea(100.f, 300.f);
2709 Size layoutSize(92.f, 380.f);
2712 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2713 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2714 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2715 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
2716 0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2717 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2718 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2719 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2720 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
2721 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2722 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
2723 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
2724 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
2725 0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
2726 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
2727 1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
2728 1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
2729 0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
2732 struct LineRun line01 =
2744 struct LineRun line02 =
2756 struct LineRun line03 =
2768 struct LineRun line04 =
2780 struct LineRun line05 =
2792 struct LineRun line06 =
2804 struct LineRun line07 =
2816 struct LineRun line08 =
2828 struct LineRun line09 =
2840 struct LineRun line10 =
2852 struct LineRun line11 =
2864 struct LineRun line12 =
2876 struct LineRun line13 =
2888 struct LineRun line14 =
2900 struct LineRun line15 =
2912 struct LineRun line16 =
2924 struct LineRun line17 =
2936 struct LineRun line18 =
2948 struct LineRun line19 =
2961 Vector<LineRun> lines;
2962 lines.PushBack( line01 );
2963 lines.PushBack( line02 );
2964 lines.PushBack( line03 );
2965 lines.PushBack( line04 );
2966 lines.PushBack( line05 );
2967 lines.PushBack( line06 );
2968 lines.PushBack( line07 );
2969 lines.PushBack( line08 );
2970 lines.PushBack( line09 );
2971 lines.PushBack( line10 );
2972 lines.PushBack( line11 );
2973 lines.PushBack( line12 );
2974 lines.PushBack( line13 );
2975 lines.PushBack( line14 );
2976 lines.PushBack( line15 );
2977 lines.PushBack( line16 );
2978 lines.PushBack( line17 );
2979 lines.PushBack( line18 );
2980 lines.PushBack( line19 );
2982 LayoutTextData data =
2984 "Layout bidirectional text.",
2985 "Hello world demo שלום עולם.\n"
2986 "مرحبا بالعالم hello world שלום עולם\n"
2987 "שלום עולם hello world demo.\n"
2988 "hello world مرحبا بالعالم שלום עולם\n"
2989 "Hello world demo שלום עולם.\n"
2990 "שלום עולם hello world مرحبا بالعالم\n",
2993 fontDescriptionRuns.Begin(),
2999 LayoutEngine::MULTI_LINE_BOX,
3006 if( !LayoutTextTest( data ) )
3008 tet_result(TET_FAIL);
3011 tet_result(TET_PASS);
3015 int UtcDaliTextLayoutEllipsis01(void)
3017 ToolkitTestApplication application;
3018 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3020 // Layout single-line LTR text with ellipsis.
3022 const std::string fontLatin( "TizenSans" );
3024 // Set a known font description
3025 FontDescriptionRun fontDescriptionRun01;
3026 fontDescriptionRun01.characterRun.characterIndex = 0u;
3027 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3028 fontDescriptionRun01.familyLength = fontLatin.size();
3029 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3030 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3031 fontDescriptionRun01.familyDefined = true;
3032 fontDescriptionRun01.weightDefined = false;
3033 fontDescriptionRun01.widthDefined = false;
3034 fontDescriptionRun01.slantDefined = false;
3035 fontDescriptionRun01.sizeDefined = false;
3037 Vector<FontDescriptionRun> fontDescriptionRuns;
3038 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3040 struct LineRun line01 =
3052 Vector<LineRun> lines;
3053 lines.PushBack( line01 );
3057 1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f, 83.f, -13.f,
3060 Size textArea( 100.f, 50.f );
3061 Size layoutSize( 100.f, 20.f );
3063 LayoutTextData data =
3065 "Layout single-line LTR text with ellipsis.",
3066 "Hello world demo hello world demo hello world demo.",
3069 fontDescriptionRuns.Begin(),
3075 LayoutEngine::SINGLE_LINE_BOX,
3082 if( !LayoutTextTest( data ) )
3084 tet_result(TET_FAIL);
3087 tet_result(TET_PASS);
3091 int UtcDaliTextLayoutEllipsis02(void)
3093 ToolkitTestApplication application;
3094 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3096 // Layout multi-line LTR text with ellipsis.
3098 const std::string fontLatin( "TizenSans" );
3100 // Set a known font description
3101 FontDescriptionRun fontDescriptionRun01;
3102 fontDescriptionRun01.characterRun.characterIndex = 0u;
3103 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3104 fontDescriptionRun01.familyLength = fontLatin.size();
3105 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3106 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3107 fontDescriptionRun01.familyDefined = true;
3108 fontDescriptionRun01.weightDefined = false;
3109 fontDescriptionRun01.widthDefined = false;
3110 fontDescriptionRun01.slantDefined = false;
3111 fontDescriptionRun01.sizeDefined = false;
3113 Vector<FontDescriptionRun> fontDescriptionRuns;
3114 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3116 struct LineRun line01 =
3128 struct LineRun line02 =
3140 Vector<LineRun> lines;
3141 lines.PushBack( line01 );
3142 lines.PushBack( line02 );
3146 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,
3147 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,
3150 Size textArea( 100.f, 50.f );
3151 Size layoutSize( 100.f, 60.f );
3153 LayoutTextData data =
3155 "Layout multi-line LTR text with ellipsis.",
3156 "Hello world demo hello world demo hello world demo.",
3159 fontDescriptionRuns.Begin(),
3165 LayoutEngine::MULTI_LINE_BOX,
3172 if( !LayoutTextTest( data ) )
3174 tet_result(TET_FAIL);
3177 tet_result(TET_PASS);
3181 int UtcDaliTextLayoutEllipsis03(void)
3183 ToolkitTestApplication application;
3184 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3186 // Layout single-line RTL text with ellipsis.
3188 const std::string fontHebrew( "TizenSansHebrew" );
3189 const std::string fontArabic( "TizenSansArabic" );
3191 // Set a known font description
3192 FontDescriptionRun fontDescriptionRun01;
3193 fontDescriptionRun01.characterRun.characterIndex = 0u;
3194 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3195 fontDescriptionRun01.familyLength = fontHebrew.size();
3196 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3197 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3198 fontDescriptionRun01.familyDefined = true;
3199 fontDescriptionRun01.weightDefined = false;
3200 fontDescriptionRun01.widthDefined = false;
3201 fontDescriptionRun01.slantDefined = false;
3202 fontDescriptionRun01.sizeDefined = false;
3204 FontDescriptionRun fontDescriptionRun02;
3205 fontDescriptionRun02.characterRun.characterIndex = 10u;
3206 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3207 fontDescriptionRun02.familyLength = fontArabic.size();
3208 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3209 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3210 fontDescriptionRun02.familyDefined = true;
3211 fontDescriptionRun02.weightDefined = false;
3212 fontDescriptionRun02.widthDefined = false;
3213 fontDescriptionRun02.slantDefined = false;
3214 fontDescriptionRun02.sizeDefined = false;
3216 FontDescriptionRun fontDescriptionRun03;
3217 fontDescriptionRun03.characterRun.characterIndex = 24u;
3218 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3219 fontDescriptionRun03.familyLength = fontHebrew.size();
3220 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3221 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3222 fontDescriptionRun03.familyDefined = true;
3223 fontDescriptionRun03.weightDefined = false;
3224 fontDescriptionRun03.widthDefined = false;
3225 fontDescriptionRun03.slantDefined = false;
3226 fontDescriptionRun03.sizeDefined = false;
3228 FontDescriptionRun fontDescriptionRun04;
3229 fontDescriptionRun04.characterRun.characterIndex = 34u;
3230 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3231 fontDescriptionRun04.familyLength = fontArabic.size();
3232 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3233 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3234 fontDescriptionRun04.familyDefined = true;
3235 fontDescriptionRun04.weightDefined = false;
3236 fontDescriptionRun04.widthDefined = false;
3237 fontDescriptionRun04.slantDefined = false;
3238 fontDescriptionRun04.sizeDefined = false;
3240 FontDescriptionRun fontDescriptionRun05;
3241 fontDescriptionRun05.characterRun.characterIndex = 48u;
3242 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3243 fontDescriptionRun05.familyLength = fontHebrew.size();
3244 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3245 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3246 fontDescriptionRun05.familyDefined = true;
3247 fontDescriptionRun05.weightDefined = false;
3248 fontDescriptionRun05.widthDefined = false;
3249 fontDescriptionRun05.slantDefined = false;
3250 fontDescriptionRun05.sizeDefined = false;
3252 FontDescriptionRun fontDescriptionRun06;
3253 fontDescriptionRun06.characterRun.characterIndex = 58u;
3254 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3255 fontDescriptionRun06.familyLength = fontArabic.size();
3256 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3257 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3258 fontDescriptionRun06.familyDefined = true;
3259 fontDescriptionRun06.weightDefined = false;
3260 fontDescriptionRun06.widthDefined = false;
3261 fontDescriptionRun06.slantDefined = false;
3262 fontDescriptionRun06.sizeDefined = false;
3264 Vector<FontDescriptionRun> fontDescriptionRuns;
3265 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3266 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3267 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3268 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3269 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3270 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3272 struct LineRun line01 =
3284 Vector<LineRun> lines;
3285 lines.PushBack( line01 );
3289 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,
3292 Size textArea( 100.f, 50.f );
3293 Size layoutSize( 100.f, 20.f );
3295 LayoutTextData data =
3297 "Layout single-line RTL text with ellipsis.",
3298 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3301 fontDescriptionRuns.Begin(),
3307 LayoutEngine::SINGLE_LINE_BOX,
3314 if( !LayoutTextTest( data ) )
3316 tet_result(TET_FAIL);
3319 tet_result(TET_PASS);
3323 int UtcDaliTextLayoutEllipsis04(void)
3325 ToolkitTestApplication application;
3326 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3328 // Layout multi-line RTL text with ellipsis.
3330 const std::string fontHebrew( "TizenSansHebrew" );
3331 const std::string fontArabic( "TizenSansArabic" );
3333 // Set a known font description
3334 FontDescriptionRun fontDescriptionRun01;
3335 fontDescriptionRun01.characterRun.characterIndex = 0u;
3336 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3337 fontDescriptionRun01.familyLength = fontHebrew.size();
3338 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3339 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3340 fontDescriptionRun01.familyDefined = true;
3341 fontDescriptionRun01.weightDefined = false;
3342 fontDescriptionRun01.widthDefined = false;
3343 fontDescriptionRun01.slantDefined = false;
3344 fontDescriptionRun01.sizeDefined = false;
3346 FontDescriptionRun fontDescriptionRun02;
3347 fontDescriptionRun02.characterRun.characterIndex = 10u;
3348 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3349 fontDescriptionRun02.familyLength = fontArabic.size();
3350 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3351 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3352 fontDescriptionRun02.familyDefined = true;
3353 fontDescriptionRun02.weightDefined = false;
3354 fontDescriptionRun02.widthDefined = false;
3355 fontDescriptionRun02.slantDefined = false;
3356 fontDescriptionRun02.sizeDefined = false;
3358 FontDescriptionRun fontDescriptionRun03;
3359 fontDescriptionRun03.characterRun.characterIndex = 24u;
3360 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3361 fontDescriptionRun03.familyLength = fontHebrew.size();
3362 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3363 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3364 fontDescriptionRun03.familyDefined = true;
3365 fontDescriptionRun03.weightDefined = false;
3366 fontDescriptionRun03.widthDefined = false;
3367 fontDescriptionRun03.slantDefined = false;
3368 fontDescriptionRun03.sizeDefined = false;
3370 FontDescriptionRun fontDescriptionRun04;
3371 fontDescriptionRun04.characterRun.characterIndex = 34u;
3372 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3373 fontDescriptionRun04.familyLength = fontArabic.size();
3374 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3375 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3376 fontDescriptionRun04.familyDefined = true;
3377 fontDescriptionRun04.weightDefined = false;
3378 fontDescriptionRun04.widthDefined = false;
3379 fontDescriptionRun04.slantDefined = false;
3380 fontDescriptionRun04.sizeDefined = false;
3382 FontDescriptionRun fontDescriptionRun05;
3383 fontDescriptionRun05.characterRun.characterIndex = 48u;
3384 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3385 fontDescriptionRun05.familyLength = fontHebrew.size();
3386 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3387 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3388 fontDescriptionRun05.familyDefined = true;
3389 fontDescriptionRun05.weightDefined = false;
3390 fontDescriptionRun05.widthDefined = false;
3391 fontDescriptionRun05.slantDefined = false;
3392 fontDescriptionRun05.sizeDefined = false;
3394 FontDescriptionRun fontDescriptionRun06;
3395 fontDescriptionRun06.characterRun.characterIndex = 58u;
3396 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3397 fontDescriptionRun06.familyLength = fontArabic.size();
3398 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3399 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3400 fontDescriptionRun06.familyDefined = true;
3401 fontDescriptionRun06.weightDefined = false;
3402 fontDescriptionRun06.widthDefined = false;
3403 fontDescriptionRun06.slantDefined = false;
3404 fontDescriptionRun06.sizeDefined = false;
3406 Vector<FontDescriptionRun> fontDescriptionRuns;
3407 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3408 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3409 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3410 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3411 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3412 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3414 struct LineRun line01 =
3426 struct LineRun line02 =
3438 Vector<LineRun> lines;
3439 lines.PushBack( line01 );
3440 lines.PushBack( line02 );
3444 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,
3445 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,
3448 Size textArea( 100.f, 50.f );
3449 Size layoutSize( 100.f, 60.f );
3451 LayoutTextData data =
3453 "Layout single-line RTL text with ellipsis.",
3454 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3457 fontDescriptionRuns.Begin(),
3463 LayoutEngine::MULTI_LINE_BOX,
3470 if( !LayoutTextTest( data ) )
3472 tet_result(TET_FAIL);
3475 tet_result(TET_PASS);
3479 int UtcDaliTextReorderLayout01(void)
3481 ToolkitTestApplication application;
3482 tet_infoline(" UtcDaliTextReorderLayout01");
3484 // Reorder lines. No right to left characters.
3486 const std::string fontLatin( "TizenSans" );
3488 // Set a known font description
3489 FontDescriptionRun fontDescriptionRun01;
3490 fontDescriptionRun01.characterRun.characterIndex = 0u;
3491 fontDescriptionRun01.characterRun.numberOfCharacters = 11u;
3492 fontDescriptionRun01.familyLength = fontLatin.size();
3493 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3494 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3495 fontDescriptionRun01.familyDefined = true;
3496 fontDescriptionRun01.weightDefined = false;
3497 fontDescriptionRun01.widthDefined = false;
3498 fontDescriptionRun01.slantDefined = false;
3499 fontDescriptionRun01.sizeDefined = false;
3501 Vector<FontDescriptionRun> fontDescriptionRuns;
3502 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3506 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,
3509 Size textArea( 100.f, 300.f );
3511 ReLayoutRightToLeftLinesData data =
3513 "Text with no right to left text.",
3517 fontDescriptionRuns.Begin(),
3524 if( !ReLayoutRightToLeftLinesTest( data ) )
3526 tet_result(TET_FAIL);
3529 tet_result(TET_PASS);
3533 int UtcDaliTextReorderLayout02(void)
3535 ToolkitTestApplication application;
3536 tet_infoline(" UtcDaliTextReorderLayout02");
3538 // Reorder lines of the first paragraph.
3540 const std::string fontHebrew( "TizenSansHebrew" );
3541 const std::string fontArabic( "TizenSansArabic" );
3543 // Set a known font description
3544 FontDescriptionRun fontDescriptionRun01;
3545 fontDescriptionRun01.characterRun.characterIndex = 0u;
3546 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3547 fontDescriptionRun01.familyLength = fontHebrew.size();
3548 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3549 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3550 fontDescriptionRun01.familyDefined = true;
3551 fontDescriptionRun01.weightDefined = false;
3552 fontDescriptionRun01.widthDefined = false;
3553 fontDescriptionRun01.slantDefined = false;
3554 fontDescriptionRun01.sizeDefined = false;
3556 FontDescriptionRun fontDescriptionRun02;
3557 fontDescriptionRun02.characterRun.characterIndex = 10u;
3558 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3559 fontDescriptionRun02.familyLength = fontArabic.size();
3560 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3561 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3562 fontDescriptionRun02.familyDefined = true;
3563 fontDescriptionRun02.weightDefined = false;
3564 fontDescriptionRun02.widthDefined = false;
3565 fontDescriptionRun02.slantDefined = false;
3566 fontDescriptionRun02.sizeDefined = false;
3568 FontDescriptionRun fontDescriptionRun03;
3569 fontDescriptionRun03.characterRun.characterIndex = 24u;
3570 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3571 fontDescriptionRun03.familyLength = fontArabic.size();
3572 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3573 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3574 fontDescriptionRun03.familyDefined = true;
3575 fontDescriptionRun03.weightDefined = false;
3576 fontDescriptionRun03.widthDefined = false;
3577 fontDescriptionRun03.slantDefined = false;
3578 fontDescriptionRun03.sizeDefined = false;
3580 FontDescriptionRun fontDescriptionRun04;
3581 fontDescriptionRun04.characterRun.characterIndex = 38u;
3582 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
3583 fontDescriptionRun04.familyLength = fontHebrew.size();
3584 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3585 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
3586 fontDescriptionRun04.familyDefined = true;
3587 fontDescriptionRun04.weightDefined = false;
3588 fontDescriptionRun04.widthDefined = false;
3589 fontDescriptionRun04.slantDefined = false;
3590 fontDescriptionRun04.sizeDefined = false;
3592 FontDescriptionRun fontDescriptionRun05;
3593 fontDescriptionRun05.characterRun.characterIndex = 48u;
3594 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3595 fontDescriptionRun05.familyLength = fontHebrew.size();
3596 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3597 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3598 fontDescriptionRun05.familyDefined = true;
3599 fontDescriptionRun05.weightDefined = false;
3600 fontDescriptionRun05.widthDefined = false;
3601 fontDescriptionRun05.slantDefined = false;
3602 fontDescriptionRun05.sizeDefined = false;
3604 FontDescriptionRun fontDescriptionRun06;
3605 fontDescriptionRun06.characterRun.characterIndex = 58u;
3606 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3607 fontDescriptionRun06.familyLength = fontArabic.size();
3608 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3609 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3610 fontDescriptionRun06.familyDefined = true;
3611 fontDescriptionRun06.weightDefined = false;
3612 fontDescriptionRun06.widthDefined = false;
3613 fontDescriptionRun06.slantDefined = false;
3614 fontDescriptionRun06.sizeDefined = false;
3616 Vector<FontDescriptionRun> fontDescriptionRuns;
3617 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3618 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3619 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3620 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3621 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3622 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3626 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,
3627 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,
3628 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,
3629 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
3630 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,
3631 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,
3634 Size textArea( 100.f, 300.f );
3636 ReLayoutRightToLeftLinesData data =
3638 "Paragraphs with right to left text.",
3639 "שלום עולם مرحبا بالعالم\n"
3640 "مرحبا بالعالم שלום עולם\n"
3641 "שלום עולם مرحبا بالعالم.",
3644 fontDescriptionRuns.Begin(),
3651 if( !ReLayoutRightToLeftLinesTest( data ) )
3653 tet_result(TET_FAIL);
3656 tet_result(TET_PASS);
3660 int UtcDaliTextReorderLayout03(void)
3662 ToolkitTestApplication application;
3663 tet_infoline(" UtcDaliTextReorderLayout03");
3665 // Reorder lines of the mid paragraph.
3667 const std::string fontHebrew( "TizenSansHebrew" );
3668 const std::string fontArabic( "TizenSansArabic" );
3670 // Set a known font description
3671 FontDescriptionRun fontDescriptionRun01;
3672 fontDescriptionRun01.characterRun.characterIndex = 0u;
3673 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3674 fontDescriptionRun01.familyLength = fontHebrew.size();
3675 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3676 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3677 fontDescriptionRun01.familyDefined = true;
3678 fontDescriptionRun01.weightDefined = false;
3679 fontDescriptionRun01.widthDefined = false;
3680 fontDescriptionRun01.slantDefined = false;
3681 fontDescriptionRun01.sizeDefined = false;
3683 FontDescriptionRun fontDescriptionRun02;
3684 fontDescriptionRun02.characterRun.characterIndex = 10u;
3685 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3686 fontDescriptionRun02.familyLength = fontArabic.size();
3687 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3688 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3689 fontDescriptionRun02.familyDefined = true;
3690 fontDescriptionRun02.weightDefined = false;
3691 fontDescriptionRun02.widthDefined = false;
3692 fontDescriptionRun02.slantDefined = false;
3693 fontDescriptionRun02.sizeDefined = false;
3695 FontDescriptionRun fontDescriptionRun03;
3696 fontDescriptionRun03.characterRun.characterIndex = 24u;
3697 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3698 fontDescriptionRun03.familyLength = fontArabic.size();
3699 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3700 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3701 fontDescriptionRun03.familyDefined = true;
3702 fontDescriptionRun03.weightDefined = false;
3703 fontDescriptionRun03.widthDefined = false;
3704 fontDescriptionRun03.slantDefined = false;
3705 fontDescriptionRun03.sizeDefined = false;
3707 FontDescriptionRun fontDescriptionRun04;
3708 fontDescriptionRun04.characterRun.characterIndex = 38u;
3709 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
3710 fontDescriptionRun04.familyLength = fontHebrew.size();
3711 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3712 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
3713 fontDescriptionRun04.familyDefined = true;
3714 fontDescriptionRun04.weightDefined = false;
3715 fontDescriptionRun04.widthDefined = false;
3716 fontDescriptionRun04.slantDefined = false;
3717 fontDescriptionRun04.sizeDefined = false;
3719 FontDescriptionRun fontDescriptionRun05;
3720 fontDescriptionRun05.characterRun.characterIndex = 48u;
3721 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3722 fontDescriptionRun05.familyLength = fontHebrew.size();
3723 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3724 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3725 fontDescriptionRun05.familyDefined = true;
3726 fontDescriptionRun05.weightDefined = false;
3727 fontDescriptionRun05.widthDefined = false;
3728 fontDescriptionRun05.slantDefined = false;
3729 fontDescriptionRun05.sizeDefined = false;
3731 FontDescriptionRun fontDescriptionRun06;
3732 fontDescriptionRun06.characterRun.characterIndex = 58u;
3733 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3734 fontDescriptionRun06.familyLength = fontArabic.size();
3735 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3736 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3737 fontDescriptionRun06.familyDefined = true;
3738 fontDescriptionRun06.weightDefined = false;
3739 fontDescriptionRun06.widthDefined = false;
3740 fontDescriptionRun06.slantDefined = false;
3741 fontDescriptionRun06.sizeDefined = false;
3743 Vector<FontDescriptionRun> fontDescriptionRuns;
3744 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3745 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3746 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3747 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3748 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3749 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3753 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,
3754 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,
3755 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,
3756 22.f, -10.f, 17.f, -10.f, 10.f, -13.f, 1.f, -10.f, 0.f, -0.f,
3757 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,
3758 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,
3761 Size textArea( 100.f, 300.f );
3763 ReLayoutRightToLeftLinesData data =
3765 "Paragraphs with right to left text.",
3766 "שלום עולם مرحبا بالعالم\n"
3767 "مرحبا بالعالم שלום עולם\n"
3768 "שלום עולם مرحبا بالعالم.",
3771 fontDescriptionRuns.Begin(),
3778 if( !ReLayoutRightToLeftLinesTest( data ) )
3780 tet_result(TET_FAIL);
3783 tet_result(TET_PASS);
3787 int UtcDaliTextReorderLayout04(void)
3789 ToolkitTestApplication application;
3790 tet_infoline(" UtcDaliTextReorderLayout04");
3792 // Reorder lines of the last paragraph.
3794 const std::string fontHebrew( "TizenSansHebrew" );
3795 const std::string fontArabic( "TizenSansArabic" );
3797 // Set a known font description
3798 FontDescriptionRun fontDescriptionRun01;
3799 fontDescriptionRun01.characterRun.characterIndex = 0u;
3800 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3801 fontDescriptionRun01.familyLength = fontHebrew.size();
3802 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3803 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3804 fontDescriptionRun01.familyDefined = true;
3805 fontDescriptionRun01.weightDefined = false;
3806 fontDescriptionRun01.widthDefined = false;
3807 fontDescriptionRun01.slantDefined = false;
3808 fontDescriptionRun01.sizeDefined = false;
3810 FontDescriptionRun fontDescriptionRun02;
3811 fontDescriptionRun02.characterRun.characterIndex = 10u;
3812 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3813 fontDescriptionRun02.familyLength = fontArabic.size();
3814 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3815 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3816 fontDescriptionRun02.familyDefined = true;
3817 fontDescriptionRun02.weightDefined = false;
3818 fontDescriptionRun02.widthDefined = false;
3819 fontDescriptionRun02.slantDefined = false;
3820 fontDescriptionRun02.sizeDefined = false;
3822 FontDescriptionRun fontDescriptionRun03;
3823 fontDescriptionRun03.characterRun.characterIndex = 24u;
3824 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3825 fontDescriptionRun03.familyLength = fontArabic.size();
3826 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3827 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3828 fontDescriptionRun03.familyDefined = true;
3829 fontDescriptionRun03.weightDefined = false;
3830 fontDescriptionRun03.widthDefined = false;
3831 fontDescriptionRun03.slantDefined = false;
3832 fontDescriptionRun03.sizeDefined = false;
3834 FontDescriptionRun fontDescriptionRun04;
3835 fontDescriptionRun04.characterRun.characterIndex = 38u;
3836 fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
3837 fontDescriptionRun04.familyLength = fontHebrew.size();
3838 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3839 memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
3840 fontDescriptionRun04.familyDefined = true;
3841 fontDescriptionRun04.weightDefined = false;
3842 fontDescriptionRun04.widthDefined = false;
3843 fontDescriptionRun04.slantDefined = false;
3844 fontDescriptionRun04.sizeDefined = false;
3846 FontDescriptionRun fontDescriptionRun05;
3847 fontDescriptionRun05.characterRun.characterIndex = 48u;
3848 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3849 fontDescriptionRun05.familyLength = fontHebrew.size();
3850 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3851 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3852 fontDescriptionRun05.familyDefined = true;
3853 fontDescriptionRun05.weightDefined = false;
3854 fontDescriptionRun05.widthDefined = false;
3855 fontDescriptionRun05.slantDefined = false;
3856 fontDescriptionRun05.sizeDefined = false;
3858 FontDescriptionRun fontDescriptionRun06;
3859 fontDescriptionRun06.characterRun.characterIndex = 58u;
3860 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3861 fontDescriptionRun06.familyLength = fontArabic.size();
3862 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3863 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3864 fontDescriptionRun06.familyDefined = true;
3865 fontDescriptionRun06.weightDefined = false;
3866 fontDescriptionRun06.widthDefined = false;
3867 fontDescriptionRun06.slantDefined = false;
3868 fontDescriptionRun06.sizeDefined = false;
3870 Vector<FontDescriptionRun> fontDescriptionRuns;
3871 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3872 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3873 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3874 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3875 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3876 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3880 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,
3881 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,
3882 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,
3883 1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
3884 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,
3885 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,
3888 Size textArea( 100.f, 300.f );
3890 ReLayoutRightToLeftLinesData data =
3892 "Paragraphs with right to left text.",
3893 "שלום עולם مرحبا بالعالم\n"
3894 "مرحبا بالعالم שלום עולם\n"
3895 "שלום עולם مرحبا بالعالم.",
3898 fontDescriptionRuns.Begin(),
3905 if( !ReLayoutRightToLeftLinesTest( data ) )
3907 tet_result(TET_FAIL);
3910 tet_result(TET_PASS);
3914 int UtcDaliTextAlign01(void)
3916 ToolkitTestApplication application;
3917 tet_infoline(" UtcDaliTextAlign01");
3919 // Calculate text alignment.
3921 const std::string fontLatin( "TizenSans" );
3922 const std::string fontHebrew( "TizenSansHebrew" );
3923 const std::string fontArabic( "TizenSansArabic" );
3925 // Set a known font description
3926 FontDescriptionRun fontDescriptionRun01;
3927 fontDescriptionRun01.characterRun.characterIndex = 0u;
3928 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3929 fontDescriptionRun01.familyLength = fontLatin.size();
3930 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3931 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3932 fontDescriptionRun01.familyDefined = true;
3933 fontDescriptionRun01.weightDefined = false;
3934 fontDescriptionRun01.widthDefined = false;
3935 fontDescriptionRun01.slantDefined = false;
3936 fontDescriptionRun01.sizeDefined = false;
3938 FontDescriptionRun fontDescriptionRun02;
3939 fontDescriptionRun02.characterRun.characterIndex = 12u;
3940 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3941 fontDescriptionRun02.familyLength = fontHebrew.size();
3942 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3943 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3944 fontDescriptionRun02.familyDefined = true;
3945 fontDescriptionRun02.weightDefined = false;
3946 fontDescriptionRun02.widthDefined = false;
3947 fontDescriptionRun02.slantDefined = false;
3948 fontDescriptionRun02.sizeDefined = false;
3950 FontDescriptionRun fontDescriptionRun03;
3951 fontDescriptionRun03.characterRun.characterIndex = 22u;
3952 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3953 fontDescriptionRun03.familyLength = fontArabic.size();
3954 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3955 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3956 fontDescriptionRun03.familyDefined = true;
3957 fontDescriptionRun03.weightDefined = false;
3958 fontDescriptionRun03.widthDefined = false;
3959 fontDescriptionRun03.slantDefined = false;
3960 fontDescriptionRun03.sizeDefined = false;
3962 FontDescriptionRun fontDescriptionRun04;
3963 fontDescriptionRun04.characterRun.characterIndex = 36u;
3964 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3965 fontDescriptionRun04.familyLength = fontLatin.size();
3966 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3967 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3968 fontDescriptionRun04.familyDefined = true;
3969 fontDescriptionRun04.weightDefined = false;
3970 fontDescriptionRun04.widthDefined = false;
3971 fontDescriptionRun04.slantDefined = false;
3972 fontDescriptionRun04.sizeDefined = false;
3974 FontDescriptionRun fontDescriptionRun05;
3975 fontDescriptionRun05.characterRun.characterIndex = 48u;
3976 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3977 fontDescriptionRun05.familyLength = fontLatin.size();
3978 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3979 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3980 fontDescriptionRun05.familyDefined = true;
3981 fontDescriptionRun05.weightDefined = false;
3982 fontDescriptionRun05.widthDefined = false;
3983 fontDescriptionRun05.slantDefined = false;
3984 fontDescriptionRun05.sizeDefined = false;
3986 FontDescriptionRun fontDescriptionRun06;
3987 fontDescriptionRun06.characterRun.characterIndex = 60u;
3988 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3989 fontDescriptionRun06.familyLength = fontArabic.size();
3990 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3991 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3992 fontDescriptionRun06.familyDefined = true;
3993 fontDescriptionRun06.weightDefined = false;
3994 fontDescriptionRun06.widthDefined = false;
3995 fontDescriptionRun06.slantDefined = false;
3996 fontDescriptionRun06.sizeDefined = false;
3998 Vector<FontDescriptionRun> fontDescriptionRuns;
3999 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4000 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4001 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4002 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4003 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4004 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4006 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4008 Size textArea( 100.f, 300.f );
4011 "Begin alignment for the first paragraph.",
4012 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4015 fontDescriptionRuns.Begin(),
4016 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4017 LayoutEngine::VERTICAL_ALIGN_TOP,
4024 if( !AlignTest( data ) )
4026 tet_result(TET_FAIL);
4029 tet_result(TET_PASS);
4033 int UtcDaliTextAlign02(void)
4035 ToolkitTestApplication application;
4036 tet_infoline(" UtcDaliTextAlign02");
4038 // Calculate text alignment.
4040 const std::string fontLatin( "TizenSans" );
4041 const std::string fontHebrew( "TizenSansHebrew" );
4042 const std::string fontArabic( "TizenSansArabic" );
4044 // Set a known font description
4045 FontDescriptionRun fontDescriptionRun01;
4046 fontDescriptionRun01.characterRun.characterIndex = 0u;
4047 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4048 fontDescriptionRun01.familyLength = fontLatin.size();
4049 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4050 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4051 fontDescriptionRun01.familyDefined = true;
4052 fontDescriptionRun01.weightDefined = false;
4053 fontDescriptionRun01.widthDefined = false;
4054 fontDescriptionRun01.slantDefined = false;
4055 fontDescriptionRun01.sizeDefined = false;
4057 FontDescriptionRun fontDescriptionRun02;
4058 fontDescriptionRun02.characterRun.characterIndex = 12u;
4059 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4060 fontDescriptionRun02.familyLength = fontHebrew.size();
4061 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4062 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4063 fontDescriptionRun02.familyDefined = true;
4064 fontDescriptionRun02.weightDefined = false;
4065 fontDescriptionRun02.widthDefined = false;
4066 fontDescriptionRun02.slantDefined = false;
4067 fontDescriptionRun02.sizeDefined = false;
4069 FontDescriptionRun fontDescriptionRun03;
4070 fontDescriptionRun03.characterRun.characterIndex = 22u;
4071 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4072 fontDescriptionRun03.familyLength = fontArabic.size();
4073 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4074 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4075 fontDescriptionRun03.familyDefined = true;
4076 fontDescriptionRun03.weightDefined = false;
4077 fontDescriptionRun03.widthDefined = false;
4078 fontDescriptionRun03.slantDefined = false;
4079 fontDescriptionRun03.sizeDefined = false;
4081 FontDescriptionRun fontDescriptionRun04;
4082 fontDescriptionRun04.characterRun.characterIndex = 36u;
4083 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4084 fontDescriptionRun04.familyLength = fontLatin.size();
4085 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4086 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4087 fontDescriptionRun04.familyDefined = true;
4088 fontDescriptionRun04.weightDefined = false;
4089 fontDescriptionRun04.widthDefined = false;
4090 fontDescriptionRun04.slantDefined = false;
4091 fontDescriptionRun04.sizeDefined = false;
4093 FontDescriptionRun fontDescriptionRun05;
4094 fontDescriptionRun05.characterRun.characterIndex = 48u;
4095 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4096 fontDescriptionRun05.familyLength = fontLatin.size();
4097 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4098 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4099 fontDescriptionRun05.familyDefined = true;
4100 fontDescriptionRun05.weightDefined = false;
4101 fontDescriptionRun05.widthDefined = false;
4102 fontDescriptionRun05.slantDefined = false;
4103 fontDescriptionRun05.sizeDefined = false;
4105 FontDescriptionRun fontDescriptionRun06;
4106 fontDescriptionRun06.characterRun.characterIndex = 60u;
4107 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4108 fontDescriptionRun06.familyLength = fontArabic.size();
4109 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4110 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4111 fontDescriptionRun06.familyDefined = true;
4112 fontDescriptionRun06.weightDefined = false;
4113 fontDescriptionRun06.widthDefined = false;
4114 fontDescriptionRun06.slantDefined = false;
4115 fontDescriptionRun06.sizeDefined = false;
4117 Vector<FontDescriptionRun> fontDescriptionRuns;
4118 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4119 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4120 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4121 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4122 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4123 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4125 float positions[] = { 0.f, 0.f, 2.f, 60.f, 0.f, 0.f };
4127 Size textArea( 100.f, 300.f );
4130 "Begin alignment for the mid paragraph.",
4131 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4134 fontDescriptionRuns.Begin(),
4135 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4136 LayoutEngine::VERTICAL_ALIGN_TOP,
4143 if( !AlignTest( data ) )
4145 tet_result(TET_FAIL);
4148 tet_result(TET_PASS);
4152 int UtcDaliTextAlign03(void)
4154 ToolkitTestApplication application;
4155 tet_infoline(" UtcDaliTextAlign03");
4157 // Calculate text alignment.
4159 const std::string fontLatin( "TizenSans" );
4160 const std::string fontHebrew( "TizenSansHebrew" );
4161 const std::string fontArabic( "TizenSansArabic" );
4163 // Set a known font description
4164 FontDescriptionRun fontDescriptionRun01;
4165 fontDescriptionRun01.characterRun.characterIndex = 0u;
4166 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4167 fontDescriptionRun01.familyLength = fontLatin.size();
4168 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4169 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4170 fontDescriptionRun01.familyDefined = true;
4171 fontDescriptionRun01.weightDefined = false;
4172 fontDescriptionRun01.widthDefined = false;
4173 fontDescriptionRun01.slantDefined = false;
4174 fontDescriptionRun01.sizeDefined = false;
4176 FontDescriptionRun fontDescriptionRun02;
4177 fontDescriptionRun02.characterRun.characterIndex = 12u;
4178 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4179 fontDescriptionRun02.familyLength = fontHebrew.size();
4180 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4181 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4182 fontDescriptionRun02.familyDefined = true;
4183 fontDescriptionRun02.weightDefined = false;
4184 fontDescriptionRun02.widthDefined = false;
4185 fontDescriptionRun02.slantDefined = false;
4186 fontDescriptionRun02.sizeDefined = false;
4188 FontDescriptionRun fontDescriptionRun03;
4189 fontDescriptionRun03.characterRun.characterIndex = 22u;
4190 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4191 fontDescriptionRun03.familyLength = fontArabic.size();
4192 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4193 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4194 fontDescriptionRun03.familyDefined = true;
4195 fontDescriptionRun03.weightDefined = false;
4196 fontDescriptionRun03.widthDefined = false;
4197 fontDescriptionRun03.slantDefined = false;
4198 fontDescriptionRun03.sizeDefined = false;
4200 FontDescriptionRun fontDescriptionRun04;
4201 fontDescriptionRun04.characterRun.characterIndex = 36u;
4202 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4203 fontDescriptionRun04.familyLength = fontLatin.size();
4204 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4205 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4206 fontDescriptionRun04.familyDefined = true;
4207 fontDescriptionRun04.weightDefined = false;
4208 fontDescriptionRun04.widthDefined = false;
4209 fontDescriptionRun04.slantDefined = false;
4210 fontDescriptionRun04.sizeDefined = false;
4212 FontDescriptionRun fontDescriptionRun05;
4213 fontDescriptionRun05.characterRun.characterIndex = 48u;
4214 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4215 fontDescriptionRun05.familyLength = fontLatin.size();
4216 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4217 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4218 fontDescriptionRun05.familyDefined = true;
4219 fontDescriptionRun05.weightDefined = false;
4220 fontDescriptionRun05.widthDefined = false;
4221 fontDescriptionRun05.slantDefined = false;
4222 fontDescriptionRun05.sizeDefined = false;
4224 FontDescriptionRun fontDescriptionRun06;
4225 fontDescriptionRun06.characterRun.characterIndex = 60u;
4226 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4227 fontDescriptionRun06.familyLength = fontArabic.size();
4228 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4229 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4230 fontDescriptionRun06.familyDefined = true;
4231 fontDescriptionRun06.weightDefined = false;
4232 fontDescriptionRun06.widthDefined = false;
4233 fontDescriptionRun06.slantDefined = false;
4234 fontDescriptionRun06.sizeDefined = false;
4236 Vector<FontDescriptionRun> fontDescriptionRuns;
4237 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4238 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4239 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4240 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4241 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4242 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4244 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4246 Size textArea( 100.f, 300.f );
4249 "Begin alignment for the last paragraph.",
4250 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4253 fontDescriptionRuns.Begin(),
4254 LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
4255 LayoutEngine::VERTICAL_ALIGN_TOP,
4262 if( !AlignTest( data ) )
4264 tet_result(TET_FAIL);
4267 tet_result(TET_PASS);
4271 int UtcDaliTextAlign04(void)
4273 ToolkitTestApplication application;
4274 tet_infoline(" UtcDaliTextAlign04");
4276 // Calculate text alignment.
4278 const std::string fontLatin( "TizenSans" );
4279 const std::string fontHebrew( "TizenSansHebrew" );
4280 const std::string fontArabic( "TizenSansArabic" );
4282 // Set a known font description
4283 FontDescriptionRun fontDescriptionRun01;
4284 fontDescriptionRun01.characterRun.characterIndex = 0u;
4285 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4286 fontDescriptionRun01.familyLength = fontLatin.size();
4287 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4288 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4289 fontDescriptionRun01.familyDefined = true;
4290 fontDescriptionRun01.weightDefined = false;
4291 fontDescriptionRun01.widthDefined = false;
4292 fontDescriptionRun01.slantDefined = false;
4293 fontDescriptionRun01.sizeDefined = false;
4295 FontDescriptionRun fontDescriptionRun02;
4296 fontDescriptionRun02.characterRun.characterIndex = 12u;
4297 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4298 fontDescriptionRun02.familyLength = fontHebrew.size();
4299 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4300 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4301 fontDescriptionRun02.familyDefined = true;
4302 fontDescriptionRun02.weightDefined = false;
4303 fontDescriptionRun02.widthDefined = false;
4304 fontDescriptionRun02.slantDefined = false;
4305 fontDescriptionRun02.sizeDefined = false;
4307 FontDescriptionRun fontDescriptionRun03;
4308 fontDescriptionRun03.characterRun.characterIndex = 22u;
4309 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4310 fontDescriptionRun03.familyLength = fontArabic.size();
4311 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4312 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4313 fontDescriptionRun03.familyDefined = true;
4314 fontDescriptionRun03.weightDefined = false;
4315 fontDescriptionRun03.widthDefined = false;
4316 fontDescriptionRun03.slantDefined = false;
4317 fontDescriptionRun03.sizeDefined = false;
4319 FontDescriptionRun fontDescriptionRun04;
4320 fontDescriptionRun04.characterRun.characterIndex = 36u;
4321 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4322 fontDescriptionRun04.familyLength = fontLatin.size();
4323 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4324 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4325 fontDescriptionRun04.familyDefined = true;
4326 fontDescriptionRun04.weightDefined = false;
4327 fontDescriptionRun04.widthDefined = false;
4328 fontDescriptionRun04.slantDefined = false;
4329 fontDescriptionRun04.sizeDefined = false;
4331 FontDescriptionRun fontDescriptionRun05;
4332 fontDescriptionRun05.characterRun.characterIndex = 48u;
4333 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4334 fontDescriptionRun05.familyLength = fontLatin.size();
4335 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4336 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4337 fontDescriptionRun05.familyDefined = true;
4338 fontDescriptionRun05.weightDefined = false;
4339 fontDescriptionRun05.widthDefined = false;
4340 fontDescriptionRun05.slantDefined = false;
4341 fontDescriptionRun05.sizeDefined = false;
4343 FontDescriptionRun fontDescriptionRun06;
4344 fontDescriptionRun06.characterRun.characterIndex = 60u;
4345 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4346 fontDescriptionRun06.familyLength = fontArabic.size();
4347 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4348 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4349 fontDescriptionRun06.familyDefined = true;
4350 fontDescriptionRun06.weightDefined = false;
4351 fontDescriptionRun06.widthDefined = false;
4352 fontDescriptionRun06.slantDefined = false;
4353 fontDescriptionRun06.sizeDefined = false;
4355 Vector<FontDescriptionRun> fontDescriptionRuns;
4356 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4357 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4358 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4359 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4360 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4361 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4363 float positions[] = { 10.f, 16.f, 0.f, 0.f, 0.f, 0.f };
4365 Size textArea( 100.f, 300.f );
4368 "Center alignment for the first paragraph.",
4369 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4372 fontDescriptionRuns.Begin(),
4373 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4374 LayoutEngine::VERTICAL_ALIGN_TOP,
4381 if( !AlignTest( data ) )
4383 tet_result(TET_FAIL);
4386 tet_result(TET_PASS);
4390 int UtcDaliTextAlign05(void)
4392 ToolkitTestApplication application;
4393 tet_infoline(" UtcDaliTextAlign05");
4395 // Calculate text alignment.
4397 const std::string fontLatin( "TizenSans" );
4398 const std::string fontHebrew( "TizenSansHebrew" );
4399 const std::string fontArabic( "TizenSansArabic" );
4401 // Set a known font description
4402 FontDescriptionRun fontDescriptionRun01;
4403 fontDescriptionRun01.characterRun.characterIndex = 0u;
4404 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4405 fontDescriptionRun01.familyLength = fontLatin.size();
4406 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4407 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4408 fontDescriptionRun01.familyDefined = true;
4409 fontDescriptionRun01.weightDefined = false;
4410 fontDescriptionRun01.widthDefined = false;
4411 fontDescriptionRun01.slantDefined = false;
4412 fontDescriptionRun01.sizeDefined = false;
4414 FontDescriptionRun fontDescriptionRun02;
4415 fontDescriptionRun02.characterRun.characterIndex = 12u;
4416 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4417 fontDescriptionRun02.familyLength = fontHebrew.size();
4418 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4419 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4420 fontDescriptionRun02.familyDefined = true;
4421 fontDescriptionRun02.weightDefined = false;
4422 fontDescriptionRun02.widthDefined = false;
4423 fontDescriptionRun02.slantDefined = false;
4424 fontDescriptionRun02.sizeDefined = false;
4426 FontDescriptionRun fontDescriptionRun03;
4427 fontDescriptionRun03.characterRun.characterIndex = 22u;
4428 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4429 fontDescriptionRun03.familyLength = fontArabic.size();
4430 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4431 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4432 fontDescriptionRun03.familyDefined = true;
4433 fontDescriptionRun03.weightDefined = false;
4434 fontDescriptionRun03.widthDefined = false;
4435 fontDescriptionRun03.slantDefined = false;
4436 fontDescriptionRun03.sizeDefined = false;
4438 FontDescriptionRun fontDescriptionRun04;
4439 fontDescriptionRun04.characterRun.characterIndex = 36u;
4440 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4441 fontDescriptionRun04.familyLength = fontLatin.size();
4442 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4443 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4444 fontDescriptionRun04.familyDefined = true;
4445 fontDescriptionRun04.weightDefined = false;
4446 fontDescriptionRun04.widthDefined = false;
4447 fontDescriptionRun04.slantDefined = false;
4448 fontDescriptionRun04.sizeDefined = false;
4450 FontDescriptionRun fontDescriptionRun05;
4451 fontDescriptionRun05.characterRun.characterIndex = 48u;
4452 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4453 fontDescriptionRun05.familyLength = fontLatin.size();
4454 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4455 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4456 fontDescriptionRun05.familyDefined = true;
4457 fontDescriptionRun05.weightDefined = false;
4458 fontDescriptionRun05.widthDefined = false;
4459 fontDescriptionRun05.slantDefined = false;
4460 fontDescriptionRun05.sizeDefined = false;
4462 FontDescriptionRun fontDescriptionRun06;
4463 fontDescriptionRun06.characterRun.characterIndex = 60u;
4464 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4465 fontDescriptionRun06.familyLength = fontArabic.size();
4466 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4467 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4468 fontDescriptionRun06.familyDefined = true;
4469 fontDescriptionRun06.weightDefined = false;
4470 fontDescriptionRun06.widthDefined = false;
4471 fontDescriptionRun06.slantDefined = false;
4472 fontDescriptionRun06.sizeDefined = false;
4474 Vector<FontDescriptionRun> fontDescriptionRuns;
4475 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4476 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4477 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4478 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4479 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4480 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4482 float positions[] = { 0.f, 0.f, -1.f, 30.f, 0.f, 0.f };
4484 Size textArea( 100.f, 300.f );
4487 "Center alignment for the mid paragraph.",
4488 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4491 fontDescriptionRuns.Begin(),
4492 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4493 LayoutEngine::VERTICAL_ALIGN_TOP,
4500 if( !AlignTest( data ) )
4502 tet_result(TET_FAIL);
4505 tet_result(TET_PASS);
4509 int UtcDaliTextAlign06(void)
4511 ToolkitTestApplication application;
4512 tet_infoline(" UtcDaliTextAlign06");
4514 // Calculate text alignment.
4516 const std::string fontLatin( "TizenSans" );
4517 const std::string fontHebrew( "TizenSansHebrew" );
4518 const std::string fontArabic( "TizenSansArabic" );
4520 // Set a known font description
4521 FontDescriptionRun fontDescriptionRun01;
4522 fontDescriptionRun01.characterRun.characterIndex = 0u;
4523 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4524 fontDescriptionRun01.familyLength = fontLatin.size();
4525 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4526 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4527 fontDescriptionRun01.familyDefined = true;
4528 fontDescriptionRun01.weightDefined = false;
4529 fontDescriptionRun01.widthDefined = false;
4530 fontDescriptionRun01.slantDefined = false;
4531 fontDescriptionRun01.sizeDefined = false;
4533 FontDescriptionRun fontDescriptionRun02;
4534 fontDescriptionRun02.characterRun.characterIndex = 12u;
4535 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4536 fontDescriptionRun02.familyLength = fontHebrew.size();
4537 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4538 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4539 fontDescriptionRun02.familyDefined = true;
4540 fontDescriptionRun02.weightDefined = false;
4541 fontDescriptionRun02.widthDefined = false;
4542 fontDescriptionRun02.slantDefined = false;
4543 fontDescriptionRun02.sizeDefined = false;
4545 FontDescriptionRun fontDescriptionRun03;
4546 fontDescriptionRun03.characterRun.characterIndex = 22u;
4547 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4548 fontDescriptionRun03.familyLength = fontArabic.size();
4549 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4550 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4551 fontDescriptionRun03.familyDefined = true;
4552 fontDescriptionRun03.weightDefined = false;
4553 fontDescriptionRun03.widthDefined = false;
4554 fontDescriptionRun03.slantDefined = false;
4555 fontDescriptionRun03.sizeDefined = false;
4557 FontDescriptionRun fontDescriptionRun04;
4558 fontDescriptionRun04.characterRun.characterIndex = 36u;
4559 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4560 fontDescriptionRun04.familyLength = fontLatin.size();
4561 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4562 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4563 fontDescriptionRun04.familyDefined = true;
4564 fontDescriptionRun04.weightDefined = false;
4565 fontDescriptionRun04.widthDefined = false;
4566 fontDescriptionRun04.slantDefined = false;
4567 fontDescriptionRun04.sizeDefined = false;
4569 FontDescriptionRun fontDescriptionRun05;
4570 fontDescriptionRun05.characterRun.characterIndex = 48u;
4571 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4572 fontDescriptionRun05.familyLength = fontLatin.size();
4573 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4574 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4575 fontDescriptionRun05.familyDefined = true;
4576 fontDescriptionRun05.weightDefined = false;
4577 fontDescriptionRun05.widthDefined = false;
4578 fontDescriptionRun05.slantDefined = false;
4579 fontDescriptionRun05.sizeDefined = false;
4581 FontDescriptionRun fontDescriptionRun06;
4582 fontDescriptionRun06.characterRun.characterIndex = 60u;
4583 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4584 fontDescriptionRun06.familyLength = fontArabic.size();
4585 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4586 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4587 fontDescriptionRun06.familyDefined = true;
4588 fontDescriptionRun06.weightDefined = false;
4589 fontDescriptionRun06.widthDefined = false;
4590 fontDescriptionRun06.slantDefined = false;
4591 fontDescriptionRun06.sizeDefined = false;
4593 Vector<FontDescriptionRun> fontDescriptionRuns;
4594 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4595 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4596 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4597 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4598 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4599 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4601 float positions[] = { 0.f, 0.f, 0.f, 0.f, 10.f, 20.f };
4603 Size textArea( 100.f, 300.f );
4606 "Center alignment for the last paragraph.",
4607 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4610 fontDescriptionRuns.Begin(),
4611 LayoutEngine::HORIZONTAL_ALIGN_CENTER,
4612 LayoutEngine::VERTICAL_ALIGN_TOP,
4619 if( !AlignTest( data ) )
4621 tet_result(TET_FAIL);
4624 tet_result(TET_PASS);
4628 int UtcDaliTextAlign07(void)
4630 ToolkitTestApplication application;
4631 tet_infoline(" UtcDaliTextAlign07");
4633 // Calculate text alignment.
4635 const std::string fontLatin( "TizenSans" );
4636 const std::string fontHebrew( "TizenSansHebrew" );
4637 const std::string fontArabic( "TizenSansArabic" );
4639 // Set a known font description
4640 FontDescriptionRun fontDescriptionRun01;
4641 fontDescriptionRun01.characterRun.characterIndex = 0u;
4642 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4643 fontDescriptionRun01.familyLength = fontLatin.size();
4644 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4645 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4646 fontDescriptionRun01.familyDefined = true;
4647 fontDescriptionRun01.weightDefined = false;
4648 fontDescriptionRun01.widthDefined = false;
4649 fontDescriptionRun01.slantDefined = false;
4650 fontDescriptionRun01.sizeDefined = false;
4652 FontDescriptionRun fontDescriptionRun02;
4653 fontDescriptionRun02.characterRun.characterIndex = 12u;
4654 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4655 fontDescriptionRun02.familyLength = fontHebrew.size();
4656 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4657 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4658 fontDescriptionRun02.familyDefined = true;
4659 fontDescriptionRun02.weightDefined = false;
4660 fontDescriptionRun02.widthDefined = false;
4661 fontDescriptionRun02.slantDefined = false;
4662 fontDescriptionRun02.sizeDefined = false;
4664 FontDescriptionRun fontDescriptionRun03;
4665 fontDescriptionRun03.characterRun.characterIndex = 22u;
4666 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4667 fontDescriptionRun03.familyLength = fontArabic.size();
4668 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4669 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4670 fontDescriptionRun03.familyDefined = true;
4671 fontDescriptionRun03.weightDefined = false;
4672 fontDescriptionRun03.widthDefined = false;
4673 fontDescriptionRun03.slantDefined = false;
4674 fontDescriptionRun03.sizeDefined = false;
4676 FontDescriptionRun fontDescriptionRun04;
4677 fontDescriptionRun04.characterRun.characterIndex = 36u;
4678 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4679 fontDescriptionRun04.familyLength = fontLatin.size();
4680 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4681 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4682 fontDescriptionRun04.familyDefined = true;
4683 fontDescriptionRun04.weightDefined = false;
4684 fontDescriptionRun04.widthDefined = false;
4685 fontDescriptionRun04.slantDefined = false;
4686 fontDescriptionRun04.sizeDefined = false;
4688 FontDescriptionRun fontDescriptionRun05;
4689 fontDescriptionRun05.characterRun.characterIndex = 48u;
4690 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4691 fontDescriptionRun05.familyLength = fontLatin.size();
4692 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4693 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4694 fontDescriptionRun05.familyDefined = true;
4695 fontDescriptionRun05.weightDefined = false;
4696 fontDescriptionRun05.widthDefined = false;
4697 fontDescriptionRun05.slantDefined = false;
4698 fontDescriptionRun05.sizeDefined = false;
4700 FontDescriptionRun fontDescriptionRun06;
4701 fontDescriptionRun06.characterRun.characterIndex = 60u;
4702 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4703 fontDescriptionRun06.familyLength = fontArabic.size();
4704 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4705 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4706 fontDescriptionRun06.familyDefined = true;
4707 fontDescriptionRun06.weightDefined = false;
4708 fontDescriptionRun06.widthDefined = false;
4709 fontDescriptionRun06.slantDefined = false;
4710 fontDescriptionRun06.sizeDefined = false;
4712 Vector<FontDescriptionRun> fontDescriptionRuns;
4713 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4714 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4715 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4716 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4717 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4718 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4720 float positions[] = { 20.f, 33.f, 0.f, 0.f, 0.f, 0.f };
4722 Size textArea( 100.f, 300.f );
4725 "End alignment for the first paragraph.",
4726 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4729 fontDescriptionRuns.Begin(),
4730 LayoutEngine::HORIZONTAL_ALIGN_END,
4731 LayoutEngine::VERTICAL_ALIGN_TOP,
4738 if( !AlignTest( data ) )
4740 tet_result(TET_FAIL);
4743 tet_result(TET_PASS);
4747 int UtcDaliTextAlign08(void)
4749 ToolkitTestApplication application;
4750 tet_infoline(" UtcDaliTextAlign08");
4752 // Calculate text alignment.
4754 const std::string fontLatin( "TizenSans" );
4755 const std::string fontHebrew( "TizenSansHebrew" );
4756 const std::string fontArabic( "TizenSansArabic" );
4758 // Set a known font description
4759 FontDescriptionRun fontDescriptionRun01;
4760 fontDescriptionRun01.characterRun.characterIndex = 0u;
4761 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4762 fontDescriptionRun01.familyLength = fontLatin.size();
4763 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4764 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4765 fontDescriptionRun01.familyDefined = true;
4766 fontDescriptionRun01.weightDefined = false;
4767 fontDescriptionRun01.widthDefined = false;
4768 fontDescriptionRun01.slantDefined = false;
4769 fontDescriptionRun01.sizeDefined = false;
4771 FontDescriptionRun fontDescriptionRun02;
4772 fontDescriptionRun02.characterRun.characterIndex = 12u;
4773 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4774 fontDescriptionRun02.familyLength = fontHebrew.size();
4775 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4776 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4777 fontDescriptionRun02.familyDefined = true;
4778 fontDescriptionRun02.weightDefined = false;
4779 fontDescriptionRun02.widthDefined = false;
4780 fontDescriptionRun02.slantDefined = false;
4781 fontDescriptionRun02.sizeDefined = false;
4783 FontDescriptionRun fontDescriptionRun03;
4784 fontDescriptionRun03.characterRun.characterIndex = 22u;
4785 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4786 fontDescriptionRun03.familyLength = fontArabic.size();
4787 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4788 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4789 fontDescriptionRun03.familyDefined = true;
4790 fontDescriptionRun03.weightDefined = false;
4791 fontDescriptionRun03.widthDefined = false;
4792 fontDescriptionRun03.slantDefined = false;
4793 fontDescriptionRun03.sizeDefined = false;
4795 FontDescriptionRun fontDescriptionRun04;
4796 fontDescriptionRun04.characterRun.characterIndex = 36u;
4797 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4798 fontDescriptionRun04.familyLength = fontLatin.size();
4799 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4800 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4801 fontDescriptionRun04.familyDefined = true;
4802 fontDescriptionRun04.weightDefined = false;
4803 fontDescriptionRun04.widthDefined = false;
4804 fontDescriptionRun04.slantDefined = false;
4805 fontDescriptionRun04.sizeDefined = false;
4807 FontDescriptionRun fontDescriptionRun05;
4808 fontDescriptionRun05.characterRun.characterIndex = 48u;
4809 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4810 fontDescriptionRun05.familyLength = fontLatin.size();
4811 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4812 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4813 fontDescriptionRun05.familyDefined = true;
4814 fontDescriptionRun05.weightDefined = false;
4815 fontDescriptionRun05.widthDefined = false;
4816 fontDescriptionRun05.slantDefined = false;
4817 fontDescriptionRun05.sizeDefined = false;
4819 FontDescriptionRun fontDescriptionRun06;
4820 fontDescriptionRun06.characterRun.characterIndex = 60u;
4821 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4822 fontDescriptionRun06.familyLength = fontArabic.size();
4823 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4824 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4825 fontDescriptionRun06.familyDefined = true;
4826 fontDescriptionRun06.weightDefined = false;
4827 fontDescriptionRun06.widthDefined = false;
4828 fontDescriptionRun06.slantDefined = false;
4829 fontDescriptionRun06.sizeDefined = false;
4831 Vector<FontDescriptionRun> fontDescriptionRuns;
4832 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4833 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4834 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4835 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4836 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4837 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4839 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4841 Size textArea( 100.f, 300.f );
4844 "End alignment for the mid paragraph.",
4845 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4848 fontDescriptionRuns.Begin(),
4849 LayoutEngine::HORIZONTAL_ALIGN_END,
4850 LayoutEngine::VERTICAL_ALIGN_TOP,
4857 if( !AlignTest( data ) )
4859 tet_result(TET_FAIL);
4862 tet_result(TET_PASS);
4866 int UtcDaliTextAlign09(void)
4868 ToolkitTestApplication application;
4869 tet_infoline(" UtcDaliTextAlign09");
4871 // Calculate text alignment.
4873 const std::string fontLatin( "TizenSans" );
4874 const std::string fontHebrew( "TizenSansHebrew" );
4875 const std::string fontArabic( "TizenSansArabic" );
4877 // Set a known font description
4878 FontDescriptionRun fontDescriptionRun01;
4879 fontDescriptionRun01.characterRun.characterIndex = 0u;
4880 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4881 fontDescriptionRun01.familyLength = fontLatin.size();
4882 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4883 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4884 fontDescriptionRun01.familyDefined = true;
4885 fontDescriptionRun01.weightDefined = false;
4886 fontDescriptionRun01.widthDefined = false;
4887 fontDescriptionRun01.slantDefined = false;
4888 fontDescriptionRun01.sizeDefined = false;
4890 FontDescriptionRun fontDescriptionRun02;
4891 fontDescriptionRun02.characterRun.characterIndex = 12u;
4892 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4893 fontDescriptionRun02.familyLength = fontHebrew.size();
4894 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4895 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4896 fontDescriptionRun02.familyDefined = true;
4897 fontDescriptionRun02.weightDefined = false;
4898 fontDescriptionRun02.widthDefined = false;
4899 fontDescriptionRun02.slantDefined = false;
4900 fontDescriptionRun02.sizeDefined = false;
4902 FontDescriptionRun fontDescriptionRun03;
4903 fontDescriptionRun03.characterRun.characterIndex = 22u;
4904 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4905 fontDescriptionRun03.familyLength = fontArabic.size();
4906 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4907 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4908 fontDescriptionRun03.familyDefined = true;
4909 fontDescriptionRun03.weightDefined = false;
4910 fontDescriptionRun03.widthDefined = false;
4911 fontDescriptionRun03.slantDefined = false;
4912 fontDescriptionRun03.sizeDefined = false;
4914 FontDescriptionRun fontDescriptionRun04;
4915 fontDescriptionRun04.characterRun.characterIndex = 36u;
4916 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4917 fontDescriptionRun04.familyLength = fontLatin.size();
4918 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4919 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4920 fontDescriptionRun04.familyDefined = true;
4921 fontDescriptionRun04.weightDefined = false;
4922 fontDescriptionRun04.widthDefined = false;
4923 fontDescriptionRun04.slantDefined = false;
4924 fontDescriptionRun04.sizeDefined = false;
4926 FontDescriptionRun fontDescriptionRun05;
4927 fontDescriptionRun05.characterRun.characterIndex = 48u;
4928 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4929 fontDescriptionRun05.familyLength = fontLatin.size();
4930 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4931 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4932 fontDescriptionRun05.familyDefined = true;
4933 fontDescriptionRun05.weightDefined = false;
4934 fontDescriptionRun05.widthDefined = false;
4935 fontDescriptionRun05.slantDefined = false;
4936 fontDescriptionRun05.sizeDefined = false;
4938 FontDescriptionRun fontDescriptionRun06;
4939 fontDescriptionRun06.characterRun.characterIndex = 60u;
4940 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4941 fontDescriptionRun06.familyLength = fontArabic.size();
4942 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4943 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4944 fontDescriptionRun06.familyDefined = true;
4945 fontDescriptionRun06.weightDefined = false;
4946 fontDescriptionRun06.widthDefined = false;
4947 fontDescriptionRun06.slantDefined = false;
4948 fontDescriptionRun06.sizeDefined = false;
4950 Vector<FontDescriptionRun> fontDescriptionRuns;
4951 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4952 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4953 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4954 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4955 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4956 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4958 float positions[] = { 0.f, 0.f, 0.f, 0.f, 20.f, 40.f };
4960 Size textArea( 100.f, 300.f );
4963 "End alignment for the last paragraph.",
4964 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4967 fontDescriptionRuns.Begin(),
4968 LayoutEngine::HORIZONTAL_ALIGN_END,
4969 LayoutEngine::VERTICAL_ALIGN_TOP,
4976 if( !AlignTest( data ) )
4978 tet_result(TET_FAIL);
4981 tet_result(TET_PASS);