2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
23 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
24 #include <dali-toolkit/internal/text/text-run-container.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <toolkit-text-utils.h>
30 using namespace Toolkit;
33 // Tests the LayoutEngine methods.
35 //////////////////////////////////////////////////////////
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44 std::string description;
47 unsigned int numberOfFonts;
48 FontDescriptionRun* fontDescriptions;
50 unsigned int totalNumberOfGlyphs;
52 unsigned int numberOfLines;
54 Layout::Engine::Type layout;
55 unsigned int startIndex;
56 unsigned int numberOfGlyphs;
61 void Print( const LineRun& line )
63 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
64 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
65 std::cout << " width : " << floor(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" );
87 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
89 // 1) Create the model.
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.align = false;
104 CreateTextModel( data.text,
113 LogicalModelPtr logicalModel = textModel->mLogicalModel;
114 VisualModelPtr visualModel = textModel->mVisualModel;
116 // 2) Clear the layout.
117 Vector<LineRun>& lines = visualModel->mLines;
119 const Length numberOfCharacters = logicalModel->mText.Count();
120 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
121 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
122 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
124 LineIndex startRemoveIndex = 0u;
126 if( 0u != lines.Count() )
128 startRemoveIndex = lines.Count();
129 LineIndex endRemoveIndex = startRemoveIndex;
130 ClearGlyphRuns( data.startIndex,
131 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
136 // Update the character runs of the lines.
137 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
138 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
139 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
140 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
141 ClearCharacterRuns( startCharacterIndex,
142 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
147 lines.Erase( lines.Begin() + startRemoveIndex,
148 lines.Begin() + endRemoveIndex );
151 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
153 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
154 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
157 Layout::Engine engine;
158 engine.SetMetrics( metrics );
159 engine.SetLayout( data.layout );
161 textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
162 textModel->mLineWrapMode = LineWrap::WORD;
163 textModel->mIgnoreSpacesAfterText = true;
164 textModel->mMatchSystemLanguageDirection = false;
165 Layout::Parameters layoutParameters( data.textArea,
168 layoutParameters.isLastNewParagraph = isLastNewParagraph;
170 // The initial glyph and the number of glyphs to layout.
171 layoutParameters.startGlyphIndex = data.startIndex;
172 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
173 layoutParameters.startLineIndex = startRemoveIndex;
174 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
176 layoutSize = Vector2::ZERO;
178 bool isAutoScroll = false;
179 const bool updated = engine.LayoutText( layoutParameters,
184 // 4) Compare the results.
186 if( updated != data.updated )
188 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
192 if( layoutSize != data.layoutSize )
194 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
198 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
200 const Vector2& position = *( glyphPositions.Begin() + index );
202 if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
204 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
207 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
214 if( lines.Count() != data.numberOfLines )
216 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
220 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
222 const LineRun& line = *( lines.Begin() + index );
223 const LineRun& expectedLine = *( data.lines + index );
225 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
227 std::cout << " Different line info for line : " << index << std::endl;
229 std::cout << " expected" << std::endl;
230 Print( expectedLine );
233 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
235 std::cout << " Different line info for line : " << index << std::endl;
237 std::cout << " expected" << std::endl;
238 Print( expectedLine );
242 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
244 std::cout << " Different line info for line : " << index << std::endl;
246 std::cout << " expected" << std::endl;
247 Print( expectedLine );
250 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
252 std::cout << " Different line info for line : " << index << std::endl;
254 std::cout << " expected" << std::endl;
255 Print( expectedLine );
259 if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
261 std::cout << " Different line info for line : " << index << std::endl;
263 std::cout << " expected" << std::endl;
264 Print( expectedLine );
268 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
270 std::cout << " Different line info for line : " << index << std::endl;
272 std::cout << " expected" << std::endl;
273 Print( expectedLine );
277 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
279 std::cout << " Different line info for line : " << index << std::endl;
281 std::cout << " expected" << std::endl;
282 Print( expectedLine );
286 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
288 std::cout << " Different line info for line : " << index << std::endl;
290 std::cout << " expected" << std::endl;
291 Print( expectedLine );
295 if( line.ellipsis != expectedLine.ellipsis )
297 std::cout << " Different line info for line : " << index << std::endl;
299 std::cout << " expected" << std::endl;
300 Print( expectedLine );
304 // Do not compare the alignment offset as it's not calculated in the layout.
305 // Do not compare the line direction as it's not set in the layout.
311 //////////////////////////////////////////////////////////
315 std::string description;
318 unsigned int numberOfFonts;
319 FontDescriptionRun* fontDescriptions;
320 Text::HorizontalAlignment::Type horizontalAlignment;
321 Text::VerticalAlignment::Type verticalAlignment;
322 unsigned int startIndex;
323 unsigned int numberOfCharacters;
324 unsigned int numberOfLines;
326 Dali::LayoutDirection::Type layoutDirection;
327 bool matchSystemLanguageDirection;
330 bool AlignTest( const AlignData& data )
333 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
334 fontClient.SetDpi( 96u, 96u );
336 char* pathNamePtr = get_current_dir_name();
337 const std::string pathName( pathNamePtr );
340 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
344 // 1) Create the model.
349 Vector<FontDescriptionRun> fontDescriptionRuns;
350 if( 0u != data.numberOfFonts )
352 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
353 data.fontDescriptions,
354 data.fontDescriptions + data.numberOfFonts );
357 LayoutOptions options;
358 options.align = false;
359 CreateTextModel( data.text,
368 LogicalModelPtr logicalModel = textModel->mLogicalModel;
369 VisualModelPtr visualModel = textModel->mVisualModel;
371 // Call the Align method.
372 Layout::Engine engine;
373 engine.SetMetrics( metrics );
375 float alignmentOffset = 0.f;
376 engine.Align( data.textArea,
378 data.numberOfCharacters,
379 data.horizontalAlignment,
382 data.layoutDirection,
383 data.matchSystemLanguageDirection );
386 if( data.numberOfLines != visualModel->mLines.Count() )
388 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
392 const LineRun* const linesBuffer = visualModel->mLines.Begin();
393 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
395 const LineRun& line = *( linesBuffer + index );
397 if( line.alignmentOffset != *( data.lineOffsets + index ) )
399 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
408 //////////////////////////////////////////////////////////
410 // UtcDaliTextLayoutSetGetLayout
411 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
412 // UtcDaliTextLayoutSetGetHorizontalAlignment
413 // UtcDaliTextLayoutSetGetVerticalAlignment
414 // UtcDaliTextLayoutSetGetCursorWidth
415 // UtcDaliTextLayoutNoText
416 // UtcDaliTextLayoutSmallTextArea01
417 // UtcDaliTextLayoutSmallTextArea02
418 // UtcDaliTextLayoutMultilineText01
419 // UtcDaliTextLayoutMultilineText02
420 // UtcDaliTextLayoutMultilineText03
421 // UtcDaliTextLayoutMultilineText04
422 // UtcDaliTextLayoutMultilineText05
423 // UtcDaliTextLayoutMultilineText06
424 // UtcDaliTextUpdateLayout01
425 // UtcDaliTextUpdateLayout02
426 // UtcDaliTextUpdateLayout03
427 // UtcDaliTextLayoutEllipsis01
428 // UtcDaliTextLayoutEllipsis02
429 // UtcDaliTextLayoutEllipsis03
430 // UtcDaliTextLayoutEllipsis04
431 // UtcDaliTextLayoutEllipsis04
432 // UtcDaliTextReorderLayout01
433 // UtcDaliTextReorderLayout02
434 // UtcDaliTextReorderLayout03
435 // UtcDaliTextReorderLayout04
436 // UtcDaliTextAlign01
437 // UtcDaliTextAlign02
438 // UtcDaliTextAlign03
439 // UtcDaliTextAlign04
440 // UtcDaliTextAlign05
441 // UtcDaliTextAlign06
442 // UtcDaliTextAlign07
443 // UtcDaliTextAlign08
444 // UtcDaliTextAlign09
446 //////////////////////////////////////////////////////////
448 int UtcDaliTextLayoutSetGetLayout(void)
450 ToolkitTestApplication application;
451 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
453 Layout::Engine engine;
455 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
457 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
458 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
460 tet_result(TET_PASS);
464 int UtcDaliTextLayoutSetGetCursorWidth(void)
466 ToolkitTestApplication application;
469 Layout::Engine engine;
471 DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
473 engine.SetCursorWidth( 2 );
474 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
476 tet_result(TET_PASS);
480 int UtcDaliTextLayoutNoText(void)
482 ToolkitTestApplication application;
483 tet_infoline(" UtcDaliTextLayoutNoText");
485 Size textArea(100.f, 60.f);
486 Size layoutSize = Vector2::ZERO;
487 LayoutTextData data =
499 Layout::Engine::MULTI_LINE_BOX,
506 if( !LayoutTextTest( data ) )
508 tet_result(TET_FAIL);
511 tet_result(TET_PASS);
515 int UtcDaliTextLayoutSmallTextArea01(void)
517 ToolkitTestApplication application;
518 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
520 // Won't layout the text in multi-line if the width is too small.
522 const std::string fontFamily( "TizenSans" );
524 // Set a known font description
525 FontDescriptionRun fontDescriptionRun;
526 fontDescriptionRun.characterRun.characterIndex = 0u;
527 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
528 fontDescriptionRun.familyLength = fontFamily.size();
529 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
530 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
531 fontDescriptionRun.familyDefined = true;
532 fontDescriptionRun.weightDefined = false;
533 fontDescriptionRun.widthDefined = false;
534 fontDescriptionRun.slantDefined = false;
535 fontDescriptionRun.sizeDefined = false;
537 Vector<FontDescriptionRun> fontDescriptionRuns;
538 fontDescriptionRuns.PushBack( fontDescriptionRun );
539 Size textArea(1.f, 1.f);
540 Size layoutSize = Vector2::ZERO;
541 LayoutTextData data =
543 "Layout text in a small area",
547 fontDescriptionRuns.Begin(),
553 Layout::Engine::MULTI_LINE_BOX,
560 if( !LayoutTextTest( data ) )
562 tet_result(TET_FAIL);
565 tet_result(TET_PASS);
569 int UtcDaliTextLayoutSmallTextArea02(void)
571 ToolkitTestApplication application;
572 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
574 // Will layout the text in single line as it can be scrolled.
576 const std::string fontFamily( "TizenSans" );
578 // Set a known font description
579 FontDescriptionRun fontDescriptionRun;
580 fontDescriptionRun.characterRun.characterIndex = 0u;
581 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
582 fontDescriptionRun.familyLength = fontFamily.size();
583 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
584 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
585 fontDescriptionRun.familyDefined = true;
586 fontDescriptionRun.weightDefined = false;
587 fontDescriptionRun.widthDefined = false;
588 fontDescriptionRun.slantDefined = false;
589 fontDescriptionRun.sizeDefined = false;
591 Vector<FontDescriptionRun> fontDescriptionRuns;
592 fontDescriptionRuns.PushBack( fontDescriptionRun );
593 Size textArea(1.f, 1.f);
594 Size layoutSize(81.f, 19.f);
595 float positions[] = { 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f };
596 struct LineRun line =
609 Vector<LineRun> lines;
610 lines.PushBack( line );
612 LayoutTextData data =
614 "Layout text in a small area",
618 fontDescriptionRuns.Begin(),
624 Layout::Engine::SINGLE_LINE_BOX,
631 if( !LayoutTextTest( data ) )
633 tet_result(TET_FAIL);
636 tet_result(TET_PASS);
640 int UtcDaliTextLayoutMultilineText01(void)
642 ToolkitTestApplication application;
643 tet_infoline(" UtcDaliTextLayoutMultilineText01");
645 // Layout some lines of left to right text.
647 const std::string fontFamily( "TizenSans" );
649 // Set a known font description
650 FontDescriptionRun fontDescriptionRun1;
651 fontDescriptionRun1.characterRun.characterIndex = 0u;
652 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
653 fontDescriptionRun1.familyLength = fontFamily.size();
654 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
655 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
656 fontDescriptionRun1.familyDefined = true;
657 fontDescriptionRun1.weightDefined = false;
658 fontDescriptionRun1.widthDefined = false;
659 fontDescriptionRun1.slantDefined = false;
660 fontDescriptionRun1.sizeDefined = false;
662 FontDescriptionRun fontDescriptionRun2;
663 fontDescriptionRun2.characterRun.characterIndex = 18u;
664 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
665 fontDescriptionRun2.familyLength = fontFamily.size();
666 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
667 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
668 fontDescriptionRun2.familyDefined = true;
669 fontDescriptionRun2.weightDefined = false;
670 fontDescriptionRun2.widthDefined = false;
671 fontDescriptionRun2.slantDefined = false;
672 fontDescriptionRun2.sizeDefined = false;
674 Vector<FontDescriptionRun> fontDescriptionRuns;
675 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
676 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
677 Size textArea(100.f, 300.f);
678 Size layoutSize(97.f, 95.f);
681 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
682 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
683 0.f, -12.f, 9.f, -9.f, 18.f, -9.f, 28.f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f,
684 0.f, -12.f, 10.f, -12.f, 15.f, -12.f, 26.f, -9.f, 35.f, -9.f, 42.f, -9.f, 52.f, -9.f, 61.f, -11.f, 67.f, -0.f,
685 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 19.f, -9.f, 29.f, -9.f, 36.f, -0.f, 42.f, -9.f, 52.f, -12.f, 57.f, -0.f, 62.f, -11.f, 69.f, -9.f, 79.f, -9.f, 87.f, -11.f, 95.f, -2.f
687 struct LineRun line0 =
700 struct LineRun line1 =
713 struct LineRun line2 =
726 struct LineRun line3 =
739 struct LineRun line4 =
752 Vector<LineRun> lines;
753 lines.PushBack( line0 );
754 lines.PushBack( line1 );
755 lines.PushBack( line2 );
756 lines.PushBack( line3 );
757 lines.PushBack( line4 );
759 LayoutTextData data =
761 "Layout simple multi-line text",
762 "Hello world demo.\n"
763 "Layout different lines of text.",
766 fontDescriptionRuns.Begin(),
772 Layout::Engine::MULTI_LINE_BOX,
779 if( !LayoutTextTest( data ) )
781 tet_result(TET_FAIL);
784 tet_result(TET_PASS);
788 int UtcDaliTextLayoutMultilineText02(void)
790 ToolkitTestApplication application;
791 tet_infoline(" UtcDaliTextLayoutMultilineText02");
793 // Layout some lines of bidirectional text.
795 const std::string fontFamily1( "TizenSans" );
797 // Set a known font description
798 FontDescriptionRun fontDescriptionRun1;
799 fontDescriptionRun1.characterRun.characterIndex = 0u;
800 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
801 fontDescriptionRun1.familyLength = fontFamily1.size();
802 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
803 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
804 fontDescriptionRun1.familyDefined = true;
805 fontDescriptionRun1.weightDefined = false;
806 fontDescriptionRun1.widthDefined = false;
807 fontDescriptionRun1.slantDefined = false;
808 fontDescriptionRun1.sizeDefined = false;
810 const std::string fontFamily2( "TizenSansHebrew" );
812 // Set a known font description
813 FontDescriptionRun fontDescriptionRun2;
814 fontDescriptionRun2.characterRun.characterIndex = 17u;
815 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
816 fontDescriptionRun2.familyLength = fontFamily2.size();
817 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
818 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
819 fontDescriptionRun2.familyDefined = true;
820 fontDescriptionRun2.weightDefined = false;
821 fontDescriptionRun2.widthDefined = false;
822 fontDescriptionRun2.slantDefined = false;
823 fontDescriptionRun2.sizeDefined = false;
825 const std::string fontFamily3( "TizenSans" );
827 // Set a known font description
828 FontDescriptionRun fontDescriptionRun3;
829 fontDescriptionRun3.characterRun.characterIndex = 26u;
830 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
831 fontDescriptionRun3.familyLength = fontFamily3.size();
832 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
833 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
834 fontDescriptionRun3.familyDefined = true;
835 fontDescriptionRun3.weightDefined = false;
836 fontDescriptionRun3.widthDefined = false;
837 fontDescriptionRun3.slantDefined = false;
838 fontDescriptionRun3.sizeDefined = false;
840 const std::string fontFamily4( "TizenSansHebrew" );
842 // Set a known font description
843 FontDescriptionRun fontDescriptionRun4;
844 fontDescriptionRun4.characterRun.characterIndex = 28u;
845 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
846 fontDescriptionRun4.familyLength = fontFamily4.size();
847 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
848 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
849 fontDescriptionRun4.familyDefined = true;
850 fontDescriptionRun4.weightDefined = false;
851 fontDescriptionRun4.widthDefined = false;
852 fontDescriptionRun4.slantDefined = false;
853 fontDescriptionRun4.sizeDefined = false;
855 const std::string fontFamily5( "TizenSans" );
857 // Set a known font description
858 FontDescriptionRun fontDescriptionRun5;
859 fontDescriptionRun5.characterRun.characterIndex = 38u;
860 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
861 fontDescriptionRun5.familyLength = fontFamily5.size();
862 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
863 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
864 fontDescriptionRun5.familyDefined = true;
865 fontDescriptionRun5.weightDefined = false;
866 fontDescriptionRun5.widthDefined = false;
867 fontDescriptionRun5.slantDefined = false;
868 fontDescriptionRun5.sizeDefined = false;
870 Vector<FontDescriptionRun> fontDescriptionRuns;
871 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
872 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
873 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
874 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
875 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
876 Size textArea(100.f, 300.f);
877 Size layoutSize(81.f, 114.f);
880 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
881 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
882 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
883 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 28 .. 37
884 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 38 .. 49
885 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
887 struct LineRun line0 =
900 struct LineRun line1 =
913 struct LineRun line2 =
926 struct LineRun line3 =
939 struct LineRun line4 =
952 struct LineRun line5 =
965 Vector<LineRun> lines;
966 lines.PushBack( line0 );
967 lines.PushBack( line1 );
968 lines.PushBack( line2 );
969 lines.PushBack( line3 );
970 lines.PushBack( line4 );
971 lines.PushBack( line5 );
973 LayoutTextData data =
975 "Layout bidirectional text.",
976 "Hello world demo שלום עולם.\n"
977 "שלום עולם hello world demo.",
980 fontDescriptionRuns.Begin(),
986 Layout::Engine::MULTI_LINE_BOX,
993 if( !LayoutTextTest( data ) )
995 tet_result(TET_FAIL);
998 tet_result(TET_PASS);
1002 int UtcDaliTextLayoutMultilineText03(void)
1004 ToolkitTestApplication application;
1005 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1007 // Layout a long word which doesn't fit in the width of the text area.
1009 const std::string fontFamily( "TizenSans" );
1011 // Set a known font description
1012 FontDescriptionRun fontDescriptionRun;
1013 fontDescriptionRun.characterRun.characterIndex = 0u;
1014 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1015 fontDescriptionRun.familyLength = fontFamily.size();
1016 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1017 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1018 fontDescriptionRun.familyDefined = true;
1019 fontDescriptionRun.weightDefined = false;
1020 fontDescriptionRun.widthDefined = false;
1021 fontDescriptionRun.slantDefined = false;
1022 fontDescriptionRun.sizeDefined = false;
1024 Vector<FontDescriptionRun> fontDescriptionRuns;
1025 fontDescriptionRuns.PushBack( fontDescriptionRun );
1026 Size textArea(100.f, 300.f);
1027 Size layoutSize(98.f, 57.f);
1030 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -9.f, 48.f, -9.f, 58.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -13.f, 86.f, -9.f,
1031 0.f, -9.f, 13.f, -9.f, 23.f, -13.f, 31.f, -9.f, 41.f, -13.f, 45.f, -13.f, 48.f, -9.f, 57.f, -9.f, 69.f, -9.f, 79.f, -9.f, 85.f, -13.f, 88.f, -13.f,
1032 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
1034 struct LineRun line0 =
1047 struct LineRun line1 =
1060 struct LineRun line2 =
1073 Vector<LineRun> lines;
1074 lines.PushBack( line0 );
1075 lines.PushBack( line1 );
1076 lines.PushBack( line2 );
1078 LayoutTextData data =
1080 "Layout a long word which doesn't fit in the width of the text area.",
1081 "Helloworlddemohelloworlddemo.",
1084 fontDescriptionRuns.Begin(),
1090 Layout::Engine::MULTI_LINE_BOX,
1097 if( !LayoutTextTest( data ) )
1099 tet_result(TET_FAIL);
1102 tet_result(TET_PASS);
1106 int UtcDaliTextLayoutMultilineText04(void)
1108 ToolkitTestApplication application;
1109 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1111 // Layout simple text ending with a \n. It has to add a void line at the end.
1113 const std::string fontFamily( "TizenSans" );
1115 // Set a known font description
1116 FontDescriptionRun fontDescriptionRun;
1117 fontDescriptionRun.characterRun.characterIndex = 0u;
1118 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1119 fontDescriptionRun.familyLength = fontFamily.size();
1120 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1121 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1122 fontDescriptionRun.familyDefined = true;
1123 fontDescriptionRun.weightDefined = false;
1124 fontDescriptionRun.widthDefined = false;
1125 fontDescriptionRun.slantDefined = false;
1126 fontDescriptionRun.sizeDefined = false;
1128 Vector<FontDescriptionRun> fontDescriptionRuns;
1129 fontDescriptionRuns.PushBack( fontDescriptionRun );
1130 Size textArea(100.f, 300.f);
1131 Size layoutSize(84.f, 38.f);
1134 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -2.f, 85.f, -12.f
1136 struct LineRun line0 =
1148 struct LineRun line1 =
1161 Vector<LineRun> lines;
1162 lines.PushBack( line0 );
1163 lines.PushBack( line1 );
1165 LayoutTextData data =
1167 "Layout simple text ending with a \n.",
1171 fontDescriptionRuns.Begin(),
1177 Layout::Engine::MULTI_LINE_BOX,
1184 if( !LayoutTextTest( data ) )
1186 tet_result(TET_FAIL);
1189 tet_result(TET_PASS);
1193 int UtcDaliTextLayoutMultilineText05(void)
1195 ToolkitTestApplication application;
1196 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1198 // Layout simple text with one character with a different font size.
1200 const std::string fontFamily( "TizenSans" );
1202 // Set a known font description
1203 FontDescriptionRun fontDescriptionRun1;
1204 fontDescriptionRun1.characterRun.characterIndex = 0u;
1205 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1206 fontDescriptionRun1.familyLength = fontFamily.size();
1207 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1208 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1209 fontDescriptionRun1.familyDefined = true;
1210 fontDescriptionRun1.weightDefined = false;
1211 fontDescriptionRun1.widthDefined = false;
1212 fontDescriptionRun1.slantDefined = false;
1213 fontDescriptionRun1.sizeDefined = false;
1215 FontDescriptionRun fontDescriptionRun2;
1216 fontDescriptionRun2.characterRun.characterIndex = 6u;
1217 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1218 fontDescriptionRun2.familyLength = fontFamily.size();
1219 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1220 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1221 fontDescriptionRun2.size = 1280u;
1222 fontDescriptionRun2.familyDefined = true;
1223 fontDescriptionRun2.weightDefined = false;
1224 fontDescriptionRun2.widthDefined = false;
1225 fontDescriptionRun2.slantDefined = false;
1226 fontDescriptionRun2.sizeDefined = true;
1228 FontDescriptionRun fontDescriptionRun3;
1229 fontDescriptionRun3.characterRun.characterIndex = 7u;
1230 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1231 fontDescriptionRun3.familyLength = fontFamily.size();
1232 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1233 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1234 fontDescriptionRun3.familyDefined = true;
1235 fontDescriptionRun3.weightDefined = false;
1236 fontDescriptionRun3.widthDefined = false;
1237 fontDescriptionRun3.slantDefined = false;
1238 fontDescriptionRun3.sizeDefined = false;
1240 Vector<FontDescriptionRun> fontDescriptionRuns;
1241 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1242 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1243 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1244 Size textArea(100.f, 300.f);
1245 Size layoutSize(89.f, 51.f);
1248 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 60.f, -9.f, 71.f, -9.f, 77.f, -13.f, 80.f, -13.f, 89.f, -0.f,
1249 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
1251 struct LineRun line0 =
1264 struct LineRun line1 =
1277 Vector<LineRun> lines;
1278 lines.PushBack( line0 );
1279 lines.PushBack( line1 );
1281 LayoutTextData data =
1283 "Layout simple text with one character with a different font size.",
1284 "Hello world demo.",
1287 fontDescriptionRuns.Begin(),
1293 Layout::Engine::MULTI_LINE_BOX,
1300 if( !LayoutTextTest( data ) )
1302 tet_result(TET_FAIL);
1305 tet_result(TET_PASS);
1309 int UtcDaliTextLayoutMultilineText06(void)
1311 ToolkitTestApplication application;
1312 tet_infoline(" UtcDaliTextLayoutMultilineText06");
1314 const std::string fontFamily( "TizenSansHebrew" );
1316 // Set a known font description
1317 FontDescriptionRun fontDescriptionRun;
1318 fontDescriptionRun.characterRun.characterIndex = 0u;
1319 fontDescriptionRun.characterRun.numberOfCharacters = 10u;
1320 fontDescriptionRun.familyLength = fontFamily.size();
1321 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1322 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1323 fontDescriptionRun.familyDefined = true;
1324 fontDescriptionRun.weightDefined = false;
1325 fontDescriptionRun.widthDefined = false;
1326 fontDescriptionRun.slantDefined = false;
1327 fontDescriptionRun.sizeDefined = false;
1329 Vector<FontDescriptionRun> fontDescriptionRuns;
1330 fontDescriptionRuns.PushBack( fontDescriptionRun );
1332 Size textArea(64.f, 100.f);
1333 Size layoutSize(33.f, 38.f);
1336 28.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
1337 23.f, -10.f, 18.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
1339 struct LineRun line0 =
1352 struct LineRun line1 =
1365 Vector<LineRun> lines;
1366 lines.PushBack( line0 );
1367 lines.PushBack( line1 );
1369 LayoutTextData data =
1371 "Layout right to left text that doesn't fit in the text area after reordering.",
1372 "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
1375 fontDescriptionRuns.Begin(),
1381 Layout::Engine::MULTI_LINE_BOX,
1388 if( !LayoutTextTest( data ) )
1390 tet_result(TET_FAIL);
1393 tet_result(TET_PASS);
1397 int UtcDaliTextLayoutMultilineText07(void)
1399 ToolkitTestApplication application;
1400 tet_infoline(" UtcDaliTextLayoutMultilineText07");
1402 const std::string fontFamily( "TizenSansHebrew" );
1404 // Set a known font description
1405 FontDescriptionRun fontDescriptionRun;
1406 fontDescriptionRun.characterRun.characterIndex = 0u;
1407 fontDescriptionRun.characterRun.numberOfCharacters = 9u;
1408 fontDescriptionRun.familyLength = fontFamily.size();
1409 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1410 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1411 fontDescriptionRun.familyDefined = true;
1412 fontDescriptionRun.weightDefined = false;
1413 fontDescriptionRun.widthDefined = false;
1414 fontDescriptionRun.slantDefined = false;
1415 fontDescriptionRun.sizeDefined = false;
1417 Vector<FontDescriptionRun> fontDescriptionRuns;
1418 fontDescriptionRuns.PushBack( fontDescriptionRun );
1420 Size textArea(26.f, 100.f);
1421 Size layoutSize(23.f, 57.f);
1424 11.f, -10.f, 5.f, -10.f, 0.f, -10.f,
1425 12.f, -10.f, 8.f, -10.f, 0.f, -13.f,
1426 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
1428 struct LineRun line0 =
1441 struct LineRun line1 =
1454 struct LineRun line2 =
1467 Vector<LineRun> lines;
1468 lines.PushBack( line0 );
1469 lines.PushBack( line1 );
1470 lines.PushBack( line2 );
1472 LayoutTextData data =
1474 "Layout a single word of right to left text that doesn't fit in one single line. When layouting ltr a piece of word fits in the line but it doesn't after reordering.",
1475 "שנורולכאן", // If a piece of this text is laid-out ltr the width is 26. When reordered, the length is 27. This might cause alignment issues.
1478 fontDescriptionRuns.Begin(),
1484 Layout::Engine::MULTI_LINE_BOX,
1491 if( !LayoutTextTest( data ) )
1493 tet_result(TET_FAIL);
1496 tet_result(TET_PASS);
1500 int UtcDaliTextUpdateLayout01(void)
1502 ToolkitTestApplication application;
1503 tet_infoline(" UtcDaliTextUpdateLayout01");
1505 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1507 const std::string fontLatin( "TizenSans" );
1508 const std::string fontHebrew( "TizenSansHebrew" );
1509 const std::string fontArabic( "TizenSansArabic" );
1511 // Set a known font description
1512 FontDescriptionRun fontDescriptionRun01;
1513 fontDescriptionRun01.characterRun.characterIndex = 0u;
1514 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1515 fontDescriptionRun01.familyLength = fontLatin.size();
1516 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1517 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1518 fontDescriptionRun01.familyDefined = true;
1519 fontDescriptionRun01.weightDefined = false;
1520 fontDescriptionRun01.widthDefined = false;
1521 fontDescriptionRun01.slantDefined = false;
1522 fontDescriptionRun01.sizeDefined = false;
1524 // Set a known font description
1525 FontDescriptionRun fontDescriptionRun02;
1526 fontDescriptionRun02.characterRun.characterIndex = 17u;
1527 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1528 fontDescriptionRun02.familyLength = fontHebrew.size();
1529 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1530 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1531 fontDescriptionRun02.familyDefined = true;
1532 fontDescriptionRun02.weightDefined = false;
1533 fontDescriptionRun02.widthDefined = false;
1534 fontDescriptionRun02.slantDefined = false;
1535 fontDescriptionRun02.sizeDefined = false;
1537 // Set a known font description
1538 FontDescriptionRun fontDescriptionRun03;
1539 fontDescriptionRun03.characterRun.characterIndex = 26u;
1540 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1541 fontDescriptionRun03.familyLength = fontLatin.size();
1542 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1543 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1544 fontDescriptionRun03.familyDefined = true;
1545 fontDescriptionRun03.weightDefined = false;
1546 fontDescriptionRun03.widthDefined = false;
1547 fontDescriptionRun03.slantDefined = false;
1548 fontDescriptionRun03.sizeDefined = false;
1550 // Set a known font description
1551 FontDescriptionRun fontDescriptionRun04;
1552 fontDescriptionRun04.characterRun.characterIndex = 28u;
1553 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1554 fontDescriptionRun04.familyLength = fontArabic.size();
1555 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1556 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1557 fontDescriptionRun04.familyDefined = true;
1558 fontDescriptionRun04.weightDefined = false;
1559 fontDescriptionRun04.widthDefined = false;
1560 fontDescriptionRun04.slantDefined = false;
1561 fontDescriptionRun04.sizeDefined = false;
1563 // Set a known font description
1564 FontDescriptionRun fontDescriptionRun05;
1565 fontDescriptionRun05.characterRun.characterIndex = 42u;
1566 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1567 fontDescriptionRun05.familyLength = fontLatin.size();
1568 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1569 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1570 fontDescriptionRun05.familyDefined = true;
1571 fontDescriptionRun05.weightDefined = false;
1572 fontDescriptionRun05.widthDefined = false;
1573 fontDescriptionRun05.slantDefined = false;
1574 fontDescriptionRun05.sizeDefined = false;
1576 // Set a known font description
1577 FontDescriptionRun fontDescriptionRun06;
1578 fontDescriptionRun06.characterRun.characterIndex = 54u;
1579 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1580 fontDescriptionRun06.familyLength = fontHebrew.size();
1581 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1582 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1583 fontDescriptionRun06.familyDefined = true;
1584 fontDescriptionRun06.weightDefined = false;
1585 fontDescriptionRun06.widthDefined = false;
1586 fontDescriptionRun06.slantDefined = false;
1587 fontDescriptionRun06.sizeDefined = false;
1589 // Set a known font description
1590 FontDescriptionRun fontDescriptionRun07;
1591 fontDescriptionRun07.characterRun.characterIndex = 64u;
1592 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1593 fontDescriptionRun07.familyLength = fontHebrew.size();
1594 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1595 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1596 fontDescriptionRun07.familyDefined = true;
1597 fontDescriptionRun07.weightDefined = false;
1598 fontDescriptionRun07.widthDefined = false;
1599 fontDescriptionRun07.slantDefined = false;
1600 fontDescriptionRun07.sizeDefined = false;
1602 // Set a known font description
1603 FontDescriptionRun fontDescriptionRun08;
1604 fontDescriptionRun08.characterRun.characterIndex = 74u;
1605 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1606 fontDescriptionRun08.familyLength = fontLatin.size();
1607 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1608 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1609 fontDescriptionRun08.familyDefined = true;
1610 fontDescriptionRun08.weightDefined = false;
1611 fontDescriptionRun08.widthDefined = false;
1612 fontDescriptionRun08.slantDefined = false;
1613 fontDescriptionRun08.sizeDefined = false;
1615 // Set a known font description
1616 FontDescriptionRun fontDescriptionRun09;
1617 fontDescriptionRun09.characterRun.characterIndex = 92u;
1618 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1619 fontDescriptionRun09.familyLength = fontLatin.size();
1620 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1621 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1622 fontDescriptionRun09.familyDefined = true;
1623 fontDescriptionRun09.weightDefined = false;
1624 fontDescriptionRun09.widthDefined = false;
1625 fontDescriptionRun09.slantDefined = false;
1626 fontDescriptionRun09.sizeDefined = false;
1628 // Set a known font description
1629 FontDescriptionRun fontDescriptionRun10;
1630 fontDescriptionRun10.characterRun.characterIndex = 104u;
1631 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1632 fontDescriptionRun10.familyLength = fontArabic.size();
1633 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1634 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1635 fontDescriptionRun10.familyDefined = true;
1636 fontDescriptionRun10.weightDefined = false;
1637 fontDescriptionRun10.widthDefined = false;
1638 fontDescriptionRun10.slantDefined = false;
1639 fontDescriptionRun10.sizeDefined = false;
1641 // Set a known font description
1642 FontDescriptionRun fontDescriptionRun11;
1643 fontDescriptionRun11.characterRun.characterIndex = 118u;
1644 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1645 fontDescriptionRun11.familyLength = fontHebrew.size();
1646 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1647 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1648 fontDescriptionRun11.familyDefined = true;
1649 fontDescriptionRun11.weightDefined = false;
1650 fontDescriptionRun11.widthDefined = false;
1651 fontDescriptionRun11.slantDefined = false;
1652 fontDescriptionRun11.sizeDefined = false;
1654 // Set a known font description
1655 FontDescriptionRun fontDescriptionRun12;
1656 fontDescriptionRun12.characterRun.characterIndex = 128u;
1657 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1658 fontDescriptionRun12.familyLength = fontLatin.size();
1659 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1660 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1661 fontDescriptionRun12.familyDefined = true;
1662 fontDescriptionRun12.weightDefined = false;
1663 fontDescriptionRun12.widthDefined = false;
1664 fontDescriptionRun12.slantDefined = false;
1665 fontDescriptionRun12.sizeDefined = false;
1667 // Set a known font description
1668 FontDescriptionRun fontDescriptionRun13;
1669 fontDescriptionRun13.characterRun.characterIndex = 145u;
1670 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1671 fontDescriptionRun13.familyLength = fontHebrew.size();
1672 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1673 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1674 fontDescriptionRun13.familyDefined = true;
1675 fontDescriptionRun13.weightDefined = false;
1676 fontDescriptionRun13.widthDefined = false;
1677 fontDescriptionRun13.slantDefined = false;
1678 fontDescriptionRun13.sizeDefined = false;
1680 // Set a known font description
1681 FontDescriptionRun fontDescriptionRun14;
1682 fontDescriptionRun14.characterRun.characterIndex = 154u;
1683 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1684 fontDescriptionRun14.familyLength = fontLatin.size();
1685 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1686 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1687 fontDescriptionRun14.familyDefined = true;
1688 fontDescriptionRun14.weightDefined = false;
1689 fontDescriptionRun14.widthDefined = false;
1690 fontDescriptionRun14.slantDefined = false;
1691 fontDescriptionRun14.sizeDefined = false;
1693 // Set a known font description
1694 FontDescriptionRun fontDescriptionRun15;
1695 fontDescriptionRun15.characterRun.characterIndex = 156u;
1696 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1697 fontDescriptionRun15.familyLength = fontHebrew.size();
1698 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1699 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1700 fontDescriptionRun15.familyDefined = true;
1701 fontDescriptionRun15.weightDefined = false;
1702 fontDescriptionRun15.widthDefined = false;
1703 fontDescriptionRun15.slantDefined = false;
1704 fontDescriptionRun15.sizeDefined = false;
1706 // Set a known font description
1707 FontDescriptionRun fontDescriptionRun16;
1708 fontDescriptionRun16.characterRun.characterIndex = 166u;
1709 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1710 fontDescriptionRun16.familyLength = fontLatin.size();
1711 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1712 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1713 fontDescriptionRun16.familyDefined = true;
1714 fontDescriptionRun16.weightDefined = false;
1715 fontDescriptionRun16.widthDefined = false;
1716 fontDescriptionRun16.slantDefined = false;
1717 fontDescriptionRun16.sizeDefined = false;
1719 // Set a known font description
1720 FontDescriptionRun fontDescriptionRun17;
1721 fontDescriptionRun17.characterRun.characterIndex = 178u;
1722 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1723 fontDescriptionRun17.familyLength = fontArabic.size();
1724 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1725 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1726 fontDescriptionRun17.familyDefined = true;
1727 fontDescriptionRun17.weightDefined = false;
1728 fontDescriptionRun17.widthDefined = false;
1729 fontDescriptionRun17.slantDefined = false;
1730 fontDescriptionRun17.sizeDefined = false;
1732 Vector<FontDescriptionRun> fontDescriptionRuns;
1733 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1734 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1735 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1736 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1737 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1738 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1739 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1740 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1741 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1742 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1743 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1744 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1745 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1746 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1747 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1748 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1749 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1750 Size textArea(100.f, 300.f);
1751 Size layoutSize(100.f, 361.f);
1754 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
1755 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
1756 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
1757 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
1758 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
1759 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
1760 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
1761 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
1762 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
1763 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
1764 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
1765 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
1766 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
1767 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
1768 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
1769 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
1770 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
1771 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
1774 struct LineRun line01 =
1787 struct LineRun line02 =
1800 struct LineRun line03 =
1813 struct LineRun line04 =
1826 struct LineRun line05 =
1839 struct LineRun line06 =
1852 struct LineRun line07 =
1865 struct LineRun line08 =
1878 struct LineRun line09 =
1891 struct LineRun line10 =
1904 struct LineRun line11 =
1917 struct LineRun line12 =
1930 struct LineRun line13 =
1943 struct LineRun line14 =
1956 struct LineRun line15 =
1969 struct LineRun line16 =
1982 struct LineRun line17 =
1995 struct LineRun line18 =
2008 struct LineRun line19 =
2021 Vector<LineRun> lines;
2022 lines.PushBack( line01 );
2023 lines.PushBack( line02 );
2024 lines.PushBack( line03 );
2025 lines.PushBack( line04 );
2026 lines.PushBack( line05 );
2027 lines.PushBack( line06 );
2028 lines.PushBack( line07 );
2029 lines.PushBack( line08 );
2030 lines.PushBack( line09 );
2031 lines.PushBack( line10 );
2032 lines.PushBack( line11 );
2033 lines.PushBack( line12 );
2034 lines.PushBack( line13 );
2035 lines.PushBack( line14 );
2036 lines.PushBack( line15 );
2037 lines.PushBack( line16 );
2038 lines.PushBack( line17 );
2039 lines.PushBack( line18 );
2040 lines.PushBack( line19 );
2042 LayoutTextData data =
2044 "Layout bidirectional text.",
2045 "Hello world demo שלום עולם.\n"
2046 "مرحبا بالعالم hello world שלום עולם\n"
2047 "שלום עולם hello world demo.\n"
2048 "hello world مرحبا بالعالم שלום עולם\n"
2049 "Hello world demo שלום עולם.\n"
2050 "שלום עולם hello world مرحبا بالعالم\n",
2053 fontDescriptionRuns.Begin(),
2059 Layout::Engine::MULTI_LINE_BOX,
2066 if( !LayoutTextTest( data ) )
2068 tet_result(TET_FAIL);
2071 tet_result(TET_PASS);
2075 int UtcDaliTextUpdateLayout02(void)
2077 ToolkitTestApplication application;
2078 tet_infoline(" UtcDaliTextUpdateLayout02");
2080 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2082 const std::string fontLatin( "TizenSans" );
2083 const std::string fontHebrew( "TizenSansHebrew" );
2084 const std::string fontArabic( "TizenSansArabic" );
2086 // Set a known font description
2087 FontDescriptionRun fontDescriptionRun01;
2088 fontDescriptionRun01.characterRun.characterIndex = 0u;
2089 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2090 fontDescriptionRun01.familyLength = fontLatin.size();
2091 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2092 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2093 fontDescriptionRun01.familyDefined = true;
2094 fontDescriptionRun01.weightDefined = false;
2095 fontDescriptionRun01.widthDefined = false;
2096 fontDescriptionRun01.slantDefined = false;
2097 fontDescriptionRun01.sizeDefined = false;
2099 // Set a known font description
2100 FontDescriptionRun fontDescriptionRun02;
2101 fontDescriptionRun02.characterRun.characterIndex = 17u;
2102 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2103 fontDescriptionRun02.familyLength = fontHebrew.size();
2104 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2105 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2106 fontDescriptionRun02.familyDefined = true;
2107 fontDescriptionRun02.weightDefined = false;
2108 fontDescriptionRun02.widthDefined = false;
2109 fontDescriptionRun02.slantDefined = false;
2110 fontDescriptionRun02.sizeDefined = false;
2112 // Set a known font description
2113 FontDescriptionRun fontDescriptionRun03;
2114 fontDescriptionRun03.characterRun.characterIndex = 26u;
2115 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2116 fontDescriptionRun03.familyLength = fontLatin.size();
2117 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2118 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2119 fontDescriptionRun03.familyDefined = true;
2120 fontDescriptionRun03.weightDefined = false;
2121 fontDescriptionRun03.widthDefined = false;
2122 fontDescriptionRun03.slantDefined = false;
2123 fontDescriptionRun03.sizeDefined = false;
2125 // Set a known font description
2126 FontDescriptionRun fontDescriptionRun04;
2127 fontDescriptionRun04.characterRun.characterIndex = 28u;
2128 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2129 fontDescriptionRun04.familyLength = fontArabic.size();
2130 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2131 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2132 fontDescriptionRun04.familyDefined = true;
2133 fontDescriptionRun04.weightDefined = false;
2134 fontDescriptionRun04.widthDefined = false;
2135 fontDescriptionRun04.slantDefined = false;
2136 fontDescriptionRun04.sizeDefined = false;
2138 // Set a known font description
2139 FontDescriptionRun fontDescriptionRun05;
2140 fontDescriptionRun05.characterRun.characterIndex = 42u;
2141 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2142 fontDescriptionRun05.familyLength = fontLatin.size();
2143 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2144 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2145 fontDescriptionRun05.familyDefined = true;
2146 fontDescriptionRun05.weightDefined = false;
2147 fontDescriptionRun05.widthDefined = false;
2148 fontDescriptionRun05.slantDefined = false;
2149 fontDescriptionRun05.sizeDefined = false;
2151 // Set a known font description
2152 FontDescriptionRun fontDescriptionRun06;
2153 fontDescriptionRun06.characterRun.characterIndex = 54u;
2154 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2155 fontDescriptionRun06.familyLength = fontHebrew.size();
2156 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2157 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2158 fontDescriptionRun06.familyDefined = true;
2159 fontDescriptionRun06.weightDefined = false;
2160 fontDescriptionRun06.widthDefined = false;
2161 fontDescriptionRun06.slantDefined = false;
2162 fontDescriptionRun06.sizeDefined = false;
2164 // Set a known font description
2165 FontDescriptionRun fontDescriptionRun07;
2166 fontDescriptionRun07.characterRun.characterIndex = 64u;
2167 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2168 fontDescriptionRun07.familyLength = fontHebrew.size();
2169 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2170 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2171 fontDescriptionRun07.familyDefined = true;
2172 fontDescriptionRun07.weightDefined = false;
2173 fontDescriptionRun07.widthDefined = false;
2174 fontDescriptionRun07.slantDefined = false;
2175 fontDescriptionRun07.sizeDefined = false;
2177 // Set a known font description
2178 FontDescriptionRun fontDescriptionRun08;
2179 fontDescriptionRun08.characterRun.characterIndex = 74u;
2180 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2181 fontDescriptionRun08.familyLength = fontLatin.size();
2182 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2183 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2184 fontDescriptionRun08.familyDefined = true;
2185 fontDescriptionRun08.weightDefined = false;
2186 fontDescriptionRun08.widthDefined = false;
2187 fontDescriptionRun08.slantDefined = false;
2188 fontDescriptionRun08.sizeDefined = false;
2190 // Set a known font description
2191 FontDescriptionRun fontDescriptionRun09;
2192 fontDescriptionRun09.characterRun.characterIndex = 92u;
2193 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2194 fontDescriptionRun09.familyLength = fontLatin.size();
2195 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2196 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2197 fontDescriptionRun09.familyDefined = true;
2198 fontDescriptionRun09.weightDefined = false;
2199 fontDescriptionRun09.widthDefined = false;
2200 fontDescriptionRun09.slantDefined = false;
2201 fontDescriptionRun09.sizeDefined = false;
2203 // Set a known font description
2204 FontDescriptionRun fontDescriptionRun10;
2205 fontDescriptionRun10.characterRun.characterIndex = 104u;
2206 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2207 fontDescriptionRun10.familyLength = fontArabic.size();
2208 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2209 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2210 fontDescriptionRun10.familyDefined = true;
2211 fontDescriptionRun10.weightDefined = false;
2212 fontDescriptionRun10.widthDefined = false;
2213 fontDescriptionRun10.slantDefined = false;
2214 fontDescriptionRun10.sizeDefined = false;
2216 // Set a known font description
2217 FontDescriptionRun fontDescriptionRun11;
2218 fontDescriptionRun11.characterRun.characterIndex = 118u;
2219 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2220 fontDescriptionRun11.familyLength = fontHebrew.size();
2221 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2222 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2223 fontDescriptionRun11.familyDefined = true;
2224 fontDescriptionRun11.weightDefined = false;
2225 fontDescriptionRun11.widthDefined = false;
2226 fontDescriptionRun11.slantDefined = false;
2227 fontDescriptionRun11.sizeDefined = false;
2229 // Set a known font description
2230 FontDescriptionRun fontDescriptionRun12;
2231 fontDescriptionRun12.characterRun.characterIndex = 128u;
2232 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2233 fontDescriptionRun12.familyLength = fontLatin.size();
2234 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2235 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2236 fontDescriptionRun12.familyDefined = true;
2237 fontDescriptionRun12.weightDefined = false;
2238 fontDescriptionRun12.widthDefined = false;
2239 fontDescriptionRun12.slantDefined = false;
2240 fontDescriptionRun12.sizeDefined = false;
2242 // Set a known font description
2243 FontDescriptionRun fontDescriptionRun13;
2244 fontDescriptionRun13.characterRun.characterIndex = 145u;
2245 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2246 fontDescriptionRun13.familyLength = fontHebrew.size();
2247 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2248 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2249 fontDescriptionRun13.familyDefined = true;
2250 fontDescriptionRun13.weightDefined = false;
2251 fontDescriptionRun13.widthDefined = false;
2252 fontDescriptionRun13.slantDefined = false;
2253 fontDescriptionRun13.sizeDefined = false;
2255 // Set a known font description
2256 FontDescriptionRun fontDescriptionRun14;
2257 fontDescriptionRun14.characterRun.characterIndex = 154u;
2258 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2259 fontDescriptionRun14.familyLength = fontLatin.size();
2260 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2261 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2262 fontDescriptionRun14.familyDefined = true;
2263 fontDescriptionRun14.weightDefined = false;
2264 fontDescriptionRun14.widthDefined = false;
2265 fontDescriptionRun14.slantDefined = false;
2266 fontDescriptionRun14.sizeDefined = false;
2268 // Set a known font description
2269 FontDescriptionRun fontDescriptionRun15;
2270 fontDescriptionRun15.characterRun.characterIndex = 156u;
2271 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2272 fontDescriptionRun15.familyLength = fontHebrew.size();
2273 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2274 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2275 fontDescriptionRun15.familyDefined = true;
2276 fontDescriptionRun15.weightDefined = false;
2277 fontDescriptionRun15.widthDefined = false;
2278 fontDescriptionRun15.slantDefined = false;
2279 fontDescriptionRun15.sizeDefined = false;
2281 // Set a known font description
2282 FontDescriptionRun fontDescriptionRun16;
2283 fontDescriptionRun16.characterRun.characterIndex = 166u;
2284 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2285 fontDescriptionRun16.familyLength = fontLatin.size();
2286 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2287 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2288 fontDescriptionRun16.familyDefined = true;
2289 fontDescriptionRun16.weightDefined = false;
2290 fontDescriptionRun16.widthDefined = false;
2291 fontDescriptionRun16.slantDefined = false;
2292 fontDescriptionRun16.sizeDefined = false;
2294 // Set a known font description
2295 FontDescriptionRun fontDescriptionRun17;
2296 fontDescriptionRun17.characterRun.characterIndex = 178u;
2297 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2298 fontDescriptionRun17.familyLength = fontArabic.size();
2299 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2300 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2301 fontDescriptionRun17.familyDefined = true;
2302 fontDescriptionRun17.weightDefined = false;
2303 fontDescriptionRun17.widthDefined = false;
2304 fontDescriptionRun17.slantDefined = false;
2305 fontDescriptionRun17.sizeDefined = false;
2307 Vector<FontDescriptionRun> fontDescriptionRuns;
2308 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2309 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2310 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2311 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2312 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2313 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2314 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2315 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2316 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2317 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2318 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2319 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2320 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2321 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2322 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2323 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2324 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2325 Size textArea(100.f, 300.f);
2326 Size layoutSize(100.f, 361.f);
2329 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
2330 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
2331 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
2332 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
2333 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
2334 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2335 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2336 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
2337 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
2338 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
2339 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
2340 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2341 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
2342 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
2343 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
2344 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2345 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
2346 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
2349 struct LineRun line01 =
2362 struct LineRun line02 =
2375 struct LineRun line03 =
2388 struct LineRun line04 =
2401 struct LineRun line05 =
2414 struct LineRun line06 =
2427 struct LineRun line07 =
2440 struct LineRun line08 =
2453 struct LineRun line09 =
2466 struct LineRun line10 =
2479 struct LineRun line11 =
2492 struct LineRun line12 =
2505 struct LineRun line13 =
2518 struct LineRun line14 =
2531 struct LineRun line15 =
2544 struct LineRun line16 =
2557 struct LineRun line17 =
2570 struct LineRun line18 =
2583 struct LineRun line19 =
2596 Vector<LineRun> lines;
2597 lines.PushBack( line01 );
2598 lines.PushBack( line02 );
2599 lines.PushBack( line03 );
2600 lines.PushBack( line04 );
2601 lines.PushBack( line05 );
2602 lines.PushBack( line06 );
2603 lines.PushBack( line07 );
2604 lines.PushBack( line08 );
2605 lines.PushBack( line09 );
2606 lines.PushBack( line10 );
2607 lines.PushBack( line11 );
2608 lines.PushBack( line12 );
2609 lines.PushBack( line13 );
2610 lines.PushBack( line14 );
2611 lines.PushBack( line15 );
2612 lines.PushBack( line16 );
2613 lines.PushBack( line17 );
2614 lines.PushBack( line18 );
2615 lines.PushBack( line19 );
2617 LayoutTextData data =
2619 "Layout bidirectional text.",
2620 "Hello world demo שלום עולם.\n"
2621 "مرحبا بالعالم hello world שלום עולם\n"
2622 "שלום עולם hello world demo.\n"
2623 "hello world مرحبا بالعالم שלום עולם\n"
2624 "Hello world demo שלום עולם.\n"
2625 "שלום עולם hello world مرحبا بالعالم\n",
2628 fontDescriptionRuns.Begin(),
2634 Layout::Engine::MULTI_LINE_BOX,
2641 if( !LayoutTextTest( data ) )
2643 tet_result(TET_FAIL);
2646 tet_result(TET_PASS);
2650 int UtcDaliTextUpdateLayout03(void)
2652 ToolkitTestApplication application;
2653 tet_infoline(" UtcDaliTextUpdateLayout03");
2655 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2657 const std::string fontLatin( "TizenSans" );
2658 const std::string fontHebrew( "TizenSansHebrew" );
2659 const std::string fontArabic( "TizenSansArabic" );
2661 // Set a known font description
2662 FontDescriptionRun fontDescriptionRun01;
2663 fontDescriptionRun01.characterRun.characterIndex = 0u;
2664 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2665 fontDescriptionRun01.familyLength = fontLatin.size();
2666 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2667 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2668 fontDescriptionRun01.familyDefined = true;
2669 fontDescriptionRun01.weightDefined = false;
2670 fontDescriptionRun01.widthDefined = false;
2671 fontDescriptionRun01.slantDefined = false;
2672 fontDescriptionRun01.sizeDefined = false;
2674 // Set a known font description
2675 FontDescriptionRun fontDescriptionRun02;
2676 fontDescriptionRun02.characterRun.characterIndex = 17u;
2677 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2678 fontDescriptionRun02.familyLength = fontHebrew.size();
2679 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2680 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2681 fontDescriptionRun02.familyDefined = true;
2682 fontDescriptionRun02.weightDefined = false;
2683 fontDescriptionRun02.widthDefined = false;
2684 fontDescriptionRun02.slantDefined = false;
2685 fontDescriptionRun02.sizeDefined = false;
2687 // Set a known font description
2688 FontDescriptionRun fontDescriptionRun03;
2689 fontDescriptionRun03.characterRun.characterIndex = 26u;
2690 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2691 fontDescriptionRun03.familyLength = fontLatin.size();
2692 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2693 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2694 fontDescriptionRun03.familyDefined = true;
2695 fontDescriptionRun03.weightDefined = false;
2696 fontDescriptionRun03.widthDefined = false;
2697 fontDescriptionRun03.slantDefined = false;
2698 fontDescriptionRun03.sizeDefined = false;
2700 // Set a known font description
2701 FontDescriptionRun fontDescriptionRun04;
2702 fontDescriptionRun04.characterRun.characterIndex = 28u;
2703 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2704 fontDescriptionRun04.familyLength = fontArabic.size();
2705 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2706 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2707 fontDescriptionRun04.familyDefined = true;
2708 fontDescriptionRun04.weightDefined = false;
2709 fontDescriptionRun04.widthDefined = false;
2710 fontDescriptionRun04.slantDefined = false;
2711 fontDescriptionRun04.sizeDefined = false;
2713 // Set a known font description
2714 FontDescriptionRun fontDescriptionRun05;
2715 fontDescriptionRun05.characterRun.characterIndex = 42u;
2716 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2717 fontDescriptionRun05.familyLength = fontLatin.size();
2718 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2719 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2720 fontDescriptionRun05.familyDefined = true;
2721 fontDescriptionRun05.weightDefined = false;
2722 fontDescriptionRun05.widthDefined = false;
2723 fontDescriptionRun05.slantDefined = false;
2724 fontDescriptionRun05.sizeDefined = false;
2726 // Set a known font description
2727 FontDescriptionRun fontDescriptionRun06;
2728 fontDescriptionRun06.characterRun.characterIndex = 54u;
2729 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2730 fontDescriptionRun06.familyLength = fontHebrew.size();
2731 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2732 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2733 fontDescriptionRun06.familyDefined = true;
2734 fontDescriptionRun06.weightDefined = false;
2735 fontDescriptionRun06.widthDefined = false;
2736 fontDescriptionRun06.slantDefined = false;
2737 fontDescriptionRun06.sizeDefined = false;
2739 // Set a known font description
2740 FontDescriptionRun fontDescriptionRun07;
2741 fontDescriptionRun07.characterRun.characterIndex = 64u;
2742 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2743 fontDescriptionRun07.familyLength = fontHebrew.size();
2744 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2745 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2746 fontDescriptionRun07.familyDefined = true;
2747 fontDescriptionRun07.weightDefined = false;
2748 fontDescriptionRun07.widthDefined = false;
2749 fontDescriptionRun07.slantDefined = false;
2750 fontDescriptionRun07.sizeDefined = false;
2752 // Set a known font description
2753 FontDescriptionRun fontDescriptionRun08;
2754 fontDescriptionRun08.characterRun.characterIndex = 74u;
2755 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2756 fontDescriptionRun08.familyLength = fontLatin.size();
2757 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2758 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2759 fontDescriptionRun08.familyDefined = true;
2760 fontDescriptionRun08.weightDefined = false;
2761 fontDescriptionRun08.widthDefined = false;
2762 fontDescriptionRun08.slantDefined = false;
2763 fontDescriptionRun08.sizeDefined = false;
2765 // Set a known font description
2766 FontDescriptionRun fontDescriptionRun09;
2767 fontDescriptionRun09.characterRun.characterIndex = 92u;
2768 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2769 fontDescriptionRun09.familyLength = fontLatin.size();
2770 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2771 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2772 fontDescriptionRun09.familyDefined = true;
2773 fontDescriptionRun09.weightDefined = false;
2774 fontDescriptionRun09.widthDefined = false;
2775 fontDescriptionRun09.slantDefined = false;
2776 fontDescriptionRun09.sizeDefined = false;
2778 // Set a known font description
2779 FontDescriptionRun fontDescriptionRun10;
2780 fontDescriptionRun10.characterRun.characterIndex = 104u;
2781 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2782 fontDescriptionRun10.familyLength = fontArabic.size();
2783 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2784 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2785 fontDescriptionRun10.familyDefined = true;
2786 fontDescriptionRun10.weightDefined = false;
2787 fontDescriptionRun10.widthDefined = false;
2788 fontDescriptionRun10.slantDefined = false;
2789 fontDescriptionRun10.sizeDefined = false;
2791 // Set a known font description
2792 FontDescriptionRun fontDescriptionRun11;
2793 fontDescriptionRun11.characterRun.characterIndex = 118u;
2794 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2795 fontDescriptionRun11.familyLength = fontHebrew.size();
2796 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2797 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2798 fontDescriptionRun11.familyDefined = true;
2799 fontDescriptionRun11.weightDefined = false;
2800 fontDescriptionRun11.widthDefined = false;
2801 fontDescriptionRun11.slantDefined = false;
2802 fontDescriptionRun11.sizeDefined = false;
2804 // Set a known font description
2805 FontDescriptionRun fontDescriptionRun12;
2806 fontDescriptionRun12.characterRun.characterIndex = 128u;
2807 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2808 fontDescriptionRun12.familyLength = fontLatin.size();
2809 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2810 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2811 fontDescriptionRun12.familyDefined = true;
2812 fontDescriptionRun12.weightDefined = false;
2813 fontDescriptionRun12.widthDefined = false;
2814 fontDescriptionRun12.slantDefined = false;
2815 fontDescriptionRun12.sizeDefined = false;
2817 // Set a known font description
2818 FontDescriptionRun fontDescriptionRun13;
2819 fontDescriptionRun13.characterRun.characterIndex = 145u;
2820 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2821 fontDescriptionRun13.familyLength = fontHebrew.size();
2822 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2823 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2824 fontDescriptionRun13.familyDefined = true;
2825 fontDescriptionRun13.weightDefined = false;
2826 fontDescriptionRun13.widthDefined = false;
2827 fontDescriptionRun13.slantDefined = false;
2828 fontDescriptionRun13.sizeDefined = false;
2830 // Set a known font description
2831 FontDescriptionRun fontDescriptionRun14;
2832 fontDescriptionRun14.characterRun.characterIndex = 154u;
2833 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2834 fontDescriptionRun14.familyLength = fontLatin.size();
2835 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2836 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2837 fontDescriptionRun14.familyDefined = true;
2838 fontDescriptionRun14.weightDefined = false;
2839 fontDescriptionRun14.widthDefined = false;
2840 fontDescriptionRun14.slantDefined = false;
2841 fontDescriptionRun14.sizeDefined = false;
2843 // Set a known font description
2844 FontDescriptionRun fontDescriptionRun15;
2845 fontDescriptionRun15.characterRun.characterIndex = 156u;
2846 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2847 fontDescriptionRun15.familyLength = fontHebrew.size();
2848 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2849 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2850 fontDescriptionRun15.familyDefined = true;
2851 fontDescriptionRun15.weightDefined = false;
2852 fontDescriptionRun15.widthDefined = false;
2853 fontDescriptionRun15.slantDefined = false;
2854 fontDescriptionRun15.sizeDefined = false;
2856 // Set a known font description
2857 FontDescriptionRun fontDescriptionRun16;
2858 fontDescriptionRun16.characterRun.characterIndex = 166u;
2859 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2860 fontDescriptionRun16.familyLength = fontLatin.size();
2861 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2862 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2863 fontDescriptionRun16.familyDefined = true;
2864 fontDescriptionRun16.weightDefined = false;
2865 fontDescriptionRun16.widthDefined = false;
2866 fontDescriptionRun16.slantDefined = false;
2867 fontDescriptionRun16.sizeDefined = false;
2869 // Set a known font description
2870 FontDescriptionRun fontDescriptionRun17;
2871 fontDescriptionRun17.characterRun.characterIndex = 178u;
2872 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2873 fontDescriptionRun17.familyLength = fontArabic.size();
2874 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2875 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2876 fontDescriptionRun17.familyDefined = true;
2877 fontDescriptionRun17.weightDefined = false;
2878 fontDescriptionRun17.widthDefined = false;
2879 fontDescriptionRun17.slantDefined = false;
2880 fontDescriptionRun17.sizeDefined = false;
2882 Vector<FontDescriptionRun> fontDescriptionRuns;
2883 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2884 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2885 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2886 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2887 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2888 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2889 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2890 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2891 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2892 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2893 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2894 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2895 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2896 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2897 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2898 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2899 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2900 Size textArea(100.f, 300.f);
2901 Size layoutSize(100.f, 361.f);
2904 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 0 .. 11
2905 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 12 .. 21
2906 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 22 .. 27
2907 58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, // 28 .. 47
2908 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f, // 48 .. 58
2909 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2910 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2911 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 74 .. 85
2912 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f, // 86 .. 91
2913 0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f, // 92 .. 103
2914 91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f, // 104 .. 122
2915 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2916 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, // 128 .. 139
2917 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f, // 140 .. 149
2918 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f, // 150 .. 155
2919 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2920 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, // 166 .. 177
2921 54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f, // 178 .. 191
2924 struct LineRun line01 =
2937 struct LineRun line02 =
2950 struct LineRun line03 =
2963 struct LineRun line04 =
2976 struct LineRun line05 =
2989 struct LineRun line06 =
3002 struct LineRun line07 =
3015 struct LineRun line08 =
3028 struct LineRun line09 =
3041 struct LineRun line10 =
3054 struct LineRun line11 =
3067 struct LineRun line12 =
3080 struct LineRun line13 =
3093 struct LineRun line14 =
3106 struct LineRun line15 =
3119 struct LineRun line16 =
3132 struct LineRun line17 =
3145 struct LineRun line18 =
3158 struct LineRun line19 =
3171 Vector<LineRun> lines;
3172 lines.PushBack( line01 );
3173 lines.PushBack( line02 );
3174 lines.PushBack( line03 );
3175 lines.PushBack( line04 );
3176 lines.PushBack( line05 );
3177 lines.PushBack( line06 );
3178 lines.PushBack( line07 );
3179 lines.PushBack( line08 );
3180 lines.PushBack( line09 );
3181 lines.PushBack( line10 );
3182 lines.PushBack( line11 );
3183 lines.PushBack( line12 );
3184 lines.PushBack( line13 );
3185 lines.PushBack( line14 );
3186 lines.PushBack( line15 );
3187 lines.PushBack( line16 );
3188 lines.PushBack( line17 );
3189 lines.PushBack( line18 );
3190 lines.PushBack( line19 );
3192 LayoutTextData data =
3194 "Layout bidirectional text.",
3195 "Hello world demo שלום עולם.\n"
3196 "مرحبا بالعالم hello world שלום עולם\n"
3197 "שלום עולם hello world demo.\n"
3198 "hello world مرحبا بالعالم שלום עולם\n"
3199 "Hello world demo שלום עולם.\n"
3200 "שלום עולם hello world مرحبا بالعالم\n",
3203 fontDescriptionRuns.Begin(),
3209 Layout::Engine::MULTI_LINE_BOX,
3216 if( !LayoutTextTest( data ) )
3218 tet_result(TET_FAIL);
3221 tet_result(TET_PASS);
3225 int UtcDaliTextLayoutEllipsis01(void)
3227 ToolkitTestApplication application;
3228 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3230 // Layout single-line LTR text with ellipsis.
3232 const std::string fontLatin( "TizenSans" );
3234 // Set a known font description
3235 FontDescriptionRun fontDescriptionRun01;
3236 fontDescriptionRun01.characterRun.characterIndex = 0u;
3237 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3238 fontDescriptionRun01.familyLength = fontLatin.size();
3239 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3240 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3241 fontDescriptionRun01.familyDefined = true;
3242 fontDescriptionRun01.weightDefined = false;
3243 fontDescriptionRun01.widthDefined = false;
3244 fontDescriptionRun01.slantDefined = false;
3245 fontDescriptionRun01.sizeDefined = false;
3247 Vector<FontDescriptionRun> fontDescriptionRuns;
3248 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3250 struct LineRun line01 =
3263 Vector<LineRun> lines;
3264 lines.PushBack( line01 );
3268 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, 85.f, -13.f,
3271 Size textArea( 100.f, 50.f );
3272 Size layoutSize( 100.f, 19.f );
3274 LayoutTextData data =
3276 "Layout single-line LTR text with ellipsis.",
3277 "Hello world demo hello world demo hello world demo.",
3280 fontDescriptionRuns.Begin(),
3286 Layout::Engine::SINGLE_LINE_BOX,
3293 if( !LayoutTextTest( data ) )
3295 tet_result(TET_FAIL);
3298 tet_result(TET_PASS);
3302 int UtcDaliTextLayoutEllipsis02(void)
3304 ToolkitTestApplication application;
3305 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3307 // Layout multi-line LTR text with ellipsis.
3309 const std::string fontLatin( "TizenSans" );
3311 // Set a known font description
3312 FontDescriptionRun fontDescriptionRun01;
3313 fontDescriptionRun01.characterRun.characterIndex = 0u;
3314 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3315 fontDescriptionRun01.familyLength = fontLatin.size();
3316 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3317 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3318 fontDescriptionRun01.familyDefined = true;
3319 fontDescriptionRun01.weightDefined = false;
3320 fontDescriptionRun01.widthDefined = false;
3321 fontDescriptionRun01.slantDefined = false;
3322 fontDescriptionRun01.sizeDefined = false;
3324 Vector<FontDescriptionRun> fontDescriptionRuns;
3325 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3327 struct LineRun line01 =
3340 struct LineRun line02 =
3353 Vector<LineRun> lines;
3354 lines.PushBack( line01 );
3355 lines.PushBack( line02 );
3359 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
3360 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 46.f, -13.f, 54.f, -9.f, 64.f, -13.f, 68.f, -13.f, 71.f, -9.f, 80.f, -0.f, 84.f, -9.f,
3363 Size textArea( 100.f, 50.f );
3364 Size layoutSize( 100.f, 38.f );
3366 LayoutTextData data =
3368 "Layout multi-line LTR text with ellipsis.",
3369 "Hello world demo hello world demo hello world demo.",
3372 fontDescriptionRuns.Begin(),
3378 Layout::Engine::MULTI_LINE_BOX,
3385 if( !LayoutTextTest( data ) )
3387 tet_result(TET_FAIL);
3390 tet_result(TET_PASS);
3394 int UtcDaliTextLayoutEllipsis03(void)
3396 ToolkitTestApplication application;
3397 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3399 // Layout single-line RTL text with ellipsis.
3401 const std::string fontHebrew( "TizenSansHebrew" );
3402 const std::string fontArabic( "TizenSansArabic" );
3404 // Set a known font description
3405 FontDescriptionRun fontDescriptionRun01;
3406 fontDescriptionRun01.characterRun.characterIndex = 0u;
3407 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3408 fontDescriptionRun01.familyLength = fontHebrew.size();
3409 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3410 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3411 fontDescriptionRun01.familyDefined = true;
3412 fontDescriptionRun01.weightDefined = false;
3413 fontDescriptionRun01.widthDefined = false;
3414 fontDescriptionRun01.slantDefined = false;
3415 fontDescriptionRun01.sizeDefined = false;
3417 FontDescriptionRun fontDescriptionRun02;
3418 fontDescriptionRun02.characterRun.characterIndex = 10u;
3419 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3420 fontDescriptionRun02.familyLength = fontArabic.size();
3421 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3422 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3423 fontDescriptionRun02.familyDefined = true;
3424 fontDescriptionRun02.weightDefined = false;
3425 fontDescriptionRun02.widthDefined = false;
3426 fontDescriptionRun02.slantDefined = false;
3427 fontDescriptionRun02.sizeDefined = false;
3429 FontDescriptionRun fontDescriptionRun03;
3430 fontDescriptionRun03.characterRun.characterIndex = 24u;
3431 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3432 fontDescriptionRun03.familyLength = fontHebrew.size();
3433 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3434 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3435 fontDescriptionRun03.familyDefined = true;
3436 fontDescriptionRun03.weightDefined = false;
3437 fontDescriptionRun03.widthDefined = false;
3438 fontDescriptionRun03.slantDefined = false;
3439 fontDescriptionRun03.sizeDefined = false;
3441 FontDescriptionRun fontDescriptionRun04;
3442 fontDescriptionRun04.characterRun.characterIndex = 34u;
3443 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3444 fontDescriptionRun04.familyLength = fontArabic.size();
3445 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3446 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3447 fontDescriptionRun04.familyDefined = true;
3448 fontDescriptionRun04.weightDefined = false;
3449 fontDescriptionRun04.widthDefined = false;
3450 fontDescriptionRun04.slantDefined = false;
3451 fontDescriptionRun04.sizeDefined = false;
3453 FontDescriptionRun fontDescriptionRun05;
3454 fontDescriptionRun05.characterRun.characterIndex = 48u;
3455 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3456 fontDescriptionRun05.familyLength = fontHebrew.size();
3457 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3458 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3459 fontDescriptionRun05.familyDefined = true;
3460 fontDescriptionRun05.weightDefined = false;
3461 fontDescriptionRun05.widthDefined = false;
3462 fontDescriptionRun05.slantDefined = false;
3463 fontDescriptionRun05.sizeDefined = false;
3465 FontDescriptionRun fontDescriptionRun06;
3466 fontDescriptionRun06.characterRun.characterIndex = 58u;
3467 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3468 fontDescriptionRun06.familyLength = fontArabic.size();
3469 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3470 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3471 fontDescriptionRun06.familyDefined = true;
3472 fontDescriptionRun06.weightDefined = false;
3473 fontDescriptionRun06.widthDefined = false;
3474 fontDescriptionRun06.slantDefined = false;
3475 fontDescriptionRun06.sizeDefined = false;
3477 Vector<FontDescriptionRun> fontDescriptionRuns;
3478 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3479 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3480 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3481 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3482 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3483 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3485 struct LineRun line01 =
3498 Vector<LineRun> lines;
3499 lines.PushBack( line01 );
3503 88.f, -10.f, 80.f, -13.f, 74.f, -10.f, 66.f, -10.f, 60.f, -0.f, 52.f, -10.f, 47.f, -10.f, 39.f, -13.f, 30.f, -10.f, 24.f, -0.f, 17.f, -8.f, 12.f, -6.f, 4.f, -8.f, 0.f, -7.f, 77.f, -11.f, 72.f, -0.f,
3506 Size textArea( 100.f, 50.f );
3507 Size layoutSize( 100.f, 19.f );
3509 LayoutTextData data =
3511 "Layout single-line RTL text with ellipsis.",
3512 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3515 fontDescriptionRuns.Begin(),
3521 Layout::Engine::SINGLE_LINE_BOX,
3528 if( !LayoutTextTest( data ) )
3530 tet_result(TET_FAIL);
3533 tet_result(TET_PASS);
3537 int UtcDaliTextLayoutEllipsis04(void)
3539 ToolkitTestApplication application;
3540 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3542 // Layout multi-line RTL text with ellipsis.
3544 const std::string fontHebrew( "TizenSansHebrew" );
3545 const std::string fontArabic( "TizenSansArabic" );
3547 // Set a known font description
3548 FontDescriptionRun fontDescriptionRun01;
3549 fontDescriptionRun01.characterRun.characterIndex = 0u;
3550 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3551 fontDescriptionRun01.familyLength = fontHebrew.size();
3552 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3553 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3554 fontDescriptionRun01.familyDefined = true;
3555 fontDescriptionRun01.weightDefined = false;
3556 fontDescriptionRun01.widthDefined = false;
3557 fontDescriptionRun01.slantDefined = false;
3558 fontDescriptionRun01.sizeDefined = false;
3560 FontDescriptionRun fontDescriptionRun02;
3561 fontDescriptionRun02.characterRun.characterIndex = 10u;
3562 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3563 fontDescriptionRun02.familyLength = fontArabic.size();
3564 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3565 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3566 fontDescriptionRun02.familyDefined = true;
3567 fontDescriptionRun02.weightDefined = false;
3568 fontDescriptionRun02.widthDefined = false;
3569 fontDescriptionRun02.slantDefined = false;
3570 fontDescriptionRun02.sizeDefined = false;
3572 FontDescriptionRun fontDescriptionRun03;
3573 fontDescriptionRun03.characterRun.characterIndex = 24u;
3574 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3575 fontDescriptionRun03.familyLength = fontHebrew.size();
3576 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3577 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3578 fontDescriptionRun03.familyDefined = true;
3579 fontDescriptionRun03.weightDefined = false;
3580 fontDescriptionRun03.widthDefined = false;
3581 fontDescriptionRun03.slantDefined = false;
3582 fontDescriptionRun03.sizeDefined = false;
3584 FontDescriptionRun fontDescriptionRun04;
3585 fontDescriptionRun04.characterRun.characterIndex = 34u;
3586 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3587 fontDescriptionRun04.familyLength = fontArabic.size();
3588 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3589 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3590 fontDescriptionRun04.familyDefined = true;
3591 fontDescriptionRun04.weightDefined = false;
3592 fontDescriptionRun04.widthDefined = false;
3593 fontDescriptionRun04.slantDefined = false;
3594 fontDescriptionRun04.sizeDefined = false;
3596 FontDescriptionRun fontDescriptionRun05;
3597 fontDescriptionRun05.characterRun.characterIndex = 48u;
3598 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3599 fontDescriptionRun05.familyLength = fontHebrew.size();
3600 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3601 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3602 fontDescriptionRun05.familyDefined = true;
3603 fontDescriptionRun05.weightDefined = false;
3604 fontDescriptionRun05.widthDefined = false;
3605 fontDescriptionRun05.slantDefined = false;
3606 fontDescriptionRun05.sizeDefined = false;
3608 FontDescriptionRun fontDescriptionRun06;
3609 fontDescriptionRun06.characterRun.characterIndex = 58u;
3610 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3611 fontDescriptionRun06.familyLength = fontArabic.size();
3612 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3613 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3614 fontDescriptionRun06.familyDefined = true;
3615 fontDescriptionRun06.weightDefined = false;
3616 fontDescriptionRun06.widthDefined = false;
3617 fontDescriptionRun06.slantDefined = false;
3618 fontDescriptionRun06.sizeDefined = false;
3620 Vector<FontDescriptionRun> fontDescriptionRuns;
3621 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3622 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3623 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3624 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3625 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3626 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3628 struct LineRun line01 =
3641 struct LineRun line02 =
3654 Vector<LineRun> lines;
3655 lines.PushBack( line01 );
3656 lines.PushBack( line02 );
3660 63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, 95.f, -8.f, 90.f, -6.f, 82.f, -8.f, 78.f, -7.f, 77.f, -11.f, 72.f, -0.f,
3661 67.f, -7.f, 66.f, -11.f, 60.f, -11.f, 54.f, -8.f, 52.f, -11.f, 46.f, -11.f, 41.f, -8.f, 37.f, -0.f, 27.f, -10.f, 18.f, -13.f, 13.f, -10.f, 4.f, -10.f, 0.f, -0.f, 93.f, -10.f, 88.f, -10.f, 80.f, -13.f, 71.f, -10.f, 65.f, -0.f,
3664 Size textArea( 100.f, 50.f );
3665 Size layoutSize( 100.f, 38.f );
3667 LayoutTextData data =
3669 "Layout multi-line RTL text with ellipsis.",
3670 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3673 fontDescriptionRuns.Begin(),
3679 Layout::Engine::MULTI_LINE_BOX,
3686 if( !LayoutTextTest( data ) )
3688 tet_result(TET_FAIL);
3691 tet_result(TET_PASS);
3695 int UtcDaliTextLayoutEllipsis05(void)
3697 ToolkitTestApplication application;
3698 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3700 const std::string fontLatin( "TizenSans" );
3702 // Set a known font description
3703 FontDescriptionRun fontDescriptionRun01;
3704 fontDescriptionRun01.characterRun.characterIndex = 0u;
3705 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3706 fontDescriptionRun01.familyLength = fontLatin.size();
3707 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3708 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3709 fontDescriptionRun01.familyDefined = true;
3710 fontDescriptionRun01.weightDefined = false;
3711 fontDescriptionRun01.widthDefined = false;
3712 fontDescriptionRun01.slantDefined = false;
3713 fontDescriptionRun01.sizeDefined = false;
3715 Vector<FontDescriptionRun> fontDescriptionRuns;
3716 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3718 struct LineRun line01 =
3731 Vector<LineRun> lines;
3732 lines.PushBack( line01 );
3739 Size textArea( 100.f, 19.f );
3740 Size layoutSize( 81.f, 19.f );
3742 LayoutTextData data =
3744 "Not enough height.",
3748 fontDescriptionRuns.Begin(),
3754 Layout::Engine::MULTI_LINE_BOX,
3761 if( !LayoutTextTest( data ) )
3763 tet_result(TET_FAIL);
3766 tet_result(TET_PASS);
3770 int UtcDaliTextAlign01(void)
3772 ToolkitTestApplication application;
3773 tet_infoline(" UtcDaliTextAlign01");
3775 // Calculate text alignment.
3777 const std::string fontLatin( "TizenSans" );
3778 const std::string fontHebrew( "TizenSansHebrew" );
3779 const std::string fontArabic( "TizenSansArabic" );
3781 // Set a known font description
3782 FontDescriptionRun fontDescriptionRun01;
3783 fontDescriptionRun01.characterRun.characterIndex = 0u;
3784 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3785 fontDescriptionRun01.familyLength = fontLatin.size();
3786 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3787 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3788 fontDescriptionRun01.familyDefined = true;
3789 fontDescriptionRun01.weightDefined = false;
3790 fontDescriptionRun01.widthDefined = false;
3791 fontDescriptionRun01.slantDefined = false;
3792 fontDescriptionRun01.sizeDefined = false;
3794 FontDescriptionRun fontDescriptionRun02;
3795 fontDescriptionRun02.characterRun.characterIndex = 12u;
3796 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3797 fontDescriptionRun02.familyLength = fontHebrew.size();
3798 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3799 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3800 fontDescriptionRun02.familyDefined = true;
3801 fontDescriptionRun02.weightDefined = false;
3802 fontDescriptionRun02.widthDefined = false;
3803 fontDescriptionRun02.slantDefined = false;
3804 fontDescriptionRun02.sizeDefined = false;
3806 FontDescriptionRun fontDescriptionRun03;
3807 fontDescriptionRun03.characterRun.characterIndex = 22u;
3808 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3809 fontDescriptionRun03.familyLength = fontArabic.size();
3810 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3811 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3812 fontDescriptionRun03.familyDefined = true;
3813 fontDescriptionRun03.weightDefined = false;
3814 fontDescriptionRun03.widthDefined = false;
3815 fontDescriptionRun03.slantDefined = false;
3816 fontDescriptionRun03.sizeDefined = false;
3818 FontDescriptionRun fontDescriptionRun04;
3819 fontDescriptionRun04.characterRun.characterIndex = 36u;
3820 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3821 fontDescriptionRun04.familyLength = fontLatin.size();
3822 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3823 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3824 fontDescriptionRun04.familyDefined = true;
3825 fontDescriptionRun04.weightDefined = false;
3826 fontDescriptionRun04.widthDefined = false;
3827 fontDescriptionRun04.slantDefined = false;
3828 fontDescriptionRun04.sizeDefined = false;
3830 FontDescriptionRun fontDescriptionRun05;
3831 fontDescriptionRun05.characterRun.characterIndex = 48u;
3832 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3833 fontDescriptionRun05.familyLength = fontLatin.size();
3834 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3835 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3836 fontDescriptionRun05.familyDefined = true;
3837 fontDescriptionRun05.weightDefined = false;
3838 fontDescriptionRun05.widthDefined = false;
3839 fontDescriptionRun05.slantDefined = false;
3840 fontDescriptionRun05.sizeDefined = false;
3842 FontDescriptionRun fontDescriptionRun06;
3843 fontDescriptionRun06.characterRun.characterIndex = 60u;
3844 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3845 fontDescriptionRun06.familyLength = fontArabic.size();
3846 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3847 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3848 fontDescriptionRun06.familyDefined = true;
3849 fontDescriptionRun06.weightDefined = false;
3850 fontDescriptionRun06.widthDefined = false;
3851 fontDescriptionRun06.slantDefined = false;
3852 fontDescriptionRun06.sizeDefined = false;
3854 Vector<FontDescriptionRun> fontDescriptionRuns;
3855 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3856 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3857 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3858 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3859 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3860 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3862 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
3864 Size textArea( 100.f, 300.f );
3867 "Begin alignment for the first paragraph.",
3868 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3871 fontDescriptionRuns.Begin(),
3872 Text::HorizontalAlignment::BEGIN,
3873 Text::VerticalAlignment::TOP,
3878 Dali::LayoutDirection::LEFT_TO_RIGHT,
3882 if( !AlignTest( data ) )
3884 tet_result(TET_FAIL);
3887 tet_result(TET_PASS);
3891 int UtcDaliTextAlign02(void)
3893 ToolkitTestApplication application;
3894 tet_infoline(" UtcDaliTextAlign02");
3896 // Calculate text alignment.
3898 const std::string fontLatin( "TizenSans" );
3899 const std::string fontHebrew( "TizenSansHebrew" );
3900 const std::string fontArabic( "TizenSansArabic" );
3902 // Set a known font description
3903 FontDescriptionRun fontDescriptionRun01;
3904 fontDescriptionRun01.characterRun.characterIndex = 0u;
3905 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3906 fontDescriptionRun01.familyLength = fontLatin.size();
3907 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3908 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3909 fontDescriptionRun01.familyDefined = true;
3910 fontDescriptionRun01.weightDefined = false;
3911 fontDescriptionRun01.widthDefined = false;
3912 fontDescriptionRun01.slantDefined = false;
3913 fontDescriptionRun01.sizeDefined = false;
3915 FontDescriptionRun fontDescriptionRun02;
3916 fontDescriptionRun02.characterRun.characterIndex = 12u;
3917 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3918 fontDescriptionRun02.familyLength = fontHebrew.size();
3919 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3920 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3921 fontDescriptionRun02.familyDefined = true;
3922 fontDescriptionRun02.weightDefined = false;
3923 fontDescriptionRun02.widthDefined = false;
3924 fontDescriptionRun02.slantDefined = false;
3925 fontDescriptionRun02.sizeDefined = false;
3927 FontDescriptionRun fontDescriptionRun03;
3928 fontDescriptionRun03.characterRun.characterIndex = 22u;
3929 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3930 fontDescriptionRun03.familyLength = fontArabic.size();
3931 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3932 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3933 fontDescriptionRun03.familyDefined = true;
3934 fontDescriptionRun03.weightDefined = false;
3935 fontDescriptionRun03.widthDefined = false;
3936 fontDescriptionRun03.slantDefined = false;
3937 fontDescriptionRun03.sizeDefined = false;
3939 FontDescriptionRun fontDescriptionRun04;
3940 fontDescriptionRun04.characterRun.characterIndex = 36u;
3941 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3942 fontDescriptionRun04.familyLength = fontLatin.size();
3943 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3944 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3945 fontDescriptionRun04.familyDefined = true;
3946 fontDescriptionRun04.weightDefined = false;
3947 fontDescriptionRun04.widthDefined = false;
3948 fontDescriptionRun04.slantDefined = false;
3949 fontDescriptionRun04.sizeDefined = false;
3951 FontDescriptionRun fontDescriptionRun05;
3952 fontDescriptionRun05.characterRun.characterIndex = 48u;
3953 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3954 fontDescriptionRun05.familyLength = fontLatin.size();
3955 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3956 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3957 fontDescriptionRun05.familyDefined = true;
3958 fontDescriptionRun05.weightDefined = false;
3959 fontDescriptionRun05.widthDefined = false;
3960 fontDescriptionRun05.slantDefined = false;
3961 fontDescriptionRun05.sizeDefined = false;
3963 FontDescriptionRun fontDescriptionRun06;
3964 fontDescriptionRun06.characterRun.characterIndex = 60u;
3965 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3966 fontDescriptionRun06.familyLength = fontArabic.size();
3967 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3968 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3969 fontDescriptionRun06.familyDefined = true;
3970 fontDescriptionRun06.weightDefined = false;
3971 fontDescriptionRun06.widthDefined = false;
3972 fontDescriptionRun06.slantDefined = false;
3973 fontDescriptionRun06.sizeDefined = false;
3975 Vector<FontDescriptionRun> fontDescriptionRuns;
3976 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3977 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3978 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3979 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3980 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3981 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3983 float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
3985 Size textArea( 100.f, 300.f );
3988 "Begin alignment for the mid paragraph.",
3989 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3992 fontDescriptionRuns.Begin(),
3993 Text::HorizontalAlignment::BEGIN,
3994 Text::VerticalAlignment::TOP,
3999 Dali::LayoutDirection::LEFT_TO_RIGHT,
4003 if( !AlignTest( data ) )
4005 tet_result(TET_FAIL);
4008 tet_result(TET_PASS);
4012 int UtcDaliTextAlign03(void)
4014 ToolkitTestApplication application;
4015 tet_infoline(" UtcDaliTextAlign03");
4017 // Calculate text alignment.
4019 const std::string fontLatin( "TizenSans" );
4020 const std::string fontHebrew( "TizenSansHebrew" );
4021 const std::string fontArabic( "TizenSansArabic" );
4023 // Set a known font description
4024 FontDescriptionRun fontDescriptionRun01;
4025 fontDescriptionRun01.characterRun.characterIndex = 0u;
4026 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4027 fontDescriptionRun01.familyLength = fontLatin.size();
4028 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4029 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4030 fontDescriptionRun01.familyDefined = true;
4031 fontDescriptionRun01.weightDefined = false;
4032 fontDescriptionRun01.widthDefined = false;
4033 fontDescriptionRun01.slantDefined = false;
4034 fontDescriptionRun01.sizeDefined = false;
4036 FontDescriptionRun fontDescriptionRun02;
4037 fontDescriptionRun02.characterRun.characterIndex = 12u;
4038 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4039 fontDescriptionRun02.familyLength = fontHebrew.size();
4040 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4041 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4042 fontDescriptionRun02.familyDefined = true;
4043 fontDescriptionRun02.weightDefined = false;
4044 fontDescriptionRun02.widthDefined = false;
4045 fontDescriptionRun02.slantDefined = false;
4046 fontDescriptionRun02.sizeDefined = false;
4048 FontDescriptionRun fontDescriptionRun03;
4049 fontDescriptionRun03.characterRun.characterIndex = 22u;
4050 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4051 fontDescriptionRun03.familyLength = fontArabic.size();
4052 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4053 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4054 fontDescriptionRun03.familyDefined = true;
4055 fontDescriptionRun03.weightDefined = false;
4056 fontDescriptionRun03.widthDefined = false;
4057 fontDescriptionRun03.slantDefined = false;
4058 fontDescriptionRun03.sizeDefined = false;
4060 FontDescriptionRun fontDescriptionRun04;
4061 fontDescriptionRun04.characterRun.characterIndex = 36u;
4062 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4063 fontDescriptionRun04.familyLength = fontLatin.size();
4064 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4065 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4066 fontDescriptionRun04.familyDefined = true;
4067 fontDescriptionRun04.weightDefined = false;
4068 fontDescriptionRun04.widthDefined = false;
4069 fontDescriptionRun04.slantDefined = false;
4070 fontDescriptionRun04.sizeDefined = false;
4072 FontDescriptionRun fontDescriptionRun05;
4073 fontDescriptionRun05.characterRun.characterIndex = 48u;
4074 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4075 fontDescriptionRun05.familyLength = fontLatin.size();
4076 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4077 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4078 fontDescriptionRun05.familyDefined = true;
4079 fontDescriptionRun05.weightDefined = false;
4080 fontDescriptionRun05.widthDefined = false;
4081 fontDescriptionRun05.slantDefined = false;
4082 fontDescriptionRun05.sizeDefined = false;
4084 FontDescriptionRun fontDescriptionRun06;
4085 fontDescriptionRun06.characterRun.characterIndex = 60u;
4086 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4087 fontDescriptionRun06.familyLength = fontArabic.size();
4088 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4089 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4090 fontDescriptionRun06.familyDefined = true;
4091 fontDescriptionRun06.weightDefined = false;
4092 fontDescriptionRun06.widthDefined = false;
4093 fontDescriptionRun06.slantDefined = false;
4094 fontDescriptionRun06.sizeDefined = false;
4096 Vector<FontDescriptionRun> fontDescriptionRuns;
4097 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4098 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4099 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4100 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4101 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4102 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4104 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4106 Size textArea( 100.f, 300.f );
4109 "Begin alignment for the last paragraph.",
4110 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4113 fontDescriptionRuns.Begin(),
4114 Text::HorizontalAlignment::BEGIN,
4115 Text::VerticalAlignment::TOP,
4120 Dali::LayoutDirection::LEFT_TO_RIGHT,
4124 if( !AlignTest( data ) )
4126 tet_result(TET_FAIL);
4129 tet_result(TET_PASS);
4133 int UtcDaliTextAlign04(void)
4135 ToolkitTestApplication application;
4136 tet_infoline(" UtcDaliTextAlign04");
4138 // Calculate text alignment.
4140 const std::string fontLatin( "TizenSans" );
4141 const std::string fontHebrew( "TizenSansHebrew" );
4142 const std::string fontArabic( "TizenSansArabic" );
4144 // Set a known font description
4145 FontDescriptionRun fontDescriptionRun01;
4146 fontDescriptionRun01.characterRun.characterIndex = 0u;
4147 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4148 fontDescriptionRun01.familyLength = fontLatin.size();
4149 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4150 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4151 fontDescriptionRun01.familyDefined = true;
4152 fontDescriptionRun01.weightDefined = false;
4153 fontDescriptionRun01.widthDefined = false;
4154 fontDescriptionRun01.slantDefined = false;
4155 fontDescriptionRun01.sizeDefined = false;
4157 FontDescriptionRun fontDescriptionRun02;
4158 fontDescriptionRun02.characterRun.characterIndex = 12u;
4159 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4160 fontDescriptionRun02.familyLength = fontHebrew.size();
4161 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4162 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4163 fontDescriptionRun02.familyDefined = true;
4164 fontDescriptionRun02.weightDefined = false;
4165 fontDescriptionRun02.widthDefined = false;
4166 fontDescriptionRun02.slantDefined = false;
4167 fontDescriptionRun02.sizeDefined = false;
4169 FontDescriptionRun fontDescriptionRun03;
4170 fontDescriptionRun03.characterRun.characterIndex = 22u;
4171 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4172 fontDescriptionRun03.familyLength = fontArabic.size();
4173 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4174 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4175 fontDescriptionRun03.familyDefined = true;
4176 fontDescriptionRun03.weightDefined = false;
4177 fontDescriptionRun03.widthDefined = false;
4178 fontDescriptionRun03.slantDefined = false;
4179 fontDescriptionRun03.sizeDefined = false;
4181 FontDescriptionRun fontDescriptionRun04;
4182 fontDescriptionRun04.characterRun.characterIndex = 36u;
4183 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4184 fontDescriptionRun04.familyLength = fontLatin.size();
4185 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4186 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4187 fontDescriptionRun04.familyDefined = true;
4188 fontDescriptionRun04.weightDefined = false;
4189 fontDescriptionRun04.widthDefined = false;
4190 fontDescriptionRun04.slantDefined = false;
4191 fontDescriptionRun04.sizeDefined = false;
4193 FontDescriptionRun fontDescriptionRun05;
4194 fontDescriptionRun05.characterRun.characterIndex = 48u;
4195 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4196 fontDescriptionRun05.familyLength = fontLatin.size();
4197 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4198 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4199 fontDescriptionRun05.familyDefined = true;
4200 fontDescriptionRun05.weightDefined = false;
4201 fontDescriptionRun05.widthDefined = false;
4202 fontDescriptionRun05.slantDefined = false;
4203 fontDescriptionRun05.sizeDefined = false;
4205 FontDescriptionRun fontDescriptionRun06;
4206 fontDescriptionRun06.characterRun.characterIndex = 60u;
4207 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4208 fontDescriptionRun06.familyLength = fontArabic.size();
4209 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4210 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4211 fontDescriptionRun06.familyDefined = true;
4212 fontDescriptionRun06.weightDefined = false;
4213 fontDescriptionRun06.widthDefined = false;
4214 fontDescriptionRun06.slantDefined = false;
4215 fontDescriptionRun06.sizeDefined = false;
4217 Vector<FontDescriptionRun> fontDescriptionRuns;
4218 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4219 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4220 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4221 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4222 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4223 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4225 float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
4227 Size textArea( 100.f, 300.f );
4230 "Center alignment for the first paragraph.",
4231 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4234 fontDescriptionRuns.Begin(),
4235 Text::HorizontalAlignment::CENTER,
4236 Text::VerticalAlignment::TOP,
4241 Dali::LayoutDirection::LEFT_TO_RIGHT,
4245 if( !AlignTest( data ) )
4247 tet_result(TET_FAIL);
4250 tet_result(TET_PASS);
4254 int UtcDaliTextAlign05(void)
4256 ToolkitTestApplication application;
4257 tet_infoline(" UtcDaliTextAlign05");
4259 // Calculate text alignment.
4261 const std::string fontLatin( "TizenSans" );
4262 const std::string fontHebrew( "TizenSansHebrew" );
4263 const std::string fontArabic( "TizenSansArabic" );
4265 // Set a known font description
4266 FontDescriptionRun fontDescriptionRun01;
4267 fontDescriptionRun01.characterRun.characterIndex = 0u;
4268 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4269 fontDescriptionRun01.familyLength = fontLatin.size();
4270 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4271 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4272 fontDescriptionRun01.familyDefined = true;
4273 fontDescriptionRun01.weightDefined = false;
4274 fontDescriptionRun01.widthDefined = false;
4275 fontDescriptionRun01.slantDefined = false;
4276 fontDescriptionRun01.sizeDefined = false;
4278 FontDescriptionRun fontDescriptionRun02;
4279 fontDescriptionRun02.characterRun.characterIndex = 12u;
4280 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4281 fontDescriptionRun02.familyLength = fontHebrew.size();
4282 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4283 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4284 fontDescriptionRun02.familyDefined = true;
4285 fontDescriptionRun02.weightDefined = false;
4286 fontDescriptionRun02.widthDefined = false;
4287 fontDescriptionRun02.slantDefined = false;
4288 fontDescriptionRun02.sizeDefined = false;
4290 FontDescriptionRun fontDescriptionRun03;
4291 fontDescriptionRun03.characterRun.characterIndex = 22u;
4292 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4293 fontDescriptionRun03.familyLength = fontArabic.size();
4294 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4295 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4296 fontDescriptionRun03.familyDefined = true;
4297 fontDescriptionRun03.weightDefined = false;
4298 fontDescriptionRun03.widthDefined = false;
4299 fontDescriptionRun03.slantDefined = false;
4300 fontDescriptionRun03.sizeDefined = false;
4302 FontDescriptionRun fontDescriptionRun04;
4303 fontDescriptionRun04.characterRun.characterIndex = 36u;
4304 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4305 fontDescriptionRun04.familyLength = fontLatin.size();
4306 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4307 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4308 fontDescriptionRun04.familyDefined = true;
4309 fontDescriptionRun04.weightDefined = false;
4310 fontDescriptionRun04.widthDefined = false;
4311 fontDescriptionRun04.slantDefined = false;
4312 fontDescriptionRun04.sizeDefined = false;
4314 FontDescriptionRun fontDescriptionRun05;
4315 fontDescriptionRun05.characterRun.characterIndex = 48u;
4316 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4317 fontDescriptionRun05.familyLength = fontLatin.size();
4318 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4319 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4320 fontDescriptionRun05.familyDefined = true;
4321 fontDescriptionRun05.weightDefined = false;
4322 fontDescriptionRun05.widthDefined = false;
4323 fontDescriptionRun05.slantDefined = false;
4324 fontDescriptionRun05.sizeDefined = false;
4326 FontDescriptionRun fontDescriptionRun06;
4327 fontDescriptionRun06.characterRun.characterIndex = 60u;
4328 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4329 fontDescriptionRun06.familyLength = fontArabic.size();
4330 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4331 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4332 fontDescriptionRun06.familyDefined = true;
4333 fontDescriptionRun06.weightDefined = false;
4334 fontDescriptionRun06.widthDefined = false;
4335 fontDescriptionRun06.slantDefined = false;
4336 fontDescriptionRun06.sizeDefined = false;
4338 Vector<FontDescriptionRun> fontDescriptionRuns;
4339 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4340 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4341 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4342 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4343 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4344 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4346 float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
4348 Size textArea( 100.f, 300.f );
4351 "Center alignment for the mid paragraph.",
4352 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4355 fontDescriptionRuns.Begin(),
4356 Text::HorizontalAlignment::CENTER,
4357 Text::VerticalAlignment::TOP,
4362 Dali::LayoutDirection::LEFT_TO_RIGHT,
4366 if( !AlignTest( data ) )
4368 tet_result(TET_FAIL);
4371 tet_result(TET_PASS);
4375 int UtcDaliTextAlign06(void)
4377 ToolkitTestApplication application;
4378 tet_infoline(" UtcDaliTextAlign06");
4380 // Calculate text alignment.
4382 const std::string fontLatin( "TizenSans" );
4383 const std::string fontHebrew( "TizenSansHebrew" );
4384 const std::string fontArabic( "TizenSansArabic" );
4386 // Set a known font description
4387 FontDescriptionRun fontDescriptionRun01;
4388 fontDescriptionRun01.characterRun.characterIndex = 0u;
4389 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4390 fontDescriptionRun01.familyLength = fontLatin.size();
4391 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4392 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4393 fontDescriptionRun01.familyDefined = true;
4394 fontDescriptionRun01.weightDefined = false;
4395 fontDescriptionRun01.widthDefined = false;
4396 fontDescriptionRun01.slantDefined = false;
4397 fontDescriptionRun01.sizeDefined = false;
4399 FontDescriptionRun fontDescriptionRun02;
4400 fontDescriptionRun02.characterRun.characterIndex = 12u;
4401 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4402 fontDescriptionRun02.familyLength = fontHebrew.size();
4403 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4404 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4405 fontDescriptionRun02.familyDefined = true;
4406 fontDescriptionRun02.weightDefined = false;
4407 fontDescriptionRun02.widthDefined = false;
4408 fontDescriptionRun02.slantDefined = false;
4409 fontDescriptionRun02.sizeDefined = false;
4411 FontDescriptionRun fontDescriptionRun03;
4412 fontDescriptionRun03.characterRun.characterIndex = 22u;
4413 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4414 fontDescriptionRun03.familyLength = fontArabic.size();
4415 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4416 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4417 fontDescriptionRun03.familyDefined = true;
4418 fontDescriptionRun03.weightDefined = false;
4419 fontDescriptionRun03.widthDefined = false;
4420 fontDescriptionRun03.slantDefined = false;
4421 fontDescriptionRun03.sizeDefined = false;
4423 FontDescriptionRun fontDescriptionRun04;
4424 fontDescriptionRun04.characterRun.characterIndex = 36u;
4425 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4426 fontDescriptionRun04.familyLength = fontLatin.size();
4427 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4428 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4429 fontDescriptionRun04.familyDefined = true;
4430 fontDescriptionRun04.weightDefined = false;
4431 fontDescriptionRun04.widthDefined = false;
4432 fontDescriptionRun04.slantDefined = false;
4433 fontDescriptionRun04.sizeDefined = false;
4435 FontDescriptionRun fontDescriptionRun05;
4436 fontDescriptionRun05.characterRun.characterIndex = 48u;
4437 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4438 fontDescriptionRun05.familyLength = fontLatin.size();
4439 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4440 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4441 fontDescriptionRun05.familyDefined = true;
4442 fontDescriptionRun05.weightDefined = false;
4443 fontDescriptionRun05.widthDefined = false;
4444 fontDescriptionRun05.slantDefined = false;
4445 fontDescriptionRun05.sizeDefined = false;
4447 FontDescriptionRun fontDescriptionRun06;
4448 fontDescriptionRun06.characterRun.characterIndex = 60u;
4449 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4450 fontDescriptionRun06.familyLength = fontArabic.size();
4451 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4452 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4453 fontDescriptionRun06.familyDefined = true;
4454 fontDescriptionRun06.weightDefined = false;
4455 fontDescriptionRun06.widthDefined = false;
4456 fontDescriptionRun06.slantDefined = false;
4457 fontDescriptionRun06.sizeDefined = false;
4459 Vector<FontDescriptionRun> fontDescriptionRuns;
4460 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4461 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4462 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4463 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4464 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4465 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4467 float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 17.f };
4469 Size textArea( 100.f, 300.f );
4472 "Center alignment for the last paragraph.",
4473 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4476 fontDescriptionRuns.Begin(),
4477 Text::HorizontalAlignment::CENTER,
4478 Text::VerticalAlignment::TOP,
4483 Dali::LayoutDirection::LEFT_TO_RIGHT,
4487 if( !AlignTest( data ) )
4489 tet_result(TET_FAIL);
4492 tet_result(TET_PASS);
4496 int UtcDaliTextAlign07(void)
4498 ToolkitTestApplication application;
4499 tet_infoline(" UtcDaliTextAlign07");
4501 // Calculate text alignment.
4503 const std::string fontLatin( "TizenSans" );
4504 const std::string fontHebrew( "TizenSansHebrew" );
4505 const std::string fontArabic( "TizenSansArabic" );
4507 // Set a known font description
4508 FontDescriptionRun fontDescriptionRun01;
4509 fontDescriptionRun01.characterRun.characterIndex = 0u;
4510 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4511 fontDescriptionRun01.familyLength = fontLatin.size();
4512 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4513 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4514 fontDescriptionRun01.familyDefined = true;
4515 fontDescriptionRun01.weightDefined = false;
4516 fontDescriptionRun01.widthDefined = false;
4517 fontDescriptionRun01.slantDefined = false;
4518 fontDescriptionRun01.sizeDefined = false;
4520 FontDescriptionRun fontDescriptionRun02;
4521 fontDescriptionRun02.characterRun.characterIndex = 12u;
4522 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4523 fontDescriptionRun02.familyLength = fontHebrew.size();
4524 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4525 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4526 fontDescriptionRun02.familyDefined = true;
4527 fontDescriptionRun02.weightDefined = false;
4528 fontDescriptionRun02.widthDefined = false;
4529 fontDescriptionRun02.slantDefined = false;
4530 fontDescriptionRun02.sizeDefined = false;
4532 FontDescriptionRun fontDescriptionRun03;
4533 fontDescriptionRun03.characterRun.characterIndex = 22u;
4534 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4535 fontDescriptionRun03.familyLength = fontArabic.size();
4536 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4537 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4538 fontDescriptionRun03.familyDefined = true;
4539 fontDescriptionRun03.weightDefined = false;
4540 fontDescriptionRun03.widthDefined = false;
4541 fontDescriptionRun03.slantDefined = false;
4542 fontDescriptionRun03.sizeDefined = false;
4544 FontDescriptionRun fontDescriptionRun04;
4545 fontDescriptionRun04.characterRun.characterIndex = 36u;
4546 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4547 fontDescriptionRun04.familyLength = fontLatin.size();
4548 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4549 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4550 fontDescriptionRun04.familyDefined = true;
4551 fontDescriptionRun04.weightDefined = false;
4552 fontDescriptionRun04.widthDefined = false;
4553 fontDescriptionRun04.slantDefined = false;
4554 fontDescriptionRun04.sizeDefined = false;
4556 FontDescriptionRun fontDescriptionRun05;
4557 fontDescriptionRun05.characterRun.characterIndex = 48u;
4558 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4559 fontDescriptionRun05.familyLength = fontLatin.size();
4560 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4561 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4562 fontDescriptionRun05.familyDefined = true;
4563 fontDescriptionRun05.weightDefined = false;
4564 fontDescriptionRun05.widthDefined = false;
4565 fontDescriptionRun05.slantDefined = false;
4566 fontDescriptionRun05.sizeDefined = false;
4568 FontDescriptionRun fontDescriptionRun06;
4569 fontDescriptionRun06.characterRun.characterIndex = 60u;
4570 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4571 fontDescriptionRun06.familyLength = fontArabic.size();
4572 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4573 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4574 fontDescriptionRun06.familyDefined = true;
4575 fontDescriptionRun06.weightDefined = false;
4576 fontDescriptionRun06.widthDefined = false;
4577 fontDescriptionRun06.slantDefined = false;
4578 fontDescriptionRun06.sizeDefined = false;
4580 Vector<FontDescriptionRun> fontDescriptionRuns;
4581 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4582 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4583 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4584 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4585 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4586 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4588 float positions[] = { 19.f, 31.f, 0.f, 0.f, 0.f, 0.f };
4590 Size textArea( 100.f, 300.f );
4593 "End alignment for the first paragraph.",
4594 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4597 fontDescriptionRuns.Begin(),
4598 Text::HorizontalAlignment::END,
4599 Text::VerticalAlignment::TOP,
4604 Dali::LayoutDirection::LEFT_TO_RIGHT,
4608 if( !AlignTest( data ) )
4610 tet_result(TET_FAIL);
4613 tet_result(TET_PASS);
4617 int UtcDaliTextAlign08(void)
4619 ToolkitTestApplication application;
4620 tet_infoline(" UtcDaliTextAlign08");
4622 // Calculate text alignment.
4624 const std::string fontLatin( "TizenSans" );
4625 const std::string fontHebrew( "TizenSansHebrew" );
4626 const std::string fontArabic( "TizenSansArabic" );
4628 // Set a known font description
4629 FontDescriptionRun fontDescriptionRun01;
4630 fontDescriptionRun01.characterRun.characterIndex = 0u;
4631 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4632 fontDescriptionRun01.familyLength = fontLatin.size();
4633 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4634 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4635 fontDescriptionRun01.familyDefined = true;
4636 fontDescriptionRun01.weightDefined = false;
4637 fontDescriptionRun01.widthDefined = false;
4638 fontDescriptionRun01.slantDefined = false;
4639 fontDescriptionRun01.sizeDefined = false;
4641 FontDescriptionRun fontDescriptionRun02;
4642 fontDescriptionRun02.characterRun.characterIndex = 12u;
4643 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4644 fontDescriptionRun02.familyLength = fontHebrew.size();
4645 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4646 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4647 fontDescriptionRun02.familyDefined = true;
4648 fontDescriptionRun02.weightDefined = false;
4649 fontDescriptionRun02.widthDefined = false;
4650 fontDescriptionRun02.slantDefined = false;
4651 fontDescriptionRun02.sizeDefined = false;
4653 FontDescriptionRun fontDescriptionRun03;
4654 fontDescriptionRun03.characterRun.characterIndex = 22u;
4655 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4656 fontDescriptionRun03.familyLength = fontArabic.size();
4657 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4658 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4659 fontDescriptionRun03.familyDefined = true;
4660 fontDescriptionRun03.weightDefined = false;
4661 fontDescriptionRun03.widthDefined = false;
4662 fontDescriptionRun03.slantDefined = false;
4663 fontDescriptionRun03.sizeDefined = false;
4665 FontDescriptionRun fontDescriptionRun04;
4666 fontDescriptionRun04.characterRun.characterIndex = 36u;
4667 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4668 fontDescriptionRun04.familyLength = fontLatin.size();
4669 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4670 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4671 fontDescriptionRun04.familyDefined = true;
4672 fontDescriptionRun04.weightDefined = false;
4673 fontDescriptionRun04.widthDefined = false;
4674 fontDescriptionRun04.slantDefined = false;
4675 fontDescriptionRun04.sizeDefined = false;
4677 FontDescriptionRun fontDescriptionRun05;
4678 fontDescriptionRun05.characterRun.characterIndex = 48u;
4679 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4680 fontDescriptionRun05.familyLength = fontLatin.size();
4681 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4682 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4683 fontDescriptionRun05.familyDefined = true;
4684 fontDescriptionRun05.weightDefined = false;
4685 fontDescriptionRun05.widthDefined = false;
4686 fontDescriptionRun05.slantDefined = false;
4687 fontDescriptionRun05.sizeDefined = false;
4689 FontDescriptionRun fontDescriptionRun06;
4690 fontDescriptionRun06.characterRun.characterIndex = 60u;
4691 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4692 fontDescriptionRun06.familyLength = fontArabic.size();
4693 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4694 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4695 fontDescriptionRun06.familyDefined = true;
4696 fontDescriptionRun06.weightDefined = false;
4697 fontDescriptionRun06.widthDefined = false;
4698 fontDescriptionRun06.slantDefined = false;
4699 fontDescriptionRun06.sizeDefined = false;
4701 Vector<FontDescriptionRun> fontDescriptionRuns;
4702 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4703 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4704 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4705 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4706 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4707 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4709 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4711 Size textArea( 100.f, 300.f );
4714 "End alignment for the mid paragraph.",
4715 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4718 fontDescriptionRuns.Begin(),
4719 Text::HorizontalAlignment::END,
4720 Text::VerticalAlignment::TOP,
4725 Dali::LayoutDirection::LEFT_TO_RIGHT,
4729 if( !AlignTest( data ) )
4731 tet_result(TET_FAIL);
4734 tet_result(TET_PASS);
4738 int UtcDaliTextAlign09(void)
4740 ToolkitTestApplication application;
4741 tet_infoline(" UtcDaliTextAlign09");
4743 // Calculate text alignment.
4745 const std::string fontLatin( "TizenSans" );
4746 const std::string fontHebrew( "TizenSansHebrew" );
4747 const std::string fontArabic( "TizenSansArabic" );
4749 // Set a known font description
4750 FontDescriptionRun fontDescriptionRun01;
4751 fontDescriptionRun01.characterRun.characterIndex = 0u;
4752 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4753 fontDescriptionRun01.familyLength = fontLatin.size();
4754 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4755 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4756 fontDescriptionRun01.familyDefined = true;
4757 fontDescriptionRun01.weightDefined = false;
4758 fontDescriptionRun01.widthDefined = false;
4759 fontDescriptionRun01.slantDefined = false;
4760 fontDescriptionRun01.sizeDefined = false;
4762 FontDescriptionRun fontDescriptionRun02;
4763 fontDescriptionRun02.characterRun.characterIndex = 12u;
4764 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4765 fontDescriptionRun02.familyLength = fontHebrew.size();
4766 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4767 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4768 fontDescriptionRun02.familyDefined = true;
4769 fontDescriptionRun02.weightDefined = false;
4770 fontDescriptionRun02.widthDefined = false;
4771 fontDescriptionRun02.slantDefined = false;
4772 fontDescriptionRun02.sizeDefined = false;
4774 FontDescriptionRun fontDescriptionRun03;
4775 fontDescriptionRun03.characterRun.characterIndex = 22u;
4776 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4777 fontDescriptionRun03.familyLength = fontArabic.size();
4778 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4779 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4780 fontDescriptionRun03.familyDefined = true;
4781 fontDescriptionRun03.weightDefined = false;
4782 fontDescriptionRun03.widthDefined = false;
4783 fontDescriptionRun03.slantDefined = false;
4784 fontDescriptionRun03.sizeDefined = false;
4786 FontDescriptionRun fontDescriptionRun04;
4787 fontDescriptionRun04.characterRun.characterIndex = 36u;
4788 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4789 fontDescriptionRun04.familyLength = fontLatin.size();
4790 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4791 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4792 fontDescriptionRun04.familyDefined = true;
4793 fontDescriptionRun04.weightDefined = false;
4794 fontDescriptionRun04.widthDefined = false;
4795 fontDescriptionRun04.slantDefined = false;
4796 fontDescriptionRun04.sizeDefined = false;
4798 FontDescriptionRun fontDescriptionRun05;
4799 fontDescriptionRun05.characterRun.characterIndex = 48u;
4800 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4801 fontDescriptionRun05.familyLength = fontLatin.size();
4802 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4803 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4804 fontDescriptionRun05.familyDefined = true;
4805 fontDescriptionRun05.weightDefined = false;
4806 fontDescriptionRun05.widthDefined = false;
4807 fontDescriptionRun05.slantDefined = false;
4808 fontDescriptionRun05.sizeDefined = false;
4810 FontDescriptionRun fontDescriptionRun06;
4811 fontDescriptionRun06.characterRun.characterIndex = 60u;
4812 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4813 fontDescriptionRun06.familyLength = fontArabic.size();
4814 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4815 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4816 fontDescriptionRun06.familyDefined = true;
4817 fontDescriptionRun06.weightDefined = false;
4818 fontDescriptionRun06.widthDefined = false;
4819 fontDescriptionRun06.slantDefined = false;
4820 fontDescriptionRun06.sizeDefined = false;
4822 Vector<FontDescriptionRun> fontDescriptionRuns;
4823 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4824 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4825 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4826 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4827 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4828 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4830 float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 34.f };
4832 Size textArea( 100.f, 300.f );
4835 "End alignment for the last paragraph.",
4836 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4839 fontDescriptionRuns.Begin(),
4840 Text::HorizontalAlignment::END,
4841 Text::VerticalAlignment::TOP,
4846 Dali::LayoutDirection::LEFT_TO_RIGHT,
4850 if( !AlignTest( data ) )
4852 tet_result(TET_FAIL);
4855 tet_result(TET_PASS);
4859 int UtcDaliTextAlign10(void)
4861 ToolkitTestApplication application;
4862 tet_infoline(" UtcDaliTextAlign10");
4864 // Calculate text alignment.
4866 const std::string fontLatin( "TizenSans" );
4867 const std::string fontHebrew( "TizenSansHebrew" );
4868 const std::string fontArabic( "TizenSansArabic" );
4870 // Set a known font description
4871 FontDescriptionRun fontDescriptionRun01;
4872 fontDescriptionRun01.characterRun.characterIndex = 0u;
4873 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4874 fontDescriptionRun01.familyLength = fontLatin.size();
4875 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4876 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4877 fontDescriptionRun01.familyDefined = true;
4878 fontDescriptionRun01.weightDefined = false;
4879 fontDescriptionRun01.widthDefined = false;
4880 fontDescriptionRun01.slantDefined = false;
4881 fontDescriptionRun01.sizeDefined = false;
4883 FontDescriptionRun fontDescriptionRun02;
4884 fontDescriptionRun02.characterRun.characterIndex = 12u;
4885 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4886 fontDescriptionRun02.familyLength = fontHebrew.size();
4887 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4888 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4889 fontDescriptionRun02.familyDefined = true;
4890 fontDescriptionRun02.weightDefined = false;
4891 fontDescriptionRun02.widthDefined = false;
4892 fontDescriptionRun02.slantDefined = false;
4893 fontDescriptionRun02.sizeDefined = false;
4895 FontDescriptionRun fontDescriptionRun03;
4896 fontDescriptionRun03.characterRun.characterIndex = 22u;
4897 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4898 fontDescriptionRun03.familyLength = fontArabic.size();
4899 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4900 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4901 fontDescriptionRun03.familyDefined = true;
4902 fontDescriptionRun03.weightDefined = false;
4903 fontDescriptionRun03.widthDefined = false;
4904 fontDescriptionRun03.slantDefined = false;
4905 fontDescriptionRun03.sizeDefined = false;
4907 FontDescriptionRun fontDescriptionRun04;
4908 fontDescriptionRun04.characterRun.characterIndex = 36u;
4909 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4910 fontDescriptionRun04.familyLength = fontLatin.size();
4911 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4912 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4913 fontDescriptionRun04.familyDefined = true;
4914 fontDescriptionRun04.weightDefined = false;
4915 fontDescriptionRun04.widthDefined = false;
4916 fontDescriptionRun04.slantDefined = false;
4917 fontDescriptionRun04.sizeDefined = false;
4919 FontDescriptionRun fontDescriptionRun05;
4920 fontDescriptionRun05.characterRun.characterIndex = 48u;
4921 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4922 fontDescriptionRun05.familyLength = fontLatin.size();
4923 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4924 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4925 fontDescriptionRun05.familyDefined = true;
4926 fontDescriptionRun05.weightDefined = false;
4927 fontDescriptionRun05.widthDefined = false;
4928 fontDescriptionRun05.slantDefined = false;
4929 fontDescriptionRun05.sizeDefined = false;
4931 FontDescriptionRun fontDescriptionRun06;
4932 fontDescriptionRun06.characterRun.characterIndex = 60u;
4933 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4934 fontDescriptionRun06.familyLength = fontArabic.size();
4935 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4936 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4937 fontDescriptionRun06.familyDefined = true;
4938 fontDescriptionRun06.weightDefined = false;
4939 fontDescriptionRun06.widthDefined = false;
4940 fontDescriptionRun06.slantDefined = false;
4941 fontDescriptionRun06.sizeDefined = false;
4943 Vector<FontDescriptionRun> fontDescriptionRuns;
4944 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4945 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4946 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4947 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4948 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4949 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4951 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4953 Size textArea( 100.f, 300.f );
4956 "Begin alignment for the first paragraph.",
4957 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4960 fontDescriptionRuns.Begin(),
4961 Text::HorizontalAlignment::END,
4962 Text::VerticalAlignment::TOP,
4967 Dali::LayoutDirection::RIGHT_TO_LEFT,
4971 if( !AlignTest( data ) )
4973 tet_result(TET_FAIL);
4976 tet_result(TET_PASS);
4980 int UtcDaliTextAlign11(void)
4982 ToolkitTestApplication application;
4983 tet_infoline(" UtcDaliTextAlign11");
4985 // Calculate text alignment.
4987 const std::string fontLatin( "TizenSans" );
4988 const std::string fontHebrew( "TizenSansHebrew" );
4989 const std::string fontArabic( "TizenSansArabic" );
4991 // Set a known font description
4992 FontDescriptionRun fontDescriptionRun01;
4993 fontDescriptionRun01.characterRun.characterIndex = 0u;
4994 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4995 fontDescriptionRun01.familyLength = fontLatin.size();
4996 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4997 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4998 fontDescriptionRun01.familyDefined = true;
4999 fontDescriptionRun01.weightDefined = false;
5000 fontDescriptionRun01.widthDefined = false;
5001 fontDescriptionRun01.slantDefined = false;
5002 fontDescriptionRun01.sizeDefined = false;
5004 FontDescriptionRun fontDescriptionRun02;
5005 fontDescriptionRun02.characterRun.characterIndex = 12u;
5006 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5007 fontDescriptionRun02.familyLength = fontHebrew.size();
5008 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5009 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5010 fontDescriptionRun02.familyDefined = true;
5011 fontDescriptionRun02.weightDefined = false;
5012 fontDescriptionRun02.widthDefined = false;
5013 fontDescriptionRun02.slantDefined = false;
5014 fontDescriptionRun02.sizeDefined = false;
5016 FontDescriptionRun fontDescriptionRun03;
5017 fontDescriptionRun03.characterRun.characterIndex = 22u;
5018 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5019 fontDescriptionRun03.familyLength = fontArabic.size();
5020 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5021 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5022 fontDescriptionRun03.familyDefined = true;
5023 fontDescriptionRun03.weightDefined = false;
5024 fontDescriptionRun03.widthDefined = false;
5025 fontDescriptionRun03.slantDefined = false;
5026 fontDescriptionRun03.sizeDefined = false;
5028 FontDescriptionRun fontDescriptionRun04;
5029 fontDescriptionRun04.characterRun.characterIndex = 36u;
5030 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5031 fontDescriptionRun04.familyLength = fontLatin.size();
5032 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5033 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5034 fontDescriptionRun04.familyDefined = true;
5035 fontDescriptionRun04.weightDefined = false;
5036 fontDescriptionRun04.widthDefined = false;
5037 fontDescriptionRun04.slantDefined = false;
5038 fontDescriptionRun04.sizeDefined = false;
5040 FontDescriptionRun fontDescriptionRun05;
5041 fontDescriptionRun05.characterRun.characterIndex = 48u;
5042 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5043 fontDescriptionRun05.familyLength = fontLatin.size();
5044 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5045 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5046 fontDescriptionRun05.familyDefined = true;
5047 fontDescriptionRun05.weightDefined = false;
5048 fontDescriptionRun05.widthDefined = false;
5049 fontDescriptionRun05.slantDefined = false;
5050 fontDescriptionRun05.sizeDefined = false;
5052 FontDescriptionRun fontDescriptionRun06;
5053 fontDescriptionRun06.characterRun.characterIndex = 60u;
5054 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5055 fontDescriptionRun06.familyLength = fontArabic.size();
5056 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5057 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5058 fontDescriptionRun06.familyDefined = true;
5059 fontDescriptionRun06.weightDefined = false;
5060 fontDescriptionRun06.widthDefined = false;
5061 fontDescriptionRun06.slantDefined = false;
5062 fontDescriptionRun06.sizeDefined = false;
5064 Vector<FontDescriptionRun> fontDescriptionRuns;
5065 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5066 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5067 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5068 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5069 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5070 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5072 float positions[] = { 19.f, 31.f, 33.f, 0.f, 0.f, 0.f };
5074 Size textArea( 100.f, 300.f );
5077 "End alignment for the last paragraph.",
5078 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5081 fontDescriptionRuns.Begin(),
5082 Text::HorizontalAlignment::END,
5083 Text::VerticalAlignment::TOP,
5088 Dali::LayoutDirection::LEFT_TO_RIGHT,
5092 if( !AlignTest( data ) )
5094 tet_result(TET_FAIL);
5097 tet_result(TET_PASS);
5101 int UtcDaliTextAlign12(void)
5103 ToolkitTestApplication application;
5104 tet_infoline(" UtcDaliTextAlign12");
5106 // Calculate text alignment.
5108 const std::string fontLatin( "TizenSans" );
5109 const std::string fontHebrew( "TizenSansHebrew" );
5110 const std::string fontArabic( "TizenSansArabic" );
5112 // Set a known font description
5113 FontDescriptionRun fontDescriptionRun01;
5114 fontDescriptionRun01.characterRun.characterIndex = 0u;
5115 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5116 fontDescriptionRun01.familyLength = fontLatin.size();
5117 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5118 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5119 fontDescriptionRun01.familyDefined = true;
5120 fontDescriptionRun01.weightDefined = false;
5121 fontDescriptionRun01.widthDefined = false;
5122 fontDescriptionRun01.slantDefined = false;
5123 fontDescriptionRun01.sizeDefined = false;
5125 FontDescriptionRun fontDescriptionRun02;
5126 fontDescriptionRun02.characterRun.characterIndex = 12u;
5127 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5128 fontDescriptionRun02.familyLength = fontHebrew.size();
5129 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5130 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5131 fontDescriptionRun02.familyDefined = true;
5132 fontDescriptionRun02.weightDefined = false;
5133 fontDescriptionRun02.widthDefined = false;
5134 fontDescriptionRun02.slantDefined = false;
5135 fontDescriptionRun02.sizeDefined = false;
5137 FontDescriptionRun fontDescriptionRun03;
5138 fontDescriptionRun03.characterRun.characterIndex = 22u;
5139 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5140 fontDescriptionRun03.familyLength = fontArabic.size();
5141 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5142 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5143 fontDescriptionRun03.familyDefined = true;
5144 fontDescriptionRun03.weightDefined = false;
5145 fontDescriptionRun03.widthDefined = false;
5146 fontDescriptionRun03.slantDefined = false;
5147 fontDescriptionRun03.sizeDefined = false;
5149 FontDescriptionRun fontDescriptionRun04;
5150 fontDescriptionRun04.characterRun.characterIndex = 36u;
5151 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5152 fontDescriptionRun04.familyLength = fontLatin.size();
5153 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5154 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5155 fontDescriptionRun04.familyDefined = true;
5156 fontDescriptionRun04.weightDefined = false;
5157 fontDescriptionRun04.widthDefined = false;
5158 fontDescriptionRun04.slantDefined = false;
5159 fontDescriptionRun04.sizeDefined = false;
5161 FontDescriptionRun fontDescriptionRun05;
5162 fontDescriptionRun05.characterRun.characterIndex = 48u;
5163 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5164 fontDescriptionRun05.familyLength = fontLatin.size();
5165 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5166 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5167 fontDescriptionRun05.familyDefined = true;
5168 fontDescriptionRun05.weightDefined = false;
5169 fontDescriptionRun05.widthDefined = false;
5170 fontDescriptionRun05.slantDefined = false;
5171 fontDescriptionRun05.sizeDefined = false;
5173 FontDescriptionRun fontDescriptionRun06;
5174 fontDescriptionRun06.characterRun.characterIndex = 60u;
5175 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5176 fontDescriptionRun06.familyLength = fontArabic.size();
5177 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5178 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5179 fontDescriptionRun06.familyDefined = true;
5180 fontDescriptionRun06.weightDefined = false;
5181 fontDescriptionRun06.widthDefined = false;
5182 fontDescriptionRun06.slantDefined = false;
5183 fontDescriptionRun06.sizeDefined = false;
5185 Vector<FontDescriptionRun> fontDescriptionRuns;
5186 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5187 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5188 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5189 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5190 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5191 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5193 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
5195 Size textArea( 100.f, 300.f );
5198 "Begin alignment for the first paragraph.",
5199 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5202 fontDescriptionRuns.Begin(),
5203 Text::HorizontalAlignment::BEGIN,
5204 Text::VerticalAlignment::TOP,
5209 Dali::LayoutDirection::LEFT_TO_RIGHT,
5213 if( !AlignTest( data ) )
5215 tet_result(TET_FAIL);
5218 tet_result(TET_PASS);
5222 int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
5224 ToolkitTestApplication application;
5225 tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
5227 Layout::Engine engine;
5228 DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5230 engine.SetDefaultLineSpacing( 10.f );
5231 DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5233 tet_result(TET_PASS);
5237 int UtcDaliTextLayoutGetGlyphMetrics(void)
5239 tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
5241 // Test retrieving metrics from group of characters
5243 const std::string fontFamily( "TizenSansHindi" );
5245 // Set a known font description
5246 FontDescriptionRun fontDescriptionRun01;
5247 fontDescriptionRun01.characterRun.characterIndex = 0u;
5248 fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
5249 fontDescriptionRun01.familyLength = fontFamily.size();
5250 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5251 memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
5252 fontDescriptionRun01.familyDefined = true;
5253 fontDescriptionRun01.weightDefined = false;
5254 fontDescriptionRun01.widthDefined = false;
5255 fontDescriptionRun01.slantDefined = false;
5256 fontDescriptionRun01.sizeDefined = false;
5258 // Set a known font description
5259 FontDescriptionRun fontDescriptionRun02;
5260 fontDescriptionRun02.characterRun.characterIndex = 0u;
5261 fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
5262 fontDescriptionRun02.familyLength = fontFamily.size();
5263 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5264 memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
5265 fontDescriptionRun02.familyDefined = true;
5266 fontDescriptionRun02.weightDefined = false;
5267 fontDescriptionRun02.widthDefined = false;
5268 fontDescriptionRun02.slantDefined = false;
5269 fontDescriptionRun02.sizeDefined = false;
5271 // Set a known font description
5272 FontDescriptionRun fontDescriptionRun03;
5273 fontDescriptionRun03.characterRun.characterIndex = 0u;
5274 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
5275 fontDescriptionRun03.familyLength = fontFamily.size();
5276 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5277 memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
5278 fontDescriptionRun03.familyDefined = true;
5279 fontDescriptionRun03.weightDefined = false;
5280 fontDescriptionRun03.widthDefined = false;
5281 fontDescriptionRun03.slantDefined = false;
5282 fontDescriptionRun03.sizeDefined = false;
5284 Vector<FontDescriptionRun> fontDescriptionRuns01;
5285 fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
5287 Vector<FontDescriptionRun> fontDescriptionRuns02;
5288 fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
5290 Vector<FontDescriptionRun> fontDescriptionRuns03;
5291 fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
5294 Size textArea(100.f, 100.f);
5297 // Group: second glyph doesn't exceed the width of the first glyph
5298 float positions01[] = { 0.f, -11.f };
5300 struct LineRun line01 =
5313 Vector<LineRun> lines01;
5314 lines01.PushBack( line01 );
5316 Size layoutSize01 = Vector2(11.f, 19.f);
5318 // Group: second glyph doesn't exceed the width of the first glyph
5319 float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
5321 struct LineRun line02 =
5334 Vector<LineRun> lines02;
5335 lines02.PushBack( line02 );
5337 Size layoutSize02 = Vector2(16.f, 19.f);
5339 // Group: second glyph doesn't exceed the width of the first glyph
5340 float positions03[] = { 0.f, -11.f , 2.f, -15.f };
5342 struct LineRun line03 =
5355 Vector<LineRun> lines03;
5356 lines03.PushBack( line03 );
5358 Size layoutSize03 = Vector2(11.f, 19.f);
5360 /////////////////////////////
5362 struct LayoutTextData data[] =
5369 fontDescriptionRuns01.Begin(),
5375 Layout::Engine::SINGLE_LINE_BOX,
5382 "Group: second glyph exceeds the width of the first glyph",
5386 fontDescriptionRuns02.Begin(),
5392 Layout::Engine::SINGLE_LINE_BOX,
5399 "Group: second glyph doesn't exceed the width of the first glyph",
5403 fontDescriptionRuns03.Begin(),
5409 Layout::Engine::SINGLE_LINE_BOX,
5416 const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
5418 for( unsigned int index = 0u; index < numberOfTests; ++index )
5420 ToolkitTestApplication application;
5421 if( !LayoutTextTest( data[index] ) )
5423 tet_result(TET_FAIL);
5427 tet_result(TET_PASS);