2 * Copyright (c) 2021 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,
114 LogicalModelPtr logicalModel = textModel->mLogicalModel;
115 VisualModelPtr visualModel = textModel->mVisualModel;
117 // 2) Clear the layout.
118 Vector<LineRun>& lines = visualModel->mLines;
120 const Length numberOfCharacters = logicalModel->mText.Count();
121 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
122 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
123 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
125 LineIndex startRemoveIndex = 0u;
127 if( 0u != lines.Count() )
129 startRemoveIndex = lines.Count();
130 LineIndex endRemoveIndex = startRemoveIndex;
131 ClearGlyphRuns( data.startIndex,
132 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
137 // Update the character runs of the lines.
138 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
139 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
140 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
141 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
142 ClearCharacterRuns( startCharacterIndex,
143 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
148 lines.Erase( lines.Begin() + startRemoveIndex,
149 lines.Begin() + endRemoveIndex );
152 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
154 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
155 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
158 Layout::Engine engine;
159 engine.SetMetrics( metrics );
160 engine.SetLayout( data.layout );
162 textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
163 textModel->mLineWrapMode = LineWrap::WORD;
164 textModel->mIgnoreSpacesAfterText = true;
165 textModel->mMatchSystemLanguageDirection = false;
166 Layout::Parameters layoutParameters( data.textArea,
169 layoutParameters.isLastNewParagraph = isLastNewParagraph;
171 // The initial glyph and the number of glyphs to layout.
172 layoutParameters.startGlyphIndex = data.startIndex;
173 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
174 layoutParameters.startLineIndex = startRemoveIndex;
175 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
177 layoutSize = Vector2::ZERO;
179 bool isAutoScroll = false;
180 const bool updated = engine.LayoutText( layoutParameters,
185 // 4) Compare the results.
187 if( updated != data.updated )
189 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
193 if( layoutSize != data.layoutSize )
195 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
199 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
201 const Vector2& position = *( glyphPositions.Begin() + index );
203 if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
205 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
208 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
210 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
215 if( lines.Count() != data.numberOfLines )
217 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
221 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
223 const LineRun& line = *( lines.Begin() + index );
224 const LineRun& expectedLine = *( data.lines + index );
226 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
228 std::cout << " Different line info for line : " << index << std::endl;
230 std::cout << " expected" << std::endl;
231 Print( expectedLine );
234 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
236 std::cout << " Different line info for line : " << index << std::endl;
238 std::cout << " expected" << std::endl;
239 Print( expectedLine );
243 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
245 std::cout << " Different line info for line : " << index << std::endl;
247 std::cout << " expected" << std::endl;
248 Print( expectedLine );
251 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
253 std::cout << " Different line info for line : " << index << std::endl;
255 std::cout << " expected" << std::endl;
256 Print( expectedLine );
260 if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
262 std::cout << " Different line info for line : " << index << std::endl;
264 std::cout << " expected" << std::endl;
265 Print( expectedLine );
269 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
271 std::cout << " Different line info for line : " << index << std::endl;
273 std::cout << " expected" << std::endl;
274 Print( expectedLine );
278 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
280 std::cout << " Different line info for line : " << index << std::endl;
282 std::cout << " expected" << std::endl;
283 Print( expectedLine );
287 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
289 std::cout << " Different line info for line : " << index << std::endl;
291 std::cout << " expected" << std::endl;
292 Print( expectedLine );
296 if( line.ellipsis != expectedLine.ellipsis )
298 std::cout << " Different line info for line : " << index << std::endl;
300 std::cout << " expected" << std::endl;
301 Print( expectedLine );
305 // Do not compare the alignment offset as it's not calculated in the layout.
306 // Do not compare the line direction as it's not set in the layout.
312 //////////////////////////////////////////////////////////
316 std::string description;
319 unsigned int numberOfFonts;
320 FontDescriptionRun* fontDescriptions;
321 Text::HorizontalAlignment::Type horizontalAlignment;
322 Text::VerticalAlignment::Type verticalAlignment;
323 unsigned int startIndex;
324 unsigned int numberOfCharacters;
325 unsigned int numberOfLines;
327 Dali::LayoutDirection::Type layoutDirection;
328 bool matchSystemLanguageDirection;
331 bool AlignTest( const AlignData& data )
334 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
335 fontClient.SetDpi( 96u, 96u );
337 char* pathNamePtr = get_current_dir_name();
338 const std::string pathName( pathNamePtr );
341 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
342 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
343 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
345 // 1) Create the model.
350 Vector<FontDescriptionRun> fontDescriptionRuns;
351 if( 0u != data.numberOfFonts )
353 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
354 data.fontDescriptions,
355 data.fontDescriptions + data.numberOfFonts );
358 LayoutOptions options;
359 options.align = false;
360 CreateTextModel( data.text,
370 LogicalModelPtr logicalModel = textModel->mLogicalModel;
371 VisualModelPtr visualModel = textModel->mVisualModel;
373 // Call the Align method.
374 Layout::Engine engine;
375 engine.SetMetrics( metrics );
377 float alignmentOffset = 0.f;
378 engine.Align( data.textArea,
380 data.numberOfCharacters,
381 data.horizontalAlignment,
384 data.layoutDirection,
385 data.matchSystemLanguageDirection );
388 if( data.numberOfLines != visualModel->mLines.Count() )
390 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
394 const LineRun* const linesBuffer = visualModel->mLines.Begin();
395 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
397 const LineRun& line = *( linesBuffer + index );
399 if( line.alignmentOffset != *( data.lineOffsets + index ) )
401 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
410 //////////////////////////////////////////////////////////
412 // UtcDaliTextLayoutSetGetLayout
413 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
414 // UtcDaliTextLayoutSetGetHorizontalAlignment
415 // UtcDaliTextLayoutSetGetVerticalAlignment
416 // UtcDaliTextLayoutSetGetCursorWidth
417 // UtcDaliTextLayoutNoText
418 // UtcDaliTextLayoutSmallTextArea01
419 // UtcDaliTextLayoutSmallTextArea02
420 // UtcDaliTextLayoutMultilineText01
421 // UtcDaliTextLayoutMultilineText02
422 // UtcDaliTextLayoutMultilineText03
423 // UtcDaliTextLayoutMultilineText04
424 // UtcDaliTextLayoutMultilineText05
425 // UtcDaliTextLayoutMultilineText06
426 // UtcDaliTextUpdateLayout01
427 // UtcDaliTextUpdateLayout02
428 // UtcDaliTextUpdateLayout03
429 // UtcDaliTextLayoutEllipsis01
430 // UtcDaliTextLayoutEllipsis02
431 // UtcDaliTextLayoutEllipsis03
432 // UtcDaliTextLayoutEllipsis04
433 // UtcDaliTextLayoutEllipsis04
434 // UtcDaliTextReorderLayout01
435 // UtcDaliTextReorderLayout02
436 // UtcDaliTextReorderLayout03
437 // UtcDaliTextReorderLayout04
438 // UtcDaliTextAlign01
439 // UtcDaliTextAlign02
440 // UtcDaliTextAlign03
441 // UtcDaliTextAlign04
442 // UtcDaliTextAlign05
443 // UtcDaliTextAlign06
444 // UtcDaliTextAlign07
445 // UtcDaliTextAlign08
446 // UtcDaliTextAlign09
448 //////////////////////////////////////////////////////////
450 int UtcDaliTextLayoutSetGetLayout(void)
452 ToolkitTestApplication application;
453 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
455 Layout::Engine engine;
457 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
459 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
460 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
462 tet_result(TET_PASS);
466 int UtcDaliTextLayoutSetGetCursorWidth(void)
468 ToolkitTestApplication application;
471 Layout::Engine engine;
473 DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
475 engine.SetCursorWidth( 2 );
476 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
478 tet_result(TET_PASS);
482 int UtcDaliTextLayoutNoText(void)
484 ToolkitTestApplication application;
485 tet_infoline(" UtcDaliTextLayoutNoText");
487 Size textArea(100.f, 60.f);
488 Size layoutSize = Vector2::ZERO;
489 LayoutTextData data =
501 Layout::Engine::MULTI_LINE_BOX,
508 if( !LayoutTextTest( data ) )
510 tet_result(TET_FAIL);
513 tet_result(TET_PASS);
517 int UtcDaliTextLayoutSmallTextArea01(void)
519 ToolkitTestApplication application;
520 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
522 // Won't layout the text in multi-line if the width is too small.
524 const std::string fontFamily( "TizenSans" );
526 // Set a known font description
527 FontDescriptionRun fontDescriptionRun;
528 fontDescriptionRun.characterRun.characterIndex = 0u;
529 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
530 fontDescriptionRun.familyLength = fontFamily.size();
531 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
532 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
533 fontDescriptionRun.familyDefined = true;
534 fontDescriptionRun.weightDefined = false;
535 fontDescriptionRun.widthDefined = false;
536 fontDescriptionRun.slantDefined = false;
537 fontDescriptionRun.sizeDefined = false;
539 Vector<FontDescriptionRun> fontDescriptionRuns;
540 fontDescriptionRuns.PushBack( fontDescriptionRun );
541 Size textArea(1.f, 1.f);
542 Size layoutSize = Vector2::ZERO;
543 LayoutTextData data =
545 "Layout text in a small area",
549 fontDescriptionRuns.Begin(),
555 Layout::Engine::MULTI_LINE_BOX,
562 if( !LayoutTextTest( data ) )
564 tet_result(TET_FAIL);
567 tet_result(TET_PASS);
571 int UtcDaliTextLayoutSmallTextArea02(void)
573 ToolkitTestApplication application;
574 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
576 // Will layout the text in single line as it can be scrolled.
578 const std::string fontFamily( "TizenSans" );
580 // Set a known font description
581 FontDescriptionRun fontDescriptionRun;
582 fontDescriptionRun.characterRun.characterIndex = 0u;
583 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
584 fontDescriptionRun.familyLength = fontFamily.size();
585 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
586 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
587 fontDescriptionRun.familyDefined = true;
588 fontDescriptionRun.weightDefined = false;
589 fontDescriptionRun.widthDefined = false;
590 fontDescriptionRun.slantDefined = false;
591 fontDescriptionRun.sizeDefined = false;
593 Vector<FontDescriptionRun> fontDescriptionRuns;
594 fontDescriptionRuns.PushBack( fontDescriptionRun );
595 Size textArea(1.f, 1.f);
596 Size layoutSize(81.f, 19.f);
597 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 };
598 struct LineRun line =
611 Vector<LineRun> lines;
612 lines.PushBack( line );
614 LayoutTextData data =
616 "Layout text in a small area",
620 fontDescriptionRuns.Begin(),
626 Layout::Engine::SINGLE_LINE_BOX,
633 if( !LayoutTextTest( data ) )
635 tet_result(TET_FAIL);
638 tet_result(TET_PASS);
642 int UtcDaliTextLayoutMultilineText01(void)
644 ToolkitTestApplication application;
645 tet_infoline(" UtcDaliTextLayoutMultilineText01");
647 // Layout some lines of left to right text.
649 const std::string fontFamily( "TizenSans" );
651 // Set a known font description
652 FontDescriptionRun fontDescriptionRun1;
653 fontDescriptionRun1.characterRun.characterIndex = 0u;
654 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
655 fontDescriptionRun1.familyLength = fontFamily.size();
656 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
657 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
658 fontDescriptionRun1.familyDefined = true;
659 fontDescriptionRun1.weightDefined = false;
660 fontDescriptionRun1.widthDefined = false;
661 fontDescriptionRun1.slantDefined = false;
662 fontDescriptionRun1.sizeDefined = false;
664 FontDescriptionRun fontDescriptionRun2;
665 fontDescriptionRun2.characterRun.characterIndex = 18u;
666 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
667 fontDescriptionRun2.familyLength = fontFamily.size();
668 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
669 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
670 fontDescriptionRun2.familyDefined = true;
671 fontDescriptionRun2.weightDefined = false;
672 fontDescriptionRun2.widthDefined = false;
673 fontDescriptionRun2.slantDefined = false;
674 fontDescriptionRun2.sizeDefined = false;
676 Vector<FontDescriptionRun> fontDescriptionRuns;
677 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
678 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
679 Size textArea(100.f, 300.f);
680 Size layoutSize(97.f, 95.f);
683 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,
684 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
685 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,
686 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,
687 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
689 struct LineRun line0 =
702 struct LineRun line1 =
715 struct LineRun line2 =
728 struct LineRun line3 =
741 struct LineRun line4 =
754 Vector<LineRun> lines;
755 lines.PushBack( line0 );
756 lines.PushBack( line1 );
757 lines.PushBack( line2 );
758 lines.PushBack( line3 );
759 lines.PushBack( line4 );
761 LayoutTextData data =
763 "Layout simple multi-line text",
764 "Hello world demo.\n"
765 "Layout different lines of text.",
768 fontDescriptionRuns.Begin(),
774 Layout::Engine::MULTI_LINE_BOX,
781 if( !LayoutTextTest( data ) )
783 tet_result(TET_FAIL);
786 tet_result(TET_PASS);
790 int UtcDaliTextLayoutMultilineText02(void)
792 ToolkitTestApplication application;
793 tet_infoline(" UtcDaliTextLayoutMultilineText02");
795 // Layout some lines of bidirectional text.
797 const std::string fontFamily1( "TizenSans" );
799 // Set a known font description
800 FontDescriptionRun fontDescriptionRun1;
801 fontDescriptionRun1.characterRun.characterIndex = 0u;
802 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
803 fontDescriptionRun1.familyLength = fontFamily1.size();
804 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
805 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
806 fontDescriptionRun1.familyDefined = true;
807 fontDescriptionRun1.weightDefined = false;
808 fontDescriptionRun1.widthDefined = false;
809 fontDescriptionRun1.slantDefined = false;
810 fontDescriptionRun1.sizeDefined = false;
812 const std::string fontFamily2( "TizenSansHebrew" );
814 // Set a known font description
815 FontDescriptionRun fontDescriptionRun2;
816 fontDescriptionRun2.characterRun.characterIndex = 17u;
817 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
818 fontDescriptionRun2.familyLength = fontFamily2.size();
819 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
820 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
821 fontDescriptionRun2.familyDefined = true;
822 fontDescriptionRun2.weightDefined = false;
823 fontDescriptionRun2.widthDefined = false;
824 fontDescriptionRun2.slantDefined = false;
825 fontDescriptionRun2.sizeDefined = false;
827 const std::string fontFamily3( "TizenSans" );
829 // Set a known font description
830 FontDescriptionRun fontDescriptionRun3;
831 fontDescriptionRun3.characterRun.characterIndex = 26u;
832 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
833 fontDescriptionRun3.familyLength = fontFamily3.size();
834 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
835 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
836 fontDescriptionRun3.familyDefined = true;
837 fontDescriptionRun3.weightDefined = false;
838 fontDescriptionRun3.widthDefined = false;
839 fontDescriptionRun3.slantDefined = false;
840 fontDescriptionRun3.sizeDefined = false;
842 const std::string fontFamily4( "TizenSansHebrew" );
844 // Set a known font description
845 FontDescriptionRun fontDescriptionRun4;
846 fontDescriptionRun4.characterRun.characterIndex = 28u;
847 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
848 fontDescriptionRun4.familyLength = fontFamily4.size();
849 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
850 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
851 fontDescriptionRun4.familyDefined = true;
852 fontDescriptionRun4.weightDefined = false;
853 fontDescriptionRun4.widthDefined = false;
854 fontDescriptionRun4.slantDefined = false;
855 fontDescriptionRun4.sizeDefined = false;
857 const std::string fontFamily5( "TizenSans" );
859 // Set a known font description
860 FontDescriptionRun fontDescriptionRun5;
861 fontDescriptionRun5.characterRun.characterIndex = 38u;
862 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
863 fontDescriptionRun5.familyLength = fontFamily5.size();
864 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
865 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
866 fontDescriptionRun5.familyDefined = true;
867 fontDescriptionRun5.weightDefined = false;
868 fontDescriptionRun5.widthDefined = false;
869 fontDescriptionRun5.slantDefined = false;
870 fontDescriptionRun5.sizeDefined = false;
872 Vector<FontDescriptionRun> fontDescriptionRuns;
873 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
874 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
875 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
876 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
877 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
878 Size textArea(100.f, 300.f);
879 Size layoutSize(81.f, 114.f);
882 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
883 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
884 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
885 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
886 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
887 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
889 struct LineRun line0 =
902 struct LineRun line1 =
915 struct LineRun line2 =
928 struct LineRun line3 =
941 struct LineRun line4 =
954 struct LineRun line5 =
967 Vector<LineRun> lines;
968 lines.PushBack( line0 );
969 lines.PushBack( line1 );
970 lines.PushBack( line2 );
971 lines.PushBack( line3 );
972 lines.PushBack( line4 );
973 lines.PushBack( line5 );
975 LayoutTextData data =
977 "Layout bidirectional text.",
978 "Hello world demo שלום עולם.\n"
979 "שלום עולם hello world demo.",
982 fontDescriptionRuns.Begin(),
988 Layout::Engine::MULTI_LINE_BOX,
995 if( !LayoutTextTest( data ) )
997 tet_result(TET_FAIL);
1000 tet_result(TET_PASS);
1004 int UtcDaliTextLayoutMultilineText03(void)
1006 ToolkitTestApplication application;
1007 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1009 // Layout a long word which doesn't fit in the width of the text area.
1011 const std::string fontFamily( "TizenSans" );
1013 // Set a known font description
1014 FontDescriptionRun fontDescriptionRun;
1015 fontDescriptionRun.characterRun.characterIndex = 0u;
1016 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1017 fontDescriptionRun.familyLength = fontFamily.size();
1018 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1019 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1020 fontDescriptionRun.familyDefined = true;
1021 fontDescriptionRun.weightDefined = false;
1022 fontDescriptionRun.widthDefined = false;
1023 fontDescriptionRun.slantDefined = false;
1024 fontDescriptionRun.sizeDefined = false;
1026 Vector<FontDescriptionRun> fontDescriptionRuns;
1027 fontDescriptionRuns.PushBack( fontDescriptionRun );
1028 Size textArea(100.f, 300.f);
1029 Size layoutSize(98.f, 57.f);
1032 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,
1033 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,
1034 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
1036 struct LineRun line0 =
1049 struct LineRun line1 =
1062 struct LineRun line2 =
1075 Vector<LineRun> lines;
1076 lines.PushBack( line0 );
1077 lines.PushBack( line1 );
1078 lines.PushBack( line2 );
1080 LayoutTextData data =
1082 "Layout a long word which doesn't fit in the width of the text area.",
1083 "Helloworlddemohelloworlddemo.",
1086 fontDescriptionRuns.Begin(),
1092 Layout::Engine::MULTI_LINE_BOX,
1099 if( !LayoutTextTest( data ) )
1101 tet_result(TET_FAIL);
1104 tet_result(TET_PASS);
1108 int UtcDaliTextLayoutMultilineText04(void)
1110 ToolkitTestApplication application;
1111 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1113 // Layout simple text ending with a \n. It has to add a void line at the end.
1115 const std::string fontFamily( "TizenSans" );
1117 // Set a known font description
1118 FontDescriptionRun fontDescriptionRun;
1119 fontDescriptionRun.characterRun.characterIndex = 0u;
1120 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1121 fontDescriptionRun.familyLength = fontFamily.size();
1122 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1123 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1124 fontDescriptionRun.familyDefined = true;
1125 fontDescriptionRun.weightDefined = false;
1126 fontDescriptionRun.widthDefined = false;
1127 fontDescriptionRun.slantDefined = false;
1128 fontDescriptionRun.sizeDefined = false;
1130 Vector<FontDescriptionRun> fontDescriptionRuns;
1131 fontDescriptionRuns.PushBack( fontDescriptionRun );
1132 Size textArea(100.f, 300.f);
1133 Size layoutSize(84.f, 38.f);
1136 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
1138 struct LineRun line0 =
1150 struct LineRun line1 =
1163 Vector<LineRun> lines;
1164 lines.PushBack( line0 );
1165 lines.PushBack( line1 );
1167 LayoutTextData data =
1169 "Layout simple text ending with a \n.",
1173 fontDescriptionRuns.Begin(),
1179 Layout::Engine::MULTI_LINE_BOX,
1186 if( !LayoutTextTest( data ) )
1188 tet_result(TET_FAIL);
1191 tet_result(TET_PASS);
1195 int UtcDaliTextLayoutMultilineText05(void)
1197 ToolkitTestApplication application;
1198 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1200 // Layout simple text with one character with a different font size.
1202 const std::string fontFamily( "TizenSans" );
1204 // Set a known font description
1205 FontDescriptionRun fontDescriptionRun1;
1206 fontDescriptionRun1.characterRun.characterIndex = 0u;
1207 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1208 fontDescriptionRun1.familyLength = fontFamily.size();
1209 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1210 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1211 fontDescriptionRun1.familyDefined = true;
1212 fontDescriptionRun1.weightDefined = false;
1213 fontDescriptionRun1.widthDefined = false;
1214 fontDescriptionRun1.slantDefined = false;
1215 fontDescriptionRun1.sizeDefined = false;
1217 FontDescriptionRun fontDescriptionRun2;
1218 fontDescriptionRun2.characterRun.characterIndex = 6u;
1219 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1220 fontDescriptionRun2.familyLength = fontFamily.size();
1221 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1222 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1223 fontDescriptionRun2.size = 1280u;
1224 fontDescriptionRun2.familyDefined = true;
1225 fontDescriptionRun2.weightDefined = false;
1226 fontDescriptionRun2.widthDefined = false;
1227 fontDescriptionRun2.slantDefined = false;
1228 fontDescriptionRun2.sizeDefined = true;
1230 FontDescriptionRun fontDescriptionRun3;
1231 fontDescriptionRun3.characterRun.characterIndex = 7u;
1232 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1233 fontDescriptionRun3.familyLength = fontFamily.size();
1234 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1235 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1236 fontDescriptionRun3.familyDefined = true;
1237 fontDescriptionRun3.weightDefined = false;
1238 fontDescriptionRun3.widthDefined = false;
1239 fontDescriptionRun3.slantDefined = false;
1240 fontDescriptionRun3.sizeDefined = false;
1242 Vector<FontDescriptionRun> fontDescriptionRuns;
1243 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1244 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1245 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1246 Size textArea(100.f, 300.f);
1247 Size layoutSize(89.f, 51.f);
1250 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,
1251 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
1253 struct LineRun line0 =
1266 struct LineRun line1 =
1279 Vector<LineRun> lines;
1280 lines.PushBack( line0 );
1281 lines.PushBack( line1 );
1283 LayoutTextData data =
1285 "Layout simple text with one character with a different font size.",
1286 "Hello world demo.",
1289 fontDescriptionRuns.Begin(),
1295 Layout::Engine::MULTI_LINE_BOX,
1302 if( !LayoutTextTest( data ) )
1304 tet_result(TET_FAIL);
1307 tet_result(TET_PASS);
1311 int UtcDaliTextLayoutMultilineText06(void)
1313 ToolkitTestApplication application;
1314 tet_infoline(" UtcDaliTextLayoutMultilineText06");
1316 const std::string fontFamily( "TizenSansHebrew" );
1318 // Set a known font description
1319 FontDescriptionRun fontDescriptionRun;
1320 fontDescriptionRun.characterRun.characterIndex = 0u;
1321 fontDescriptionRun.characterRun.numberOfCharacters = 10u;
1322 fontDescriptionRun.familyLength = fontFamily.size();
1323 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1324 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1325 fontDescriptionRun.familyDefined = true;
1326 fontDescriptionRun.weightDefined = false;
1327 fontDescriptionRun.widthDefined = false;
1328 fontDescriptionRun.slantDefined = false;
1329 fontDescriptionRun.sizeDefined = false;
1331 Vector<FontDescriptionRun> fontDescriptionRuns;
1332 fontDescriptionRuns.PushBack( fontDescriptionRun );
1334 Size textArea(64.f, 100.f);
1335 Size layoutSize(33.f, 38.f);
1338 28.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
1339 23.f, -10.f, 18.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
1341 struct LineRun line0 =
1354 struct LineRun line1 =
1367 Vector<LineRun> lines;
1368 lines.PushBack( line0 );
1369 lines.PushBack( line1 );
1371 LayoutTextData data =
1373 "Layout right to left text that doesn't fit in the text area after reordering.",
1374 "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
1377 fontDescriptionRuns.Begin(),
1383 Layout::Engine::MULTI_LINE_BOX,
1390 if( !LayoutTextTest( data ) )
1392 tet_result(TET_FAIL);
1395 tet_result(TET_PASS);
1399 int UtcDaliTextLayoutMultilineText07(void)
1401 ToolkitTestApplication application;
1402 tet_infoline(" UtcDaliTextLayoutMultilineText07");
1404 const std::string fontFamily( "TizenSansHebrew" );
1406 // Set a known font description
1407 FontDescriptionRun fontDescriptionRun;
1408 fontDescriptionRun.characterRun.characterIndex = 0u;
1409 fontDescriptionRun.characterRun.numberOfCharacters = 9u;
1410 fontDescriptionRun.familyLength = fontFamily.size();
1411 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1412 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1413 fontDescriptionRun.familyDefined = true;
1414 fontDescriptionRun.weightDefined = false;
1415 fontDescriptionRun.widthDefined = false;
1416 fontDescriptionRun.slantDefined = false;
1417 fontDescriptionRun.sizeDefined = false;
1419 Vector<FontDescriptionRun> fontDescriptionRuns;
1420 fontDescriptionRuns.PushBack( fontDescriptionRun );
1422 Size textArea(26.f, 100.f);
1423 Size layoutSize(23.f, 57.f);
1426 11.f, -10.f, 5.f, -10.f, 0.f, -10.f,
1427 12.f, -10.f, 8.f, -10.f, 0.f, -13.f,
1428 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
1430 struct LineRun line0 =
1443 struct LineRun line1 =
1456 struct LineRun line2 =
1469 Vector<LineRun> lines;
1470 lines.PushBack( line0 );
1471 lines.PushBack( line1 );
1472 lines.PushBack( line2 );
1474 LayoutTextData data =
1476 "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.",
1477 "שנורולכאן", // 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.
1480 fontDescriptionRuns.Begin(),
1486 Layout::Engine::MULTI_LINE_BOX,
1493 if( !LayoutTextTest( data ) )
1495 tet_result(TET_FAIL);
1498 tet_result(TET_PASS);
1502 int UtcDaliTextUpdateLayout01(void)
1504 ToolkitTestApplication application;
1505 tet_infoline(" UtcDaliTextUpdateLayout01");
1507 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1509 const std::string fontLatin( "TizenSans" );
1510 const std::string fontHebrew( "TizenSansHebrew" );
1511 const std::string fontArabic( "TizenSansArabic" );
1513 // Set a known font description
1514 FontDescriptionRun fontDescriptionRun01;
1515 fontDescriptionRun01.characterRun.characterIndex = 0u;
1516 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1517 fontDescriptionRun01.familyLength = fontLatin.size();
1518 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1519 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1520 fontDescriptionRun01.familyDefined = true;
1521 fontDescriptionRun01.weightDefined = false;
1522 fontDescriptionRun01.widthDefined = false;
1523 fontDescriptionRun01.slantDefined = false;
1524 fontDescriptionRun01.sizeDefined = false;
1526 // Set a known font description
1527 FontDescriptionRun fontDescriptionRun02;
1528 fontDescriptionRun02.characterRun.characterIndex = 17u;
1529 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1530 fontDescriptionRun02.familyLength = fontHebrew.size();
1531 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1532 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1533 fontDescriptionRun02.familyDefined = true;
1534 fontDescriptionRun02.weightDefined = false;
1535 fontDescriptionRun02.widthDefined = false;
1536 fontDescriptionRun02.slantDefined = false;
1537 fontDescriptionRun02.sizeDefined = false;
1539 // Set a known font description
1540 FontDescriptionRun fontDescriptionRun03;
1541 fontDescriptionRun03.characterRun.characterIndex = 26u;
1542 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1543 fontDescriptionRun03.familyLength = fontLatin.size();
1544 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1545 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1546 fontDescriptionRun03.familyDefined = true;
1547 fontDescriptionRun03.weightDefined = false;
1548 fontDescriptionRun03.widthDefined = false;
1549 fontDescriptionRun03.slantDefined = false;
1550 fontDescriptionRun03.sizeDefined = false;
1552 // Set a known font description
1553 FontDescriptionRun fontDescriptionRun04;
1554 fontDescriptionRun04.characterRun.characterIndex = 28u;
1555 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1556 fontDescriptionRun04.familyLength = fontArabic.size();
1557 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1558 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1559 fontDescriptionRun04.familyDefined = true;
1560 fontDescriptionRun04.weightDefined = false;
1561 fontDescriptionRun04.widthDefined = false;
1562 fontDescriptionRun04.slantDefined = false;
1563 fontDescriptionRun04.sizeDefined = false;
1565 // Set a known font description
1566 FontDescriptionRun fontDescriptionRun05;
1567 fontDescriptionRun05.characterRun.characterIndex = 42u;
1568 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1569 fontDescriptionRun05.familyLength = fontLatin.size();
1570 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1571 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1572 fontDescriptionRun05.familyDefined = true;
1573 fontDescriptionRun05.weightDefined = false;
1574 fontDescriptionRun05.widthDefined = false;
1575 fontDescriptionRun05.slantDefined = false;
1576 fontDescriptionRun05.sizeDefined = false;
1578 // Set a known font description
1579 FontDescriptionRun fontDescriptionRun06;
1580 fontDescriptionRun06.characterRun.characterIndex = 54u;
1581 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1582 fontDescriptionRun06.familyLength = fontHebrew.size();
1583 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1584 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1585 fontDescriptionRun06.familyDefined = true;
1586 fontDescriptionRun06.weightDefined = false;
1587 fontDescriptionRun06.widthDefined = false;
1588 fontDescriptionRun06.slantDefined = false;
1589 fontDescriptionRun06.sizeDefined = false;
1591 // Set a known font description
1592 FontDescriptionRun fontDescriptionRun07;
1593 fontDescriptionRun07.characterRun.characterIndex = 64u;
1594 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1595 fontDescriptionRun07.familyLength = fontHebrew.size();
1596 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1597 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1598 fontDescriptionRun07.familyDefined = true;
1599 fontDescriptionRun07.weightDefined = false;
1600 fontDescriptionRun07.widthDefined = false;
1601 fontDescriptionRun07.slantDefined = false;
1602 fontDescriptionRun07.sizeDefined = false;
1604 // Set a known font description
1605 FontDescriptionRun fontDescriptionRun08;
1606 fontDescriptionRun08.characterRun.characterIndex = 74u;
1607 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1608 fontDescriptionRun08.familyLength = fontLatin.size();
1609 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1610 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1611 fontDescriptionRun08.familyDefined = true;
1612 fontDescriptionRun08.weightDefined = false;
1613 fontDescriptionRun08.widthDefined = false;
1614 fontDescriptionRun08.slantDefined = false;
1615 fontDescriptionRun08.sizeDefined = false;
1617 // Set a known font description
1618 FontDescriptionRun fontDescriptionRun09;
1619 fontDescriptionRun09.characterRun.characterIndex = 92u;
1620 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1621 fontDescriptionRun09.familyLength = fontLatin.size();
1622 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1623 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1624 fontDescriptionRun09.familyDefined = true;
1625 fontDescriptionRun09.weightDefined = false;
1626 fontDescriptionRun09.widthDefined = false;
1627 fontDescriptionRun09.slantDefined = false;
1628 fontDescriptionRun09.sizeDefined = false;
1630 // Set a known font description
1631 FontDescriptionRun fontDescriptionRun10;
1632 fontDescriptionRun10.characterRun.characterIndex = 104u;
1633 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1634 fontDescriptionRun10.familyLength = fontArabic.size();
1635 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1636 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1637 fontDescriptionRun10.familyDefined = true;
1638 fontDescriptionRun10.weightDefined = false;
1639 fontDescriptionRun10.widthDefined = false;
1640 fontDescriptionRun10.slantDefined = false;
1641 fontDescriptionRun10.sizeDefined = false;
1643 // Set a known font description
1644 FontDescriptionRun fontDescriptionRun11;
1645 fontDescriptionRun11.characterRun.characterIndex = 118u;
1646 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1647 fontDescriptionRun11.familyLength = fontHebrew.size();
1648 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1649 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1650 fontDescriptionRun11.familyDefined = true;
1651 fontDescriptionRun11.weightDefined = false;
1652 fontDescriptionRun11.widthDefined = false;
1653 fontDescriptionRun11.slantDefined = false;
1654 fontDescriptionRun11.sizeDefined = false;
1656 // Set a known font description
1657 FontDescriptionRun fontDescriptionRun12;
1658 fontDescriptionRun12.characterRun.characterIndex = 128u;
1659 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1660 fontDescriptionRun12.familyLength = fontLatin.size();
1661 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1662 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1663 fontDescriptionRun12.familyDefined = true;
1664 fontDescriptionRun12.weightDefined = false;
1665 fontDescriptionRun12.widthDefined = false;
1666 fontDescriptionRun12.slantDefined = false;
1667 fontDescriptionRun12.sizeDefined = false;
1669 // Set a known font description
1670 FontDescriptionRun fontDescriptionRun13;
1671 fontDescriptionRun13.characterRun.characterIndex = 145u;
1672 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1673 fontDescriptionRun13.familyLength = fontHebrew.size();
1674 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1675 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1676 fontDescriptionRun13.familyDefined = true;
1677 fontDescriptionRun13.weightDefined = false;
1678 fontDescriptionRun13.widthDefined = false;
1679 fontDescriptionRun13.slantDefined = false;
1680 fontDescriptionRun13.sizeDefined = false;
1682 // Set a known font description
1683 FontDescriptionRun fontDescriptionRun14;
1684 fontDescriptionRun14.characterRun.characterIndex = 154u;
1685 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1686 fontDescriptionRun14.familyLength = fontLatin.size();
1687 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1688 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1689 fontDescriptionRun14.familyDefined = true;
1690 fontDescriptionRun14.weightDefined = false;
1691 fontDescriptionRun14.widthDefined = false;
1692 fontDescriptionRun14.slantDefined = false;
1693 fontDescriptionRun14.sizeDefined = false;
1695 // Set a known font description
1696 FontDescriptionRun fontDescriptionRun15;
1697 fontDescriptionRun15.characterRun.characterIndex = 156u;
1698 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1699 fontDescriptionRun15.familyLength = fontHebrew.size();
1700 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1701 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1702 fontDescriptionRun15.familyDefined = true;
1703 fontDescriptionRun15.weightDefined = false;
1704 fontDescriptionRun15.widthDefined = false;
1705 fontDescriptionRun15.slantDefined = false;
1706 fontDescriptionRun15.sizeDefined = false;
1708 // Set a known font description
1709 FontDescriptionRun fontDescriptionRun16;
1710 fontDescriptionRun16.characterRun.characterIndex = 166u;
1711 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1712 fontDescriptionRun16.familyLength = fontLatin.size();
1713 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1714 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1715 fontDescriptionRun16.familyDefined = true;
1716 fontDescriptionRun16.weightDefined = false;
1717 fontDescriptionRun16.widthDefined = false;
1718 fontDescriptionRun16.slantDefined = false;
1719 fontDescriptionRun16.sizeDefined = false;
1721 // Set a known font description
1722 FontDescriptionRun fontDescriptionRun17;
1723 fontDescriptionRun17.characterRun.characterIndex = 178u;
1724 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1725 fontDescriptionRun17.familyLength = fontArabic.size();
1726 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1727 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1728 fontDescriptionRun17.familyDefined = true;
1729 fontDescriptionRun17.weightDefined = false;
1730 fontDescriptionRun17.widthDefined = false;
1731 fontDescriptionRun17.slantDefined = false;
1732 fontDescriptionRun17.sizeDefined = false;
1734 Vector<FontDescriptionRun> fontDescriptionRuns;
1735 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1736 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1737 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1738 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1739 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1740 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1741 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1742 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1743 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1744 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1745 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1746 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1747 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1748 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1749 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1750 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1751 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1752 Size textArea(100.f, 300.f);
1753 Size layoutSize(100.f, 361.f);
1756 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
1757 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
1758 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
1759 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
1760 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
1761 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
1762 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
1763 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
1764 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
1765 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
1766 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
1767 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
1768 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
1769 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
1770 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
1771 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
1772 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
1773 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
1776 struct LineRun line01 =
1789 struct LineRun line02 =
1802 struct LineRun line03 =
1815 struct LineRun line04 =
1828 struct LineRun line05 =
1841 struct LineRun line06 =
1854 struct LineRun line07 =
1867 struct LineRun line08 =
1880 struct LineRun line09 =
1893 struct LineRun line10 =
1906 struct LineRun line11 =
1919 struct LineRun line12 =
1932 struct LineRun line13 =
1945 struct LineRun line14 =
1958 struct LineRun line15 =
1971 struct LineRun line16 =
1984 struct LineRun line17 =
1997 struct LineRun line18 =
2010 struct LineRun line19 =
2023 Vector<LineRun> lines;
2024 lines.PushBack( line01 );
2025 lines.PushBack( line02 );
2026 lines.PushBack( line03 );
2027 lines.PushBack( line04 );
2028 lines.PushBack( line05 );
2029 lines.PushBack( line06 );
2030 lines.PushBack( line07 );
2031 lines.PushBack( line08 );
2032 lines.PushBack( line09 );
2033 lines.PushBack( line10 );
2034 lines.PushBack( line11 );
2035 lines.PushBack( line12 );
2036 lines.PushBack( line13 );
2037 lines.PushBack( line14 );
2038 lines.PushBack( line15 );
2039 lines.PushBack( line16 );
2040 lines.PushBack( line17 );
2041 lines.PushBack( line18 );
2042 lines.PushBack( line19 );
2044 LayoutTextData data =
2046 "Layout bidirectional text.",
2047 "Hello world demo שלום עולם.\n"
2048 "مرحبا بالعالم hello world שלום עולם\n"
2049 "שלום עולם hello world demo.\n"
2050 "hello world مرحبا بالعالم שלום עולם\n"
2051 "Hello world demo שלום עולם.\n"
2052 "שלום עולם hello world مرحبا بالعالم\n",
2055 fontDescriptionRuns.Begin(),
2061 Layout::Engine::MULTI_LINE_BOX,
2068 if( !LayoutTextTest( data ) )
2070 tet_result(TET_FAIL);
2073 tet_result(TET_PASS);
2077 int UtcDaliTextUpdateLayout02(void)
2079 ToolkitTestApplication application;
2080 tet_infoline(" UtcDaliTextUpdateLayout02");
2082 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2084 const std::string fontLatin( "TizenSans" );
2085 const std::string fontHebrew( "TizenSansHebrew" );
2086 const std::string fontArabic( "TizenSansArabic" );
2088 // Set a known font description
2089 FontDescriptionRun fontDescriptionRun01;
2090 fontDescriptionRun01.characterRun.characterIndex = 0u;
2091 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2092 fontDescriptionRun01.familyLength = fontLatin.size();
2093 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2094 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2095 fontDescriptionRun01.familyDefined = true;
2096 fontDescriptionRun01.weightDefined = false;
2097 fontDescriptionRun01.widthDefined = false;
2098 fontDescriptionRun01.slantDefined = false;
2099 fontDescriptionRun01.sizeDefined = false;
2101 // Set a known font description
2102 FontDescriptionRun fontDescriptionRun02;
2103 fontDescriptionRun02.characterRun.characterIndex = 17u;
2104 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2105 fontDescriptionRun02.familyLength = fontHebrew.size();
2106 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2107 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2108 fontDescriptionRun02.familyDefined = true;
2109 fontDescriptionRun02.weightDefined = false;
2110 fontDescriptionRun02.widthDefined = false;
2111 fontDescriptionRun02.slantDefined = false;
2112 fontDescriptionRun02.sizeDefined = false;
2114 // Set a known font description
2115 FontDescriptionRun fontDescriptionRun03;
2116 fontDescriptionRun03.characterRun.characterIndex = 26u;
2117 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2118 fontDescriptionRun03.familyLength = fontLatin.size();
2119 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2120 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2121 fontDescriptionRun03.familyDefined = true;
2122 fontDescriptionRun03.weightDefined = false;
2123 fontDescriptionRun03.widthDefined = false;
2124 fontDescriptionRun03.slantDefined = false;
2125 fontDescriptionRun03.sizeDefined = false;
2127 // Set a known font description
2128 FontDescriptionRun fontDescriptionRun04;
2129 fontDescriptionRun04.characterRun.characterIndex = 28u;
2130 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2131 fontDescriptionRun04.familyLength = fontArabic.size();
2132 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2133 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2134 fontDescriptionRun04.familyDefined = true;
2135 fontDescriptionRun04.weightDefined = false;
2136 fontDescriptionRun04.widthDefined = false;
2137 fontDescriptionRun04.slantDefined = false;
2138 fontDescriptionRun04.sizeDefined = false;
2140 // Set a known font description
2141 FontDescriptionRun fontDescriptionRun05;
2142 fontDescriptionRun05.characterRun.characterIndex = 42u;
2143 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2144 fontDescriptionRun05.familyLength = fontLatin.size();
2145 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2146 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2147 fontDescriptionRun05.familyDefined = true;
2148 fontDescriptionRun05.weightDefined = false;
2149 fontDescriptionRun05.widthDefined = false;
2150 fontDescriptionRun05.slantDefined = false;
2151 fontDescriptionRun05.sizeDefined = false;
2153 // Set a known font description
2154 FontDescriptionRun fontDescriptionRun06;
2155 fontDescriptionRun06.characterRun.characterIndex = 54u;
2156 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2157 fontDescriptionRun06.familyLength = fontHebrew.size();
2158 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2159 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2160 fontDescriptionRun06.familyDefined = true;
2161 fontDescriptionRun06.weightDefined = false;
2162 fontDescriptionRun06.widthDefined = false;
2163 fontDescriptionRun06.slantDefined = false;
2164 fontDescriptionRun06.sizeDefined = false;
2166 // Set a known font description
2167 FontDescriptionRun fontDescriptionRun07;
2168 fontDescriptionRun07.characterRun.characterIndex = 64u;
2169 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2170 fontDescriptionRun07.familyLength = fontHebrew.size();
2171 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2172 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2173 fontDescriptionRun07.familyDefined = true;
2174 fontDescriptionRun07.weightDefined = false;
2175 fontDescriptionRun07.widthDefined = false;
2176 fontDescriptionRun07.slantDefined = false;
2177 fontDescriptionRun07.sizeDefined = false;
2179 // Set a known font description
2180 FontDescriptionRun fontDescriptionRun08;
2181 fontDescriptionRun08.characterRun.characterIndex = 74u;
2182 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2183 fontDescriptionRun08.familyLength = fontLatin.size();
2184 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2185 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2186 fontDescriptionRun08.familyDefined = true;
2187 fontDescriptionRun08.weightDefined = false;
2188 fontDescriptionRun08.widthDefined = false;
2189 fontDescriptionRun08.slantDefined = false;
2190 fontDescriptionRun08.sizeDefined = false;
2192 // Set a known font description
2193 FontDescriptionRun fontDescriptionRun09;
2194 fontDescriptionRun09.characterRun.characterIndex = 92u;
2195 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2196 fontDescriptionRun09.familyLength = fontLatin.size();
2197 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2198 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2199 fontDescriptionRun09.familyDefined = true;
2200 fontDescriptionRun09.weightDefined = false;
2201 fontDescriptionRun09.widthDefined = false;
2202 fontDescriptionRun09.slantDefined = false;
2203 fontDescriptionRun09.sizeDefined = false;
2205 // Set a known font description
2206 FontDescriptionRun fontDescriptionRun10;
2207 fontDescriptionRun10.characterRun.characterIndex = 104u;
2208 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2209 fontDescriptionRun10.familyLength = fontArabic.size();
2210 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2211 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2212 fontDescriptionRun10.familyDefined = true;
2213 fontDescriptionRun10.weightDefined = false;
2214 fontDescriptionRun10.widthDefined = false;
2215 fontDescriptionRun10.slantDefined = false;
2216 fontDescriptionRun10.sizeDefined = false;
2218 // Set a known font description
2219 FontDescriptionRun fontDescriptionRun11;
2220 fontDescriptionRun11.characterRun.characterIndex = 118u;
2221 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2222 fontDescriptionRun11.familyLength = fontHebrew.size();
2223 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2224 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2225 fontDescriptionRun11.familyDefined = true;
2226 fontDescriptionRun11.weightDefined = false;
2227 fontDescriptionRun11.widthDefined = false;
2228 fontDescriptionRun11.slantDefined = false;
2229 fontDescriptionRun11.sizeDefined = false;
2231 // Set a known font description
2232 FontDescriptionRun fontDescriptionRun12;
2233 fontDescriptionRun12.characterRun.characterIndex = 128u;
2234 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2235 fontDescriptionRun12.familyLength = fontLatin.size();
2236 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2237 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2238 fontDescriptionRun12.familyDefined = true;
2239 fontDescriptionRun12.weightDefined = false;
2240 fontDescriptionRun12.widthDefined = false;
2241 fontDescriptionRun12.slantDefined = false;
2242 fontDescriptionRun12.sizeDefined = false;
2244 // Set a known font description
2245 FontDescriptionRun fontDescriptionRun13;
2246 fontDescriptionRun13.characterRun.characterIndex = 145u;
2247 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2248 fontDescriptionRun13.familyLength = fontHebrew.size();
2249 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2250 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2251 fontDescriptionRun13.familyDefined = true;
2252 fontDescriptionRun13.weightDefined = false;
2253 fontDescriptionRun13.widthDefined = false;
2254 fontDescriptionRun13.slantDefined = false;
2255 fontDescriptionRun13.sizeDefined = false;
2257 // Set a known font description
2258 FontDescriptionRun fontDescriptionRun14;
2259 fontDescriptionRun14.characterRun.characterIndex = 154u;
2260 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2261 fontDescriptionRun14.familyLength = fontLatin.size();
2262 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2263 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2264 fontDescriptionRun14.familyDefined = true;
2265 fontDescriptionRun14.weightDefined = false;
2266 fontDescriptionRun14.widthDefined = false;
2267 fontDescriptionRun14.slantDefined = false;
2268 fontDescriptionRun14.sizeDefined = false;
2270 // Set a known font description
2271 FontDescriptionRun fontDescriptionRun15;
2272 fontDescriptionRun15.characterRun.characterIndex = 156u;
2273 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2274 fontDescriptionRun15.familyLength = fontHebrew.size();
2275 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2276 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2277 fontDescriptionRun15.familyDefined = true;
2278 fontDescriptionRun15.weightDefined = false;
2279 fontDescriptionRun15.widthDefined = false;
2280 fontDescriptionRun15.slantDefined = false;
2281 fontDescriptionRun15.sizeDefined = false;
2283 // Set a known font description
2284 FontDescriptionRun fontDescriptionRun16;
2285 fontDescriptionRun16.characterRun.characterIndex = 166u;
2286 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2287 fontDescriptionRun16.familyLength = fontLatin.size();
2288 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2289 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2290 fontDescriptionRun16.familyDefined = true;
2291 fontDescriptionRun16.weightDefined = false;
2292 fontDescriptionRun16.widthDefined = false;
2293 fontDescriptionRun16.slantDefined = false;
2294 fontDescriptionRun16.sizeDefined = false;
2296 // Set a known font description
2297 FontDescriptionRun fontDescriptionRun17;
2298 fontDescriptionRun17.characterRun.characterIndex = 178u;
2299 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2300 fontDescriptionRun17.familyLength = fontArabic.size();
2301 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2302 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2303 fontDescriptionRun17.familyDefined = true;
2304 fontDescriptionRun17.weightDefined = false;
2305 fontDescriptionRun17.widthDefined = false;
2306 fontDescriptionRun17.slantDefined = false;
2307 fontDescriptionRun17.sizeDefined = false;
2309 Vector<FontDescriptionRun> fontDescriptionRuns;
2310 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2311 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2312 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2313 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2314 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2315 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2316 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2317 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2318 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2319 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2320 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2321 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2322 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2323 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2324 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2325 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2326 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2327 Size textArea(100.f, 300.f);
2328 Size layoutSize(100.f, 361.f);
2331 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
2332 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
2333 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
2334 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
2335 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
2336 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2337 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
2338 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
2339 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
2340 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
2341 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
2342 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2343 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
2344 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
2345 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
2346 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
2347 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
2348 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
2351 struct LineRun line01 =
2364 struct LineRun line02 =
2377 struct LineRun line03 =
2390 struct LineRun line04 =
2403 struct LineRun line05 =
2416 struct LineRun line06 =
2429 struct LineRun line07 =
2442 struct LineRun line08 =
2455 struct LineRun line09 =
2468 struct LineRun line10 =
2481 struct LineRun line11 =
2494 struct LineRun line12 =
2507 struct LineRun line13 =
2520 struct LineRun line14 =
2533 struct LineRun line15 =
2546 struct LineRun line16 =
2559 struct LineRun line17 =
2572 struct LineRun line18 =
2585 struct LineRun line19 =
2598 Vector<LineRun> lines;
2599 lines.PushBack( line01 );
2600 lines.PushBack( line02 );
2601 lines.PushBack( line03 );
2602 lines.PushBack( line04 );
2603 lines.PushBack( line05 );
2604 lines.PushBack( line06 );
2605 lines.PushBack( line07 );
2606 lines.PushBack( line08 );
2607 lines.PushBack( line09 );
2608 lines.PushBack( line10 );
2609 lines.PushBack( line11 );
2610 lines.PushBack( line12 );
2611 lines.PushBack( line13 );
2612 lines.PushBack( line14 );
2613 lines.PushBack( line15 );
2614 lines.PushBack( line16 );
2615 lines.PushBack( line17 );
2616 lines.PushBack( line18 );
2617 lines.PushBack( line19 );
2619 LayoutTextData data =
2621 "Layout bidirectional text.",
2622 "Hello world demo שלום עולם.\n"
2623 "مرحبا بالعالم hello world שלום עולם\n"
2624 "שלום עולם hello world demo.\n"
2625 "hello world مرحبا بالعالم שלום עולם\n"
2626 "Hello world demo שלום עולם.\n"
2627 "שלום עולם hello world مرحبا بالعالم\n",
2630 fontDescriptionRuns.Begin(),
2636 Layout::Engine::MULTI_LINE_BOX,
2643 if( !LayoutTextTest( data ) )
2645 tet_result(TET_FAIL);
2648 tet_result(TET_PASS);
2652 int UtcDaliTextUpdateLayout03(void)
2654 ToolkitTestApplication application;
2655 tet_infoline(" UtcDaliTextUpdateLayout03");
2657 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2659 const std::string fontLatin( "TizenSans" );
2660 const std::string fontHebrew( "TizenSansHebrew" );
2661 const std::string fontArabic( "TizenSansArabic" );
2663 // Set a known font description
2664 FontDescriptionRun fontDescriptionRun01;
2665 fontDescriptionRun01.characterRun.characterIndex = 0u;
2666 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2667 fontDescriptionRun01.familyLength = fontLatin.size();
2668 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2669 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2670 fontDescriptionRun01.familyDefined = true;
2671 fontDescriptionRun01.weightDefined = false;
2672 fontDescriptionRun01.widthDefined = false;
2673 fontDescriptionRun01.slantDefined = false;
2674 fontDescriptionRun01.sizeDefined = false;
2676 // Set a known font description
2677 FontDescriptionRun fontDescriptionRun02;
2678 fontDescriptionRun02.characterRun.characterIndex = 17u;
2679 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2680 fontDescriptionRun02.familyLength = fontHebrew.size();
2681 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2682 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2683 fontDescriptionRun02.familyDefined = true;
2684 fontDescriptionRun02.weightDefined = false;
2685 fontDescriptionRun02.widthDefined = false;
2686 fontDescriptionRun02.slantDefined = false;
2687 fontDescriptionRun02.sizeDefined = false;
2689 // Set a known font description
2690 FontDescriptionRun fontDescriptionRun03;
2691 fontDescriptionRun03.characterRun.characterIndex = 26u;
2692 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2693 fontDescriptionRun03.familyLength = fontLatin.size();
2694 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2695 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2696 fontDescriptionRun03.familyDefined = true;
2697 fontDescriptionRun03.weightDefined = false;
2698 fontDescriptionRun03.widthDefined = false;
2699 fontDescriptionRun03.slantDefined = false;
2700 fontDescriptionRun03.sizeDefined = false;
2702 // Set a known font description
2703 FontDescriptionRun fontDescriptionRun04;
2704 fontDescriptionRun04.characterRun.characterIndex = 28u;
2705 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2706 fontDescriptionRun04.familyLength = fontArabic.size();
2707 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2708 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2709 fontDescriptionRun04.familyDefined = true;
2710 fontDescriptionRun04.weightDefined = false;
2711 fontDescriptionRun04.widthDefined = false;
2712 fontDescriptionRun04.slantDefined = false;
2713 fontDescriptionRun04.sizeDefined = false;
2715 // Set a known font description
2716 FontDescriptionRun fontDescriptionRun05;
2717 fontDescriptionRun05.characterRun.characterIndex = 42u;
2718 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2719 fontDescriptionRun05.familyLength = fontLatin.size();
2720 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2721 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2722 fontDescriptionRun05.familyDefined = true;
2723 fontDescriptionRun05.weightDefined = false;
2724 fontDescriptionRun05.widthDefined = false;
2725 fontDescriptionRun05.slantDefined = false;
2726 fontDescriptionRun05.sizeDefined = false;
2728 // Set a known font description
2729 FontDescriptionRun fontDescriptionRun06;
2730 fontDescriptionRun06.characterRun.characterIndex = 54u;
2731 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2732 fontDescriptionRun06.familyLength = fontHebrew.size();
2733 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2734 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2735 fontDescriptionRun06.familyDefined = true;
2736 fontDescriptionRun06.weightDefined = false;
2737 fontDescriptionRun06.widthDefined = false;
2738 fontDescriptionRun06.slantDefined = false;
2739 fontDescriptionRun06.sizeDefined = false;
2741 // Set a known font description
2742 FontDescriptionRun fontDescriptionRun07;
2743 fontDescriptionRun07.characterRun.characterIndex = 64u;
2744 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2745 fontDescriptionRun07.familyLength = fontHebrew.size();
2746 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2747 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2748 fontDescriptionRun07.familyDefined = true;
2749 fontDescriptionRun07.weightDefined = false;
2750 fontDescriptionRun07.widthDefined = false;
2751 fontDescriptionRun07.slantDefined = false;
2752 fontDescriptionRun07.sizeDefined = false;
2754 // Set a known font description
2755 FontDescriptionRun fontDescriptionRun08;
2756 fontDescriptionRun08.characterRun.characterIndex = 74u;
2757 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2758 fontDescriptionRun08.familyLength = fontLatin.size();
2759 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2760 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2761 fontDescriptionRun08.familyDefined = true;
2762 fontDescriptionRun08.weightDefined = false;
2763 fontDescriptionRun08.widthDefined = false;
2764 fontDescriptionRun08.slantDefined = false;
2765 fontDescriptionRun08.sizeDefined = false;
2767 // Set a known font description
2768 FontDescriptionRun fontDescriptionRun09;
2769 fontDescriptionRun09.characterRun.characterIndex = 92u;
2770 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2771 fontDescriptionRun09.familyLength = fontLatin.size();
2772 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2773 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2774 fontDescriptionRun09.familyDefined = true;
2775 fontDescriptionRun09.weightDefined = false;
2776 fontDescriptionRun09.widthDefined = false;
2777 fontDescriptionRun09.slantDefined = false;
2778 fontDescriptionRun09.sizeDefined = false;
2780 // Set a known font description
2781 FontDescriptionRun fontDescriptionRun10;
2782 fontDescriptionRun10.characterRun.characterIndex = 104u;
2783 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2784 fontDescriptionRun10.familyLength = fontArabic.size();
2785 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2786 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2787 fontDescriptionRun10.familyDefined = true;
2788 fontDescriptionRun10.weightDefined = false;
2789 fontDescriptionRun10.widthDefined = false;
2790 fontDescriptionRun10.slantDefined = false;
2791 fontDescriptionRun10.sizeDefined = false;
2793 // Set a known font description
2794 FontDescriptionRun fontDescriptionRun11;
2795 fontDescriptionRun11.characterRun.characterIndex = 118u;
2796 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2797 fontDescriptionRun11.familyLength = fontHebrew.size();
2798 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2799 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2800 fontDescriptionRun11.familyDefined = true;
2801 fontDescriptionRun11.weightDefined = false;
2802 fontDescriptionRun11.widthDefined = false;
2803 fontDescriptionRun11.slantDefined = false;
2804 fontDescriptionRun11.sizeDefined = false;
2806 // Set a known font description
2807 FontDescriptionRun fontDescriptionRun12;
2808 fontDescriptionRun12.characterRun.characterIndex = 128u;
2809 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2810 fontDescriptionRun12.familyLength = fontLatin.size();
2811 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2812 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2813 fontDescriptionRun12.familyDefined = true;
2814 fontDescriptionRun12.weightDefined = false;
2815 fontDescriptionRun12.widthDefined = false;
2816 fontDescriptionRun12.slantDefined = false;
2817 fontDescriptionRun12.sizeDefined = false;
2819 // Set a known font description
2820 FontDescriptionRun fontDescriptionRun13;
2821 fontDescriptionRun13.characterRun.characterIndex = 145u;
2822 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2823 fontDescriptionRun13.familyLength = fontHebrew.size();
2824 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2825 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2826 fontDescriptionRun13.familyDefined = true;
2827 fontDescriptionRun13.weightDefined = false;
2828 fontDescriptionRun13.widthDefined = false;
2829 fontDescriptionRun13.slantDefined = false;
2830 fontDescriptionRun13.sizeDefined = false;
2832 // Set a known font description
2833 FontDescriptionRun fontDescriptionRun14;
2834 fontDescriptionRun14.characterRun.characterIndex = 154u;
2835 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2836 fontDescriptionRun14.familyLength = fontLatin.size();
2837 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2838 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2839 fontDescriptionRun14.familyDefined = true;
2840 fontDescriptionRun14.weightDefined = false;
2841 fontDescriptionRun14.widthDefined = false;
2842 fontDescriptionRun14.slantDefined = false;
2843 fontDescriptionRun14.sizeDefined = false;
2845 // Set a known font description
2846 FontDescriptionRun fontDescriptionRun15;
2847 fontDescriptionRun15.characterRun.characterIndex = 156u;
2848 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2849 fontDescriptionRun15.familyLength = fontHebrew.size();
2850 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2851 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2852 fontDescriptionRun15.familyDefined = true;
2853 fontDescriptionRun15.weightDefined = false;
2854 fontDescriptionRun15.widthDefined = false;
2855 fontDescriptionRun15.slantDefined = false;
2856 fontDescriptionRun15.sizeDefined = false;
2858 // Set a known font description
2859 FontDescriptionRun fontDescriptionRun16;
2860 fontDescriptionRun16.characterRun.characterIndex = 166u;
2861 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2862 fontDescriptionRun16.familyLength = fontLatin.size();
2863 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2864 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2865 fontDescriptionRun16.familyDefined = true;
2866 fontDescriptionRun16.weightDefined = false;
2867 fontDescriptionRun16.widthDefined = false;
2868 fontDescriptionRun16.slantDefined = false;
2869 fontDescriptionRun16.sizeDefined = false;
2871 // Set a known font description
2872 FontDescriptionRun fontDescriptionRun17;
2873 fontDescriptionRun17.characterRun.characterIndex = 178u;
2874 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2875 fontDescriptionRun17.familyLength = fontArabic.size();
2876 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2877 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2878 fontDescriptionRun17.familyDefined = true;
2879 fontDescriptionRun17.weightDefined = false;
2880 fontDescriptionRun17.widthDefined = false;
2881 fontDescriptionRun17.slantDefined = false;
2882 fontDescriptionRun17.sizeDefined = false;
2884 Vector<FontDescriptionRun> fontDescriptionRuns;
2885 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2886 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2887 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2888 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2889 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2890 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2891 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2892 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2893 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2894 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2895 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2896 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2897 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2898 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2899 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2900 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2901 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2902 Size textArea(100.f, 300.f);
2903 Size layoutSize(100.f, 361.f);
2906 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
2907 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
2908 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
2909 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
2910 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
2911 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2912 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
2913 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
2914 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
2915 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
2916 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
2917 23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f, // 123 .. 127
2918 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
2919 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
2920 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
2921 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
2922 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
2923 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
2926 struct LineRun line01 =
2939 struct LineRun line02 =
2952 struct LineRun line03 =
2965 struct LineRun line04 =
2978 struct LineRun line05 =
2991 struct LineRun line06 =
3004 struct LineRun line07 =
3017 struct LineRun line08 =
3030 struct LineRun line09 =
3043 struct LineRun line10 =
3056 struct LineRun line11 =
3069 struct LineRun line12 =
3082 struct LineRun line13 =
3095 struct LineRun line14 =
3108 struct LineRun line15 =
3121 struct LineRun line16 =
3134 struct LineRun line17 =
3147 struct LineRun line18 =
3160 struct LineRun line19 =
3173 Vector<LineRun> lines;
3174 lines.PushBack( line01 );
3175 lines.PushBack( line02 );
3176 lines.PushBack( line03 );
3177 lines.PushBack( line04 );
3178 lines.PushBack( line05 );
3179 lines.PushBack( line06 );
3180 lines.PushBack( line07 );
3181 lines.PushBack( line08 );
3182 lines.PushBack( line09 );
3183 lines.PushBack( line10 );
3184 lines.PushBack( line11 );
3185 lines.PushBack( line12 );
3186 lines.PushBack( line13 );
3187 lines.PushBack( line14 );
3188 lines.PushBack( line15 );
3189 lines.PushBack( line16 );
3190 lines.PushBack( line17 );
3191 lines.PushBack( line18 );
3192 lines.PushBack( line19 );
3194 LayoutTextData data =
3196 "Layout bidirectional text.",
3197 "Hello world demo שלום עולם.\n"
3198 "مرحبا بالعالم hello world שלום עולם\n"
3199 "שלום עולם hello world demo.\n"
3200 "hello world مرحبا بالعالم שלום עולם\n"
3201 "Hello world demo שלום עולם.\n"
3202 "שלום עולם hello world مرحبا بالعالم\n",
3205 fontDescriptionRuns.Begin(),
3211 Layout::Engine::MULTI_LINE_BOX,
3218 if( !LayoutTextTest( data ) )
3220 tet_result(TET_FAIL);
3223 tet_result(TET_PASS);
3227 int UtcDaliTextLayoutEllipsis01(void)
3229 ToolkitTestApplication application;
3230 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3232 // Layout single-line LTR text with ellipsis.
3234 const std::string fontLatin( "TizenSans" );
3236 // Set a known font description
3237 FontDescriptionRun fontDescriptionRun01;
3238 fontDescriptionRun01.characterRun.characterIndex = 0u;
3239 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3240 fontDescriptionRun01.familyLength = fontLatin.size();
3241 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3242 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3243 fontDescriptionRun01.familyDefined = true;
3244 fontDescriptionRun01.weightDefined = false;
3245 fontDescriptionRun01.widthDefined = false;
3246 fontDescriptionRun01.slantDefined = false;
3247 fontDescriptionRun01.sizeDefined = false;
3249 Vector<FontDescriptionRun> fontDescriptionRuns;
3250 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3252 struct LineRun line01 =
3265 Vector<LineRun> lines;
3266 lines.PushBack( line01 );
3270 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,
3273 Size textArea( 100.f, 50.f );
3274 Size layoutSize( 100.f, 19.f );
3276 LayoutTextData data =
3278 "Layout single-line LTR text with ellipsis.",
3279 "Hello world demo hello world demo hello world demo.",
3282 fontDescriptionRuns.Begin(),
3288 Layout::Engine::SINGLE_LINE_BOX,
3295 if( !LayoutTextTest( data ) )
3297 tet_result(TET_FAIL);
3300 tet_result(TET_PASS);
3304 int UtcDaliTextLayoutEllipsis02(void)
3306 ToolkitTestApplication application;
3307 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3309 // Layout multi-line LTR text with ellipsis.
3311 const std::string fontLatin( "TizenSans" );
3313 // Set a known font description
3314 FontDescriptionRun fontDescriptionRun01;
3315 fontDescriptionRun01.characterRun.characterIndex = 0u;
3316 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3317 fontDescriptionRun01.familyLength = fontLatin.size();
3318 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3319 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3320 fontDescriptionRun01.familyDefined = true;
3321 fontDescriptionRun01.weightDefined = false;
3322 fontDescriptionRun01.widthDefined = false;
3323 fontDescriptionRun01.slantDefined = false;
3324 fontDescriptionRun01.sizeDefined = false;
3326 Vector<FontDescriptionRun> fontDescriptionRuns;
3327 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3329 struct LineRun line01 =
3342 struct LineRun line02 =
3355 Vector<LineRun> lines;
3356 lines.PushBack( line01 );
3357 lines.PushBack( line02 );
3361 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,
3362 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,
3365 Size textArea( 100.f, 50.f );
3366 Size layoutSize( 100.f, 38.f );
3368 LayoutTextData data =
3370 "Layout multi-line LTR text with ellipsis.",
3371 "Hello world demo hello world demo hello world demo.",
3374 fontDescriptionRuns.Begin(),
3380 Layout::Engine::MULTI_LINE_BOX,
3387 if( !LayoutTextTest( data ) )
3389 tet_result(TET_FAIL);
3392 tet_result(TET_PASS);
3396 int UtcDaliTextLayoutEllipsis03(void)
3398 ToolkitTestApplication application;
3399 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3401 // Layout single-line RTL text with ellipsis.
3403 const std::string fontHebrew( "TizenSansHebrew" );
3404 const std::string fontArabic( "TizenSansArabic" );
3406 // Set a known font description
3407 FontDescriptionRun fontDescriptionRun01;
3408 fontDescriptionRun01.characterRun.characterIndex = 0u;
3409 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3410 fontDescriptionRun01.familyLength = fontHebrew.size();
3411 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3412 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3413 fontDescriptionRun01.familyDefined = true;
3414 fontDescriptionRun01.weightDefined = false;
3415 fontDescriptionRun01.widthDefined = false;
3416 fontDescriptionRun01.slantDefined = false;
3417 fontDescriptionRun01.sizeDefined = false;
3419 FontDescriptionRun fontDescriptionRun02;
3420 fontDescriptionRun02.characterRun.characterIndex = 10u;
3421 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3422 fontDescriptionRun02.familyLength = fontArabic.size();
3423 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3424 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3425 fontDescriptionRun02.familyDefined = true;
3426 fontDescriptionRun02.weightDefined = false;
3427 fontDescriptionRun02.widthDefined = false;
3428 fontDescriptionRun02.slantDefined = false;
3429 fontDescriptionRun02.sizeDefined = false;
3431 FontDescriptionRun fontDescriptionRun03;
3432 fontDescriptionRun03.characterRun.characterIndex = 24u;
3433 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3434 fontDescriptionRun03.familyLength = fontHebrew.size();
3435 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3436 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3437 fontDescriptionRun03.familyDefined = true;
3438 fontDescriptionRun03.weightDefined = false;
3439 fontDescriptionRun03.widthDefined = false;
3440 fontDescriptionRun03.slantDefined = false;
3441 fontDescriptionRun03.sizeDefined = false;
3443 FontDescriptionRun fontDescriptionRun04;
3444 fontDescriptionRun04.characterRun.characterIndex = 34u;
3445 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3446 fontDescriptionRun04.familyLength = fontArabic.size();
3447 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3448 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3449 fontDescriptionRun04.familyDefined = true;
3450 fontDescriptionRun04.weightDefined = false;
3451 fontDescriptionRun04.widthDefined = false;
3452 fontDescriptionRun04.slantDefined = false;
3453 fontDescriptionRun04.sizeDefined = false;
3455 FontDescriptionRun fontDescriptionRun05;
3456 fontDescriptionRun05.characterRun.characterIndex = 48u;
3457 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3458 fontDescriptionRun05.familyLength = fontHebrew.size();
3459 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3460 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3461 fontDescriptionRun05.familyDefined = true;
3462 fontDescriptionRun05.weightDefined = false;
3463 fontDescriptionRun05.widthDefined = false;
3464 fontDescriptionRun05.slantDefined = false;
3465 fontDescriptionRun05.sizeDefined = false;
3467 FontDescriptionRun fontDescriptionRun06;
3468 fontDescriptionRun06.characterRun.characterIndex = 58u;
3469 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3470 fontDescriptionRun06.familyLength = fontArabic.size();
3471 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3472 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3473 fontDescriptionRun06.familyDefined = true;
3474 fontDescriptionRun06.weightDefined = false;
3475 fontDescriptionRun06.widthDefined = false;
3476 fontDescriptionRun06.slantDefined = false;
3477 fontDescriptionRun06.sizeDefined = false;
3479 Vector<FontDescriptionRun> fontDescriptionRuns;
3480 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3481 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3482 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3483 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3484 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3485 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3487 struct LineRun line01 =
3500 Vector<LineRun> lines;
3501 lines.PushBack( line01 );
3505 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,
3508 Size textArea( 100.f, 50.f );
3509 Size layoutSize( 100.f, 19.f );
3511 LayoutTextData data =
3513 "Layout single-line RTL text with ellipsis.",
3514 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3517 fontDescriptionRuns.Begin(),
3523 Layout::Engine::SINGLE_LINE_BOX,
3530 if( !LayoutTextTest( data ) )
3532 tet_result(TET_FAIL);
3535 tet_result(TET_PASS);
3539 int UtcDaliTextLayoutEllipsis04(void)
3541 ToolkitTestApplication application;
3542 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3544 // Layout multi-line RTL text with ellipsis.
3546 const std::string fontHebrew( "TizenSansHebrew" );
3547 const std::string fontArabic( "TizenSansArabic" );
3549 // Set a known font description
3550 FontDescriptionRun fontDescriptionRun01;
3551 fontDescriptionRun01.characterRun.characterIndex = 0u;
3552 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3553 fontDescriptionRun01.familyLength = fontHebrew.size();
3554 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3555 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3556 fontDescriptionRun01.familyDefined = true;
3557 fontDescriptionRun01.weightDefined = false;
3558 fontDescriptionRun01.widthDefined = false;
3559 fontDescriptionRun01.slantDefined = false;
3560 fontDescriptionRun01.sizeDefined = false;
3562 FontDescriptionRun fontDescriptionRun02;
3563 fontDescriptionRun02.characterRun.characterIndex = 10u;
3564 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3565 fontDescriptionRun02.familyLength = fontArabic.size();
3566 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3567 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3568 fontDescriptionRun02.familyDefined = true;
3569 fontDescriptionRun02.weightDefined = false;
3570 fontDescriptionRun02.widthDefined = false;
3571 fontDescriptionRun02.slantDefined = false;
3572 fontDescriptionRun02.sizeDefined = false;
3574 FontDescriptionRun fontDescriptionRun03;
3575 fontDescriptionRun03.characterRun.characterIndex = 24u;
3576 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3577 fontDescriptionRun03.familyLength = fontHebrew.size();
3578 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3579 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3580 fontDescriptionRun03.familyDefined = true;
3581 fontDescriptionRun03.weightDefined = false;
3582 fontDescriptionRun03.widthDefined = false;
3583 fontDescriptionRun03.slantDefined = false;
3584 fontDescriptionRun03.sizeDefined = false;
3586 FontDescriptionRun fontDescriptionRun04;
3587 fontDescriptionRun04.characterRun.characterIndex = 34u;
3588 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3589 fontDescriptionRun04.familyLength = fontArabic.size();
3590 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3591 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3592 fontDescriptionRun04.familyDefined = true;
3593 fontDescriptionRun04.weightDefined = false;
3594 fontDescriptionRun04.widthDefined = false;
3595 fontDescriptionRun04.slantDefined = false;
3596 fontDescriptionRun04.sizeDefined = false;
3598 FontDescriptionRun fontDescriptionRun05;
3599 fontDescriptionRun05.characterRun.characterIndex = 48u;
3600 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3601 fontDescriptionRun05.familyLength = fontHebrew.size();
3602 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3603 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3604 fontDescriptionRun05.familyDefined = true;
3605 fontDescriptionRun05.weightDefined = false;
3606 fontDescriptionRun05.widthDefined = false;
3607 fontDescriptionRun05.slantDefined = false;
3608 fontDescriptionRun05.sizeDefined = false;
3610 FontDescriptionRun fontDescriptionRun06;
3611 fontDescriptionRun06.characterRun.characterIndex = 58u;
3612 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3613 fontDescriptionRun06.familyLength = fontArabic.size();
3614 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3615 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3616 fontDescriptionRun06.familyDefined = true;
3617 fontDescriptionRun06.weightDefined = false;
3618 fontDescriptionRun06.widthDefined = false;
3619 fontDescriptionRun06.slantDefined = false;
3620 fontDescriptionRun06.sizeDefined = false;
3622 Vector<FontDescriptionRun> fontDescriptionRuns;
3623 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3624 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3625 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3626 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3627 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3628 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3630 struct LineRun line01 =
3643 struct LineRun line02 =
3656 Vector<LineRun> lines;
3657 lines.PushBack( line01 );
3658 lines.PushBack( line02 );
3662 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,
3663 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,
3666 Size textArea( 100.f, 50.f );
3667 Size layoutSize( 100.f, 38.f );
3669 LayoutTextData data =
3671 "Layout multi-line RTL text with ellipsis.",
3672 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3675 fontDescriptionRuns.Begin(),
3681 Layout::Engine::MULTI_LINE_BOX,
3688 if( !LayoutTextTest( data ) )
3690 tet_result(TET_FAIL);
3693 tet_result(TET_PASS);
3697 int UtcDaliTextLayoutEllipsis05(void)
3699 ToolkitTestApplication application;
3700 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3702 const std::string fontLatin( "TizenSans" );
3704 // Set a known font description
3705 FontDescriptionRun fontDescriptionRun01;
3706 fontDescriptionRun01.characterRun.characterIndex = 0u;
3707 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3708 fontDescriptionRun01.familyLength = fontLatin.size();
3709 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3710 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3711 fontDescriptionRun01.familyDefined = true;
3712 fontDescriptionRun01.weightDefined = false;
3713 fontDescriptionRun01.widthDefined = false;
3714 fontDescriptionRun01.slantDefined = false;
3715 fontDescriptionRun01.sizeDefined = false;
3717 Vector<FontDescriptionRun> fontDescriptionRuns;
3718 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3720 struct LineRun line01 =
3733 Vector<LineRun> lines;
3734 lines.PushBack( line01 );
3741 Size textArea( 100.f, 19.f );
3742 Size layoutSize( 81.f, 19.f );
3744 LayoutTextData data =
3746 "Not enough height.",
3750 fontDescriptionRuns.Begin(),
3756 Layout::Engine::MULTI_LINE_BOX,
3763 if( !LayoutTextTest( data ) )
3765 tet_result(TET_FAIL);
3768 tet_result(TET_PASS);
3772 int UtcDaliTextAlign01(void)
3774 ToolkitTestApplication application;
3775 tet_infoline(" UtcDaliTextAlign01");
3777 // Calculate text alignment.
3779 const std::string fontLatin( "TizenSans" );
3780 const std::string fontHebrew( "TizenSansHebrew" );
3781 const std::string fontArabic( "TizenSansArabic" );
3783 // Set a known font description
3784 FontDescriptionRun fontDescriptionRun01;
3785 fontDescriptionRun01.characterRun.characterIndex = 0u;
3786 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3787 fontDescriptionRun01.familyLength = fontLatin.size();
3788 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3789 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3790 fontDescriptionRun01.familyDefined = true;
3791 fontDescriptionRun01.weightDefined = false;
3792 fontDescriptionRun01.widthDefined = false;
3793 fontDescriptionRun01.slantDefined = false;
3794 fontDescriptionRun01.sizeDefined = false;
3796 FontDescriptionRun fontDescriptionRun02;
3797 fontDescriptionRun02.characterRun.characterIndex = 12u;
3798 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3799 fontDescriptionRun02.familyLength = fontHebrew.size();
3800 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3801 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3802 fontDescriptionRun02.familyDefined = true;
3803 fontDescriptionRun02.weightDefined = false;
3804 fontDescriptionRun02.widthDefined = false;
3805 fontDescriptionRun02.slantDefined = false;
3806 fontDescriptionRun02.sizeDefined = false;
3808 FontDescriptionRun fontDescriptionRun03;
3809 fontDescriptionRun03.characterRun.characterIndex = 22u;
3810 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3811 fontDescriptionRun03.familyLength = fontArabic.size();
3812 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3813 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3814 fontDescriptionRun03.familyDefined = true;
3815 fontDescriptionRun03.weightDefined = false;
3816 fontDescriptionRun03.widthDefined = false;
3817 fontDescriptionRun03.slantDefined = false;
3818 fontDescriptionRun03.sizeDefined = false;
3820 FontDescriptionRun fontDescriptionRun04;
3821 fontDescriptionRun04.characterRun.characterIndex = 36u;
3822 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3823 fontDescriptionRun04.familyLength = fontLatin.size();
3824 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3825 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3826 fontDescriptionRun04.familyDefined = true;
3827 fontDescriptionRun04.weightDefined = false;
3828 fontDescriptionRun04.widthDefined = false;
3829 fontDescriptionRun04.slantDefined = false;
3830 fontDescriptionRun04.sizeDefined = false;
3832 FontDescriptionRun fontDescriptionRun05;
3833 fontDescriptionRun05.characterRun.characterIndex = 48u;
3834 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3835 fontDescriptionRun05.familyLength = fontLatin.size();
3836 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3837 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3838 fontDescriptionRun05.familyDefined = true;
3839 fontDescriptionRun05.weightDefined = false;
3840 fontDescriptionRun05.widthDefined = false;
3841 fontDescriptionRun05.slantDefined = false;
3842 fontDescriptionRun05.sizeDefined = false;
3844 FontDescriptionRun fontDescriptionRun06;
3845 fontDescriptionRun06.characterRun.characterIndex = 60u;
3846 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3847 fontDescriptionRun06.familyLength = fontArabic.size();
3848 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3849 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3850 fontDescriptionRun06.familyDefined = true;
3851 fontDescriptionRun06.weightDefined = false;
3852 fontDescriptionRun06.widthDefined = false;
3853 fontDescriptionRun06.slantDefined = false;
3854 fontDescriptionRun06.sizeDefined = false;
3856 Vector<FontDescriptionRun> fontDescriptionRuns;
3857 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3858 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3859 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3860 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3861 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3862 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3864 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
3866 Size textArea( 100.f, 300.f );
3869 "Begin alignment for the first paragraph.",
3870 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3873 fontDescriptionRuns.Begin(),
3874 Text::HorizontalAlignment::BEGIN,
3875 Text::VerticalAlignment::TOP,
3880 Dali::LayoutDirection::LEFT_TO_RIGHT,
3884 if( !AlignTest( data ) )
3886 tet_result(TET_FAIL);
3889 tet_result(TET_PASS);
3893 int UtcDaliTextAlign02(void)
3895 ToolkitTestApplication application;
3896 tet_infoline(" UtcDaliTextAlign02");
3898 // Calculate text alignment.
3900 const std::string fontLatin( "TizenSans" );
3901 const std::string fontHebrew( "TizenSansHebrew" );
3902 const std::string fontArabic( "TizenSansArabic" );
3904 // Set a known font description
3905 FontDescriptionRun fontDescriptionRun01;
3906 fontDescriptionRun01.characterRun.characterIndex = 0u;
3907 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3908 fontDescriptionRun01.familyLength = fontLatin.size();
3909 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3910 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3911 fontDescriptionRun01.familyDefined = true;
3912 fontDescriptionRun01.weightDefined = false;
3913 fontDescriptionRun01.widthDefined = false;
3914 fontDescriptionRun01.slantDefined = false;
3915 fontDescriptionRun01.sizeDefined = false;
3917 FontDescriptionRun fontDescriptionRun02;
3918 fontDescriptionRun02.characterRun.characterIndex = 12u;
3919 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3920 fontDescriptionRun02.familyLength = fontHebrew.size();
3921 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3922 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3923 fontDescriptionRun02.familyDefined = true;
3924 fontDescriptionRun02.weightDefined = false;
3925 fontDescriptionRun02.widthDefined = false;
3926 fontDescriptionRun02.slantDefined = false;
3927 fontDescriptionRun02.sizeDefined = false;
3929 FontDescriptionRun fontDescriptionRun03;
3930 fontDescriptionRun03.characterRun.characterIndex = 22u;
3931 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3932 fontDescriptionRun03.familyLength = fontArabic.size();
3933 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3934 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3935 fontDescriptionRun03.familyDefined = true;
3936 fontDescriptionRun03.weightDefined = false;
3937 fontDescriptionRun03.widthDefined = false;
3938 fontDescriptionRun03.slantDefined = false;
3939 fontDescriptionRun03.sizeDefined = false;
3941 FontDescriptionRun fontDescriptionRun04;
3942 fontDescriptionRun04.characterRun.characterIndex = 36u;
3943 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3944 fontDescriptionRun04.familyLength = fontLatin.size();
3945 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3946 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3947 fontDescriptionRun04.familyDefined = true;
3948 fontDescriptionRun04.weightDefined = false;
3949 fontDescriptionRun04.widthDefined = false;
3950 fontDescriptionRun04.slantDefined = false;
3951 fontDescriptionRun04.sizeDefined = false;
3953 FontDescriptionRun fontDescriptionRun05;
3954 fontDescriptionRun05.characterRun.characterIndex = 48u;
3955 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3956 fontDescriptionRun05.familyLength = fontLatin.size();
3957 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3958 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3959 fontDescriptionRun05.familyDefined = true;
3960 fontDescriptionRun05.weightDefined = false;
3961 fontDescriptionRun05.widthDefined = false;
3962 fontDescriptionRun05.slantDefined = false;
3963 fontDescriptionRun05.sizeDefined = false;
3965 FontDescriptionRun fontDescriptionRun06;
3966 fontDescriptionRun06.characterRun.characterIndex = 60u;
3967 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3968 fontDescriptionRun06.familyLength = fontArabic.size();
3969 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3970 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3971 fontDescriptionRun06.familyDefined = true;
3972 fontDescriptionRun06.weightDefined = false;
3973 fontDescriptionRun06.widthDefined = false;
3974 fontDescriptionRun06.slantDefined = false;
3975 fontDescriptionRun06.sizeDefined = false;
3977 Vector<FontDescriptionRun> fontDescriptionRuns;
3978 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3979 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3980 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3981 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3982 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3983 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3985 float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
3987 Size textArea( 100.f, 300.f );
3990 "Begin alignment for the mid paragraph.",
3991 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3994 fontDescriptionRuns.Begin(),
3995 Text::HorizontalAlignment::BEGIN,
3996 Text::VerticalAlignment::TOP,
4001 Dali::LayoutDirection::LEFT_TO_RIGHT,
4005 if( !AlignTest( data ) )
4007 tet_result(TET_FAIL);
4010 tet_result(TET_PASS);
4014 int UtcDaliTextAlign03(void)
4016 ToolkitTestApplication application;
4017 tet_infoline(" UtcDaliTextAlign03");
4019 // Calculate text alignment.
4021 const std::string fontLatin( "TizenSans" );
4022 const std::string fontHebrew( "TizenSansHebrew" );
4023 const std::string fontArabic( "TizenSansArabic" );
4025 // Set a known font description
4026 FontDescriptionRun fontDescriptionRun01;
4027 fontDescriptionRun01.characterRun.characterIndex = 0u;
4028 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4029 fontDescriptionRun01.familyLength = fontLatin.size();
4030 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4031 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4032 fontDescriptionRun01.familyDefined = true;
4033 fontDescriptionRun01.weightDefined = false;
4034 fontDescriptionRun01.widthDefined = false;
4035 fontDescriptionRun01.slantDefined = false;
4036 fontDescriptionRun01.sizeDefined = false;
4038 FontDescriptionRun fontDescriptionRun02;
4039 fontDescriptionRun02.characterRun.characterIndex = 12u;
4040 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4041 fontDescriptionRun02.familyLength = fontHebrew.size();
4042 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4043 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4044 fontDescriptionRun02.familyDefined = true;
4045 fontDescriptionRun02.weightDefined = false;
4046 fontDescriptionRun02.widthDefined = false;
4047 fontDescriptionRun02.slantDefined = false;
4048 fontDescriptionRun02.sizeDefined = false;
4050 FontDescriptionRun fontDescriptionRun03;
4051 fontDescriptionRun03.characterRun.characterIndex = 22u;
4052 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4053 fontDescriptionRun03.familyLength = fontArabic.size();
4054 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4055 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4056 fontDescriptionRun03.familyDefined = true;
4057 fontDescriptionRun03.weightDefined = false;
4058 fontDescriptionRun03.widthDefined = false;
4059 fontDescriptionRun03.slantDefined = false;
4060 fontDescriptionRun03.sizeDefined = false;
4062 FontDescriptionRun fontDescriptionRun04;
4063 fontDescriptionRun04.characterRun.characterIndex = 36u;
4064 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4065 fontDescriptionRun04.familyLength = fontLatin.size();
4066 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4067 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4068 fontDescriptionRun04.familyDefined = true;
4069 fontDescriptionRun04.weightDefined = false;
4070 fontDescriptionRun04.widthDefined = false;
4071 fontDescriptionRun04.slantDefined = false;
4072 fontDescriptionRun04.sizeDefined = false;
4074 FontDescriptionRun fontDescriptionRun05;
4075 fontDescriptionRun05.characterRun.characterIndex = 48u;
4076 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4077 fontDescriptionRun05.familyLength = fontLatin.size();
4078 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4079 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4080 fontDescriptionRun05.familyDefined = true;
4081 fontDescriptionRun05.weightDefined = false;
4082 fontDescriptionRun05.widthDefined = false;
4083 fontDescriptionRun05.slantDefined = false;
4084 fontDescriptionRun05.sizeDefined = false;
4086 FontDescriptionRun fontDescriptionRun06;
4087 fontDescriptionRun06.characterRun.characterIndex = 60u;
4088 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4089 fontDescriptionRun06.familyLength = fontArabic.size();
4090 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4091 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4092 fontDescriptionRun06.familyDefined = true;
4093 fontDescriptionRun06.weightDefined = false;
4094 fontDescriptionRun06.widthDefined = false;
4095 fontDescriptionRun06.slantDefined = false;
4096 fontDescriptionRun06.sizeDefined = false;
4098 Vector<FontDescriptionRun> fontDescriptionRuns;
4099 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4100 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4101 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4102 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4103 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4104 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4106 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4108 Size textArea( 100.f, 300.f );
4111 "Begin alignment for the last paragraph.",
4112 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4115 fontDescriptionRuns.Begin(),
4116 Text::HorizontalAlignment::BEGIN,
4117 Text::VerticalAlignment::TOP,
4122 Dali::LayoutDirection::LEFT_TO_RIGHT,
4126 if( !AlignTest( data ) )
4128 tet_result(TET_FAIL);
4131 tet_result(TET_PASS);
4135 int UtcDaliTextAlign04(void)
4137 ToolkitTestApplication application;
4138 tet_infoline(" UtcDaliTextAlign04");
4140 // Calculate text alignment.
4142 const std::string fontLatin( "TizenSans" );
4143 const std::string fontHebrew( "TizenSansHebrew" );
4144 const std::string fontArabic( "TizenSansArabic" );
4146 // Set a known font description
4147 FontDescriptionRun fontDescriptionRun01;
4148 fontDescriptionRun01.characterRun.characterIndex = 0u;
4149 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4150 fontDescriptionRun01.familyLength = fontLatin.size();
4151 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4152 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4153 fontDescriptionRun01.familyDefined = true;
4154 fontDescriptionRun01.weightDefined = false;
4155 fontDescriptionRun01.widthDefined = false;
4156 fontDescriptionRun01.slantDefined = false;
4157 fontDescriptionRun01.sizeDefined = false;
4159 FontDescriptionRun fontDescriptionRun02;
4160 fontDescriptionRun02.characterRun.characterIndex = 12u;
4161 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4162 fontDescriptionRun02.familyLength = fontHebrew.size();
4163 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4164 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4165 fontDescriptionRun02.familyDefined = true;
4166 fontDescriptionRun02.weightDefined = false;
4167 fontDescriptionRun02.widthDefined = false;
4168 fontDescriptionRun02.slantDefined = false;
4169 fontDescriptionRun02.sizeDefined = false;
4171 FontDescriptionRun fontDescriptionRun03;
4172 fontDescriptionRun03.characterRun.characterIndex = 22u;
4173 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4174 fontDescriptionRun03.familyLength = fontArabic.size();
4175 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4176 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4177 fontDescriptionRun03.familyDefined = true;
4178 fontDescriptionRun03.weightDefined = false;
4179 fontDescriptionRun03.widthDefined = false;
4180 fontDescriptionRun03.slantDefined = false;
4181 fontDescriptionRun03.sizeDefined = false;
4183 FontDescriptionRun fontDescriptionRun04;
4184 fontDescriptionRun04.characterRun.characterIndex = 36u;
4185 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4186 fontDescriptionRun04.familyLength = fontLatin.size();
4187 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4188 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4189 fontDescriptionRun04.familyDefined = true;
4190 fontDescriptionRun04.weightDefined = false;
4191 fontDescriptionRun04.widthDefined = false;
4192 fontDescriptionRun04.slantDefined = false;
4193 fontDescriptionRun04.sizeDefined = false;
4195 FontDescriptionRun fontDescriptionRun05;
4196 fontDescriptionRun05.characterRun.characterIndex = 48u;
4197 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4198 fontDescriptionRun05.familyLength = fontLatin.size();
4199 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4200 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4201 fontDescriptionRun05.familyDefined = true;
4202 fontDescriptionRun05.weightDefined = false;
4203 fontDescriptionRun05.widthDefined = false;
4204 fontDescriptionRun05.slantDefined = false;
4205 fontDescriptionRun05.sizeDefined = false;
4207 FontDescriptionRun fontDescriptionRun06;
4208 fontDescriptionRun06.characterRun.characterIndex = 60u;
4209 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4210 fontDescriptionRun06.familyLength = fontArabic.size();
4211 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4212 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4213 fontDescriptionRun06.familyDefined = true;
4214 fontDescriptionRun06.weightDefined = false;
4215 fontDescriptionRun06.widthDefined = false;
4216 fontDescriptionRun06.slantDefined = false;
4217 fontDescriptionRun06.sizeDefined = false;
4219 Vector<FontDescriptionRun> fontDescriptionRuns;
4220 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4221 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4222 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4223 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4224 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4225 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4227 float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
4229 Size textArea( 100.f, 300.f );
4232 "Center alignment for the first paragraph.",
4233 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4236 fontDescriptionRuns.Begin(),
4237 Text::HorizontalAlignment::CENTER,
4238 Text::VerticalAlignment::TOP,
4243 Dali::LayoutDirection::LEFT_TO_RIGHT,
4247 if( !AlignTest( data ) )
4249 tet_result(TET_FAIL);
4252 tet_result(TET_PASS);
4256 int UtcDaliTextAlign05(void)
4258 ToolkitTestApplication application;
4259 tet_infoline(" UtcDaliTextAlign05");
4261 // Calculate text alignment.
4263 const std::string fontLatin( "TizenSans" );
4264 const std::string fontHebrew( "TizenSansHebrew" );
4265 const std::string fontArabic( "TizenSansArabic" );
4267 // Set a known font description
4268 FontDescriptionRun fontDescriptionRun01;
4269 fontDescriptionRun01.characterRun.characterIndex = 0u;
4270 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4271 fontDescriptionRun01.familyLength = fontLatin.size();
4272 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4273 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4274 fontDescriptionRun01.familyDefined = true;
4275 fontDescriptionRun01.weightDefined = false;
4276 fontDescriptionRun01.widthDefined = false;
4277 fontDescriptionRun01.slantDefined = false;
4278 fontDescriptionRun01.sizeDefined = false;
4280 FontDescriptionRun fontDescriptionRun02;
4281 fontDescriptionRun02.characterRun.characterIndex = 12u;
4282 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4283 fontDescriptionRun02.familyLength = fontHebrew.size();
4284 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4285 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4286 fontDescriptionRun02.familyDefined = true;
4287 fontDescriptionRun02.weightDefined = false;
4288 fontDescriptionRun02.widthDefined = false;
4289 fontDescriptionRun02.slantDefined = false;
4290 fontDescriptionRun02.sizeDefined = false;
4292 FontDescriptionRun fontDescriptionRun03;
4293 fontDescriptionRun03.characterRun.characterIndex = 22u;
4294 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4295 fontDescriptionRun03.familyLength = fontArabic.size();
4296 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4297 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4298 fontDescriptionRun03.familyDefined = true;
4299 fontDescriptionRun03.weightDefined = false;
4300 fontDescriptionRun03.widthDefined = false;
4301 fontDescriptionRun03.slantDefined = false;
4302 fontDescriptionRun03.sizeDefined = false;
4304 FontDescriptionRun fontDescriptionRun04;
4305 fontDescriptionRun04.characterRun.characterIndex = 36u;
4306 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4307 fontDescriptionRun04.familyLength = fontLatin.size();
4308 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4309 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4310 fontDescriptionRun04.familyDefined = true;
4311 fontDescriptionRun04.weightDefined = false;
4312 fontDescriptionRun04.widthDefined = false;
4313 fontDescriptionRun04.slantDefined = false;
4314 fontDescriptionRun04.sizeDefined = false;
4316 FontDescriptionRun fontDescriptionRun05;
4317 fontDescriptionRun05.characterRun.characterIndex = 48u;
4318 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4319 fontDescriptionRun05.familyLength = fontLatin.size();
4320 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4321 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4322 fontDescriptionRun05.familyDefined = true;
4323 fontDescriptionRun05.weightDefined = false;
4324 fontDescriptionRun05.widthDefined = false;
4325 fontDescriptionRun05.slantDefined = false;
4326 fontDescriptionRun05.sizeDefined = false;
4328 FontDescriptionRun fontDescriptionRun06;
4329 fontDescriptionRun06.characterRun.characterIndex = 60u;
4330 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4331 fontDescriptionRun06.familyLength = fontArabic.size();
4332 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4333 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4334 fontDescriptionRun06.familyDefined = true;
4335 fontDescriptionRun06.weightDefined = false;
4336 fontDescriptionRun06.widthDefined = false;
4337 fontDescriptionRun06.slantDefined = false;
4338 fontDescriptionRun06.sizeDefined = false;
4340 Vector<FontDescriptionRun> fontDescriptionRuns;
4341 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4342 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4343 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4344 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4345 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4346 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4348 float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
4350 Size textArea( 100.f, 300.f );
4353 "Center alignment for the mid paragraph.",
4354 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4357 fontDescriptionRuns.Begin(),
4358 Text::HorizontalAlignment::CENTER,
4359 Text::VerticalAlignment::TOP,
4364 Dali::LayoutDirection::LEFT_TO_RIGHT,
4368 if( !AlignTest( data ) )
4370 tet_result(TET_FAIL);
4373 tet_result(TET_PASS);
4377 int UtcDaliTextAlign06(void)
4379 ToolkitTestApplication application;
4380 tet_infoline(" UtcDaliTextAlign06");
4382 // Calculate text alignment.
4384 const std::string fontLatin( "TizenSans" );
4385 const std::string fontHebrew( "TizenSansHebrew" );
4386 const std::string fontArabic( "TizenSansArabic" );
4388 // Set a known font description
4389 FontDescriptionRun fontDescriptionRun01;
4390 fontDescriptionRun01.characterRun.characterIndex = 0u;
4391 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4392 fontDescriptionRun01.familyLength = fontLatin.size();
4393 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4394 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4395 fontDescriptionRun01.familyDefined = true;
4396 fontDescriptionRun01.weightDefined = false;
4397 fontDescriptionRun01.widthDefined = false;
4398 fontDescriptionRun01.slantDefined = false;
4399 fontDescriptionRun01.sizeDefined = false;
4401 FontDescriptionRun fontDescriptionRun02;
4402 fontDescriptionRun02.characterRun.characterIndex = 12u;
4403 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4404 fontDescriptionRun02.familyLength = fontHebrew.size();
4405 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4406 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4407 fontDescriptionRun02.familyDefined = true;
4408 fontDescriptionRun02.weightDefined = false;
4409 fontDescriptionRun02.widthDefined = false;
4410 fontDescriptionRun02.slantDefined = false;
4411 fontDescriptionRun02.sizeDefined = false;
4413 FontDescriptionRun fontDescriptionRun03;
4414 fontDescriptionRun03.characterRun.characterIndex = 22u;
4415 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4416 fontDescriptionRun03.familyLength = fontArabic.size();
4417 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4418 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4419 fontDescriptionRun03.familyDefined = true;
4420 fontDescriptionRun03.weightDefined = false;
4421 fontDescriptionRun03.widthDefined = false;
4422 fontDescriptionRun03.slantDefined = false;
4423 fontDescriptionRun03.sizeDefined = false;
4425 FontDescriptionRun fontDescriptionRun04;
4426 fontDescriptionRun04.characterRun.characterIndex = 36u;
4427 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4428 fontDescriptionRun04.familyLength = fontLatin.size();
4429 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4430 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4431 fontDescriptionRun04.familyDefined = true;
4432 fontDescriptionRun04.weightDefined = false;
4433 fontDescriptionRun04.widthDefined = false;
4434 fontDescriptionRun04.slantDefined = false;
4435 fontDescriptionRun04.sizeDefined = false;
4437 FontDescriptionRun fontDescriptionRun05;
4438 fontDescriptionRun05.characterRun.characterIndex = 48u;
4439 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4440 fontDescriptionRun05.familyLength = fontLatin.size();
4441 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4442 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4443 fontDescriptionRun05.familyDefined = true;
4444 fontDescriptionRun05.weightDefined = false;
4445 fontDescriptionRun05.widthDefined = false;
4446 fontDescriptionRun05.slantDefined = false;
4447 fontDescriptionRun05.sizeDefined = false;
4449 FontDescriptionRun fontDescriptionRun06;
4450 fontDescriptionRun06.characterRun.characterIndex = 60u;
4451 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4452 fontDescriptionRun06.familyLength = fontArabic.size();
4453 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4454 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4455 fontDescriptionRun06.familyDefined = true;
4456 fontDescriptionRun06.weightDefined = false;
4457 fontDescriptionRun06.widthDefined = false;
4458 fontDescriptionRun06.slantDefined = false;
4459 fontDescriptionRun06.sizeDefined = false;
4461 Vector<FontDescriptionRun> fontDescriptionRuns;
4462 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4463 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4464 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4465 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4466 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4467 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4469 float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 17.f };
4471 Size textArea( 100.f, 300.f );
4474 "Center alignment for the last paragraph.",
4475 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4478 fontDescriptionRuns.Begin(),
4479 Text::HorizontalAlignment::CENTER,
4480 Text::VerticalAlignment::TOP,
4485 Dali::LayoutDirection::LEFT_TO_RIGHT,
4489 if( !AlignTest( data ) )
4491 tet_result(TET_FAIL);
4494 tet_result(TET_PASS);
4498 int UtcDaliTextAlign07(void)
4500 ToolkitTestApplication application;
4501 tet_infoline(" UtcDaliTextAlign07");
4503 // Calculate text alignment.
4505 const std::string fontLatin( "TizenSans" );
4506 const std::string fontHebrew( "TizenSansHebrew" );
4507 const std::string fontArabic( "TizenSansArabic" );
4509 // Set a known font description
4510 FontDescriptionRun fontDescriptionRun01;
4511 fontDescriptionRun01.characterRun.characterIndex = 0u;
4512 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4513 fontDescriptionRun01.familyLength = fontLatin.size();
4514 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4515 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4516 fontDescriptionRun01.familyDefined = true;
4517 fontDescriptionRun01.weightDefined = false;
4518 fontDescriptionRun01.widthDefined = false;
4519 fontDescriptionRun01.slantDefined = false;
4520 fontDescriptionRun01.sizeDefined = false;
4522 FontDescriptionRun fontDescriptionRun02;
4523 fontDescriptionRun02.characterRun.characterIndex = 12u;
4524 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4525 fontDescriptionRun02.familyLength = fontHebrew.size();
4526 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4527 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4528 fontDescriptionRun02.familyDefined = true;
4529 fontDescriptionRun02.weightDefined = false;
4530 fontDescriptionRun02.widthDefined = false;
4531 fontDescriptionRun02.slantDefined = false;
4532 fontDescriptionRun02.sizeDefined = false;
4534 FontDescriptionRun fontDescriptionRun03;
4535 fontDescriptionRun03.characterRun.characterIndex = 22u;
4536 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4537 fontDescriptionRun03.familyLength = fontArabic.size();
4538 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4539 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4540 fontDescriptionRun03.familyDefined = true;
4541 fontDescriptionRun03.weightDefined = false;
4542 fontDescriptionRun03.widthDefined = false;
4543 fontDescriptionRun03.slantDefined = false;
4544 fontDescriptionRun03.sizeDefined = false;
4546 FontDescriptionRun fontDescriptionRun04;
4547 fontDescriptionRun04.characterRun.characterIndex = 36u;
4548 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4549 fontDescriptionRun04.familyLength = fontLatin.size();
4550 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4551 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4552 fontDescriptionRun04.familyDefined = true;
4553 fontDescriptionRun04.weightDefined = false;
4554 fontDescriptionRun04.widthDefined = false;
4555 fontDescriptionRun04.slantDefined = false;
4556 fontDescriptionRun04.sizeDefined = false;
4558 FontDescriptionRun fontDescriptionRun05;
4559 fontDescriptionRun05.characterRun.characterIndex = 48u;
4560 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4561 fontDescriptionRun05.familyLength = fontLatin.size();
4562 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4563 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4564 fontDescriptionRun05.familyDefined = true;
4565 fontDescriptionRun05.weightDefined = false;
4566 fontDescriptionRun05.widthDefined = false;
4567 fontDescriptionRun05.slantDefined = false;
4568 fontDescriptionRun05.sizeDefined = false;
4570 FontDescriptionRun fontDescriptionRun06;
4571 fontDescriptionRun06.characterRun.characterIndex = 60u;
4572 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4573 fontDescriptionRun06.familyLength = fontArabic.size();
4574 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4575 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4576 fontDescriptionRun06.familyDefined = true;
4577 fontDescriptionRun06.weightDefined = false;
4578 fontDescriptionRun06.widthDefined = false;
4579 fontDescriptionRun06.slantDefined = false;
4580 fontDescriptionRun06.sizeDefined = false;
4582 Vector<FontDescriptionRun> fontDescriptionRuns;
4583 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4584 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4585 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4586 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4587 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4588 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4590 float positions[] = { 19.f, 31.f, 0.f, 0.f, 0.f, 0.f };
4592 Size textArea( 100.f, 300.f );
4595 "End alignment for the first paragraph.",
4596 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4599 fontDescriptionRuns.Begin(),
4600 Text::HorizontalAlignment::END,
4601 Text::VerticalAlignment::TOP,
4606 Dali::LayoutDirection::LEFT_TO_RIGHT,
4610 if( !AlignTest( data ) )
4612 tet_result(TET_FAIL);
4615 tet_result(TET_PASS);
4619 int UtcDaliTextAlign08(void)
4621 ToolkitTestApplication application;
4622 tet_infoline(" UtcDaliTextAlign08");
4624 // Calculate text alignment.
4626 const std::string fontLatin( "TizenSans" );
4627 const std::string fontHebrew( "TizenSansHebrew" );
4628 const std::string fontArabic( "TizenSansArabic" );
4630 // Set a known font description
4631 FontDescriptionRun fontDescriptionRun01;
4632 fontDescriptionRun01.characterRun.characterIndex = 0u;
4633 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4634 fontDescriptionRun01.familyLength = fontLatin.size();
4635 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4636 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4637 fontDescriptionRun01.familyDefined = true;
4638 fontDescriptionRun01.weightDefined = false;
4639 fontDescriptionRun01.widthDefined = false;
4640 fontDescriptionRun01.slantDefined = false;
4641 fontDescriptionRun01.sizeDefined = false;
4643 FontDescriptionRun fontDescriptionRun02;
4644 fontDescriptionRun02.characterRun.characterIndex = 12u;
4645 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4646 fontDescriptionRun02.familyLength = fontHebrew.size();
4647 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4648 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4649 fontDescriptionRun02.familyDefined = true;
4650 fontDescriptionRun02.weightDefined = false;
4651 fontDescriptionRun02.widthDefined = false;
4652 fontDescriptionRun02.slantDefined = false;
4653 fontDescriptionRun02.sizeDefined = false;
4655 FontDescriptionRun fontDescriptionRun03;
4656 fontDescriptionRun03.characterRun.characterIndex = 22u;
4657 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4658 fontDescriptionRun03.familyLength = fontArabic.size();
4659 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4660 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4661 fontDescriptionRun03.familyDefined = true;
4662 fontDescriptionRun03.weightDefined = false;
4663 fontDescriptionRun03.widthDefined = false;
4664 fontDescriptionRun03.slantDefined = false;
4665 fontDescriptionRun03.sizeDefined = false;
4667 FontDescriptionRun fontDescriptionRun04;
4668 fontDescriptionRun04.characterRun.characterIndex = 36u;
4669 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4670 fontDescriptionRun04.familyLength = fontLatin.size();
4671 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4672 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4673 fontDescriptionRun04.familyDefined = true;
4674 fontDescriptionRun04.weightDefined = false;
4675 fontDescriptionRun04.widthDefined = false;
4676 fontDescriptionRun04.slantDefined = false;
4677 fontDescriptionRun04.sizeDefined = false;
4679 FontDescriptionRun fontDescriptionRun05;
4680 fontDescriptionRun05.characterRun.characterIndex = 48u;
4681 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4682 fontDescriptionRun05.familyLength = fontLatin.size();
4683 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4684 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4685 fontDescriptionRun05.familyDefined = true;
4686 fontDescriptionRun05.weightDefined = false;
4687 fontDescriptionRun05.widthDefined = false;
4688 fontDescriptionRun05.slantDefined = false;
4689 fontDescriptionRun05.sizeDefined = false;
4691 FontDescriptionRun fontDescriptionRun06;
4692 fontDescriptionRun06.characterRun.characterIndex = 60u;
4693 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4694 fontDescriptionRun06.familyLength = fontArabic.size();
4695 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4696 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4697 fontDescriptionRun06.familyDefined = true;
4698 fontDescriptionRun06.weightDefined = false;
4699 fontDescriptionRun06.widthDefined = false;
4700 fontDescriptionRun06.slantDefined = false;
4701 fontDescriptionRun06.sizeDefined = false;
4703 Vector<FontDescriptionRun> fontDescriptionRuns;
4704 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4705 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4706 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4707 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4708 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4709 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4711 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4713 Size textArea( 100.f, 300.f );
4716 "End alignment for the mid paragraph.",
4717 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4720 fontDescriptionRuns.Begin(),
4721 Text::HorizontalAlignment::END,
4722 Text::VerticalAlignment::TOP,
4727 Dali::LayoutDirection::LEFT_TO_RIGHT,
4731 if( !AlignTest( data ) )
4733 tet_result(TET_FAIL);
4736 tet_result(TET_PASS);
4740 int UtcDaliTextAlign09(void)
4742 ToolkitTestApplication application;
4743 tet_infoline(" UtcDaliTextAlign09");
4745 // Calculate text alignment.
4747 const std::string fontLatin( "TizenSans" );
4748 const std::string fontHebrew( "TizenSansHebrew" );
4749 const std::string fontArabic( "TizenSansArabic" );
4751 // Set a known font description
4752 FontDescriptionRun fontDescriptionRun01;
4753 fontDescriptionRun01.characterRun.characterIndex = 0u;
4754 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4755 fontDescriptionRun01.familyLength = fontLatin.size();
4756 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4757 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4758 fontDescriptionRun01.familyDefined = true;
4759 fontDescriptionRun01.weightDefined = false;
4760 fontDescriptionRun01.widthDefined = false;
4761 fontDescriptionRun01.slantDefined = false;
4762 fontDescriptionRun01.sizeDefined = false;
4764 FontDescriptionRun fontDescriptionRun02;
4765 fontDescriptionRun02.characterRun.characterIndex = 12u;
4766 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4767 fontDescriptionRun02.familyLength = fontHebrew.size();
4768 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4769 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4770 fontDescriptionRun02.familyDefined = true;
4771 fontDescriptionRun02.weightDefined = false;
4772 fontDescriptionRun02.widthDefined = false;
4773 fontDescriptionRun02.slantDefined = false;
4774 fontDescriptionRun02.sizeDefined = false;
4776 FontDescriptionRun fontDescriptionRun03;
4777 fontDescriptionRun03.characterRun.characterIndex = 22u;
4778 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4779 fontDescriptionRun03.familyLength = fontArabic.size();
4780 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4781 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4782 fontDescriptionRun03.familyDefined = true;
4783 fontDescriptionRun03.weightDefined = false;
4784 fontDescriptionRun03.widthDefined = false;
4785 fontDescriptionRun03.slantDefined = false;
4786 fontDescriptionRun03.sizeDefined = false;
4788 FontDescriptionRun fontDescriptionRun04;
4789 fontDescriptionRun04.characterRun.characterIndex = 36u;
4790 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4791 fontDescriptionRun04.familyLength = fontLatin.size();
4792 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4793 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4794 fontDescriptionRun04.familyDefined = true;
4795 fontDescriptionRun04.weightDefined = false;
4796 fontDescriptionRun04.widthDefined = false;
4797 fontDescriptionRun04.slantDefined = false;
4798 fontDescriptionRun04.sizeDefined = false;
4800 FontDescriptionRun fontDescriptionRun05;
4801 fontDescriptionRun05.characterRun.characterIndex = 48u;
4802 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4803 fontDescriptionRun05.familyLength = fontLatin.size();
4804 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4805 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4806 fontDescriptionRun05.familyDefined = true;
4807 fontDescriptionRun05.weightDefined = false;
4808 fontDescriptionRun05.widthDefined = false;
4809 fontDescriptionRun05.slantDefined = false;
4810 fontDescriptionRun05.sizeDefined = false;
4812 FontDescriptionRun fontDescriptionRun06;
4813 fontDescriptionRun06.characterRun.characterIndex = 60u;
4814 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4815 fontDescriptionRun06.familyLength = fontArabic.size();
4816 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4817 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4818 fontDescriptionRun06.familyDefined = true;
4819 fontDescriptionRun06.weightDefined = false;
4820 fontDescriptionRun06.widthDefined = false;
4821 fontDescriptionRun06.slantDefined = false;
4822 fontDescriptionRun06.sizeDefined = false;
4824 Vector<FontDescriptionRun> fontDescriptionRuns;
4825 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4826 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4827 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4828 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4829 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4830 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4832 float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 34.f };
4834 Size textArea( 100.f, 300.f );
4837 "End alignment for the last paragraph.",
4838 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4841 fontDescriptionRuns.Begin(),
4842 Text::HorizontalAlignment::END,
4843 Text::VerticalAlignment::TOP,
4848 Dali::LayoutDirection::LEFT_TO_RIGHT,
4852 if( !AlignTest( data ) )
4854 tet_result(TET_FAIL);
4857 tet_result(TET_PASS);
4861 int UtcDaliTextAlign10(void)
4863 ToolkitTestApplication application;
4864 tet_infoline(" UtcDaliTextAlign10");
4866 // Calculate text alignment.
4868 const std::string fontLatin( "TizenSans" );
4869 const std::string fontHebrew( "TizenSansHebrew" );
4870 const std::string fontArabic( "TizenSansArabic" );
4872 // Set a known font description
4873 FontDescriptionRun fontDescriptionRun01;
4874 fontDescriptionRun01.characterRun.characterIndex = 0u;
4875 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4876 fontDescriptionRun01.familyLength = fontLatin.size();
4877 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4878 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4879 fontDescriptionRun01.familyDefined = true;
4880 fontDescriptionRun01.weightDefined = false;
4881 fontDescriptionRun01.widthDefined = false;
4882 fontDescriptionRun01.slantDefined = false;
4883 fontDescriptionRun01.sizeDefined = false;
4885 FontDescriptionRun fontDescriptionRun02;
4886 fontDescriptionRun02.characterRun.characterIndex = 12u;
4887 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4888 fontDescriptionRun02.familyLength = fontHebrew.size();
4889 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4890 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4891 fontDescriptionRun02.familyDefined = true;
4892 fontDescriptionRun02.weightDefined = false;
4893 fontDescriptionRun02.widthDefined = false;
4894 fontDescriptionRun02.slantDefined = false;
4895 fontDescriptionRun02.sizeDefined = false;
4897 FontDescriptionRun fontDescriptionRun03;
4898 fontDescriptionRun03.characterRun.characterIndex = 22u;
4899 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4900 fontDescriptionRun03.familyLength = fontArabic.size();
4901 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4902 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4903 fontDescriptionRun03.familyDefined = true;
4904 fontDescriptionRun03.weightDefined = false;
4905 fontDescriptionRun03.widthDefined = false;
4906 fontDescriptionRun03.slantDefined = false;
4907 fontDescriptionRun03.sizeDefined = false;
4909 FontDescriptionRun fontDescriptionRun04;
4910 fontDescriptionRun04.characterRun.characterIndex = 36u;
4911 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4912 fontDescriptionRun04.familyLength = fontLatin.size();
4913 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4914 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4915 fontDescriptionRun04.familyDefined = true;
4916 fontDescriptionRun04.weightDefined = false;
4917 fontDescriptionRun04.widthDefined = false;
4918 fontDescriptionRun04.slantDefined = false;
4919 fontDescriptionRun04.sizeDefined = false;
4921 FontDescriptionRun fontDescriptionRun05;
4922 fontDescriptionRun05.characterRun.characterIndex = 48u;
4923 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4924 fontDescriptionRun05.familyLength = fontLatin.size();
4925 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4926 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4927 fontDescriptionRun05.familyDefined = true;
4928 fontDescriptionRun05.weightDefined = false;
4929 fontDescriptionRun05.widthDefined = false;
4930 fontDescriptionRun05.slantDefined = false;
4931 fontDescriptionRun05.sizeDefined = false;
4933 FontDescriptionRun fontDescriptionRun06;
4934 fontDescriptionRun06.characterRun.characterIndex = 60u;
4935 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4936 fontDescriptionRun06.familyLength = fontArabic.size();
4937 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4938 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4939 fontDescriptionRun06.familyDefined = true;
4940 fontDescriptionRun06.weightDefined = false;
4941 fontDescriptionRun06.widthDefined = false;
4942 fontDescriptionRun06.slantDefined = false;
4943 fontDescriptionRun06.sizeDefined = false;
4945 Vector<FontDescriptionRun> fontDescriptionRuns;
4946 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4947 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4948 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4949 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4950 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4951 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4953 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4955 Size textArea( 100.f, 300.f );
4958 "Begin alignment for the first paragraph.",
4959 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4962 fontDescriptionRuns.Begin(),
4963 Text::HorizontalAlignment::END,
4964 Text::VerticalAlignment::TOP,
4969 Dali::LayoutDirection::RIGHT_TO_LEFT,
4973 if( !AlignTest( data ) )
4975 tet_result(TET_FAIL);
4978 tet_result(TET_PASS);
4982 int UtcDaliTextAlign11(void)
4984 ToolkitTestApplication application;
4985 tet_infoline(" UtcDaliTextAlign11");
4987 // Calculate text alignment.
4989 const std::string fontLatin( "TizenSans" );
4990 const std::string fontHebrew( "TizenSansHebrew" );
4991 const std::string fontArabic( "TizenSansArabic" );
4993 // Set a known font description
4994 FontDescriptionRun fontDescriptionRun01;
4995 fontDescriptionRun01.characterRun.characterIndex = 0u;
4996 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4997 fontDescriptionRun01.familyLength = fontLatin.size();
4998 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4999 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5000 fontDescriptionRun01.familyDefined = true;
5001 fontDescriptionRun01.weightDefined = false;
5002 fontDescriptionRun01.widthDefined = false;
5003 fontDescriptionRun01.slantDefined = false;
5004 fontDescriptionRun01.sizeDefined = false;
5006 FontDescriptionRun fontDescriptionRun02;
5007 fontDescriptionRun02.characterRun.characterIndex = 12u;
5008 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5009 fontDescriptionRun02.familyLength = fontHebrew.size();
5010 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5011 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5012 fontDescriptionRun02.familyDefined = true;
5013 fontDescriptionRun02.weightDefined = false;
5014 fontDescriptionRun02.widthDefined = false;
5015 fontDescriptionRun02.slantDefined = false;
5016 fontDescriptionRun02.sizeDefined = false;
5018 FontDescriptionRun fontDescriptionRun03;
5019 fontDescriptionRun03.characterRun.characterIndex = 22u;
5020 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5021 fontDescriptionRun03.familyLength = fontArabic.size();
5022 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5023 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5024 fontDescriptionRun03.familyDefined = true;
5025 fontDescriptionRun03.weightDefined = false;
5026 fontDescriptionRun03.widthDefined = false;
5027 fontDescriptionRun03.slantDefined = false;
5028 fontDescriptionRun03.sizeDefined = false;
5030 FontDescriptionRun fontDescriptionRun04;
5031 fontDescriptionRun04.characterRun.characterIndex = 36u;
5032 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5033 fontDescriptionRun04.familyLength = fontLatin.size();
5034 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5035 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5036 fontDescriptionRun04.familyDefined = true;
5037 fontDescriptionRun04.weightDefined = false;
5038 fontDescriptionRun04.widthDefined = false;
5039 fontDescriptionRun04.slantDefined = false;
5040 fontDescriptionRun04.sizeDefined = false;
5042 FontDescriptionRun fontDescriptionRun05;
5043 fontDescriptionRun05.characterRun.characterIndex = 48u;
5044 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5045 fontDescriptionRun05.familyLength = fontLatin.size();
5046 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5047 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5048 fontDescriptionRun05.familyDefined = true;
5049 fontDescriptionRun05.weightDefined = false;
5050 fontDescriptionRun05.widthDefined = false;
5051 fontDescriptionRun05.slantDefined = false;
5052 fontDescriptionRun05.sizeDefined = false;
5054 FontDescriptionRun fontDescriptionRun06;
5055 fontDescriptionRun06.characterRun.characterIndex = 60u;
5056 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5057 fontDescriptionRun06.familyLength = fontArabic.size();
5058 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5059 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5060 fontDescriptionRun06.familyDefined = true;
5061 fontDescriptionRun06.weightDefined = false;
5062 fontDescriptionRun06.widthDefined = false;
5063 fontDescriptionRun06.slantDefined = false;
5064 fontDescriptionRun06.sizeDefined = false;
5066 Vector<FontDescriptionRun> fontDescriptionRuns;
5067 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5068 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5069 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5070 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5071 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5072 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5074 float positions[] = { 19.f, 31.f, 33.f, 0.f, 0.f, 0.f };
5076 Size textArea( 100.f, 300.f );
5079 "End alignment for the last paragraph.",
5080 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5083 fontDescriptionRuns.Begin(),
5084 Text::HorizontalAlignment::END,
5085 Text::VerticalAlignment::TOP,
5090 Dali::LayoutDirection::LEFT_TO_RIGHT,
5094 if( !AlignTest( data ) )
5096 tet_result(TET_FAIL);
5099 tet_result(TET_PASS);
5103 int UtcDaliTextAlign12(void)
5105 ToolkitTestApplication application;
5106 tet_infoline(" UtcDaliTextAlign12");
5108 // Calculate text alignment.
5110 const std::string fontLatin( "TizenSans" );
5111 const std::string fontHebrew( "TizenSansHebrew" );
5112 const std::string fontArabic( "TizenSansArabic" );
5114 // Set a known font description
5115 FontDescriptionRun fontDescriptionRun01;
5116 fontDescriptionRun01.characterRun.characterIndex = 0u;
5117 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5118 fontDescriptionRun01.familyLength = fontLatin.size();
5119 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5120 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5121 fontDescriptionRun01.familyDefined = true;
5122 fontDescriptionRun01.weightDefined = false;
5123 fontDescriptionRun01.widthDefined = false;
5124 fontDescriptionRun01.slantDefined = false;
5125 fontDescriptionRun01.sizeDefined = false;
5127 FontDescriptionRun fontDescriptionRun02;
5128 fontDescriptionRun02.characterRun.characterIndex = 12u;
5129 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5130 fontDescriptionRun02.familyLength = fontHebrew.size();
5131 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5132 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5133 fontDescriptionRun02.familyDefined = true;
5134 fontDescriptionRun02.weightDefined = false;
5135 fontDescriptionRun02.widthDefined = false;
5136 fontDescriptionRun02.slantDefined = false;
5137 fontDescriptionRun02.sizeDefined = false;
5139 FontDescriptionRun fontDescriptionRun03;
5140 fontDescriptionRun03.characterRun.characterIndex = 22u;
5141 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5142 fontDescriptionRun03.familyLength = fontArabic.size();
5143 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5144 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5145 fontDescriptionRun03.familyDefined = true;
5146 fontDescriptionRun03.weightDefined = false;
5147 fontDescriptionRun03.widthDefined = false;
5148 fontDescriptionRun03.slantDefined = false;
5149 fontDescriptionRun03.sizeDefined = false;
5151 FontDescriptionRun fontDescriptionRun04;
5152 fontDescriptionRun04.characterRun.characterIndex = 36u;
5153 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5154 fontDescriptionRun04.familyLength = fontLatin.size();
5155 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5156 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5157 fontDescriptionRun04.familyDefined = true;
5158 fontDescriptionRun04.weightDefined = false;
5159 fontDescriptionRun04.widthDefined = false;
5160 fontDescriptionRun04.slantDefined = false;
5161 fontDescriptionRun04.sizeDefined = false;
5163 FontDescriptionRun fontDescriptionRun05;
5164 fontDescriptionRun05.characterRun.characterIndex = 48u;
5165 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5166 fontDescriptionRun05.familyLength = fontLatin.size();
5167 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5168 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5169 fontDescriptionRun05.familyDefined = true;
5170 fontDescriptionRun05.weightDefined = false;
5171 fontDescriptionRun05.widthDefined = false;
5172 fontDescriptionRun05.slantDefined = false;
5173 fontDescriptionRun05.sizeDefined = false;
5175 FontDescriptionRun fontDescriptionRun06;
5176 fontDescriptionRun06.characterRun.characterIndex = 60u;
5177 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5178 fontDescriptionRun06.familyLength = fontArabic.size();
5179 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5180 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5181 fontDescriptionRun06.familyDefined = true;
5182 fontDescriptionRun06.weightDefined = false;
5183 fontDescriptionRun06.widthDefined = false;
5184 fontDescriptionRun06.slantDefined = false;
5185 fontDescriptionRun06.sizeDefined = false;
5187 Vector<FontDescriptionRun> fontDescriptionRuns;
5188 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5189 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5190 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5191 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5192 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5193 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5195 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
5197 Size textArea( 100.f, 300.f );
5200 "Begin alignment for the first paragraph.",
5201 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5204 fontDescriptionRuns.Begin(),
5205 Text::HorizontalAlignment::BEGIN,
5206 Text::VerticalAlignment::TOP,
5211 Dali::LayoutDirection::LEFT_TO_RIGHT,
5215 if( !AlignTest( data ) )
5217 tet_result(TET_FAIL);
5220 tet_result(TET_PASS);
5224 int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
5226 ToolkitTestApplication application;
5227 tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
5229 Layout::Engine engine;
5230 DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5232 engine.SetDefaultLineSpacing( 10.f );
5233 DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5235 tet_result(TET_PASS);
5239 int UtcDaliTextLayoutGetGlyphMetrics(void)
5241 tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
5243 // Test retrieving metrics from group of characters
5245 const std::string fontFamily( "TizenSansHindi" );
5247 // Set a known font description
5248 FontDescriptionRun fontDescriptionRun01;
5249 fontDescriptionRun01.characterRun.characterIndex = 0u;
5250 fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
5251 fontDescriptionRun01.familyLength = fontFamily.size();
5252 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5253 memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
5254 fontDescriptionRun01.familyDefined = true;
5255 fontDescriptionRun01.weightDefined = false;
5256 fontDescriptionRun01.widthDefined = false;
5257 fontDescriptionRun01.slantDefined = false;
5258 fontDescriptionRun01.sizeDefined = false;
5260 // Set a known font description
5261 FontDescriptionRun fontDescriptionRun02;
5262 fontDescriptionRun02.characterRun.characterIndex = 0u;
5263 fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
5264 fontDescriptionRun02.familyLength = fontFamily.size();
5265 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5266 memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
5267 fontDescriptionRun02.familyDefined = true;
5268 fontDescriptionRun02.weightDefined = false;
5269 fontDescriptionRun02.widthDefined = false;
5270 fontDescriptionRun02.slantDefined = false;
5271 fontDescriptionRun02.sizeDefined = false;
5273 // Set a known font description
5274 FontDescriptionRun fontDescriptionRun03;
5275 fontDescriptionRun03.characterRun.characterIndex = 0u;
5276 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
5277 fontDescriptionRun03.familyLength = fontFamily.size();
5278 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5279 memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
5280 fontDescriptionRun03.familyDefined = true;
5281 fontDescriptionRun03.weightDefined = false;
5282 fontDescriptionRun03.widthDefined = false;
5283 fontDescriptionRun03.slantDefined = false;
5284 fontDescriptionRun03.sizeDefined = false;
5286 Vector<FontDescriptionRun> fontDescriptionRuns01;
5287 fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
5289 Vector<FontDescriptionRun> fontDescriptionRuns02;
5290 fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
5292 Vector<FontDescriptionRun> fontDescriptionRuns03;
5293 fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
5296 Size textArea(100.f, 100.f);
5299 // Group: second glyph doesn't exceed the width of the first glyph
5300 float positions01[] = { 0.f, -11.f };
5302 struct LineRun line01 =
5315 Vector<LineRun> lines01;
5316 lines01.PushBack( line01 );
5318 Size layoutSize01 = Vector2(11.f, 19.f);
5320 // Group: second glyph doesn't exceed the width of the first glyph
5321 float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
5323 struct LineRun line02 =
5336 Vector<LineRun> lines02;
5337 lines02.PushBack( line02 );
5339 Size layoutSize02 = Vector2(16.f, 19.f);
5341 // Group: second glyph doesn't exceed the width of the first glyph
5342 float positions03[] = { 0.f, -11.f , 2.f, -15.f };
5344 struct LineRun line03 =
5357 Vector<LineRun> lines03;
5358 lines03.PushBack( line03 );
5360 Size layoutSize03 = Vector2(11.f, 19.f);
5362 /////////////////////////////
5364 struct LayoutTextData data[] =
5371 fontDescriptionRuns01.Begin(),
5377 Layout::Engine::SINGLE_LINE_BOX,
5384 "Group: second glyph exceeds the width of the first glyph",
5388 fontDescriptionRuns02.Begin(),
5394 Layout::Engine::SINGLE_LINE_BOX,
5401 "Group: second glyph doesn't exceed the width of the first glyph",
5405 fontDescriptionRuns03.Begin(),
5411 Layout::Engine::SINGLE_LINE_BOX,
5418 const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
5420 for( unsigned int index = 0u; index < numberOfTests; ++index )
5422 ToolkitTestApplication application;
5423 if( !LayoutTextTest( data[index] ) )
5425 tet_result(TET_FAIL);
5429 tet_result(TET_PASS);