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;
58 DevelText::EllipsisPosition::Type ellipsisPosition;
62 void Print( const LineRun& line )
64 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
65 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
66 std::cout << " width : " << floor(line.width) << std::endl;
67 std::cout << " ascender : " << line.ascender << std::endl;
68 std::cout << " descender : " << line.descender << std::endl;
69 std::cout << " extraLength : " << line.extraLength << std::endl;
70 std::cout << " alignmentOffset : " << line.alignmentOffset << std::endl;
71 std::cout << " direction : " << line.direction << std::endl;
72 std::cout << " ellipsis : " << line.ellipsis << std::endl;
75 bool LayoutTextTest( const LayoutTextData& data )
78 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
79 fontClient.SetDpi( 96u, 96u );
81 char* pathNamePtr = get_current_dir_name();
82 const std::string pathName( pathNamePtr );
85 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
86 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
87 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
88 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
90 // 1) Create the model.
95 Vector<FontDescriptionRun> fontDescriptionRuns;
96 if( 0u != data.numberOfFonts )
98 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
99 data.fontDescriptions,
100 data.fontDescriptions + data.numberOfFonts );
103 LayoutOptions options;
104 options.align = false;
105 CreateTextModel( data.text,
115 Toolkit::DevelText::EllipsisPosition::END,
118 LogicalModelPtr logicalModel = textModel->mLogicalModel;
119 VisualModelPtr visualModel = textModel->mVisualModel;
121 // 2) Clear the layout.
122 Vector<LineRun>& lines = visualModel->mLines;
124 const Length numberOfCharacters = logicalModel->mText.Count();
125 const bool isLastNewParagraph = ( 0u == numberOfCharacters ) ? false : TextAbstraction::IsNewParagraph( *( logicalModel->mText.Begin() + ( numberOfCharacters - 1u ) ) );
126 const GlyphIndex lastGlyphIndex = data.startIndex + data.numberOfGlyphs - 1u;
127 const bool removeLastLine = isLastNewParagraph && ( lastGlyphIndex + 1u == visualModel->mGlyphs.Count() );
129 LineIndex startRemoveIndex = 0u;
131 if( 0u != lines.Count() )
133 startRemoveIndex = lines.Count();
134 LineIndex endRemoveIndex = startRemoveIndex;
135 ClearGlyphRuns( data.startIndex,
136 lastGlyphIndex + ( removeLastLine ? 1u : 0u ),
141 // Update the character runs of the lines.
142 const CharacterIndex* const glyphsToCharactersBuffer = visualModel->mGlyphsToCharacters.Begin();
143 const Length* const charactersPerGlyph = visualModel->mCharactersPerGlyph.Begin();
144 const CharacterIndex startCharacterIndex = *( glyphsToCharactersBuffer + data.startIndex );
145 const CharacterIndex lastCharacterIndex = *( glyphsToCharactersBuffer + lastGlyphIndex ) + *( charactersPerGlyph + lastGlyphIndex ) - 1u;
146 ClearCharacterRuns( startCharacterIndex,
147 lastCharacterIndex + ( removeLastLine ? 1u : 0u ),
152 lines.Erase( lines.Begin() + startRemoveIndex,
153 lines.Begin() + endRemoveIndex );
156 Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
158 glyphPositions.Erase( glyphPositions.Begin() + data.startIndex,
159 glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
162 Layout::Engine engine;
163 engine.SetMetrics( metrics );
164 engine.SetLayout( data.layout );
166 textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
167 textModel->mLineWrapMode = LineWrap::WORD;
168 textModel->mIgnoreSpacesAfterText = true;
169 Layout::Parameters layoutParameters( data.textArea,
172 layoutParameters.isLastNewParagraph = isLastNewParagraph;
174 // The initial glyph and the number of glyphs to layout.
175 layoutParameters.startGlyphIndex = data.startIndex;
176 layoutParameters.numberOfGlyphs = data.numberOfGlyphs;
177 layoutParameters.startLineIndex = startRemoveIndex;
178 layoutParameters.estimatedNumberOfLines = logicalModel->mParagraphInfo.Count();
180 layoutSize = Vector2::ZERO;
182 bool isAutoScroll = false;
183 const bool updated = engine.LayoutText( layoutParameters,
187 data.ellipsisPosition );
189 // 4) Compare the results.
191 if( updated != data.updated )
193 std::cout << " Different updated bool : " << updated << ", expected : " << data.updated << std::endl;
197 if( layoutSize != data.layoutSize )
199 std::cout << " Different layout size : " << layoutSize << ", expected : " << data.layoutSize << std::endl;
203 for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
205 const Vector2& position = *( glyphPositions.Begin() + index );
207 if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
209 std::cout << " Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
212 if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
214 std::cout << " Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
219 if( lines.Count() != data.numberOfLines )
221 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
225 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
227 const LineRun& line = *( lines.Begin() + index );
228 const LineRun& expectedLine = *( data.lines + index );
230 if( line.glyphRun.glyphIndex != expectedLine.glyphRun.glyphIndex )
232 std::cout << " Different line info for line : " << index << std::endl;
234 std::cout << " expected" << std::endl;
235 Print( expectedLine );
238 if( line.glyphRun.numberOfGlyphs != expectedLine.glyphRun.numberOfGlyphs )
240 std::cout << " Different line info for line : " << index << std::endl;
242 std::cout << " expected" << std::endl;
243 Print( expectedLine );
247 if( line.characterRun.characterIndex != expectedLine.characterRun.characterIndex )
249 std::cout << " Different line info for line : " << index << std::endl;
251 std::cout << " expected" << std::endl;
252 Print( expectedLine );
255 if( line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters )
257 std::cout << " Different line info for line : " << index << std::endl;
259 std::cout << " expected" << std::endl;
260 Print( expectedLine );
264 if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
266 std::cout << " Different line info for line : " << index << std::endl;
268 std::cout << " expected" << std::endl;
269 Print( expectedLine );
273 if( fabsf( line.ascender - expectedLine.ascender ) > Math::MACHINE_EPSILON_1 )
275 std::cout << " Different line info for line : " << index << std::endl;
277 std::cout << " expected" << std::endl;
278 Print( expectedLine );
282 if( fabsf( line.descender - expectedLine.descender ) > Math::MACHINE_EPSILON_1 )
284 std::cout << " Different line info for line : " << index << std::endl;
286 std::cout << " expected" << std::endl;
287 Print( expectedLine );
291 if( fabsf( line.extraLength - expectedLine.extraLength ) > Math::MACHINE_EPSILON_1 )
293 std::cout << " Different line info for line : " << index << std::endl;
295 std::cout << " expected" << std::endl;
296 Print( expectedLine );
300 if( line.ellipsis != expectedLine.ellipsis )
302 std::cout << " Different line info for line : " << index << std::endl;
304 std::cout << " expected" << std::endl;
305 Print( expectedLine );
309 // Do not compare the alignment offset as it's not calculated in the layout.
310 // Do not compare the line direction as it's not set in the layout.
316 //////////////////////////////////////////////////////////
320 std::string description;
323 unsigned int numberOfFonts;
324 FontDescriptionRun* fontDescriptions;
325 Text::HorizontalAlignment::Type horizontalAlignment;
326 Text::VerticalAlignment::Type verticalAlignment;
327 unsigned int startIndex;
328 unsigned int numberOfCharacters;
329 unsigned int numberOfLines;
331 Dali::LayoutDirection::Type layoutDirection;
332 bool matchSystemLanguageDirection;
335 bool AlignTest( const AlignData& data )
338 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
339 fontClient.SetDpi( 96u, 96u );
341 char* pathNamePtr = get_current_dir_name();
342 const std::string pathName( pathNamePtr );
345 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
346 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
347 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
349 // 1) Create the model.
354 Vector<FontDescriptionRun> fontDescriptionRuns;
355 if( 0u != data.numberOfFonts )
357 fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
358 data.fontDescriptions,
359 data.fontDescriptions + data.numberOfFonts );
362 LayoutOptions options;
363 options.align = false;
364 CreateTextModel( data.text,
374 Toolkit::DevelText::EllipsisPosition::END,
377 LogicalModelPtr logicalModel = textModel->mLogicalModel;
378 VisualModelPtr visualModel = textModel->mVisualModel;
380 // Call the Align method.
381 Layout::Engine engine;
382 engine.SetMetrics( metrics );
384 float alignmentOffset = 0.f;
385 engine.Align( data.textArea,
387 data.numberOfCharacters,
388 data.horizontalAlignment,
391 data.layoutDirection,
392 data.matchSystemLanguageDirection );
395 if( data.numberOfLines != visualModel->mLines.Count() )
397 std::cout << " Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl;
401 const LineRun* const linesBuffer = visualModel->mLines.Begin();
402 for( unsigned int index = 0u; index < data.numberOfLines; ++index )
404 const LineRun& line = *( linesBuffer + index );
406 if( line.alignmentOffset != *( data.lineOffsets + index ) )
408 std::cout << " different line offset for index " << index << " : " << line.alignmentOffset << ", expected : " << *( data.lineOffsets + index ) << std::endl;
417 //////////////////////////////////////////////////////////
419 // UtcDaliTextLayoutSetGetLayout
420 // UtcDaliTextLayoutSetGetTextEllipsisEnabled
421 // UtcDaliTextLayoutSetGetHorizontalAlignment
422 // UtcDaliTextLayoutSetGetVerticalAlignment
423 // UtcDaliTextLayoutSetGetCursorWidth
424 // UtcDaliTextLayoutNoText
425 // UtcDaliTextLayoutSmallTextArea01
426 // UtcDaliTextLayoutSmallTextArea02
427 // UtcDaliTextLayoutMultilineText01
428 // UtcDaliTextLayoutMultilineText02
429 // UtcDaliTextLayoutMultilineText03
430 // UtcDaliTextLayoutMultilineText04
431 // UtcDaliTextLayoutMultilineText05
432 // UtcDaliTextLayoutMultilineText06
433 // UtcDaliTextUpdateLayout01
434 // UtcDaliTextUpdateLayout02
435 // UtcDaliTextUpdateLayout03
436 // UtcDaliTextLayoutEllipsis01
437 // UtcDaliTextLayoutEllipsis02
438 // UtcDaliTextLayoutEllipsis03
439 // UtcDaliTextLayoutEllipsis04
440 // UtcDaliTextLayoutEllipsis04
441 // UtcDaliTextReorderLayout01
442 // UtcDaliTextReorderLayout02
443 // UtcDaliTextReorderLayout03
444 // UtcDaliTextReorderLayout04
445 // UtcDaliTextAlign01
446 // UtcDaliTextAlign02
447 // UtcDaliTextAlign03
448 // UtcDaliTextAlign04
449 // UtcDaliTextAlign05
450 // UtcDaliTextAlign06
451 // UtcDaliTextAlign07
452 // UtcDaliTextAlign08
453 // UtcDaliTextAlign09
455 //////////////////////////////////////////////////////////
457 int UtcDaliTextLayoutSetGetLayout(void)
459 ToolkitTestApplication application;
460 tet_infoline(" UtcDaliTextLayoutSetGetLayout");
462 Layout::Engine engine;
464 DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
466 engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
467 DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
469 tet_result(TET_PASS);
473 int UtcDaliTextLayoutSetGetCursorWidth(void)
475 ToolkitTestApplication application;
478 Layout::Engine engine;
480 DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
482 engine.SetCursorWidth( 2 );
483 DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
485 tet_result(TET_PASS);
489 int UtcDaliTextLayoutNoText(void)
491 ToolkitTestApplication application;
492 tet_infoline(" UtcDaliTextLayoutNoText");
494 Size textArea(100.f, 60.f);
495 Size layoutSize = Vector2::ZERO;
496 LayoutTextData data =
508 Layout::Engine::MULTI_LINE_BOX,
512 DevelText::EllipsisPosition::END,
516 if( !LayoutTextTest( data ) )
518 tet_result(TET_FAIL);
521 tet_result(TET_PASS);
525 int UtcDaliTextLayoutSmallTextArea01(void)
527 ToolkitTestApplication application;
528 tet_infoline(" UtcDaliTextLayoutSmallTextArea01");
530 // Won't layout the text in multi-line if the width is too small.
532 const std::string fontFamily( "TizenSans" );
534 // Set a known font description
535 FontDescriptionRun fontDescriptionRun;
536 fontDescriptionRun.characterRun.characterIndex = 0u;
537 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
538 fontDescriptionRun.familyLength = fontFamily.size();
539 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
540 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
541 fontDescriptionRun.familyDefined = true;
542 fontDescriptionRun.weightDefined = false;
543 fontDescriptionRun.widthDefined = false;
544 fontDescriptionRun.slantDefined = false;
545 fontDescriptionRun.sizeDefined = false;
547 Vector<FontDescriptionRun> fontDescriptionRuns;
548 fontDescriptionRuns.PushBack( fontDescriptionRun );
549 Size textArea(1.f, 1.f);
550 Size layoutSize = Vector2::ZERO;
551 LayoutTextData data =
553 "Layout text in a small area",
557 fontDescriptionRuns.Begin(),
563 Layout::Engine::MULTI_LINE_BOX,
567 DevelText::EllipsisPosition::END,
571 if( !LayoutTextTest( data ) )
573 tet_result(TET_FAIL);
576 tet_result(TET_PASS);
580 int UtcDaliTextLayoutSmallTextArea02(void)
582 ToolkitTestApplication application;
583 tet_infoline(" UtcDaliTextLayoutSmallTextArea02");
585 // Will layout the text in single line as it can be scrolled.
587 const std::string fontFamily( "TizenSans" );
589 // Set a known font description
590 FontDescriptionRun fontDescriptionRun;
591 fontDescriptionRun.characterRun.characterIndex = 0u;
592 fontDescriptionRun.characterRun.numberOfCharacters = 11u;
593 fontDescriptionRun.familyLength = fontFamily.size();
594 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
595 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
596 fontDescriptionRun.familyDefined = true;
597 fontDescriptionRun.weightDefined = false;
598 fontDescriptionRun.widthDefined = false;
599 fontDescriptionRun.slantDefined = false;
600 fontDescriptionRun.sizeDefined = false;
602 Vector<FontDescriptionRun> fontDescriptionRuns;
603 fontDescriptionRuns.PushBack( fontDescriptionRun );
604 Size textArea(1.f, 1.f);
605 Size layoutSize(81.f, 20.f);
606 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 };
607 struct LineRun line =
620 Vector<LineRun> lines;
621 lines.PushBack( line );
623 LayoutTextData data =
625 "Layout text in a small area",
629 fontDescriptionRuns.Begin(),
635 Layout::Engine::SINGLE_LINE_BOX,
639 DevelText::EllipsisPosition::END,
643 if( !LayoutTextTest( data ) )
645 tet_result(TET_FAIL);
648 tet_result(TET_PASS);
652 int UtcDaliTextLayoutMultilineText01(void)
654 ToolkitTestApplication application;
655 tet_infoline(" UtcDaliTextLayoutMultilineText01");
657 // Layout some lines of left to right text.
659 const std::string fontFamily( "TizenSans" );
661 // Set a known font description
662 FontDescriptionRun fontDescriptionRun1;
663 fontDescriptionRun1.characterRun.characterIndex = 0u;
664 fontDescriptionRun1.characterRun.numberOfCharacters = 18u;
665 fontDescriptionRun1.familyLength = fontFamily.size();
666 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
667 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
668 fontDescriptionRun1.familyDefined = true;
669 fontDescriptionRun1.weightDefined = false;
670 fontDescriptionRun1.widthDefined = false;
671 fontDescriptionRun1.slantDefined = false;
672 fontDescriptionRun1.sizeDefined = false;
674 FontDescriptionRun fontDescriptionRun2;
675 fontDescriptionRun2.characterRun.characterIndex = 18u;
676 fontDescriptionRun2.characterRun.numberOfCharacters = 31u;
677 fontDescriptionRun2.familyLength = fontFamily.size();
678 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
679 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
680 fontDescriptionRun2.familyDefined = true;
681 fontDescriptionRun2.weightDefined = false;
682 fontDescriptionRun2.widthDefined = false;
683 fontDescriptionRun2.slantDefined = false;
684 fontDescriptionRun2.sizeDefined = false;
686 Vector<FontDescriptionRun> fontDescriptionRuns;
687 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
688 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
689 Size textArea(100.f, 300.f);
690 Size layoutSize(98.f, 97.f);
693 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,
694 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f, 45.f, -12.f,
695 0.f, -12.f, 8.f, -9.f, 18.f, -9.f, 27.f, -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f,
696 0.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f, -9.f, 36.f, -9.f, 42.f, -9.f, 53.f, -9.f, 62.f, -11.f, 68.f, -0.f,
697 0.f, -12.f, 4.f, -12.f, 9.f, -9.f, 18.f, -9.f, 28.f, -9.f, 36.f, -0.f, 41.f, -9.f, 51.f, -12.f, 57.f, -0.f, 62.f, -11.f, 68.f, -9.f, 78.f, -9.f, 87.f, -11.f, 94.f, -2.f
699 struct LineRun line0 =
712 struct LineRun line1 =
725 struct LineRun line2 =
738 struct LineRun line3 =
751 struct LineRun line4 =
764 Vector<LineRun> lines;
765 lines.PushBack( line0 );
766 lines.PushBack( line1 );
767 lines.PushBack( line2 );
768 lines.PushBack( line3 );
769 lines.PushBack( line4 );
771 LayoutTextData data =
773 "Layout simple multi-line text",
774 "Hello world demo.\n"
775 "Layout different lines of text.",
778 fontDescriptionRuns.Begin(),
784 Layout::Engine::MULTI_LINE_BOX,
788 DevelText::EllipsisPosition::END,
792 if( !LayoutTextTest( data ) )
794 tet_result(TET_FAIL);
797 tet_result(TET_PASS);
801 int UtcDaliTextLayoutMultilineText02(void)
803 ToolkitTestApplication application;
804 tet_infoline(" UtcDaliTextLayoutMultilineText02");
806 // Layout some lines of bidirectional text.
808 const std::string fontFamily1( "TizenSans" );
810 // Set a known font description
811 FontDescriptionRun fontDescriptionRun1;
812 fontDescriptionRun1.characterRun.characterIndex = 0u;
813 fontDescriptionRun1.characterRun.numberOfCharacters = 17u;
814 fontDescriptionRun1.familyLength = fontFamily1.size();
815 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
816 memcpy( fontDescriptionRun1.familyName, fontFamily1.c_str(), fontDescriptionRun1.familyLength );
817 fontDescriptionRun1.familyDefined = true;
818 fontDescriptionRun1.weightDefined = false;
819 fontDescriptionRun1.widthDefined = false;
820 fontDescriptionRun1.slantDefined = false;
821 fontDescriptionRun1.sizeDefined = false;
823 const std::string fontFamily2( "TizenSansHebrew" );
825 // Set a known font description
826 FontDescriptionRun fontDescriptionRun2;
827 fontDescriptionRun2.characterRun.characterIndex = 17u;
828 fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
829 fontDescriptionRun2.familyLength = fontFamily2.size();
830 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
831 memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
832 fontDescriptionRun2.familyDefined = true;
833 fontDescriptionRun2.weightDefined = false;
834 fontDescriptionRun2.widthDefined = false;
835 fontDescriptionRun2.slantDefined = false;
836 fontDescriptionRun2.sizeDefined = false;
838 const std::string fontFamily3( "TizenSans" );
840 // Set a known font description
841 FontDescriptionRun fontDescriptionRun3;
842 fontDescriptionRun3.characterRun.characterIndex = 26u;
843 fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
844 fontDescriptionRun3.familyLength = fontFamily3.size();
845 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
846 memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
847 fontDescriptionRun3.familyDefined = true;
848 fontDescriptionRun3.weightDefined = false;
849 fontDescriptionRun3.widthDefined = false;
850 fontDescriptionRun3.slantDefined = false;
851 fontDescriptionRun3.sizeDefined = false;
853 const std::string fontFamily4( "TizenSansHebrew" );
855 // Set a known font description
856 FontDescriptionRun fontDescriptionRun4;
857 fontDescriptionRun4.characterRun.characterIndex = 28u;
858 fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
859 fontDescriptionRun4.familyLength = fontFamily4.size();
860 fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
861 memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
862 fontDescriptionRun4.familyDefined = true;
863 fontDescriptionRun4.weightDefined = false;
864 fontDescriptionRun4.widthDefined = false;
865 fontDescriptionRun4.slantDefined = false;
866 fontDescriptionRun4.sizeDefined = false;
868 const std::string fontFamily5( "TizenSans" );
870 // Set a known font description
871 FontDescriptionRun fontDescriptionRun5;
872 fontDescriptionRun5.characterRun.characterIndex = 38u;
873 fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
874 fontDescriptionRun5.familyLength = fontFamily5.size();
875 fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
876 memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
877 fontDescriptionRun5.familyDefined = true;
878 fontDescriptionRun5.weightDefined = false;
879 fontDescriptionRun5.widthDefined = false;
880 fontDescriptionRun5.slantDefined = false;
881 fontDescriptionRun5.sizeDefined = false;
883 Vector<FontDescriptionRun> fontDescriptionRuns;
884 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
885 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
886 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
887 fontDescriptionRuns.PushBack( fontDescriptionRun4 );
888 fontDescriptionRuns.PushBack( fontDescriptionRun5 );
889 Size textArea(100.f, 300.f);
890 Size layoutSize(81.f, 120.f);
893 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
894 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
895 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
896 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 28 .. 37
897 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
898 4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, // 50 .. 54
900 struct LineRun line0 =
913 struct LineRun line1 =
926 struct LineRun line2 =
939 struct LineRun line3 =
952 struct LineRun line4 =
965 struct LineRun line5 =
978 Vector<LineRun> lines;
979 lines.PushBack( line0 );
980 lines.PushBack( line1 );
981 lines.PushBack( line2 );
982 lines.PushBack( line3 );
983 lines.PushBack( line4 );
984 lines.PushBack( line5 );
986 LayoutTextData data =
988 "Layout bidirectional text.",
989 "Hello world demo שלום עולם.\n"
990 "שלום עולם hello world demo.",
993 fontDescriptionRuns.Begin(),
999 Layout::Engine::MULTI_LINE_BOX,
1003 DevelText::EllipsisPosition::END,
1007 if( !LayoutTextTest( data ) )
1009 tet_result(TET_FAIL);
1012 tet_result(TET_PASS);
1016 int UtcDaliTextLayoutMultilineText03(void)
1018 ToolkitTestApplication application;
1019 tet_infoline(" UtcDaliTextLayoutMultilineText03");
1021 // Layout a long word which doesn't fit in the width of the text area.
1023 const std::string fontFamily( "TizenSans" );
1025 // Set a known font description
1026 FontDescriptionRun fontDescriptionRun;
1027 fontDescriptionRun.characterRun.characterIndex = 0u;
1028 fontDescriptionRun.characterRun.numberOfCharacters = 29u;
1029 fontDescriptionRun.familyLength = fontFamily.size();
1030 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1031 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1032 fontDescriptionRun.familyDefined = true;
1033 fontDescriptionRun.weightDefined = false;
1034 fontDescriptionRun.widthDefined = false;
1035 fontDescriptionRun.slantDefined = false;
1036 fontDescriptionRun.sizeDefined = false;
1038 Vector<FontDescriptionRun> fontDescriptionRuns;
1039 fontDescriptionRuns.PushBack( fontDescriptionRun );
1040 Size textArea(100.f, 300.f);
1041 Size layoutSize(98.f, 60.f);
1044 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,
1045 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,
1046 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f,
1048 struct LineRun line0 =
1061 struct LineRun line1 =
1074 struct LineRun line2 =
1087 Vector<LineRun> lines;
1088 lines.PushBack( line0 );
1089 lines.PushBack( line1 );
1090 lines.PushBack( line2 );
1092 LayoutTextData data =
1094 "Layout a long word which doesn't fit in the width of the text area.",
1095 "Helloworlddemohelloworlddemo.",
1098 fontDescriptionRuns.Begin(),
1104 Layout::Engine::MULTI_LINE_BOX,
1108 DevelText::EllipsisPosition::END,
1112 if( !LayoutTextTest( data ) )
1114 tet_result(TET_FAIL);
1117 tet_result(TET_PASS);
1121 int UtcDaliTextLayoutMultilineText04(void)
1123 ToolkitTestApplication application;
1124 tet_infoline(" UtcDaliTextLayoutMultilineText04");
1126 // Layout simple text ending with a \n. It has to add a void line at the end.
1128 const std::string fontFamily( "TizenSans" );
1130 // Set a known font description
1131 FontDescriptionRun fontDescriptionRun;
1132 fontDescriptionRun.characterRun.characterIndex = 0u;
1133 fontDescriptionRun.characterRun.numberOfCharacters = 13u;
1134 fontDescriptionRun.familyLength = fontFamily.size();
1135 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1136 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1137 fontDescriptionRun.familyDefined = true;
1138 fontDescriptionRun.weightDefined = false;
1139 fontDescriptionRun.widthDefined = false;
1140 fontDescriptionRun.slantDefined = false;
1141 fontDescriptionRun.sizeDefined = false;
1143 Vector<FontDescriptionRun> fontDescriptionRuns;
1144 fontDescriptionRuns.PushBack( fontDescriptionRun );
1145 Size textArea(100.f, 300.f);
1146 Size layoutSize(84.f, 40.f);
1149 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
1151 struct LineRun line0 =
1163 struct LineRun line1 =
1176 Vector<LineRun> lines;
1177 lines.PushBack( line0 );
1178 lines.PushBack( line1 );
1180 LayoutTextData data =
1182 "Layout simple text ending with a \n.",
1186 fontDescriptionRuns.Begin(),
1192 Layout::Engine::MULTI_LINE_BOX,
1196 DevelText::EllipsisPosition::END,
1200 if( !LayoutTextTest( data ) )
1202 tet_result(TET_FAIL);
1205 tet_result(TET_PASS);
1209 int UtcDaliTextLayoutMultilineText05(void)
1211 ToolkitTestApplication application;
1212 tet_infoline(" UtcDaliTextLayoutMultilineText05");
1214 // Layout simple text with one character with a different font size.
1216 const std::string fontFamily( "TizenSans" );
1218 // Set a known font description
1219 FontDescriptionRun fontDescriptionRun1;
1220 fontDescriptionRun1.characterRun.characterIndex = 0u;
1221 fontDescriptionRun1.characterRun.numberOfCharacters = 6u;
1222 fontDescriptionRun1.familyLength = fontFamily.size();
1223 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
1224 memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength );
1225 fontDescriptionRun1.familyDefined = true;
1226 fontDescriptionRun1.weightDefined = false;
1227 fontDescriptionRun1.widthDefined = false;
1228 fontDescriptionRun1.slantDefined = false;
1229 fontDescriptionRun1.sizeDefined = false;
1231 FontDescriptionRun fontDescriptionRun2;
1232 fontDescriptionRun2.characterRun.characterIndex = 6u;
1233 fontDescriptionRun2.characterRun.numberOfCharacters = 1u;
1234 fontDescriptionRun2.familyLength = fontFamily.size();
1235 fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
1236 memcpy( fontDescriptionRun2.familyName, fontFamily.c_str(), fontDescriptionRun2.familyLength );
1237 fontDescriptionRun2.size = 1280u;
1238 fontDescriptionRun2.familyDefined = true;
1239 fontDescriptionRun2.weightDefined = false;
1240 fontDescriptionRun2.widthDefined = false;
1241 fontDescriptionRun2.slantDefined = false;
1242 fontDescriptionRun2.sizeDefined = true;
1244 FontDescriptionRun fontDescriptionRun3;
1245 fontDescriptionRun3.characterRun.characterIndex = 7u;
1246 fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
1247 fontDescriptionRun3.familyLength = fontFamily.size();
1248 fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
1249 memcpy( fontDescriptionRun3.familyName, fontFamily.c_str(), fontDescriptionRun3.familyLength );
1250 fontDescriptionRun3.familyDefined = true;
1251 fontDescriptionRun3.weightDefined = false;
1252 fontDescriptionRun3.widthDefined = false;
1253 fontDescriptionRun3.slantDefined = false;
1254 fontDescriptionRun3.sizeDefined = false;
1256 Vector<FontDescriptionRun> fontDescriptionRuns;
1257 fontDescriptionRuns.PushBack( fontDescriptionRun1 );
1258 fontDescriptionRuns.PushBack( fontDescriptionRun2 );
1259 fontDescriptionRuns.PushBack( fontDescriptionRun3 );
1260 Size textArea(100.f, 300.f);
1261 Size layoutSize(89.f, 53.f);
1264 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, 70.f, -9.f, 76.f, -13.f, 80.f, -13.f, 89.f, -0.f,
1265 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -2.f
1267 struct LineRun line0 =
1280 struct LineRun line1 =
1293 Vector<LineRun> lines;
1294 lines.PushBack( line0 );
1295 lines.PushBack( line1 );
1297 LayoutTextData data =
1299 "Layout simple text with one character with a different font size.",
1300 "Hello world demo.",
1303 fontDescriptionRuns.Begin(),
1309 Layout::Engine::MULTI_LINE_BOX,
1313 DevelText::EllipsisPosition::END,
1317 if( !LayoutTextTest( data ) )
1319 tet_result(TET_FAIL);
1322 tet_result(TET_PASS);
1326 int UtcDaliTextLayoutMultilineText06(void)
1328 ToolkitTestApplication application;
1329 tet_infoline(" UtcDaliTextLayoutMultilineText06");
1331 const std::string fontFamily( "TizenSansHebrew" );
1333 // Set a known font description
1334 FontDescriptionRun fontDescriptionRun;
1335 fontDescriptionRun.characterRun.characterIndex = 0u;
1336 fontDescriptionRun.characterRun.numberOfCharacters = 10u;
1337 fontDescriptionRun.familyLength = fontFamily.size();
1338 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1339 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1340 fontDescriptionRun.familyDefined = true;
1341 fontDescriptionRun.weightDefined = false;
1342 fontDescriptionRun.widthDefined = false;
1343 fontDescriptionRun.slantDefined = false;
1344 fontDescriptionRun.sizeDefined = false;
1346 Vector<FontDescriptionRun> fontDescriptionRuns;
1347 fontDescriptionRuns.PushBack( fontDescriptionRun );
1349 Size textArea(64.f, 100.f);
1350 Size layoutSize(34.f, 40.f);
1353 27.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
1354 22.f, -10.f, 17.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
1356 struct LineRun line0 =
1369 struct LineRun line1 =
1382 Vector<LineRun> lines;
1383 lines.PushBack( line0 );
1384 lines.PushBack( line1 );
1386 LayoutTextData data =
1388 "Layout right to left text that doesn't fit in the text area after reordering.",
1389 "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
1392 fontDescriptionRuns.Begin(),
1398 Layout::Engine::MULTI_LINE_BOX,
1402 DevelText::EllipsisPosition::END,
1406 if( !LayoutTextTest( data ) )
1408 tet_result(TET_FAIL);
1411 tet_result(TET_PASS);
1415 int UtcDaliTextLayoutMultilineText07(void)
1417 ToolkitTestApplication application;
1418 tet_infoline(" UtcDaliTextLayoutMultilineText07");
1420 const std::string fontFamily( "TizenSansHebrew" );
1422 // Set a known font description
1423 FontDescriptionRun fontDescriptionRun;
1424 fontDescriptionRun.characterRun.characterIndex = 0u;
1425 fontDescriptionRun.characterRun.numberOfCharacters = 9u;
1426 fontDescriptionRun.familyLength = fontFamily.size();
1427 fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
1428 memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
1429 fontDescriptionRun.familyDefined = true;
1430 fontDescriptionRun.weightDefined = false;
1431 fontDescriptionRun.widthDefined = false;
1432 fontDescriptionRun.slantDefined = false;
1433 fontDescriptionRun.sizeDefined = false;
1435 Vector<FontDescriptionRun> fontDescriptionRuns;
1436 fontDescriptionRuns.PushBack( fontDescriptionRun );
1438 Size textArea(26.f, 100.f);
1439 Size layoutSize(24.f, 60.f);
1442 10.f, -10.f, 4.f, -10.f, 0.f, -10.f,
1443 13.f, -10.f, 9.f, -10.f, 0.f, -13.f,
1444 14.f, -10.f, 4.f, -10.f, 0.f, -10.f
1446 struct LineRun line0 =
1459 struct LineRun line1 =
1472 struct LineRun line2 =
1485 Vector<LineRun> lines;
1486 lines.PushBack( line0 );
1487 lines.PushBack( line1 );
1488 lines.PushBack( line2 );
1490 LayoutTextData data =
1492 "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.",
1493 "שנורולכאן", // 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.
1496 fontDescriptionRuns.Begin(),
1502 Layout::Engine::MULTI_LINE_BOX,
1506 DevelText::EllipsisPosition::END,
1510 if( !LayoutTextTest( data ) )
1512 tet_result(TET_FAIL);
1515 tet_result(TET_PASS);
1519 int UtcDaliTextUpdateLayout01(void)
1521 ToolkitTestApplication application;
1522 tet_infoline(" UtcDaliTextUpdateLayout01");
1524 // Layout some lines of bidirectional text. Update the paragraphs at the beginning.
1526 const std::string fontLatin( "TizenSans" );
1527 const std::string fontHebrew( "TizenSansHebrew" );
1528 const std::string fontArabic( "TizenSansArabic" );
1530 // Set a known font description
1531 FontDescriptionRun fontDescriptionRun01;
1532 fontDescriptionRun01.characterRun.characterIndex = 0u;
1533 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
1534 fontDescriptionRun01.familyLength = fontLatin.size();
1535 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
1536 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
1537 fontDescriptionRun01.familyDefined = true;
1538 fontDescriptionRun01.weightDefined = false;
1539 fontDescriptionRun01.widthDefined = false;
1540 fontDescriptionRun01.slantDefined = false;
1541 fontDescriptionRun01.sizeDefined = false;
1543 // Set a known font description
1544 FontDescriptionRun fontDescriptionRun02;
1545 fontDescriptionRun02.characterRun.characterIndex = 17u;
1546 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
1547 fontDescriptionRun02.familyLength = fontHebrew.size();
1548 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
1549 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
1550 fontDescriptionRun02.familyDefined = true;
1551 fontDescriptionRun02.weightDefined = false;
1552 fontDescriptionRun02.widthDefined = false;
1553 fontDescriptionRun02.slantDefined = false;
1554 fontDescriptionRun02.sizeDefined = false;
1556 // Set a known font description
1557 FontDescriptionRun fontDescriptionRun03;
1558 fontDescriptionRun03.characterRun.characterIndex = 26u;
1559 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
1560 fontDescriptionRun03.familyLength = fontLatin.size();
1561 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
1562 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
1563 fontDescriptionRun03.familyDefined = true;
1564 fontDescriptionRun03.weightDefined = false;
1565 fontDescriptionRun03.widthDefined = false;
1566 fontDescriptionRun03.slantDefined = false;
1567 fontDescriptionRun03.sizeDefined = false;
1569 // Set a known font description
1570 FontDescriptionRun fontDescriptionRun04;
1571 fontDescriptionRun04.characterRun.characterIndex = 28u;
1572 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
1573 fontDescriptionRun04.familyLength = fontArabic.size();
1574 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
1575 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
1576 fontDescriptionRun04.familyDefined = true;
1577 fontDescriptionRun04.weightDefined = false;
1578 fontDescriptionRun04.widthDefined = false;
1579 fontDescriptionRun04.slantDefined = false;
1580 fontDescriptionRun04.sizeDefined = false;
1582 // Set a known font description
1583 FontDescriptionRun fontDescriptionRun05;
1584 fontDescriptionRun05.characterRun.characterIndex = 42u;
1585 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
1586 fontDescriptionRun05.familyLength = fontLatin.size();
1587 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
1588 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
1589 fontDescriptionRun05.familyDefined = true;
1590 fontDescriptionRun05.weightDefined = false;
1591 fontDescriptionRun05.widthDefined = false;
1592 fontDescriptionRun05.slantDefined = false;
1593 fontDescriptionRun05.sizeDefined = false;
1595 // Set a known font description
1596 FontDescriptionRun fontDescriptionRun06;
1597 fontDescriptionRun06.characterRun.characterIndex = 54u;
1598 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
1599 fontDescriptionRun06.familyLength = fontHebrew.size();
1600 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
1601 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
1602 fontDescriptionRun06.familyDefined = true;
1603 fontDescriptionRun06.weightDefined = false;
1604 fontDescriptionRun06.widthDefined = false;
1605 fontDescriptionRun06.slantDefined = false;
1606 fontDescriptionRun06.sizeDefined = false;
1608 // Set a known font description
1609 FontDescriptionRun fontDescriptionRun07;
1610 fontDescriptionRun07.characterRun.characterIndex = 64u;
1611 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
1612 fontDescriptionRun07.familyLength = fontHebrew.size();
1613 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
1614 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
1615 fontDescriptionRun07.familyDefined = true;
1616 fontDescriptionRun07.weightDefined = false;
1617 fontDescriptionRun07.widthDefined = false;
1618 fontDescriptionRun07.slantDefined = false;
1619 fontDescriptionRun07.sizeDefined = false;
1621 // Set a known font description
1622 FontDescriptionRun fontDescriptionRun08;
1623 fontDescriptionRun08.characterRun.characterIndex = 74u;
1624 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
1625 fontDescriptionRun08.familyLength = fontLatin.size();
1626 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
1627 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
1628 fontDescriptionRun08.familyDefined = true;
1629 fontDescriptionRun08.weightDefined = false;
1630 fontDescriptionRun08.widthDefined = false;
1631 fontDescriptionRun08.slantDefined = false;
1632 fontDescriptionRun08.sizeDefined = false;
1634 // Set a known font description
1635 FontDescriptionRun fontDescriptionRun09;
1636 fontDescriptionRun09.characterRun.characterIndex = 92u;
1637 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
1638 fontDescriptionRun09.familyLength = fontLatin.size();
1639 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
1640 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
1641 fontDescriptionRun09.familyDefined = true;
1642 fontDescriptionRun09.weightDefined = false;
1643 fontDescriptionRun09.widthDefined = false;
1644 fontDescriptionRun09.slantDefined = false;
1645 fontDescriptionRun09.sizeDefined = false;
1647 // Set a known font description
1648 FontDescriptionRun fontDescriptionRun10;
1649 fontDescriptionRun10.characterRun.characterIndex = 104u;
1650 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
1651 fontDescriptionRun10.familyLength = fontArabic.size();
1652 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
1653 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
1654 fontDescriptionRun10.familyDefined = true;
1655 fontDescriptionRun10.weightDefined = false;
1656 fontDescriptionRun10.widthDefined = false;
1657 fontDescriptionRun10.slantDefined = false;
1658 fontDescriptionRun10.sizeDefined = false;
1660 // Set a known font description
1661 FontDescriptionRun fontDescriptionRun11;
1662 fontDescriptionRun11.characterRun.characterIndex = 118u;
1663 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
1664 fontDescriptionRun11.familyLength = fontHebrew.size();
1665 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
1666 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
1667 fontDescriptionRun11.familyDefined = true;
1668 fontDescriptionRun11.weightDefined = false;
1669 fontDescriptionRun11.widthDefined = false;
1670 fontDescriptionRun11.slantDefined = false;
1671 fontDescriptionRun11.sizeDefined = false;
1673 // Set a known font description
1674 FontDescriptionRun fontDescriptionRun12;
1675 fontDescriptionRun12.characterRun.characterIndex = 128u;
1676 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
1677 fontDescriptionRun12.familyLength = fontLatin.size();
1678 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
1679 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
1680 fontDescriptionRun12.familyDefined = true;
1681 fontDescriptionRun12.weightDefined = false;
1682 fontDescriptionRun12.widthDefined = false;
1683 fontDescriptionRun12.slantDefined = false;
1684 fontDescriptionRun12.sizeDefined = false;
1686 // Set a known font description
1687 FontDescriptionRun fontDescriptionRun13;
1688 fontDescriptionRun13.characterRun.characterIndex = 145u;
1689 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
1690 fontDescriptionRun13.familyLength = fontHebrew.size();
1691 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
1692 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
1693 fontDescriptionRun13.familyDefined = true;
1694 fontDescriptionRun13.weightDefined = false;
1695 fontDescriptionRun13.widthDefined = false;
1696 fontDescriptionRun13.slantDefined = false;
1697 fontDescriptionRun13.sizeDefined = false;
1699 // Set a known font description
1700 FontDescriptionRun fontDescriptionRun14;
1701 fontDescriptionRun14.characterRun.characterIndex = 154u;
1702 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
1703 fontDescriptionRun14.familyLength = fontLatin.size();
1704 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
1705 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
1706 fontDescriptionRun14.familyDefined = true;
1707 fontDescriptionRun14.weightDefined = false;
1708 fontDescriptionRun14.widthDefined = false;
1709 fontDescriptionRun14.slantDefined = false;
1710 fontDescriptionRun14.sizeDefined = false;
1712 // Set a known font description
1713 FontDescriptionRun fontDescriptionRun15;
1714 fontDescriptionRun15.characterRun.characterIndex = 156u;
1715 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
1716 fontDescriptionRun15.familyLength = fontHebrew.size();
1717 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
1718 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
1719 fontDescriptionRun15.familyDefined = true;
1720 fontDescriptionRun15.weightDefined = false;
1721 fontDescriptionRun15.widthDefined = false;
1722 fontDescriptionRun15.slantDefined = false;
1723 fontDescriptionRun15.sizeDefined = false;
1725 // Set a known font description
1726 FontDescriptionRun fontDescriptionRun16;
1727 fontDescriptionRun16.characterRun.characterIndex = 166u;
1728 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
1729 fontDescriptionRun16.familyLength = fontLatin.size();
1730 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
1731 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
1732 fontDescriptionRun16.familyDefined = true;
1733 fontDescriptionRun16.weightDefined = false;
1734 fontDescriptionRun16.widthDefined = false;
1735 fontDescriptionRun16.slantDefined = false;
1736 fontDescriptionRun16.sizeDefined = false;
1738 // Set a known font description
1739 FontDescriptionRun fontDescriptionRun17;
1740 fontDescriptionRun17.characterRun.characterIndex = 178u;
1741 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
1742 fontDescriptionRun17.familyLength = fontArabic.size();
1743 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
1744 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
1745 fontDescriptionRun17.familyDefined = true;
1746 fontDescriptionRun17.weightDefined = false;
1747 fontDescriptionRun17.widthDefined = false;
1748 fontDescriptionRun17.slantDefined = false;
1749 fontDescriptionRun17.sizeDefined = false;
1751 Vector<FontDescriptionRun> fontDescriptionRuns;
1752 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
1753 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
1754 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
1755 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
1756 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
1757 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
1758 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
1759 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
1760 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
1761 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
1762 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
1763 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
1764 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
1765 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
1766 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
1767 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
1768 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
1769 Size textArea(100.f, 300.f);
1770 Size layoutSize(100.f, 380.f);
1773 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
1774 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
1775 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
1776 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
1777 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, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
1778 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
1779 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
1780 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
1781 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
1782 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
1783 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
1784 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
1785 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
1786 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
1787 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
1788 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
1789 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
1790 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
1793 struct LineRun line01 =
1806 struct LineRun line02 =
1819 struct LineRun line03 =
1832 struct LineRun line04 =
1845 struct LineRun line05 =
1858 struct LineRun line06 =
1871 struct LineRun line07 =
1884 struct LineRun line08 =
1897 struct LineRun line09 =
1910 struct LineRun line10 =
1923 struct LineRun line11 =
1936 struct LineRun line12 =
1949 struct LineRun line13 =
1962 struct LineRun line14 =
1975 struct LineRun line15 =
1988 struct LineRun line16 =
2001 struct LineRun line17 =
2014 struct LineRun line18 =
2027 struct LineRun line19 =
2040 Vector<LineRun> lines;
2041 lines.PushBack( line01 );
2042 lines.PushBack( line02 );
2043 lines.PushBack( line03 );
2044 lines.PushBack( line04 );
2045 lines.PushBack( line05 );
2046 lines.PushBack( line06 );
2047 lines.PushBack( line07 );
2048 lines.PushBack( line08 );
2049 lines.PushBack( line09 );
2050 lines.PushBack( line10 );
2051 lines.PushBack( line11 );
2052 lines.PushBack( line12 );
2053 lines.PushBack( line13 );
2054 lines.PushBack( line14 );
2055 lines.PushBack( line15 );
2056 lines.PushBack( line16 );
2057 lines.PushBack( line17 );
2058 lines.PushBack( line18 );
2059 lines.PushBack( line19 );
2061 LayoutTextData data =
2063 "Layout bidirectional text.",
2064 "Hello world demo שלום עולם.\n"
2065 "مرحبا بالعالم hello world שלום עולם\n"
2066 "שלום עולם hello world demo.\n"
2067 "hello world مرحبا بالعالم שלום עולם\n"
2068 "Hello world demo שלום עולם.\n"
2069 "שלום עולם hello world مرحبا بالعالم\n",
2072 fontDescriptionRuns.Begin(),
2078 Layout::Engine::MULTI_LINE_BOX,
2082 DevelText::EllipsisPosition::END,
2086 if( !LayoutTextTest( data ) )
2088 tet_result(TET_FAIL);
2091 tet_result(TET_PASS);
2095 int UtcDaliTextUpdateLayout02(void)
2097 ToolkitTestApplication application;
2098 tet_infoline(" UtcDaliTextUpdateLayout02");
2100 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2102 const std::string fontLatin( "TizenSans" );
2103 const std::string fontHebrew( "TizenSansHebrew" );
2104 const std::string fontArabic( "TizenSansArabic" );
2106 // Set a known font description
2107 FontDescriptionRun fontDescriptionRun01;
2108 fontDescriptionRun01.characterRun.characterIndex = 0u;
2109 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2110 fontDescriptionRun01.familyLength = fontLatin.size();
2111 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2112 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2113 fontDescriptionRun01.familyDefined = true;
2114 fontDescriptionRun01.weightDefined = false;
2115 fontDescriptionRun01.widthDefined = false;
2116 fontDescriptionRun01.slantDefined = false;
2117 fontDescriptionRun01.sizeDefined = false;
2119 // Set a known font description
2120 FontDescriptionRun fontDescriptionRun02;
2121 fontDescriptionRun02.characterRun.characterIndex = 17u;
2122 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2123 fontDescriptionRun02.familyLength = fontHebrew.size();
2124 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2125 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2126 fontDescriptionRun02.familyDefined = true;
2127 fontDescriptionRun02.weightDefined = false;
2128 fontDescriptionRun02.widthDefined = false;
2129 fontDescriptionRun02.slantDefined = false;
2130 fontDescriptionRun02.sizeDefined = false;
2132 // Set a known font description
2133 FontDescriptionRun fontDescriptionRun03;
2134 fontDescriptionRun03.characterRun.characterIndex = 26u;
2135 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2136 fontDescriptionRun03.familyLength = fontLatin.size();
2137 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2138 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2139 fontDescriptionRun03.familyDefined = true;
2140 fontDescriptionRun03.weightDefined = false;
2141 fontDescriptionRun03.widthDefined = false;
2142 fontDescriptionRun03.slantDefined = false;
2143 fontDescriptionRun03.sizeDefined = false;
2145 // Set a known font description
2146 FontDescriptionRun fontDescriptionRun04;
2147 fontDescriptionRun04.characterRun.characterIndex = 28u;
2148 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2149 fontDescriptionRun04.familyLength = fontArabic.size();
2150 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2151 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2152 fontDescriptionRun04.familyDefined = true;
2153 fontDescriptionRun04.weightDefined = false;
2154 fontDescriptionRun04.widthDefined = false;
2155 fontDescriptionRun04.slantDefined = false;
2156 fontDescriptionRun04.sizeDefined = false;
2158 // Set a known font description
2159 FontDescriptionRun fontDescriptionRun05;
2160 fontDescriptionRun05.characterRun.characterIndex = 42u;
2161 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2162 fontDescriptionRun05.familyLength = fontLatin.size();
2163 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2164 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2165 fontDescriptionRun05.familyDefined = true;
2166 fontDescriptionRun05.weightDefined = false;
2167 fontDescriptionRun05.widthDefined = false;
2168 fontDescriptionRun05.slantDefined = false;
2169 fontDescriptionRun05.sizeDefined = false;
2171 // Set a known font description
2172 FontDescriptionRun fontDescriptionRun06;
2173 fontDescriptionRun06.characterRun.characterIndex = 54u;
2174 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2175 fontDescriptionRun06.familyLength = fontHebrew.size();
2176 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2177 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2178 fontDescriptionRun06.familyDefined = true;
2179 fontDescriptionRun06.weightDefined = false;
2180 fontDescriptionRun06.widthDefined = false;
2181 fontDescriptionRun06.slantDefined = false;
2182 fontDescriptionRun06.sizeDefined = false;
2184 // Set a known font description
2185 FontDescriptionRun fontDescriptionRun07;
2186 fontDescriptionRun07.characterRun.characterIndex = 64u;
2187 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2188 fontDescriptionRun07.familyLength = fontHebrew.size();
2189 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2190 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2191 fontDescriptionRun07.familyDefined = true;
2192 fontDescriptionRun07.weightDefined = false;
2193 fontDescriptionRun07.widthDefined = false;
2194 fontDescriptionRun07.slantDefined = false;
2195 fontDescriptionRun07.sizeDefined = false;
2197 // Set a known font description
2198 FontDescriptionRun fontDescriptionRun08;
2199 fontDescriptionRun08.characterRun.characterIndex = 74u;
2200 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2201 fontDescriptionRun08.familyLength = fontLatin.size();
2202 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2203 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2204 fontDescriptionRun08.familyDefined = true;
2205 fontDescriptionRun08.weightDefined = false;
2206 fontDescriptionRun08.widthDefined = false;
2207 fontDescriptionRun08.slantDefined = false;
2208 fontDescriptionRun08.sizeDefined = false;
2210 // Set a known font description
2211 FontDescriptionRun fontDescriptionRun09;
2212 fontDescriptionRun09.characterRun.characterIndex = 92u;
2213 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2214 fontDescriptionRun09.familyLength = fontLatin.size();
2215 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2216 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2217 fontDescriptionRun09.familyDefined = true;
2218 fontDescriptionRun09.weightDefined = false;
2219 fontDescriptionRun09.widthDefined = false;
2220 fontDescriptionRun09.slantDefined = false;
2221 fontDescriptionRun09.sizeDefined = false;
2223 // Set a known font description
2224 FontDescriptionRun fontDescriptionRun10;
2225 fontDescriptionRun10.characterRun.characterIndex = 104u;
2226 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2227 fontDescriptionRun10.familyLength = fontArabic.size();
2228 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2229 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2230 fontDescriptionRun10.familyDefined = true;
2231 fontDescriptionRun10.weightDefined = false;
2232 fontDescriptionRun10.widthDefined = false;
2233 fontDescriptionRun10.slantDefined = false;
2234 fontDescriptionRun10.sizeDefined = false;
2236 // Set a known font description
2237 FontDescriptionRun fontDescriptionRun11;
2238 fontDescriptionRun11.characterRun.characterIndex = 118u;
2239 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2240 fontDescriptionRun11.familyLength = fontHebrew.size();
2241 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2242 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2243 fontDescriptionRun11.familyDefined = true;
2244 fontDescriptionRun11.weightDefined = false;
2245 fontDescriptionRun11.widthDefined = false;
2246 fontDescriptionRun11.slantDefined = false;
2247 fontDescriptionRun11.sizeDefined = false;
2249 // Set a known font description
2250 FontDescriptionRun fontDescriptionRun12;
2251 fontDescriptionRun12.characterRun.characterIndex = 128u;
2252 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2253 fontDescriptionRun12.familyLength = fontLatin.size();
2254 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2255 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2256 fontDescriptionRun12.familyDefined = true;
2257 fontDescriptionRun12.weightDefined = false;
2258 fontDescriptionRun12.widthDefined = false;
2259 fontDescriptionRun12.slantDefined = false;
2260 fontDescriptionRun12.sizeDefined = false;
2262 // Set a known font description
2263 FontDescriptionRun fontDescriptionRun13;
2264 fontDescriptionRun13.characterRun.characterIndex = 145u;
2265 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2266 fontDescriptionRun13.familyLength = fontHebrew.size();
2267 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2268 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2269 fontDescriptionRun13.familyDefined = true;
2270 fontDescriptionRun13.weightDefined = false;
2271 fontDescriptionRun13.widthDefined = false;
2272 fontDescriptionRun13.slantDefined = false;
2273 fontDescriptionRun13.sizeDefined = false;
2275 // Set a known font description
2276 FontDescriptionRun fontDescriptionRun14;
2277 fontDescriptionRun14.characterRun.characterIndex = 154u;
2278 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2279 fontDescriptionRun14.familyLength = fontLatin.size();
2280 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2281 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2282 fontDescriptionRun14.familyDefined = true;
2283 fontDescriptionRun14.weightDefined = false;
2284 fontDescriptionRun14.widthDefined = false;
2285 fontDescriptionRun14.slantDefined = false;
2286 fontDescriptionRun14.sizeDefined = false;
2288 // Set a known font description
2289 FontDescriptionRun fontDescriptionRun15;
2290 fontDescriptionRun15.characterRun.characterIndex = 156u;
2291 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2292 fontDescriptionRun15.familyLength = fontHebrew.size();
2293 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2294 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2295 fontDescriptionRun15.familyDefined = true;
2296 fontDescriptionRun15.weightDefined = false;
2297 fontDescriptionRun15.widthDefined = false;
2298 fontDescriptionRun15.slantDefined = false;
2299 fontDescriptionRun15.sizeDefined = false;
2301 // Set a known font description
2302 FontDescriptionRun fontDescriptionRun16;
2303 fontDescriptionRun16.characterRun.characterIndex = 166u;
2304 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2305 fontDescriptionRun16.familyLength = fontLatin.size();
2306 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2307 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2308 fontDescriptionRun16.familyDefined = true;
2309 fontDescriptionRun16.weightDefined = false;
2310 fontDescriptionRun16.widthDefined = false;
2311 fontDescriptionRun16.slantDefined = false;
2312 fontDescriptionRun16.sizeDefined = false;
2314 // Set a known font description
2315 FontDescriptionRun fontDescriptionRun17;
2316 fontDescriptionRun17.characterRun.characterIndex = 178u;
2317 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2318 fontDescriptionRun17.familyLength = fontArabic.size();
2319 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2320 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2321 fontDescriptionRun17.familyDefined = true;
2322 fontDescriptionRun17.weightDefined = false;
2323 fontDescriptionRun17.widthDefined = false;
2324 fontDescriptionRun17.slantDefined = false;
2325 fontDescriptionRun17.sizeDefined = false;
2327 Vector<FontDescriptionRun> fontDescriptionRuns;
2328 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2329 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2330 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2331 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2332 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2333 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2334 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2335 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2336 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2337 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2338 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2339 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2340 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2341 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2342 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2343 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2344 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2345 Size textArea(100.f, 300.f);
2346 Size layoutSize(100.f, 380.f);
2349 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
2350 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
2351 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
2352 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
2353 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, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
2354 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2355 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2356 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
2357 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
2358 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
2359 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
2360 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
2361 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
2362 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
2363 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
2364 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2365 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
2366 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
2369 struct LineRun line01 =
2382 struct LineRun line02 =
2395 struct LineRun line03 =
2408 struct LineRun line04 =
2421 struct LineRun line05 =
2434 struct LineRun line06 =
2447 struct LineRun line07 =
2460 struct LineRun line08 =
2473 struct LineRun line09 =
2486 struct LineRun line10 =
2499 struct LineRun line11 =
2512 struct LineRun line12 =
2525 struct LineRun line13 =
2538 struct LineRun line14 =
2551 struct LineRun line15 =
2564 struct LineRun line16 =
2577 struct LineRun line17 =
2590 struct LineRun line18 =
2603 struct LineRun line19 =
2616 Vector<LineRun> lines;
2617 lines.PushBack( line01 );
2618 lines.PushBack( line02 );
2619 lines.PushBack( line03 );
2620 lines.PushBack( line04 );
2621 lines.PushBack( line05 );
2622 lines.PushBack( line06 );
2623 lines.PushBack( line07 );
2624 lines.PushBack( line08 );
2625 lines.PushBack( line09 );
2626 lines.PushBack( line10 );
2627 lines.PushBack( line11 );
2628 lines.PushBack( line12 );
2629 lines.PushBack( line13 );
2630 lines.PushBack( line14 );
2631 lines.PushBack( line15 );
2632 lines.PushBack( line16 );
2633 lines.PushBack( line17 );
2634 lines.PushBack( line18 );
2635 lines.PushBack( line19 );
2637 LayoutTextData data =
2639 "Layout bidirectional text.",
2640 "Hello world demo שלום עולם.\n"
2641 "مرحبا بالعالم hello world שלום עולם\n"
2642 "שלום עולם hello world demo.\n"
2643 "hello world مرحبا بالعالم שלום עולם\n"
2644 "Hello world demo שלום עולם.\n"
2645 "שלום עולם hello world مرحبا بالعالم\n",
2648 fontDescriptionRuns.Begin(),
2654 Layout::Engine::MULTI_LINE_BOX,
2658 DevelText::EllipsisPosition::END,
2662 if( !LayoutTextTest( data ) )
2664 tet_result(TET_FAIL);
2667 tet_result(TET_PASS);
2671 int UtcDaliTextUpdateLayout03(void)
2673 ToolkitTestApplication application;
2674 tet_infoline(" UtcDaliTextUpdateLayout03");
2676 // Layout some lines of bidirectional text. Update the paragraphs at the middle.
2678 const std::string fontLatin( "TizenSans" );
2679 const std::string fontHebrew( "TizenSansHebrew" );
2680 const std::string fontArabic( "TizenSansArabic" );
2682 // Set a known font description
2683 FontDescriptionRun fontDescriptionRun01;
2684 fontDescriptionRun01.characterRun.characterIndex = 0u;
2685 fontDescriptionRun01.characterRun.numberOfCharacters = 17u;
2686 fontDescriptionRun01.familyLength = fontLatin.size();
2687 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
2688 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
2689 fontDescriptionRun01.familyDefined = true;
2690 fontDescriptionRun01.weightDefined = false;
2691 fontDescriptionRun01.widthDefined = false;
2692 fontDescriptionRun01.slantDefined = false;
2693 fontDescriptionRun01.sizeDefined = false;
2695 // Set a known font description
2696 FontDescriptionRun fontDescriptionRun02;
2697 fontDescriptionRun02.characterRun.characterIndex = 17u;
2698 fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
2699 fontDescriptionRun02.familyLength = fontHebrew.size();
2700 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
2701 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
2702 fontDescriptionRun02.familyDefined = true;
2703 fontDescriptionRun02.weightDefined = false;
2704 fontDescriptionRun02.widthDefined = false;
2705 fontDescriptionRun02.slantDefined = false;
2706 fontDescriptionRun02.sizeDefined = false;
2708 // Set a known font description
2709 FontDescriptionRun fontDescriptionRun03;
2710 fontDescriptionRun03.characterRun.characterIndex = 26u;
2711 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
2712 fontDescriptionRun03.familyLength = fontLatin.size();
2713 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
2714 memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
2715 fontDescriptionRun03.familyDefined = true;
2716 fontDescriptionRun03.weightDefined = false;
2717 fontDescriptionRun03.widthDefined = false;
2718 fontDescriptionRun03.slantDefined = false;
2719 fontDescriptionRun03.sizeDefined = false;
2721 // Set a known font description
2722 FontDescriptionRun fontDescriptionRun04;
2723 fontDescriptionRun04.characterRun.characterIndex = 28u;
2724 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
2725 fontDescriptionRun04.familyLength = fontArabic.size();
2726 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
2727 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
2728 fontDescriptionRun04.familyDefined = true;
2729 fontDescriptionRun04.weightDefined = false;
2730 fontDescriptionRun04.widthDefined = false;
2731 fontDescriptionRun04.slantDefined = false;
2732 fontDescriptionRun04.sizeDefined = false;
2734 // Set a known font description
2735 FontDescriptionRun fontDescriptionRun05;
2736 fontDescriptionRun05.characterRun.characterIndex = 42u;
2737 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
2738 fontDescriptionRun05.familyLength = fontLatin.size();
2739 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
2740 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
2741 fontDescriptionRun05.familyDefined = true;
2742 fontDescriptionRun05.weightDefined = false;
2743 fontDescriptionRun05.widthDefined = false;
2744 fontDescriptionRun05.slantDefined = false;
2745 fontDescriptionRun05.sizeDefined = false;
2747 // Set a known font description
2748 FontDescriptionRun fontDescriptionRun06;
2749 fontDescriptionRun06.characterRun.characterIndex = 54u;
2750 fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
2751 fontDescriptionRun06.familyLength = fontHebrew.size();
2752 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
2753 memcpy( fontDescriptionRun06.familyName, fontHebrew.c_str(), fontDescriptionRun06.familyLength );
2754 fontDescriptionRun06.familyDefined = true;
2755 fontDescriptionRun06.weightDefined = false;
2756 fontDescriptionRun06.widthDefined = false;
2757 fontDescriptionRun06.slantDefined = false;
2758 fontDescriptionRun06.sizeDefined = false;
2760 // Set a known font description
2761 FontDescriptionRun fontDescriptionRun07;
2762 fontDescriptionRun07.characterRun.characterIndex = 64u;
2763 fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
2764 fontDescriptionRun07.familyLength = fontHebrew.size();
2765 fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
2766 memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
2767 fontDescriptionRun07.familyDefined = true;
2768 fontDescriptionRun07.weightDefined = false;
2769 fontDescriptionRun07.widthDefined = false;
2770 fontDescriptionRun07.slantDefined = false;
2771 fontDescriptionRun07.sizeDefined = false;
2773 // Set a known font description
2774 FontDescriptionRun fontDescriptionRun08;
2775 fontDescriptionRun08.characterRun.characterIndex = 74u;
2776 fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
2777 fontDescriptionRun08.familyLength = fontLatin.size();
2778 fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
2779 memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
2780 fontDescriptionRun08.familyDefined = true;
2781 fontDescriptionRun08.weightDefined = false;
2782 fontDescriptionRun08.widthDefined = false;
2783 fontDescriptionRun08.slantDefined = false;
2784 fontDescriptionRun08.sizeDefined = false;
2786 // Set a known font description
2787 FontDescriptionRun fontDescriptionRun09;
2788 fontDescriptionRun09.characterRun.characterIndex = 92u;
2789 fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
2790 fontDescriptionRun09.familyLength = fontLatin.size();
2791 fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
2792 memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
2793 fontDescriptionRun09.familyDefined = true;
2794 fontDescriptionRun09.weightDefined = false;
2795 fontDescriptionRun09.widthDefined = false;
2796 fontDescriptionRun09.slantDefined = false;
2797 fontDescriptionRun09.sizeDefined = false;
2799 // Set a known font description
2800 FontDescriptionRun fontDescriptionRun10;
2801 fontDescriptionRun10.characterRun.characterIndex = 104u;
2802 fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
2803 fontDescriptionRun10.familyLength = fontArabic.size();
2804 fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
2805 memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
2806 fontDescriptionRun10.familyDefined = true;
2807 fontDescriptionRun10.weightDefined = false;
2808 fontDescriptionRun10.widthDefined = false;
2809 fontDescriptionRun10.slantDefined = false;
2810 fontDescriptionRun10.sizeDefined = false;
2812 // Set a known font description
2813 FontDescriptionRun fontDescriptionRun11;
2814 fontDescriptionRun11.characterRun.characterIndex = 118u;
2815 fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
2816 fontDescriptionRun11.familyLength = fontHebrew.size();
2817 fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
2818 memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
2819 fontDescriptionRun11.familyDefined = true;
2820 fontDescriptionRun11.weightDefined = false;
2821 fontDescriptionRun11.widthDefined = false;
2822 fontDescriptionRun11.slantDefined = false;
2823 fontDescriptionRun11.sizeDefined = false;
2825 // Set a known font description
2826 FontDescriptionRun fontDescriptionRun12;
2827 fontDescriptionRun12.characterRun.characterIndex = 128u;
2828 fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
2829 fontDescriptionRun12.familyLength = fontLatin.size();
2830 fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
2831 memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
2832 fontDescriptionRun12.familyDefined = true;
2833 fontDescriptionRun12.weightDefined = false;
2834 fontDescriptionRun12.widthDefined = false;
2835 fontDescriptionRun12.slantDefined = false;
2836 fontDescriptionRun12.sizeDefined = false;
2838 // Set a known font description
2839 FontDescriptionRun fontDescriptionRun13;
2840 fontDescriptionRun13.characterRun.characterIndex = 145u;
2841 fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
2842 fontDescriptionRun13.familyLength = fontHebrew.size();
2843 fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
2844 memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
2845 fontDescriptionRun13.familyDefined = true;
2846 fontDescriptionRun13.weightDefined = false;
2847 fontDescriptionRun13.widthDefined = false;
2848 fontDescriptionRun13.slantDefined = false;
2849 fontDescriptionRun13.sizeDefined = false;
2851 // Set a known font description
2852 FontDescriptionRun fontDescriptionRun14;
2853 fontDescriptionRun14.characterRun.characterIndex = 154u;
2854 fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
2855 fontDescriptionRun14.familyLength = fontLatin.size();
2856 fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
2857 memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
2858 fontDescriptionRun14.familyDefined = true;
2859 fontDescriptionRun14.weightDefined = false;
2860 fontDescriptionRun14.widthDefined = false;
2861 fontDescriptionRun14.slantDefined = false;
2862 fontDescriptionRun14.sizeDefined = false;
2864 // Set a known font description
2865 FontDescriptionRun fontDescriptionRun15;
2866 fontDescriptionRun15.characterRun.characterIndex = 156u;
2867 fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
2868 fontDescriptionRun15.familyLength = fontHebrew.size();
2869 fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
2870 memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
2871 fontDescriptionRun15.familyDefined = true;
2872 fontDescriptionRun15.weightDefined = false;
2873 fontDescriptionRun15.widthDefined = false;
2874 fontDescriptionRun15.slantDefined = false;
2875 fontDescriptionRun15.sizeDefined = false;
2877 // Set a known font description
2878 FontDescriptionRun fontDescriptionRun16;
2879 fontDescriptionRun16.characterRun.characterIndex = 166u;
2880 fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
2881 fontDescriptionRun16.familyLength = fontLatin.size();
2882 fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
2883 memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
2884 fontDescriptionRun16.familyDefined = true;
2885 fontDescriptionRun16.weightDefined = false;
2886 fontDescriptionRun16.widthDefined = false;
2887 fontDescriptionRun16.slantDefined = false;
2888 fontDescriptionRun16.sizeDefined = false;
2890 // Set a known font description
2891 FontDescriptionRun fontDescriptionRun17;
2892 fontDescriptionRun17.characterRun.characterIndex = 178u;
2893 fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
2894 fontDescriptionRun17.familyLength = fontArabic.size();
2895 fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
2896 memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
2897 fontDescriptionRun17.familyDefined = true;
2898 fontDescriptionRun17.weightDefined = false;
2899 fontDescriptionRun17.widthDefined = false;
2900 fontDescriptionRun17.slantDefined = false;
2901 fontDescriptionRun17.sizeDefined = false;
2903 Vector<FontDescriptionRun> fontDescriptionRuns;
2904 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
2905 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
2906 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
2907 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
2908 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
2909 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
2910 fontDescriptionRuns.PushBack( fontDescriptionRun07 );
2911 fontDescriptionRuns.PushBack( fontDescriptionRun08 );
2912 fontDescriptionRuns.PushBack( fontDescriptionRun09 );
2913 fontDescriptionRuns.PushBack( fontDescriptionRun10 );
2914 fontDescriptionRuns.PushBack( fontDescriptionRun11 );
2915 fontDescriptionRuns.PushBack( fontDescriptionRun12 );
2916 fontDescriptionRuns.PushBack( fontDescriptionRun13 );
2917 fontDescriptionRuns.PushBack( fontDescriptionRun14 );
2918 fontDescriptionRuns.PushBack( fontDescriptionRun15 );
2919 fontDescriptionRuns.PushBack( fontDescriptionRun16 );
2920 fontDescriptionRuns.PushBack( fontDescriptionRun17 );
2921 Size textArea(100.f, 300.f);
2922 Size layoutSize(100.f, 380.f);
2925 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
2926 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 12 .. 21
2927 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 22 .. 27
2928 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
2929 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, 46.f, -10.f, 36.f, -10.f, 32.f, -0.f, // 48 .. 58
2930 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f, // 59 .. 63
2931 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 64 .. 73
2932 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
2933 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
2934 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
2935 92.f, -8.f, 86.f, -6.f, 79.f, -8.f, 75.f, -7.f, 73.f, -11.f, 68.f, -0.f, 64.f, -7.f, 62.f, -11.f, 57.f, -11.f, 50.f, -8.f, 49.f, -11.f, 43.f, -11.f, 38.f, -8.f, 34.f, -0.f, 23.f, -10.f, 14.f, -13.f, 10.f, -10.f, 0.f, -10.f, 99.f, -0.f, // 104 .. 122
2936 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -0.f, // 123 .. 127
2937 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
2938 0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 68.f, -10.f, 59.f, -13.f, 54.f, -10.f, 45.f, -10.f, 79.f, -0.f, // 140 .. 149
2939 23.f, -10.f, 19.f, -10.f, 10.f, -13.f, 0.f, -10.f, 32.f, -2.f, 36.f, -12.f, // 150 .. 155
2940 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, // 156 .. 165
2941 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
2942 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
2945 struct LineRun line01 =
2958 struct LineRun line02 =
2971 struct LineRun line03 =
2984 struct LineRun line04 =
2997 struct LineRun line05 =
3010 struct LineRun line06 =
3023 struct LineRun line07 =
3036 struct LineRun line08 =
3049 struct LineRun line09 =
3062 struct LineRun line10 =
3075 struct LineRun line11 =
3088 struct LineRun line12 =
3101 struct LineRun line13 =
3114 struct LineRun line14 =
3127 struct LineRun line15 =
3140 struct LineRun line16 =
3153 struct LineRun line17 =
3166 struct LineRun line18 =
3179 struct LineRun line19 =
3192 Vector<LineRun> lines;
3193 lines.PushBack( line01 );
3194 lines.PushBack( line02 );
3195 lines.PushBack( line03 );
3196 lines.PushBack( line04 );
3197 lines.PushBack( line05 );
3198 lines.PushBack( line06 );
3199 lines.PushBack( line07 );
3200 lines.PushBack( line08 );
3201 lines.PushBack( line09 );
3202 lines.PushBack( line10 );
3203 lines.PushBack( line11 );
3204 lines.PushBack( line12 );
3205 lines.PushBack( line13 );
3206 lines.PushBack( line14 );
3207 lines.PushBack( line15 );
3208 lines.PushBack( line16 );
3209 lines.PushBack( line17 );
3210 lines.PushBack( line18 );
3211 lines.PushBack( line19 );
3213 LayoutTextData data =
3215 "Layout bidirectional text.",
3216 "Hello world demo שלום עולם.\n"
3217 "مرحبا بالعالم hello world שלום עולם\n"
3218 "שלום עולם hello world demo.\n"
3219 "hello world مرحبا بالعالم שלום עולם\n"
3220 "Hello world demo שלום עולם.\n"
3221 "שלום עולם hello world مرحبا بالعالم\n",
3224 fontDescriptionRuns.Begin(),
3230 Layout::Engine::MULTI_LINE_BOX,
3234 DevelText::EllipsisPosition::END,
3238 if( !LayoutTextTest( data ) )
3240 tet_result(TET_FAIL);
3243 tet_result(TET_PASS);
3247 int UtcDaliTextLayoutEllipsis01(void)
3249 ToolkitTestApplication application;
3250 tet_infoline(" UtcDaliTextLayoutEllipsis01");
3252 // Layout single-line LTR text with ellipsis.
3254 const std::string fontLatin( "TizenSans" );
3256 // Set a known font description
3257 FontDescriptionRun fontDescriptionRun01;
3258 fontDescriptionRun01.characterRun.characterIndex = 0u;
3259 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3260 fontDescriptionRun01.familyLength = fontLatin.size();
3261 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3262 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3263 fontDescriptionRun01.familyDefined = true;
3264 fontDescriptionRun01.weightDefined = false;
3265 fontDescriptionRun01.widthDefined = false;
3266 fontDescriptionRun01.slantDefined = false;
3267 fontDescriptionRun01.sizeDefined = false;
3269 Vector<FontDescriptionRun> fontDescriptionRuns;
3270 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3272 struct LineRun line01 =
3285 Vector<LineRun> lines;
3286 lines.PushBack( line01 );
3290 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,
3293 Size textArea( 100.f, 50.f );
3294 Size layoutSize( 100.f, 20.f );
3296 LayoutTextData data =
3298 "Layout single-line LTR text with ellipsis.",
3299 "Hello world demo hello world demo hello world demo.",
3302 fontDescriptionRuns.Begin(),
3308 Layout::Engine::SINGLE_LINE_BOX,
3312 DevelText::EllipsisPosition::END,
3316 if( !LayoutTextTest( data ) )
3318 tet_result(TET_FAIL);
3321 tet_result(TET_PASS);
3325 int UtcDaliTextLayoutEllipsis02(void)
3327 ToolkitTestApplication application;
3328 tet_infoline(" UtcDaliTextLayoutEllipsis02");
3330 // Layout multi-line LTR text with ellipsis.
3332 const std::string fontLatin( "TizenSans" );
3334 // Set a known font description
3335 FontDescriptionRun fontDescriptionRun01;
3336 fontDescriptionRun01.characterRun.characterIndex = 0u;
3337 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3338 fontDescriptionRun01.familyLength = fontLatin.size();
3339 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3340 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3341 fontDescriptionRun01.familyDefined = true;
3342 fontDescriptionRun01.weightDefined = false;
3343 fontDescriptionRun01.widthDefined = false;
3344 fontDescriptionRun01.slantDefined = false;
3345 fontDescriptionRun01.sizeDefined = false;
3347 Vector<FontDescriptionRun> fontDescriptionRuns;
3348 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3350 struct LineRun line01 =
3363 struct LineRun line02 =
3376 Vector<LineRun> lines;
3377 lines.PushBack( line01 );
3378 lines.PushBack( line02 );
3382 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,
3383 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,
3386 Size textArea( 100.f, 50.f );
3387 Size layoutSize( 100.f, 40.f );
3389 LayoutTextData data =
3391 "Layout multi-line LTR text with ellipsis.",
3392 "Hello world demo hello world demo hello world demo.",
3395 fontDescriptionRuns.Begin(),
3401 Layout::Engine::MULTI_LINE_BOX,
3405 DevelText::EllipsisPosition::END,
3409 if( !LayoutTextTest( data ) )
3411 tet_result(TET_FAIL);
3414 tet_result(TET_PASS);
3418 int UtcDaliTextLayoutEllipsis03(void)
3420 ToolkitTestApplication application;
3421 tet_infoline(" UtcDaliTextLayoutEllipsis03");
3423 // Layout single-line RTL text with ellipsis.
3425 const std::string fontHebrew( "TizenSansHebrew" );
3426 const std::string fontArabic( "TizenSansArabic" );
3428 // Set a known font description
3429 FontDescriptionRun fontDescriptionRun01;
3430 fontDescriptionRun01.characterRun.characterIndex = 0u;
3431 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3432 fontDescriptionRun01.familyLength = fontHebrew.size();
3433 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3434 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3435 fontDescriptionRun01.familyDefined = true;
3436 fontDescriptionRun01.weightDefined = false;
3437 fontDescriptionRun01.widthDefined = false;
3438 fontDescriptionRun01.slantDefined = false;
3439 fontDescriptionRun01.sizeDefined = false;
3441 FontDescriptionRun fontDescriptionRun02;
3442 fontDescriptionRun02.characterRun.characterIndex = 10u;
3443 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3444 fontDescriptionRun02.familyLength = fontArabic.size();
3445 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3446 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3447 fontDescriptionRun02.familyDefined = true;
3448 fontDescriptionRun02.weightDefined = false;
3449 fontDescriptionRun02.widthDefined = false;
3450 fontDescriptionRun02.slantDefined = false;
3451 fontDescriptionRun02.sizeDefined = false;
3453 FontDescriptionRun fontDescriptionRun03;
3454 fontDescriptionRun03.characterRun.characterIndex = 24u;
3455 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3456 fontDescriptionRun03.familyLength = fontHebrew.size();
3457 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3458 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3459 fontDescriptionRun03.familyDefined = true;
3460 fontDescriptionRun03.weightDefined = false;
3461 fontDescriptionRun03.widthDefined = false;
3462 fontDescriptionRun03.slantDefined = false;
3463 fontDescriptionRun03.sizeDefined = false;
3465 FontDescriptionRun fontDescriptionRun04;
3466 fontDescriptionRun04.characterRun.characterIndex = 34u;
3467 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3468 fontDescriptionRun04.familyLength = fontArabic.size();
3469 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3470 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3471 fontDescriptionRun04.familyDefined = true;
3472 fontDescriptionRun04.weightDefined = false;
3473 fontDescriptionRun04.widthDefined = false;
3474 fontDescriptionRun04.slantDefined = false;
3475 fontDescriptionRun04.sizeDefined = false;
3477 FontDescriptionRun fontDescriptionRun05;
3478 fontDescriptionRun05.characterRun.characterIndex = 48u;
3479 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3480 fontDescriptionRun05.familyLength = fontHebrew.size();
3481 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3482 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3483 fontDescriptionRun05.familyDefined = true;
3484 fontDescriptionRun05.weightDefined = false;
3485 fontDescriptionRun05.widthDefined = false;
3486 fontDescriptionRun05.slantDefined = false;
3487 fontDescriptionRun05.sizeDefined = false;
3489 FontDescriptionRun fontDescriptionRun06;
3490 fontDescriptionRun06.characterRun.characterIndex = 58u;
3491 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3492 fontDescriptionRun06.familyLength = fontArabic.size();
3493 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3494 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3495 fontDescriptionRun06.familyDefined = true;
3496 fontDescriptionRun06.weightDefined = false;
3497 fontDescriptionRun06.widthDefined = false;
3498 fontDescriptionRun06.slantDefined = false;
3499 fontDescriptionRun06.sizeDefined = false;
3501 Vector<FontDescriptionRun> fontDescriptionRuns;
3502 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3503 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3504 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3505 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3506 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3507 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3509 struct LineRun line01 =
3522 Vector<LineRun> lines;
3523 lines.PushBack( line01 );
3527 87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 65.f, -10.f, 60.f, -0.f, 51.f, -10.f, 47.f, -10.f, 38.f, -13.f, 29.f, -10.f, 24.f, -0.f, 17.f, -8.f, 12.f, -6.f, 4.f, -8.f, 0.f, -7.f, 78.f, -11.f, 73.f, -0.f,
3530 Size textArea( 100.f, 50.f );
3531 Size layoutSize( 100.f, 20.f );
3533 LayoutTextData data =
3535 "Layout single-line RTL text with ellipsis.",
3536 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3539 fontDescriptionRuns.Begin(),
3545 Layout::Engine::SINGLE_LINE_BOX,
3549 DevelText::EllipsisPosition::END,
3553 if( !LayoutTextTest( data ) )
3555 tet_result(TET_FAIL);
3558 tet_result(TET_PASS);
3562 int UtcDaliTextLayoutEllipsis04(void)
3564 ToolkitTestApplication application;
3565 tet_infoline(" UtcDaliTextLayoutEllipsis04");
3567 // Layout multi-line RTL text with ellipsis.
3569 const std::string fontHebrew( "TizenSansHebrew" );
3570 const std::string fontArabic( "TizenSansArabic" );
3572 // Set a known font description
3573 FontDescriptionRun fontDescriptionRun01;
3574 fontDescriptionRun01.characterRun.characterIndex = 0u;
3575 fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
3576 fontDescriptionRun01.familyLength = fontHebrew.size();
3577 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3578 memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
3579 fontDescriptionRun01.familyDefined = true;
3580 fontDescriptionRun01.weightDefined = false;
3581 fontDescriptionRun01.widthDefined = false;
3582 fontDescriptionRun01.slantDefined = false;
3583 fontDescriptionRun01.sizeDefined = false;
3585 FontDescriptionRun fontDescriptionRun02;
3586 fontDescriptionRun02.characterRun.characterIndex = 10u;
3587 fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
3588 fontDescriptionRun02.familyLength = fontArabic.size();
3589 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3590 memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
3591 fontDescriptionRun02.familyDefined = true;
3592 fontDescriptionRun02.weightDefined = false;
3593 fontDescriptionRun02.widthDefined = false;
3594 fontDescriptionRun02.slantDefined = false;
3595 fontDescriptionRun02.sizeDefined = false;
3597 FontDescriptionRun fontDescriptionRun03;
3598 fontDescriptionRun03.characterRun.characterIndex = 24u;
3599 fontDescriptionRun03.characterRun.numberOfCharacters = 10u;
3600 fontDescriptionRun03.familyLength = fontHebrew.size();
3601 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3602 memcpy( fontDescriptionRun03.familyName, fontHebrew.c_str(), fontDescriptionRun03.familyLength );
3603 fontDescriptionRun03.familyDefined = true;
3604 fontDescriptionRun03.weightDefined = false;
3605 fontDescriptionRun03.widthDefined = false;
3606 fontDescriptionRun03.slantDefined = false;
3607 fontDescriptionRun03.sizeDefined = false;
3609 FontDescriptionRun fontDescriptionRun04;
3610 fontDescriptionRun04.characterRun.characterIndex = 34u;
3611 fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
3612 fontDescriptionRun04.familyLength = fontArabic.size();
3613 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3614 memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
3615 fontDescriptionRun04.familyDefined = true;
3616 fontDescriptionRun04.weightDefined = false;
3617 fontDescriptionRun04.widthDefined = false;
3618 fontDescriptionRun04.slantDefined = false;
3619 fontDescriptionRun04.sizeDefined = false;
3621 FontDescriptionRun fontDescriptionRun05;
3622 fontDescriptionRun05.characterRun.characterIndex = 48u;
3623 fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
3624 fontDescriptionRun05.familyLength = fontHebrew.size();
3625 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3626 memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
3627 fontDescriptionRun05.familyDefined = true;
3628 fontDescriptionRun05.weightDefined = false;
3629 fontDescriptionRun05.widthDefined = false;
3630 fontDescriptionRun05.slantDefined = false;
3631 fontDescriptionRun05.sizeDefined = false;
3633 FontDescriptionRun fontDescriptionRun06;
3634 fontDescriptionRun06.characterRun.characterIndex = 58u;
3635 fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
3636 fontDescriptionRun06.familyLength = fontArabic.size();
3637 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3638 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3639 fontDescriptionRun06.familyDefined = true;
3640 fontDescriptionRun06.weightDefined = false;
3641 fontDescriptionRun06.widthDefined = false;
3642 fontDescriptionRun06.slantDefined = false;
3643 fontDescriptionRun06.sizeDefined = false;
3645 Vector<FontDescriptionRun> fontDescriptionRuns;
3646 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3647 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3648 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3649 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3650 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3651 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3653 struct LineRun line01 =
3666 struct LineRun line02 =
3679 Vector<LineRun> lines;
3680 lines.PushBack( line01 );
3681 lines.PushBack( line02 );
3685 63.f, -10.f, 54.f, -13.f, 50.f, -10.f, 41.f, -10.f, 36.f, -0.f, 27.f, -10.f, 23.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, 96.f, -8.f, 91.f, -6.f, 83.f, -8.f, 79.f, -7.f, 78.f, -11.f, 73.f, -0.f,
3686 68.f, -7.f, 67.f, -11.f, 61.f, -11.f, 55.f, -8.f, 53.f, -11.f, 47.f, -11.f, 42.f, -8.f, 38.f, -0.f, 27.f, -10.f, 18.f, -13.f, 14.f, -10.f, 4.f, -10.f, 0.f, -0.f, 92.f, -10.f, 88.f, -10.f, 79.f, -13.f, 70.f, -10.f, 65.f, -0.f,
3689 Size textArea( 100.f, 50.f );
3690 Size layoutSize( 100.f, 40.f );
3692 LayoutTextData data =
3694 "Layout multi-line RTL text with ellipsis.",
3695 "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
3698 fontDescriptionRuns.Begin(),
3704 Layout::Engine::MULTI_LINE_BOX,
3708 DevelText::EllipsisPosition::END,
3712 if( !LayoutTextTest( data ) )
3714 tet_result(TET_FAIL);
3717 tet_result(TET_PASS);
3721 int UtcDaliTextLayoutEllipsis05(void)
3723 ToolkitTestApplication application;
3724 tet_infoline(" UtcDaliTextLayoutEllipsis05");
3726 const std::string fontLatin( "TizenSans" );
3728 // Set a known font description
3729 FontDescriptionRun fontDescriptionRun01;
3730 fontDescriptionRun01.characterRun.characterIndex = 0u;
3731 fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
3732 fontDescriptionRun01.familyLength = fontLatin.size();
3733 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3734 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3735 fontDescriptionRun01.familyDefined = true;
3736 fontDescriptionRun01.weightDefined = false;
3737 fontDescriptionRun01.widthDefined = false;
3738 fontDescriptionRun01.slantDefined = false;
3739 fontDescriptionRun01.sizeDefined = false;
3741 Vector<FontDescriptionRun> fontDescriptionRuns;
3742 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3744 struct LineRun line01 =
3757 Vector<LineRun> lines;
3758 lines.PushBack( line01 );
3765 Size textArea( 100.f, 19.f );
3766 Size layoutSize( 100.f, 20.f );
3768 LayoutTextData data =
3770 "Not enough height.",
3774 fontDescriptionRuns.Begin(),
3780 Layout::Engine::MULTI_LINE_BOX,
3784 DevelText::EllipsisPosition::END,
3788 if( !LayoutTextTest( data ) )
3790 tet_result(TET_FAIL);
3793 tet_result(TET_PASS);
3797 int UtcDaliTextAlign01(void)
3799 ToolkitTestApplication application;
3800 tet_infoline(" UtcDaliTextAlign01");
3802 // Calculate text alignment.
3804 const std::string fontLatin( "TizenSans" );
3805 const std::string fontHebrew( "TizenSansHebrew" );
3806 const std::string fontArabic( "TizenSansArabic" );
3808 // Set a known font description
3809 FontDescriptionRun fontDescriptionRun01;
3810 fontDescriptionRun01.characterRun.characterIndex = 0u;
3811 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3812 fontDescriptionRun01.familyLength = fontLatin.size();
3813 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3814 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3815 fontDescriptionRun01.familyDefined = true;
3816 fontDescriptionRun01.weightDefined = false;
3817 fontDescriptionRun01.widthDefined = false;
3818 fontDescriptionRun01.slantDefined = false;
3819 fontDescriptionRun01.sizeDefined = false;
3821 FontDescriptionRun fontDescriptionRun02;
3822 fontDescriptionRun02.characterRun.characterIndex = 12u;
3823 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3824 fontDescriptionRun02.familyLength = fontHebrew.size();
3825 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3826 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3827 fontDescriptionRun02.familyDefined = true;
3828 fontDescriptionRun02.weightDefined = false;
3829 fontDescriptionRun02.widthDefined = false;
3830 fontDescriptionRun02.slantDefined = false;
3831 fontDescriptionRun02.sizeDefined = false;
3833 FontDescriptionRun fontDescriptionRun03;
3834 fontDescriptionRun03.characterRun.characterIndex = 22u;
3835 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3836 fontDescriptionRun03.familyLength = fontArabic.size();
3837 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3838 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3839 fontDescriptionRun03.familyDefined = true;
3840 fontDescriptionRun03.weightDefined = false;
3841 fontDescriptionRun03.widthDefined = false;
3842 fontDescriptionRun03.slantDefined = false;
3843 fontDescriptionRun03.sizeDefined = false;
3845 FontDescriptionRun fontDescriptionRun04;
3846 fontDescriptionRun04.characterRun.characterIndex = 36u;
3847 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3848 fontDescriptionRun04.familyLength = fontLatin.size();
3849 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3850 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3851 fontDescriptionRun04.familyDefined = true;
3852 fontDescriptionRun04.weightDefined = false;
3853 fontDescriptionRun04.widthDefined = false;
3854 fontDescriptionRun04.slantDefined = false;
3855 fontDescriptionRun04.sizeDefined = false;
3857 FontDescriptionRun fontDescriptionRun05;
3858 fontDescriptionRun05.characterRun.characterIndex = 48u;
3859 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3860 fontDescriptionRun05.familyLength = fontLatin.size();
3861 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3862 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3863 fontDescriptionRun05.familyDefined = true;
3864 fontDescriptionRun05.weightDefined = false;
3865 fontDescriptionRun05.widthDefined = false;
3866 fontDescriptionRun05.slantDefined = false;
3867 fontDescriptionRun05.sizeDefined = false;
3869 FontDescriptionRun fontDescriptionRun06;
3870 fontDescriptionRun06.characterRun.characterIndex = 60u;
3871 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3872 fontDescriptionRun06.familyLength = fontArabic.size();
3873 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3874 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3875 fontDescriptionRun06.familyDefined = true;
3876 fontDescriptionRun06.weightDefined = false;
3877 fontDescriptionRun06.widthDefined = false;
3878 fontDescriptionRun06.slantDefined = false;
3879 fontDescriptionRun06.sizeDefined = false;
3881 Vector<FontDescriptionRun> fontDescriptionRuns;
3882 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
3883 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
3884 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
3885 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
3886 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
3887 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
3889 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
3891 Size textArea( 100.f, 300.f );
3894 "Begin alignment for the first paragraph.",
3895 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
3898 fontDescriptionRuns.Begin(),
3899 Text::HorizontalAlignment::BEGIN,
3900 Text::VerticalAlignment::TOP,
3905 Dali::LayoutDirection::LEFT_TO_RIGHT,
3909 if( !AlignTest( data ) )
3911 tet_result(TET_FAIL);
3914 tet_result(TET_PASS);
3918 int UtcDaliTextAlign02(void)
3920 ToolkitTestApplication application;
3921 tet_infoline(" UtcDaliTextAlign02");
3923 // Calculate text alignment.
3925 const std::string fontLatin( "TizenSans" );
3926 const std::string fontHebrew( "TizenSansHebrew" );
3927 const std::string fontArabic( "TizenSansArabic" );
3929 // Set a known font description
3930 FontDescriptionRun fontDescriptionRun01;
3931 fontDescriptionRun01.characterRun.characterIndex = 0u;
3932 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
3933 fontDescriptionRun01.familyLength = fontLatin.size();
3934 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
3935 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
3936 fontDescriptionRun01.familyDefined = true;
3937 fontDescriptionRun01.weightDefined = false;
3938 fontDescriptionRun01.widthDefined = false;
3939 fontDescriptionRun01.slantDefined = false;
3940 fontDescriptionRun01.sizeDefined = false;
3942 FontDescriptionRun fontDescriptionRun02;
3943 fontDescriptionRun02.characterRun.characterIndex = 12u;
3944 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
3945 fontDescriptionRun02.familyLength = fontHebrew.size();
3946 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
3947 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
3948 fontDescriptionRun02.familyDefined = true;
3949 fontDescriptionRun02.weightDefined = false;
3950 fontDescriptionRun02.widthDefined = false;
3951 fontDescriptionRun02.slantDefined = false;
3952 fontDescriptionRun02.sizeDefined = false;
3954 FontDescriptionRun fontDescriptionRun03;
3955 fontDescriptionRun03.characterRun.characterIndex = 22u;
3956 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
3957 fontDescriptionRun03.familyLength = fontArabic.size();
3958 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
3959 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
3960 fontDescriptionRun03.familyDefined = true;
3961 fontDescriptionRun03.weightDefined = false;
3962 fontDescriptionRun03.widthDefined = false;
3963 fontDescriptionRun03.slantDefined = false;
3964 fontDescriptionRun03.sizeDefined = false;
3966 FontDescriptionRun fontDescriptionRun04;
3967 fontDescriptionRun04.characterRun.characterIndex = 36u;
3968 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
3969 fontDescriptionRun04.familyLength = fontLatin.size();
3970 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
3971 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
3972 fontDescriptionRun04.familyDefined = true;
3973 fontDescriptionRun04.weightDefined = false;
3974 fontDescriptionRun04.widthDefined = false;
3975 fontDescriptionRun04.slantDefined = false;
3976 fontDescriptionRun04.sizeDefined = false;
3978 FontDescriptionRun fontDescriptionRun05;
3979 fontDescriptionRun05.characterRun.characterIndex = 48u;
3980 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
3981 fontDescriptionRun05.familyLength = fontLatin.size();
3982 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
3983 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
3984 fontDescriptionRun05.familyDefined = true;
3985 fontDescriptionRun05.weightDefined = false;
3986 fontDescriptionRun05.widthDefined = false;
3987 fontDescriptionRun05.slantDefined = false;
3988 fontDescriptionRun05.sizeDefined = false;
3990 FontDescriptionRun fontDescriptionRun06;
3991 fontDescriptionRun06.characterRun.characterIndex = 60u;
3992 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
3993 fontDescriptionRun06.familyLength = fontArabic.size();
3994 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
3995 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
3996 fontDescriptionRun06.familyDefined = true;
3997 fontDescriptionRun06.weightDefined = false;
3998 fontDescriptionRun06.widthDefined = false;
3999 fontDescriptionRun06.slantDefined = false;
4000 fontDescriptionRun06.sizeDefined = false;
4002 Vector<FontDescriptionRun> fontDescriptionRuns;
4003 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4004 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4005 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4006 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4007 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4008 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4010 float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
4012 Size textArea( 100.f, 300.f );
4015 "Begin alignment for the mid paragraph.",
4016 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4019 fontDescriptionRuns.Begin(),
4020 Text::HorizontalAlignment::BEGIN,
4021 Text::VerticalAlignment::TOP,
4026 Dali::LayoutDirection::LEFT_TO_RIGHT,
4030 if( !AlignTest( data ) )
4032 tet_result(TET_FAIL);
4035 tet_result(TET_PASS);
4039 int UtcDaliTextAlign03(void)
4041 ToolkitTestApplication application;
4042 tet_infoline(" UtcDaliTextAlign03");
4044 // Calculate text alignment.
4046 const std::string fontLatin( "TizenSans" );
4047 const std::string fontHebrew( "TizenSansHebrew" );
4048 const std::string fontArabic( "TizenSansArabic" );
4050 // Set a known font description
4051 FontDescriptionRun fontDescriptionRun01;
4052 fontDescriptionRun01.characterRun.characterIndex = 0u;
4053 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4054 fontDescriptionRun01.familyLength = fontLatin.size();
4055 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4056 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4057 fontDescriptionRun01.familyDefined = true;
4058 fontDescriptionRun01.weightDefined = false;
4059 fontDescriptionRun01.widthDefined = false;
4060 fontDescriptionRun01.slantDefined = false;
4061 fontDescriptionRun01.sizeDefined = false;
4063 FontDescriptionRun fontDescriptionRun02;
4064 fontDescriptionRun02.characterRun.characterIndex = 12u;
4065 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4066 fontDescriptionRun02.familyLength = fontHebrew.size();
4067 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4068 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4069 fontDescriptionRun02.familyDefined = true;
4070 fontDescriptionRun02.weightDefined = false;
4071 fontDescriptionRun02.widthDefined = false;
4072 fontDescriptionRun02.slantDefined = false;
4073 fontDescriptionRun02.sizeDefined = false;
4075 FontDescriptionRun fontDescriptionRun03;
4076 fontDescriptionRun03.characterRun.characterIndex = 22u;
4077 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4078 fontDescriptionRun03.familyLength = fontArabic.size();
4079 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4080 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4081 fontDescriptionRun03.familyDefined = true;
4082 fontDescriptionRun03.weightDefined = false;
4083 fontDescriptionRun03.widthDefined = false;
4084 fontDescriptionRun03.slantDefined = false;
4085 fontDescriptionRun03.sizeDefined = false;
4087 FontDescriptionRun fontDescriptionRun04;
4088 fontDescriptionRun04.characterRun.characterIndex = 36u;
4089 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4090 fontDescriptionRun04.familyLength = fontLatin.size();
4091 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4092 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4093 fontDescriptionRun04.familyDefined = true;
4094 fontDescriptionRun04.weightDefined = false;
4095 fontDescriptionRun04.widthDefined = false;
4096 fontDescriptionRun04.slantDefined = false;
4097 fontDescriptionRun04.sizeDefined = false;
4099 FontDescriptionRun fontDescriptionRun05;
4100 fontDescriptionRun05.characterRun.characterIndex = 48u;
4101 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4102 fontDescriptionRun05.familyLength = fontLatin.size();
4103 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4104 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4105 fontDescriptionRun05.familyDefined = true;
4106 fontDescriptionRun05.weightDefined = false;
4107 fontDescriptionRun05.widthDefined = false;
4108 fontDescriptionRun05.slantDefined = false;
4109 fontDescriptionRun05.sizeDefined = false;
4111 FontDescriptionRun fontDescriptionRun06;
4112 fontDescriptionRun06.characterRun.characterIndex = 60u;
4113 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4114 fontDescriptionRun06.familyLength = fontArabic.size();
4115 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4116 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4117 fontDescriptionRun06.familyDefined = true;
4118 fontDescriptionRun06.weightDefined = false;
4119 fontDescriptionRun06.widthDefined = false;
4120 fontDescriptionRun06.slantDefined = false;
4121 fontDescriptionRun06.sizeDefined = false;
4123 Vector<FontDescriptionRun> fontDescriptionRuns;
4124 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4125 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4126 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4127 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4128 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4129 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4131 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4133 Size textArea( 100.f, 300.f );
4136 "Begin alignment for the last paragraph.",
4137 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4140 fontDescriptionRuns.Begin(),
4141 Text::HorizontalAlignment::BEGIN,
4142 Text::VerticalAlignment::TOP,
4147 Dali::LayoutDirection::LEFT_TO_RIGHT,
4151 if( !AlignTest( data ) )
4153 tet_result(TET_FAIL);
4156 tet_result(TET_PASS);
4160 int UtcDaliTextAlign04(void)
4162 ToolkitTestApplication application;
4163 tet_infoline(" UtcDaliTextAlign04");
4165 // Calculate text alignment.
4167 const std::string fontLatin( "TizenSans" );
4168 const std::string fontHebrew( "TizenSansHebrew" );
4169 const std::string fontArabic( "TizenSansArabic" );
4171 // Set a known font description
4172 FontDescriptionRun fontDescriptionRun01;
4173 fontDescriptionRun01.characterRun.characterIndex = 0u;
4174 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4175 fontDescriptionRun01.familyLength = fontLatin.size();
4176 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4177 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4178 fontDescriptionRun01.familyDefined = true;
4179 fontDescriptionRun01.weightDefined = false;
4180 fontDescriptionRun01.widthDefined = false;
4181 fontDescriptionRun01.slantDefined = false;
4182 fontDescriptionRun01.sizeDefined = false;
4184 FontDescriptionRun fontDescriptionRun02;
4185 fontDescriptionRun02.characterRun.characterIndex = 12u;
4186 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4187 fontDescriptionRun02.familyLength = fontHebrew.size();
4188 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4189 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4190 fontDescriptionRun02.familyDefined = true;
4191 fontDescriptionRun02.weightDefined = false;
4192 fontDescriptionRun02.widthDefined = false;
4193 fontDescriptionRun02.slantDefined = false;
4194 fontDescriptionRun02.sizeDefined = false;
4196 FontDescriptionRun fontDescriptionRun03;
4197 fontDescriptionRun03.characterRun.characterIndex = 22u;
4198 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4199 fontDescriptionRun03.familyLength = fontArabic.size();
4200 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4201 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4202 fontDescriptionRun03.familyDefined = true;
4203 fontDescriptionRun03.weightDefined = false;
4204 fontDescriptionRun03.widthDefined = false;
4205 fontDescriptionRun03.slantDefined = false;
4206 fontDescriptionRun03.sizeDefined = false;
4208 FontDescriptionRun fontDescriptionRun04;
4209 fontDescriptionRun04.characterRun.characterIndex = 36u;
4210 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4211 fontDescriptionRun04.familyLength = fontLatin.size();
4212 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4213 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4214 fontDescriptionRun04.familyDefined = true;
4215 fontDescriptionRun04.weightDefined = false;
4216 fontDescriptionRun04.widthDefined = false;
4217 fontDescriptionRun04.slantDefined = false;
4218 fontDescriptionRun04.sizeDefined = false;
4220 FontDescriptionRun fontDescriptionRun05;
4221 fontDescriptionRun05.characterRun.characterIndex = 48u;
4222 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4223 fontDescriptionRun05.familyLength = fontLatin.size();
4224 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4225 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4226 fontDescriptionRun05.familyDefined = true;
4227 fontDescriptionRun05.weightDefined = false;
4228 fontDescriptionRun05.widthDefined = false;
4229 fontDescriptionRun05.slantDefined = false;
4230 fontDescriptionRun05.sizeDefined = false;
4232 FontDescriptionRun fontDescriptionRun06;
4233 fontDescriptionRun06.characterRun.characterIndex = 60u;
4234 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4235 fontDescriptionRun06.familyLength = fontArabic.size();
4236 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4237 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4238 fontDescriptionRun06.familyDefined = true;
4239 fontDescriptionRun06.weightDefined = false;
4240 fontDescriptionRun06.widthDefined = false;
4241 fontDescriptionRun06.slantDefined = false;
4242 fontDescriptionRun06.sizeDefined = false;
4244 Vector<FontDescriptionRun> fontDescriptionRuns;
4245 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4246 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4247 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4248 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4249 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4250 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4252 float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
4254 Size textArea( 100.f, 300.f );
4257 "Center alignment for the first paragraph.",
4258 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4261 fontDescriptionRuns.Begin(),
4262 Text::HorizontalAlignment::CENTER,
4263 Text::VerticalAlignment::TOP,
4268 Dali::LayoutDirection::LEFT_TO_RIGHT,
4272 if( !AlignTest( data ) )
4274 tet_result(TET_FAIL);
4277 tet_result(TET_PASS);
4281 int UtcDaliTextAlign05(void)
4283 ToolkitTestApplication application;
4284 tet_infoline(" UtcDaliTextAlign05");
4286 // Calculate text alignment.
4288 const std::string fontLatin( "TizenSans" );
4289 const std::string fontHebrew( "TizenSansHebrew" );
4290 const std::string fontArabic( "TizenSansArabic" );
4292 // Set a known font description
4293 FontDescriptionRun fontDescriptionRun01;
4294 fontDescriptionRun01.characterRun.characterIndex = 0u;
4295 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4296 fontDescriptionRun01.familyLength = fontLatin.size();
4297 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4298 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4299 fontDescriptionRun01.familyDefined = true;
4300 fontDescriptionRun01.weightDefined = false;
4301 fontDescriptionRun01.widthDefined = false;
4302 fontDescriptionRun01.slantDefined = false;
4303 fontDescriptionRun01.sizeDefined = false;
4305 FontDescriptionRun fontDescriptionRun02;
4306 fontDescriptionRun02.characterRun.characterIndex = 12u;
4307 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4308 fontDescriptionRun02.familyLength = fontHebrew.size();
4309 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4310 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4311 fontDescriptionRun02.familyDefined = true;
4312 fontDescriptionRun02.weightDefined = false;
4313 fontDescriptionRun02.widthDefined = false;
4314 fontDescriptionRun02.slantDefined = false;
4315 fontDescriptionRun02.sizeDefined = false;
4317 FontDescriptionRun fontDescriptionRun03;
4318 fontDescriptionRun03.characterRun.characterIndex = 22u;
4319 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4320 fontDescriptionRun03.familyLength = fontArabic.size();
4321 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4322 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4323 fontDescriptionRun03.familyDefined = true;
4324 fontDescriptionRun03.weightDefined = false;
4325 fontDescriptionRun03.widthDefined = false;
4326 fontDescriptionRun03.slantDefined = false;
4327 fontDescriptionRun03.sizeDefined = false;
4329 FontDescriptionRun fontDescriptionRun04;
4330 fontDescriptionRun04.characterRun.characterIndex = 36u;
4331 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4332 fontDescriptionRun04.familyLength = fontLatin.size();
4333 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4334 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4335 fontDescriptionRun04.familyDefined = true;
4336 fontDescriptionRun04.weightDefined = false;
4337 fontDescriptionRun04.widthDefined = false;
4338 fontDescriptionRun04.slantDefined = false;
4339 fontDescriptionRun04.sizeDefined = false;
4341 FontDescriptionRun fontDescriptionRun05;
4342 fontDescriptionRun05.characterRun.characterIndex = 48u;
4343 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4344 fontDescriptionRun05.familyLength = fontLatin.size();
4345 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4346 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4347 fontDescriptionRun05.familyDefined = true;
4348 fontDescriptionRun05.weightDefined = false;
4349 fontDescriptionRun05.widthDefined = false;
4350 fontDescriptionRun05.slantDefined = false;
4351 fontDescriptionRun05.sizeDefined = false;
4353 FontDescriptionRun fontDescriptionRun06;
4354 fontDescriptionRun06.characterRun.characterIndex = 60u;
4355 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4356 fontDescriptionRun06.familyLength = fontArabic.size();
4357 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4358 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4359 fontDescriptionRun06.familyDefined = true;
4360 fontDescriptionRun06.weightDefined = false;
4361 fontDescriptionRun06.widthDefined = false;
4362 fontDescriptionRun06.slantDefined = false;
4363 fontDescriptionRun06.sizeDefined = false;
4365 Vector<FontDescriptionRun> fontDescriptionRuns;
4366 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4367 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4368 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4369 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4370 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4371 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4373 float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
4375 Size textArea( 100.f, 300.f );
4378 "Center alignment for the mid paragraph.",
4379 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4382 fontDescriptionRuns.Begin(),
4383 Text::HorizontalAlignment::CENTER,
4384 Text::VerticalAlignment::TOP,
4389 Dali::LayoutDirection::LEFT_TO_RIGHT,
4393 if( !AlignTest( data ) )
4395 tet_result(TET_FAIL);
4398 tet_result(TET_PASS);
4402 int UtcDaliTextAlign06(void)
4404 ToolkitTestApplication application;
4405 tet_infoline(" UtcDaliTextAlign06");
4407 // Calculate text alignment.
4409 const std::string fontLatin( "TizenSans" );
4410 const std::string fontHebrew( "TizenSansHebrew" );
4411 const std::string fontArabic( "TizenSansArabic" );
4413 // Set a known font description
4414 FontDescriptionRun fontDescriptionRun01;
4415 fontDescriptionRun01.characterRun.characterIndex = 0u;
4416 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4417 fontDescriptionRun01.familyLength = fontLatin.size();
4418 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4419 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4420 fontDescriptionRun01.familyDefined = true;
4421 fontDescriptionRun01.weightDefined = false;
4422 fontDescriptionRun01.widthDefined = false;
4423 fontDescriptionRun01.slantDefined = false;
4424 fontDescriptionRun01.sizeDefined = false;
4426 FontDescriptionRun fontDescriptionRun02;
4427 fontDescriptionRun02.characterRun.characterIndex = 12u;
4428 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4429 fontDescriptionRun02.familyLength = fontHebrew.size();
4430 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4431 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4432 fontDescriptionRun02.familyDefined = true;
4433 fontDescriptionRun02.weightDefined = false;
4434 fontDescriptionRun02.widthDefined = false;
4435 fontDescriptionRun02.slantDefined = false;
4436 fontDescriptionRun02.sizeDefined = false;
4438 FontDescriptionRun fontDescriptionRun03;
4439 fontDescriptionRun03.characterRun.characterIndex = 22u;
4440 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4441 fontDescriptionRun03.familyLength = fontArabic.size();
4442 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4443 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4444 fontDescriptionRun03.familyDefined = true;
4445 fontDescriptionRun03.weightDefined = false;
4446 fontDescriptionRun03.widthDefined = false;
4447 fontDescriptionRun03.slantDefined = false;
4448 fontDescriptionRun03.sizeDefined = false;
4450 FontDescriptionRun fontDescriptionRun04;
4451 fontDescriptionRun04.characterRun.characterIndex = 36u;
4452 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4453 fontDescriptionRun04.familyLength = fontLatin.size();
4454 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4455 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4456 fontDescriptionRun04.familyDefined = true;
4457 fontDescriptionRun04.weightDefined = false;
4458 fontDescriptionRun04.widthDefined = false;
4459 fontDescriptionRun04.slantDefined = false;
4460 fontDescriptionRun04.sizeDefined = false;
4462 FontDescriptionRun fontDescriptionRun05;
4463 fontDescriptionRun05.characterRun.characterIndex = 48u;
4464 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4465 fontDescriptionRun05.familyLength = fontLatin.size();
4466 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4467 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4468 fontDescriptionRun05.familyDefined = true;
4469 fontDescriptionRun05.weightDefined = false;
4470 fontDescriptionRun05.widthDefined = false;
4471 fontDescriptionRun05.slantDefined = false;
4472 fontDescriptionRun05.sizeDefined = false;
4474 FontDescriptionRun fontDescriptionRun06;
4475 fontDescriptionRun06.characterRun.characterIndex = 60u;
4476 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4477 fontDescriptionRun06.familyLength = fontArabic.size();
4478 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4479 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4480 fontDescriptionRun06.familyDefined = true;
4481 fontDescriptionRun06.weightDefined = false;
4482 fontDescriptionRun06.widthDefined = false;
4483 fontDescriptionRun06.slantDefined = false;
4484 fontDescriptionRun06.sizeDefined = false;
4486 Vector<FontDescriptionRun> fontDescriptionRuns;
4487 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4488 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4489 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4490 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4491 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4492 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4494 float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 16.f };
4496 Size textArea( 100.f, 300.f );
4499 "Center alignment for the last paragraph.",
4500 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4503 fontDescriptionRuns.Begin(),
4504 Text::HorizontalAlignment::CENTER,
4505 Text::VerticalAlignment::TOP,
4510 Dali::LayoutDirection::LEFT_TO_RIGHT,
4514 if( !AlignTest( data ) )
4516 tet_result(TET_FAIL);
4519 tet_result(TET_PASS);
4523 int UtcDaliTextAlign07(void)
4525 ToolkitTestApplication application;
4526 tet_infoline(" UtcDaliTextAlign07");
4528 // Calculate text alignment.
4530 const std::string fontLatin( "TizenSans" );
4531 const std::string fontHebrew( "TizenSansHebrew" );
4532 const std::string fontArabic( "TizenSansArabic" );
4534 // Set a known font description
4535 FontDescriptionRun fontDescriptionRun01;
4536 fontDescriptionRun01.characterRun.characterIndex = 0u;
4537 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4538 fontDescriptionRun01.familyLength = fontLatin.size();
4539 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4540 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4541 fontDescriptionRun01.familyDefined = true;
4542 fontDescriptionRun01.weightDefined = false;
4543 fontDescriptionRun01.widthDefined = false;
4544 fontDescriptionRun01.slantDefined = false;
4545 fontDescriptionRun01.sizeDefined = false;
4547 FontDescriptionRun fontDescriptionRun02;
4548 fontDescriptionRun02.characterRun.characterIndex = 12u;
4549 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4550 fontDescriptionRun02.familyLength = fontHebrew.size();
4551 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4552 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4553 fontDescriptionRun02.familyDefined = true;
4554 fontDescriptionRun02.weightDefined = false;
4555 fontDescriptionRun02.widthDefined = false;
4556 fontDescriptionRun02.slantDefined = false;
4557 fontDescriptionRun02.sizeDefined = false;
4559 FontDescriptionRun fontDescriptionRun03;
4560 fontDescriptionRun03.characterRun.characterIndex = 22u;
4561 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4562 fontDescriptionRun03.familyLength = fontArabic.size();
4563 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4564 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4565 fontDescriptionRun03.familyDefined = true;
4566 fontDescriptionRun03.weightDefined = false;
4567 fontDescriptionRun03.widthDefined = false;
4568 fontDescriptionRun03.slantDefined = false;
4569 fontDescriptionRun03.sizeDefined = false;
4571 FontDescriptionRun fontDescriptionRun04;
4572 fontDescriptionRun04.characterRun.characterIndex = 36u;
4573 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4574 fontDescriptionRun04.familyLength = fontLatin.size();
4575 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4576 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4577 fontDescriptionRun04.familyDefined = true;
4578 fontDescriptionRun04.weightDefined = false;
4579 fontDescriptionRun04.widthDefined = false;
4580 fontDescriptionRun04.slantDefined = false;
4581 fontDescriptionRun04.sizeDefined = false;
4583 FontDescriptionRun fontDescriptionRun05;
4584 fontDescriptionRun05.characterRun.characterIndex = 48u;
4585 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4586 fontDescriptionRun05.familyLength = fontLatin.size();
4587 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4588 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4589 fontDescriptionRun05.familyDefined = true;
4590 fontDescriptionRun05.weightDefined = false;
4591 fontDescriptionRun05.widthDefined = false;
4592 fontDescriptionRun05.slantDefined = false;
4593 fontDescriptionRun05.sizeDefined = false;
4595 FontDescriptionRun fontDescriptionRun06;
4596 fontDescriptionRun06.characterRun.characterIndex = 60u;
4597 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4598 fontDescriptionRun06.familyLength = fontArabic.size();
4599 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4600 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4601 fontDescriptionRun06.familyDefined = true;
4602 fontDescriptionRun06.weightDefined = false;
4603 fontDescriptionRun06.widthDefined = false;
4604 fontDescriptionRun06.slantDefined = false;
4605 fontDescriptionRun06.sizeDefined = false;
4607 Vector<FontDescriptionRun> fontDescriptionRuns;
4608 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4609 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4610 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4611 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4612 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4613 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4615 float positions[] = { 19.f, 30.f, 0.f, 0.f, 0.f, 0.f };
4617 Size textArea( 100.f, 300.f );
4620 "End alignment for the first paragraph.",
4621 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4624 fontDescriptionRuns.Begin(),
4625 Text::HorizontalAlignment::END,
4626 Text::VerticalAlignment::TOP,
4631 Dali::LayoutDirection::LEFT_TO_RIGHT,
4635 if( !AlignTest( data ) )
4637 tet_result(TET_FAIL);
4640 tet_result(TET_PASS);
4644 int UtcDaliTextAlign08(void)
4646 ToolkitTestApplication application;
4647 tet_infoline(" UtcDaliTextAlign08");
4649 // Calculate text alignment.
4651 const std::string fontLatin( "TizenSans" );
4652 const std::string fontHebrew( "TizenSansHebrew" );
4653 const std::string fontArabic( "TizenSansArabic" );
4655 // Set a known font description
4656 FontDescriptionRun fontDescriptionRun01;
4657 fontDescriptionRun01.characterRun.characterIndex = 0u;
4658 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4659 fontDescriptionRun01.familyLength = fontLatin.size();
4660 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4661 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4662 fontDescriptionRun01.familyDefined = true;
4663 fontDescriptionRun01.weightDefined = false;
4664 fontDescriptionRun01.widthDefined = false;
4665 fontDescriptionRun01.slantDefined = false;
4666 fontDescriptionRun01.sizeDefined = false;
4668 FontDescriptionRun fontDescriptionRun02;
4669 fontDescriptionRun02.characterRun.characterIndex = 12u;
4670 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4671 fontDescriptionRun02.familyLength = fontHebrew.size();
4672 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4673 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4674 fontDescriptionRun02.familyDefined = true;
4675 fontDescriptionRun02.weightDefined = false;
4676 fontDescriptionRun02.widthDefined = false;
4677 fontDescriptionRun02.slantDefined = false;
4678 fontDescriptionRun02.sizeDefined = false;
4680 FontDescriptionRun fontDescriptionRun03;
4681 fontDescriptionRun03.characterRun.characterIndex = 22u;
4682 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4683 fontDescriptionRun03.familyLength = fontArabic.size();
4684 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4685 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4686 fontDescriptionRun03.familyDefined = true;
4687 fontDescriptionRun03.weightDefined = false;
4688 fontDescriptionRun03.widthDefined = false;
4689 fontDescriptionRun03.slantDefined = false;
4690 fontDescriptionRun03.sizeDefined = false;
4692 FontDescriptionRun fontDescriptionRun04;
4693 fontDescriptionRun04.characterRun.characterIndex = 36u;
4694 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4695 fontDescriptionRun04.familyLength = fontLatin.size();
4696 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4697 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4698 fontDescriptionRun04.familyDefined = true;
4699 fontDescriptionRun04.weightDefined = false;
4700 fontDescriptionRun04.widthDefined = false;
4701 fontDescriptionRun04.slantDefined = false;
4702 fontDescriptionRun04.sizeDefined = false;
4704 FontDescriptionRun fontDescriptionRun05;
4705 fontDescriptionRun05.characterRun.characterIndex = 48u;
4706 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4707 fontDescriptionRun05.familyLength = fontLatin.size();
4708 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4709 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4710 fontDescriptionRun05.familyDefined = true;
4711 fontDescriptionRun05.weightDefined = false;
4712 fontDescriptionRun05.widthDefined = false;
4713 fontDescriptionRun05.slantDefined = false;
4714 fontDescriptionRun05.sizeDefined = false;
4716 FontDescriptionRun fontDescriptionRun06;
4717 fontDescriptionRun06.characterRun.characterIndex = 60u;
4718 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4719 fontDescriptionRun06.familyLength = fontArabic.size();
4720 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4721 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4722 fontDescriptionRun06.familyDefined = true;
4723 fontDescriptionRun06.weightDefined = false;
4724 fontDescriptionRun06.widthDefined = false;
4725 fontDescriptionRun06.slantDefined = false;
4726 fontDescriptionRun06.sizeDefined = false;
4728 Vector<FontDescriptionRun> fontDescriptionRuns;
4729 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4730 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4731 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4732 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4733 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4734 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4736 float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
4738 Size textArea( 100.f, 300.f );
4741 "End alignment for the mid paragraph.",
4742 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4745 fontDescriptionRuns.Begin(),
4746 Text::HorizontalAlignment::END,
4747 Text::VerticalAlignment::TOP,
4752 Dali::LayoutDirection::LEFT_TO_RIGHT,
4756 if( !AlignTest( data ) )
4758 tet_result(TET_FAIL);
4761 tet_result(TET_PASS);
4765 int UtcDaliTextAlign09(void)
4767 ToolkitTestApplication application;
4768 tet_infoline(" UtcDaliTextAlign09");
4770 // Calculate text alignment.
4772 const std::string fontLatin( "TizenSans" );
4773 const std::string fontHebrew( "TizenSansHebrew" );
4774 const std::string fontArabic( "TizenSansArabic" );
4776 // Set a known font description
4777 FontDescriptionRun fontDescriptionRun01;
4778 fontDescriptionRun01.characterRun.characterIndex = 0u;
4779 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4780 fontDescriptionRun01.familyLength = fontLatin.size();
4781 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4782 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4783 fontDescriptionRun01.familyDefined = true;
4784 fontDescriptionRun01.weightDefined = false;
4785 fontDescriptionRun01.widthDefined = false;
4786 fontDescriptionRun01.slantDefined = false;
4787 fontDescriptionRun01.sizeDefined = false;
4789 FontDescriptionRun fontDescriptionRun02;
4790 fontDescriptionRun02.characterRun.characterIndex = 12u;
4791 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4792 fontDescriptionRun02.familyLength = fontHebrew.size();
4793 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4794 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4795 fontDescriptionRun02.familyDefined = true;
4796 fontDescriptionRun02.weightDefined = false;
4797 fontDescriptionRun02.widthDefined = false;
4798 fontDescriptionRun02.slantDefined = false;
4799 fontDescriptionRun02.sizeDefined = false;
4801 FontDescriptionRun fontDescriptionRun03;
4802 fontDescriptionRun03.characterRun.characterIndex = 22u;
4803 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4804 fontDescriptionRun03.familyLength = fontArabic.size();
4805 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4806 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4807 fontDescriptionRun03.familyDefined = true;
4808 fontDescriptionRun03.weightDefined = false;
4809 fontDescriptionRun03.widthDefined = false;
4810 fontDescriptionRun03.slantDefined = false;
4811 fontDescriptionRun03.sizeDefined = false;
4813 FontDescriptionRun fontDescriptionRun04;
4814 fontDescriptionRun04.characterRun.characterIndex = 36u;
4815 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4816 fontDescriptionRun04.familyLength = fontLatin.size();
4817 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4818 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4819 fontDescriptionRun04.familyDefined = true;
4820 fontDescriptionRun04.weightDefined = false;
4821 fontDescriptionRun04.widthDefined = false;
4822 fontDescriptionRun04.slantDefined = false;
4823 fontDescriptionRun04.sizeDefined = false;
4825 FontDescriptionRun fontDescriptionRun05;
4826 fontDescriptionRun05.characterRun.characterIndex = 48u;
4827 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4828 fontDescriptionRun05.familyLength = fontLatin.size();
4829 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4830 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4831 fontDescriptionRun05.familyDefined = true;
4832 fontDescriptionRun05.weightDefined = false;
4833 fontDescriptionRun05.widthDefined = false;
4834 fontDescriptionRun05.slantDefined = false;
4835 fontDescriptionRun05.sizeDefined = false;
4837 FontDescriptionRun fontDescriptionRun06;
4838 fontDescriptionRun06.characterRun.characterIndex = 60u;
4839 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4840 fontDescriptionRun06.familyLength = fontArabic.size();
4841 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4842 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4843 fontDescriptionRun06.familyDefined = true;
4844 fontDescriptionRun06.weightDefined = false;
4845 fontDescriptionRun06.widthDefined = false;
4846 fontDescriptionRun06.slantDefined = false;
4847 fontDescriptionRun06.sizeDefined = false;
4849 Vector<FontDescriptionRun> fontDescriptionRuns;
4850 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4851 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4852 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4853 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4854 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4855 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4857 float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 33.f };
4859 Size textArea( 100.f, 300.f );
4862 "End alignment for the last paragraph.",
4863 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4866 fontDescriptionRuns.Begin(),
4867 Text::HorizontalAlignment::END,
4868 Text::VerticalAlignment::TOP,
4873 Dali::LayoutDirection::LEFT_TO_RIGHT,
4877 if( !AlignTest( data ) )
4879 tet_result(TET_FAIL);
4882 tet_result(TET_PASS);
4886 int UtcDaliTextAlign10(void)
4888 ToolkitTestApplication application;
4889 tet_infoline(" UtcDaliTextAlign10");
4891 // Calculate text alignment.
4893 const std::string fontLatin( "TizenSans" );
4894 const std::string fontHebrew( "TizenSansHebrew" );
4895 const std::string fontArabic( "TizenSansArabic" );
4897 // Set a known font description
4898 FontDescriptionRun fontDescriptionRun01;
4899 fontDescriptionRun01.characterRun.characterIndex = 0u;
4900 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
4901 fontDescriptionRun01.familyLength = fontLatin.size();
4902 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
4903 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
4904 fontDescriptionRun01.familyDefined = true;
4905 fontDescriptionRun01.weightDefined = false;
4906 fontDescriptionRun01.widthDefined = false;
4907 fontDescriptionRun01.slantDefined = false;
4908 fontDescriptionRun01.sizeDefined = false;
4910 FontDescriptionRun fontDescriptionRun02;
4911 fontDescriptionRun02.characterRun.characterIndex = 12u;
4912 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
4913 fontDescriptionRun02.familyLength = fontHebrew.size();
4914 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
4915 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
4916 fontDescriptionRun02.familyDefined = true;
4917 fontDescriptionRun02.weightDefined = false;
4918 fontDescriptionRun02.widthDefined = false;
4919 fontDescriptionRun02.slantDefined = false;
4920 fontDescriptionRun02.sizeDefined = false;
4922 FontDescriptionRun fontDescriptionRun03;
4923 fontDescriptionRun03.characterRun.characterIndex = 22u;
4924 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
4925 fontDescriptionRun03.familyLength = fontArabic.size();
4926 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
4927 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
4928 fontDescriptionRun03.familyDefined = true;
4929 fontDescriptionRun03.weightDefined = false;
4930 fontDescriptionRun03.widthDefined = false;
4931 fontDescriptionRun03.slantDefined = false;
4932 fontDescriptionRun03.sizeDefined = false;
4934 FontDescriptionRun fontDescriptionRun04;
4935 fontDescriptionRun04.characterRun.characterIndex = 36u;
4936 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
4937 fontDescriptionRun04.familyLength = fontLatin.size();
4938 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
4939 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
4940 fontDescriptionRun04.familyDefined = true;
4941 fontDescriptionRun04.weightDefined = false;
4942 fontDescriptionRun04.widthDefined = false;
4943 fontDescriptionRun04.slantDefined = false;
4944 fontDescriptionRun04.sizeDefined = false;
4946 FontDescriptionRun fontDescriptionRun05;
4947 fontDescriptionRun05.characterRun.characterIndex = 48u;
4948 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
4949 fontDescriptionRun05.familyLength = fontLatin.size();
4950 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
4951 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
4952 fontDescriptionRun05.familyDefined = true;
4953 fontDescriptionRun05.weightDefined = false;
4954 fontDescriptionRun05.widthDefined = false;
4955 fontDescriptionRun05.slantDefined = false;
4956 fontDescriptionRun05.sizeDefined = false;
4958 FontDescriptionRun fontDescriptionRun06;
4959 fontDescriptionRun06.characterRun.characterIndex = 60u;
4960 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
4961 fontDescriptionRun06.familyLength = fontArabic.size();
4962 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
4963 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
4964 fontDescriptionRun06.familyDefined = true;
4965 fontDescriptionRun06.weightDefined = false;
4966 fontDescriptionRun06.widthDefined = false;
4967 fontDescriptionRun06.slantDefined = false;
4968 fontDescriptionRun06.sizeDefined = false;
4970 Vector<FontDescriptionRun> fontDescriptionRuns;
4971 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
4972 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
4973 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
4974 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
4975 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
4976 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
4978 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
4980 Size textArea( 100.f, 300.f );
4983 "Begin alignment for the first paragraph.",
4984 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
4987 fontDescriptionRuns.Begin(),
4988 Text::HorizontalAlignment::END,
4989 Text::VerticalAlignment::TOP,
4994 Dali::LayoutDirection::RIGHT_TO_LEFT,
4998 if( !AlignTest( data ) )
5000 tet_result(TET_FAIL);
5003 tet_result(TET_PASS);
5007 int UtcDaliTextAlign11(void)
5009 ToolkitTestApplication application;
5010 tet_infoline(" UtcDaliTextAlign11");
5012 // Calculate text alignment.
5014 const std::string fontLatin( "TizenSans" );
5015 const std::string fontHebrew( "TizenSansHebrew" );
5016 const std::string fontArabic( "TizenSansArabic" );
5018 // Set a known font description
5019 FontDescriptionRun fontDescriptionRun01;
5020 fontDescriptionRun01.characterRun.characterIndex = 0u;
5021 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5022 fontDescriptionRun01.familyLength = fontLatin.size();
5023 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5024 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5025 fontDescriptionRun01.familyDefined = true;
5026 fontDescriptionRun01.weightDefined = false;
5027 fontDescriptionRun01.widthDefined = false;
5028 fontDescriptionRun01.slantDefined = false;
5029 fontDescriptionRun01.sizeDefined = false;
5031 FontDescriptionRun fontDescriptionRun02;
5032 fontDescriptionRun02.characterRun.characterIndex = 12u;
5033 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5034 fontDescriptionRun02.familyLength = fontHebrew.size();
5035 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5036 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5037 fontDescriptionRun02.familyDefined = true;
5038 fontDescriptionRun02.weightDefined = false;
5039 fontDescriptionRun02.widthDefined = false;
5040 fontDescriptionRun02.slantDefined = false;
5041 fontDescriptionRun02.sizeDefined = false;
5043 FontDescriptionRun fontDescriptionRun03;
5044 fontDescriptionRun03.characterRun.characterIndex = 22u;
5045 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5046 fontDescriptionRun03.familyLength = fontArabic.size();
5047 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5048 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5049 fontDescriptionRun03.familyDefined = true;
5050 fontDescriptionRun03.weightDefined = false;
5051 fontDescriptionRun03.widthDefined = false;
5052 fontDescriptionRun03.slantDefined = false;
5053 fontDescriptionRun03.sizeDefined = false;
5055 FontDescriptionRun fontDescriptionRun04;
5056 fontDescriptionRun04.characterRun.characterIndex = 36u;
5057 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5058 fontDescriptionRun04.familyLength = fontLatin.size();
5059 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5060 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5061 fontDescriptionRun04.familyDefined = true;
5062 fontDescriptionRun04.weightDefined = false;
5063 fontDescriptionRun04.widthDefined = false;
5064 fontDescriptionRun04.slantDefined = false;
5065 fontDescriptionRun04.sizeDefined = false;
5067 FontDescriptionRun fontDescriptionRun05;
5068 fontDescriptionRun05.characterRun.characterIndex = 48u;
5069 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5070 fontDescriptionRun05.familyLength = fontLatin.size();
5071 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5072 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5073 fontDescriptionRun05.familyDefined = true;
5074 fontDescriptionRun05.weightDefined = false;
5075 fontDescriptionRun05.widthDefined = false;
5076 fontDescriptionRun05.slantDefined = false;
5077 fontDescriptionRun05.sizeDefined = false;
5079 FontDescriptionRun fontDescriptionRun06;
5080 fontDescriptionRun06.characterRun.characterIndex = 60u;
5081 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5082 fontDescriptionRun06.familyLength = fontArabic.size();
5083 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5084 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5085 fontDescriptionRun06.familyDefined = true;
5086 fontDescriptionRun06.weightDefined = false;
5087 fontDescriptionRun06.widthDefined = false;
5088 fontDescriptionRun06.slantDefined = false;
5089 fontDescriptionRun06.sizeDefined = false;
5091 Vector<FontDescriptionRun> fontDescriptionRuns;
5092 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5093 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5094 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5095 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5096 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5097 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5099 float positions[] = { 19.f, 30.f, 33.f, 0.f, 0.f, 0.f };
5101 Size textArea( 100.f, 300.f );
5104 "End alignment for the last paragraph.",
5105 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5108 fontDescriptionRuns.Begin(),
5109 Text::HorizontalAlignment::END,
5110 Text::VerticalAlignment::TOP,
5115 Dali::LayoutDirection::LEFT_TO_RIGHT,
5119 if( !AlignTest( data ) )
5121 tet_result(TET_FAIL);
5124 tet_result(TET_PASS);
5128 int UtcDaliTextAlign12(void)
5130 ToolkitTestApplication application;
5131 tet_infoline(" UtcDaliTextAlign12");
5133 // Calculate text alignment.
5135 const std::string fontLatin( "TizenSans" );
5136 const std::string fontHebrew( "TizenSansHebrew" );
5137 const std::string fontArabic( "TizenSansArabic" );
5139 // Set a known font description
5140 FontDescriptionRun fontDescriptionRun01;
5141 fontDescriptionRun01.characterRun.characterIndex = 0u;
5142 fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
5143 fontDescriptionRun01.familyLength = fontLatin.size();
5144 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5145 memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
5146 fontDescriptionRun01.familyDefined = true;
5147 fontDescriptionRun01.weightDefined = false;
5148 fontDescriptionRun01.widthDefined = false;
5149 fontDescriptionRun01.slantDefined = false;
5150 fontDescriptionRun01.sizeDefined = false;
5152 FontDescriptionRun fontDescriptionRun02;
5153 fontDescriptionRun02.characterRun.characterIndex = 12u;
5154 fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
5155 fontDescriptionRun02.familyLength = fontHebrew.size();
5156 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5157 memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
5158 fontDescriptionRun02.familyDefined = true;
5159 fontDescriptionRun02.weightDefined = false;
5160 fontDescriptionRun02.widthDefined = false;
5161 fontDescriptionRun02.slantDefined = false;
5162 fontDescriptionRun02.sizeDefined = false;
5164 FontDescriptionRun fontDescriptionRun03;
5165 fontDescriptionRun03.characterRun.characterIndex = 22u;
5166 fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
5167 fontDescriptionRun03.familyLength = fontArabic.size();
5168 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5169 memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
5170 fontDescriptionRun03.familyDefined = true;
5171 fontDescriptionRun03.weightDefined = false;
5172 fontDescriptionRun03.widthDefined = false;
5173 fontDescriptionRun03.slantDefined = false;
5174 fontDescriptionRun03.sizeDefined = false;
5176 FontDescriptionRun fontDescriptionRun04;
5177 fontDescriptionRun04.characterRun.characterIndex = 36u;
5178 fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
5179 fontDescriptionRun04.familyLength = fontLatin.size();
5180 fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
5181 memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
5182 fontDescriptionRun04.familyDefined = true;
5183 fontDescriptionRun04.weightDefined = false;
5184 fontDescriptionRun04.widthDefined = false;
5185 fontDescriptionRun04.slantDefined = false;
5186 fontDescriptionRun04.sizeDefined = false;
5188 FontDescriptionRun fontDescriptionRun05;
5189 fontDescriptionRun05.characterRun.characterIndex = 48u;
5190 fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
5191 fontDescriptionRun05.familyLength = fontLatin.size();
5192 fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
5193 memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
5194 fontDescriptionRun05.familyDefined = true;
5195 fontDescriptionRun05.weightDefined = false;
5196 fontDescriptionRun05.widthDefined = false;
5197 fontDescriptionRun05.slantDefined = false;
5198 fontDescriptionRun05.sizeDefined = false;
5200 FontDescriptionRun fontDescriptionRun06;
5201 fontDescriptionRun06.characterRun.characterIndex = 60u;
5202 fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
5203 fontDescriptionRun06.familyLength = fontArabic.size();
5204 fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
5205 memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
5206 fontDescriptionRun06.familyDefined = true;
5207 fontDescriptionRun06.weightDefined = false;
5208 fontDescriptionRun06.widthDefined = false;
5209 fontDescriptionRun06.slantDefined = false;
5210 fontDescriptionRun06.sizeDefined = false;
5212 Vector<FontDescriptionRun> fontDescriptionRuns;
5213 fontDescriptionRuns.PushBack( fontDescriptionRun01 );
5214 fontDescriptionRuns.PushBack( fontDescriptionRun02 );
5215 fontDescriptionRuns.PushBack( fontDescriptionRun03 );
5216 fontDescriptionRuns.PushBack( fontDescriptionRun04 );
5217 fontDescriptionRuns.PushBack( fontDescriptionRun05 );
5218 fontDescriptionRuns.PushBack( fontDescriptionRun06 );
5220 float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
5222 Size textArea( 100.f, 300.f );
5225 "Begin alignment for the first paragraph.",
5226 "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
5229 fontDescriptionRuns.Begin(),
5230 Text::HorizontalAlignment::BEGIN,
5231 Text::VerticalAlignment::TOP,
5236 Dali::LayoutDirection::LEFT_TO_RIGHT,
5240 if( !AlignTest( data ) )
5242 tet_result(TET_FAIL);
5245 tet_result(TET_PASS);
5249 int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
5251 ToolkitTestApplication application;
5252 tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
5254 Layout::Engine engine;
5255 DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5257 engine.SetDefaultLineSpacing( 10.f );
5258 DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
5260 tet_result(TET_PASS);
5264 int UtcDaliTextLayoutGetGlyphMetrics(void)
5266 tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
5268 // Test retrieving metrics from group of characters
5270 const std::string fontFamily( "TizenSansHindi" );
5272 // Set a known font description
5273 FontDescriptionRun fontDescriptionRun01;
5274 fontDescriptionRun01.characterRun.characterIndex = 0u;
5275 fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
5276 fontDescriptionRun01.familyLength = fontFamily.size();
5277 fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
5278 memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
5279 fontDescriptionRun01.familyDefined = true;
5280 fontDescriptionRun01.weightDefined = false;
5281 fontDescriptionRun01.widthDefined = false;
5282 fontDescriptionRun01.slantDefined = false;
5283 fontDescriptionRun01.sizeDefined = false;
5285 // Set a known font description
5286 FontDescriptionRun fontDescriptionRun02;
5287 fontDescriptionRun02.characterRun.characterIndex = 0u;
5288 fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
5289 fontDescriptionRun02.familyLength = fontFamily.size();
5290 fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
5291 memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
5292 fontDescriptionRun02.familyDefined = true;
5293 fontDescriptionRun02.weightDefined = false;
5294 fontDescriptionRun02.widthDefined = false;
5295 fontDescriptionRun02.slantDefined = false;
5296 fontDescriptionRun02.sizeDefined = false;
5298 // Set a known font description
5299 FontDescriptionRun fontDescriptionRun03;
5300 fontDescriptionRun03.characterRun.characterIndex = 0u;
5301 fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
5302 fontDescriptionRun03.familyLength = fontFamily.size();
5303 fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
5304 memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
5305 fontDescriptionRun03.familyDefined = true;
5306 fontDescriptionRun03.weightDefined = false;
5307 fontDescriptionRun03.widthDefined = false;
5308 fontDescriptionRun03.slantDefined = false;
5309 fontDescriptionRun03.sizeDefined = false;
5311 Vector<FontDescriptionRun> fontDescriptionRuns01;
5312 fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
5314 Vector<FontDescriptionRun> fontDescriptionRuns02;
5315 fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
5317 Vector<FontDescriptionRun> fontDescriptionRuns03;
5318 fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
5321 Size textArea(100.f, 100.f);
5324 // Group: second glyph doesn't exceed the width of the first glyph
5325 float positions01[] = { 0.f, -11.f };
5327 struct LineRun line01 =
5340 Vector<LineRun> lines01;
5341 lines01.PushBack( line01 );
5343 Size layoutSize01 = Vector2(11.f, 20.f);
5345 // Group: second glyph doesn't exceed the width of the first glyph
5346 float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
5348 struct LineRun line02 =
5361 Vector<LineRun> lines02;
5362 lines02.PushBack( line02 );
5364 Size layoutSize02 = Vector2(16.f, 20.f);
5366 // Group: second glyph doesn't exceed the width of the first glyph
5367 float positions03[] = { 0.f, -11.f , 2.f, -15.f };
5369 struct LineRun line03 =
5382 Vector<LineRun> lines03;
5383 lines03.PushBack( line03 );
5385 Size layoutSize03 = Vector2(11.f, 20.f);
5387 /////////////////////////////
5389 struct LayoutTextData data[] =
5396 fontDescriptionRuns01.Begin(),
5402 Layout::Engine::SINGLE_LINE_BOX,
5406 DevelText::EllipsisPosition::END,
5410 "Group: second glyph exceeds the width of the first glyph",
5414 fontDescriptionRuns02.Begin(),
5420 Layout::Engine::SINGLE_LINE_BOX,
5424 DevelText::EllipsisPosition::END,
5428 "Group: second glyph doesn't exceed the width of the first glyph",
5432 fontDescriptionRuns03.Begin(),
5438 Layout::Engine::SINGLE_LINE_BOX,
5442 DevelText::EllipsisPosition::END,
5446 const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
5448 for( unsigned int index = 0u; index < numberOfTests; ++index )
5450 ToolkitTestApplication application;
5451 if( !LayoutTextTest( data[index] ) )
5453 tet_result(TET_FAIL);
5457 tet_result(TET_PASS);