Revert "[3.0] Fix for multi-language support." 60/97760/1
authordongsug.song <dongsug.song@samsung.com>
Tue, 15 Nov 2016 02:50:27 +0000 (11:50 +0900)
committerdongsug.song <dongsug.song@samsung.com>
Tue, 15 Nov 2016 02:50:32 +0000 (11:50 +0900)
This reverts commit cbd77719557367affbd50a1ff3682b72cd4c4419.

Change-Id: Ia038878230e5cfc7a18a59a6b35c5d60e396271b

13 files changed:
automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-model.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-text-abstraction.cpp
dali-toolkit/internal/text/multi-language-helper-functions.cpp
dali-toolkit/internal/text/multi-language-helper-functions.h
dali-toolkit/internal/text/multi-language-support-impl.cpp
dali-toolkit/internal/text/multi-language-support-impl.h
dali-toolkit/internal/text/multi-language-support.cpp
dali-toolkit/internal/text/multi-language-support.h
dali-toolkit/internal/text/text-controller-impl.cpp
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-font-style.cpp

index 104b3c8..21d9f42 100644 (file)
@@ -150,19 +150,24 @@ void CreateTextModel( const std::string& text,
   fontDescriptionRuns = fontDescriptions;
   Vector<FontRun>& validFonts = logicalModel->mFontRuns;
 
-  // The default font description.
-  TextAbstraction::FontDescription fontDescription;
+  // The default font id.
+  FontDefaults fontDefaults;
+  fontDefaults.mFontDescription.family = "";
+  fontDefaults.familyDefined = true;
+  fontDefaults.mDefaultPointSize = 12.f;
+  fontDefaults.sizeDefined = true;
 
   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
   fontClient.SetDpi( 96u, 96u );
 
+  const FontId defaultFontId = fontDefaults.GetFontId( fontClient );
+
   // Validates the fonts. If there is a character with no assigned font it sets a default one.
   // After this call, fonts are validated.
   multilanguageSupport.ValidateFonts( utf32Characters,
                                       scripts,
                                       fontDescriptionRuns,
-                                      fontDescription,
-                                      TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+                                      defaultFontId,
                                       0u,
                                       numberOfCharacters,
                                       validFonts );
index 36ab916..08a0a97 100644 (file)
@@ -961,7 +961,7 @@ int UtcDaliTextLayoutMultilineText02(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun2;
   fontDescriptionRun2.characterRun.characterIndex = 17u;
-  fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun2.characterRun.numberOfCharacters = 11u;
   fontDescriptionRun2.familyLength = fontFamily2.size();
   fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
   memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
@@ -971,12 +971,12 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun2.slantDefined = false;
   fontDescriptionRun2.sizeDefined = false;
 
-  const std::string fontFamily3( "TizenSans" );
+  const std::string fontFamily3( "TizenSansHebrew" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun3;
-  fontDescriptionRun3.characterRun.characterIndex = 26u;
-  fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun3.characterRun.characterIndex = 28u;
+  fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun3.familyLength = fontFamily3.size();
   fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
   memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
@@ -986,12 +986,12 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun3.slantDefined = false;
   fontDescriptionRun3.sizeDefined = false;
 
-  const std::string fontFamily4( "TizenSansHebrew" );
+  const std::string fontFamily4( "TizenSans" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun4;
-  fontDescriptionRun4.characterRun.characterIndex = 28u;
-  fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun4.characterRun.characterIndex = 38u;
+  fontDescriptionRun4.characterRun.numberOfCharacters = 17u;
   fontDescriptionRun4.familyLength = fontFamily4.size();
   fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
   memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
@@ -1001,34 +1001,18 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun4.slantDefined = false;
   fontDescriptionRun4.sizeDefined = false;
 
-  const std::string fontFamily5( "TizenSans" );
-
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun5;
-  fontDescriptionRun5.characterRun.characterIndex = 38u;
-  fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun5.familyLength = fontFamily5.size();
-  fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
-  memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
-  fontDescriptionRun5.familyDefined = true;
-  fontDescriptionRun5.weightDefined = false;
-  fontDescriptionRun5.widthDefined = false;
-  fontDescriptionRun5.slantDefined = false;
-  fontDescriptionRun5.sizeDefined = false;
-
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun1 );
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   fontDescriptionRuns.PushBack( fontDescriptionRun3 );
   fontDescriptionRuns.PushBack( fontDescriptionRun4 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun5 );
   Size textArea(100.f, 300.f);
   Size layoutSize(81.f, 120.f);
   float positions[] =
   {
     1.f, -12.f, 12.f,  -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f,  -0.f, 40.f,  -9.f, 51.f,  -9.f, 61.f,  -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f,  -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f,  -0.f,
-    1.f, -10.f,  9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f,  9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f,  -0.f,
     1.f, -13.f, 10.f,  -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f,  -0.f, 38.f,  -9.f, 49.f,  -9.f, 59.f,  -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -13.f, 10.f,  -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f, -3.f,
@@ -1061,7 +1045,7 @@ int UtcDaliTextLayoutMultilineText02(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -1119,7 +1103,7 @@ int UtcDaliTextLayoutMultilineText02(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world demo.",
     textArea,
-    5u,
+    4u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     55u,
@@ -1470,7 +1454,7 @@ int UtcDaliTextUpdateLayout01(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -1482,11 +1466,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 26u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
-  fontDescriptionRun03.familyLength = fontLatin.size();
+  fontDescriptionRun03.characterRun.characterIndex = 28u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -1495,11 +1479,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 28u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun04.familyLength = fontArabic.size();
+  fontDescriptionRun04.characterRun.characterIndex = 42u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -1508,11 +1492,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 42u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun05.familyLength = fontLatin.size();
+  fontDescriptionRun05.characterRun.characterIndex = 54u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun05.familyLength = fontHebrew.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -1521,7 +1505,7 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 54u;
+  fontDescriptionRun06.characterRun.characterIndex = 64u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -1534,11 +1518,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 64u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun07.familyLength = fontHebrew.size();
+  fontDescriptionRun07.characterRun.characterIndex = 74u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun07.familyLength = fontLatin.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -1547,8 +1531,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 74u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun08.characterRun.characterIndex = 92u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -1560,11 +1544,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 92u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun09.familyLength = fontLatin.size();
+  fontDescriptionRun09.characterRun.characterIndex = 104u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun09.familyLength = fontArabic.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -1573,11 +1557,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 104u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun10.familyLength = fontArabic.size();
+  fontDescriptionRun10.characterRun.characterIndex = 118u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun10.familyLength = fontHebrew.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -1586,11 +1570,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 118u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun11.familyLength = fontHebrew.size();
+  fontDescriptionRun11.characterRun.characterIndex = 128u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun11.familyLength = fontLatin.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -1599,11 +1583,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 128u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun12.familyLength = fontLatin.size();
+  fontDescriptionRun12.characterRun.characterIndex = 145u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun12.familyLength = fontHebrew.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -1612,8 +1596,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 145u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun13.characterRun.characterIndex = 156u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -1625,8 +1609,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 154u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun14.characterRun.characterIndex = 166u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -1638,43 +1622,17 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 156u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun15.familyLength = fontHebrew.size();
+  fontDescriptionRun15.characterRun.characterIndex = 178u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun15.familyLength = fontArabic.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun16;
-  fontDescriptionRun16.characterRun.characterIndex = 166u;
-  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun16.familyLength = fontLatin.size();
-  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
-  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
-  fontDescriptionRun16.familyDefined = true;
-  fontDescriptionRun16.weightDefined = false;
-  fontDescriptionRun16.widthDefined = false;
-  fontDescriptionRun16.slantDefined = false;
-  fontDescriptionRun16.sizeDefined = false;
-
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun17;
-  fontDescriptionRun17.characterRun.characterIndex = 178u;
-  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun17.familyLength = fontArabic.size();
-  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
-  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
-  fontDescriptionRun17.familyDefined = true;
-  fontDescriptionRun17.weightDefined = false;
-  fontDescriptionRun17.widthDefined = false;
-  fontDescriptionRun17.slantDefined = false;
-  fontDescriptionRun17.sizeDefined = false;
-
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -1691,27 +1649,25 @@ int UtcDaliTextUpdateLayout01(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -1745,7 +1701,7 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -1889,7 +1845,7 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -1976,7 +1932,7 @@ int UtcDaliTextUpdateLayout01(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    17u,
+    15u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
@@ -2026,7 +1982,7 @@ int UtcDaliTextUpdateLayout02(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -2038,11 +1994,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 26u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
-  fontDescriptionRun03.familyLength = fontLatin.size();
+  fontDescriptionRun03.characterRun.characterIndex = 28u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -2051,11 +2007,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 28u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun04.familyLength = fontArabic.size();
+  fontDescriptionRun04.characterRun.characterIndex = 42u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -2064,11 +2020,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 42u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun05.familyLength = fontLatin.size();
+  fontDescriptionRun05.characterRun.characterIndex = 54u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun05.familyLength = fontHebrew.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -2077,7 +2033,7 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 54u;
+  fontDescriptionRun06.characterRun.characterIndex = 64u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -2090,11 +2046,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 64u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun07.familyLength = fontHebrew.size();
+  fontDescriptionRun07.characterRun.characterIndex = 74u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun07.familyLength = fontLatin.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -2103,8 +2059,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 74u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun08.characterRun.characterIndex = 92u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -2116,11 +2072,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 92u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun09.familyLength = fontLatin.size();
+  fontDescriptionRun09.characterRun.characterIndex = 104u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun09.familyLength = fontArabic.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -2129,11 +2085,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 104u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun10.familyLength = fontArabic.size();
+  fontDescriptionRun10.characterRun.characterIndex = 118u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun10.familyLength = fontHebrew.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -2142,11 +2098,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 118u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun11.familyLength = fontHebrew.size();
+  fontDescriptionRun11.characterRun.characterIndex = 128u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun11.familyLength = fontLatin.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -2155,11 +2111,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 128u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun12.familyLength = fontLatin.size();
+  fontDescriptionRun12.characterRun.characterIndex = 145u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun12.familyLength = fontHebrew.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -2168,8 +2124,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 145u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun13.characterRun.characterIndex = 156u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -2181,8 +2137,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 154u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun14.characterRun.characterIndex = 166u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -2194,43 +2150,17 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 156u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun15.familyLength = fontHebrew.size();
+  fontDescriptionRun15.characterRun.characterIndex = 178u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun15.familyLength = fontArabic.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun16;
-  fontDescriptionRun16.characterRun.characterIndex = 166u;
-  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun16.familyLength = fontLatin.size();
-  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
-  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
-  fontDescriptionRun16.familyDefined = true;
-  fontDescriptionRun16.weightDefined = false;
-  fontDescriptionRun16.widthDefined = false;
-  fontDescriptionRun16.slantDefined = false;
-  fontDescriptionRun16.sizeDefined = false;
-
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun17;
-  fontDescriptionRun17.characterRun.characterIndex = 178u;
-  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun17.familyLength = fontArabic.size();
-  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
-  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
-  fontDescriptionRun17.familyDefined = true;
-  fontDescriptionRun17.weightDefined = false;
-  fontDescriptionRun17.widthDefined = false;
-  fontDescriptionRun17.slantDefined = false;
-  fontDescriptionRun17.sizeDefined = false;
-
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -2247,27 +2177,25 @@ int UtcDaliTextUpdateLayout02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -2301,7 +2229,7 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -2445,7 +2373,7 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -2532,7 +2460,7 @@ int UtcDaliTextUpdateLayout02(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    17u,
+    15u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
@@ -2582,7 +2510,7 @@ int UtcDaliTextUpdateLayout03(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -2594,11 +2522,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 26u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
-  fontDescriptionRun03.familyLength = fontLatin.size();
+  fontDescriptionRun03.characterRun.characterIndex = 28u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -2607,11 +2535,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 28u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun04.familyLength = fontArabic.size();
+  fontDescriptionRun04.characterRun.characterIndex = 42u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -2620,11 +2548,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 42u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun05.familyLength = fontLatin.size();
+  fontDescriptionRun05.characterRun.characterIndex = 54u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun05.familyLength = fontHebrew.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -2633,7 +2561,7 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 54u;
+  fontDescriptionRun06.characterRun.characterIndex = 64u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -2646,11 +2574,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 64u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun07.familyLength = fontHebrew.size();
+  fontDescriptionRun07.characterRun.characterIndex = 74u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun07.familyLength = fontLatin.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -2659,8 +2587,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 74u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
+  fontDescriptionRun08.characterRun.characterIndex = 92u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -2672,11 +2600,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 92u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun09.familyLength = fontLatin.size();
+  fontDescriptionRun09.characterRun.characterIndex = 104u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun09.familyLength = fontArabic.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -2685,11 +2613,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 104u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun10.familyLength = fontArabic.size();
+  fontDescriptionRun10.characterRun.characterIndex = 118u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun10.familyLength = fontHebrew.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -2698,11 +2626,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 118u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun11.familyLength = fontHebrew.size();
+  fontDescriptionRun11.characterRun.characterIndex = 128u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun11.familyLength = fontLatin.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -2711,11 +2639,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 128u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun12.familyLength = fontLatin.size();
+  fontDescriptionRun12.characterRun.characterIndex = 145u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun12.familyLength = fontHebrew.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -2724,8 +2652,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 145u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun13.characterRun.characterIndex = 156u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -2737,8 +2665,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 154u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun14.characterRun.characterIndex = 166u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -2750,43 +2678,17 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 156u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun15.familyLength = fontHebrew.size();
+  fontDescriptionRun15.characterRun.characterIndex = 178u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun15.familyLength = fontArabic.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun16;
-  fontDescriptionRun16.characterRun.characterIndex = 166u;
-  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun16.familyLength = fontLatin.size();
-  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
-  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
-  fontDescriptionRun16.familyDefined = true;
-  fontDescriptionRun16.weightDefined = false;
-  fontDescriptionRun16.widthDefined = false;
-  fontDescriptionRun16.slantDefined = false;
-  fontDescriptionRun16.sizeDefined = false;
-
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun17;
-  fontDescriptionRun17.characterRun.characterIndex = 178u;
-  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun17.familyLength = fontArabic.size();
-  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
-  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
-  fontDescriptionRun17.familyDefined = true;
-  fontDescriptionRun17.weightDefined = false;
-  fontDescriptionRun17.widthDefined = false;
-  fontDescriptionRun17.slantDefined = false;
-  fontDescriptionRun17.sizeDefined = false;
-
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -2803,27 +2705,25 @@ int UtcDaliTextUpdateLayout03(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
-  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -2857,7 +2757,7 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -3001,7 +2901,7 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    34.f,
+    36.f,
     15.f,
     -5.f,
     0.f,
@@ -3057,6 +2957,7 @@ int UtcDaliTextUpdateLayout03(void)
     false,
     false
   };
+
   Vector<LineRun> lines;
   lines.PushBack( line01 );
   lines.PushBack( line02 );
@@ -3088,7 +2989,7 @@ int UtcDaliTextUpdateLayout03(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    17u,
+    15u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
index 3be899f..8dd64f9 100644 (file)
@@ -36,12 +36,12 @@ using namespace Text;
 // Tests the following functions with different scripts.
 //
 // void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
+//                             Vector<FontId>& fontIds,
+//                             Vector<bool>& isDefaultFont,
 //                             const TextAbstraction::FontDescription& defaultFontDescription,
 //                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-//                             CharacterIndex characterIndex,
-//                             TextAbstraction::FontDescription& fontDescription,
-//                             TextAbstraction::PointSize26Dot6& fontPointSize,
-//                             bool& isDefaultFont );
+//                             CharacterIndex startIndex,
+//                             Length numberOfCharacters );
 //
 // Script GetScript( Length index,
 //                   Vector<ScriptRun>::ConstIterator& scriptRunIt,
@@ -57,8 +57,7 @@ using namespace Text;
 // void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
 //                                           const Vector<ScriptRun>& scripts,
 //                                           const Vector<FontDescriptionRun>& fontDescriptions,
-//                                           const TextAbstraction::FontDescription& defaultFontDescription,
-//                                           TextAbstraction::PointSize26Dot6 defaultFontPointSize,
+//                                           FontId defaultFontId,
 //                                           CharacterIndex startIndex,
 //                                           Length numberOfCharacters,
 //                                           Vector<FontRun>& fonts );
@@ -106,50 +105,21 @@ struct ValidateFontsData
 };
 
 //////////////////////////////////////////////////////////
-void PrintFontDescription( FontId id )
-{
-  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
-
-  TextAbstraction::FontDescription description;
-  fontClient.GetDescription( id, description );
-
-  const TextAbstraction::PointSize26Dot6 pointSize = fontClient.GetPointSize( id );
-
-  std::cout << std::endl << "  font description for font id : " << id << std::endl;
-  std::cout << "  font family : [" << description.family << "]" << std::endl;
-  std::cout << "   font width : [" << TextAbstraction::FontWidth::Name[description.width] << "]" << std::endl;
-  std::cout << "  font weight : [" << TextAbstraction::FontWeight::Name[description.weight] << "]" << std::endl;
-  std::cout << "   font slant : [" << TextAbstraction::FontSlant::Name[description.slant] << "]" << std::endl;
-  std::cout << "    font size : " << pointSize << std::endl;
-}
 
 bool MergeFontDescriptionsTest( const MergeFontDescriptionsData& data )
 {
-  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
-
   Vector<FontId> fontIds;
   fontIds.Resize( data.startIndex + data.numberOfCharacters, 0u );
   Vector<bool> isDefaultFont;
   isDefaultFont.Resize( data.startIndex + data.numberOfCharacters, true );
 
-  for( unsigned int index = data.startIndex; index < data.startIndex + data.numberOfCharacters; ++index )
-  {
-    TextAbstraction::FontDescription fontDescription;
-    TextAbstraction::PointSize26Dot6 fontPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
-
-    MergeFontDescriptions( data.fontDescriptionRuns,
-                           data.defaultFontDescription,
-                           data.defaultPointSize,
-                           index,
-                           fontDescription,
-                           fontPointSize,
-                           isDefaultFont[index] );
-
-    if( !isDefaultFont[index] )
-    {
-      fontIds[index] = fontClient.GetFontId( fontDescription, fontPointSize );
-    }
-  }
+  MergeFontDescriptions( data.fontDescriptionRuns,
+                         fontIds,
+                         isDefaultFont,
+                         data.defaultFontDescription,
+                         data.defaultPointSize,
+                         data.startIndex,
+                         data.numberOfCharacters );
 
   if( fontIds.Count() != data.expectedFontIds.Count() )
   {
@@ -291,10 +261,6 @@ bool ValidateFontTest( const ValidateFontsData& data )
   // Get the default font id.
   const FontId defaultFontId = fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + data.defaultFont,
                                                      data.defaultFontSize );
-  TextAbstraction::FontDescription defaultFontDescription;
-  fontClient.GetDescription( defaultFontId, defaultFontDescription );
-
-  const TextAbstraction::PointSize26Dot6 defaultPointSize = fontClient.GetPointSize( defaultFontId );
 
   Vector<FontRun> fontRuns;
 
@@ -302,8 +268,7 @@ bool ValidateFontTest( const ValidateFontsData& data )
   multilanguageSupport.ValidateFonts( utf32,
                                       scripts,
                                       data.fontDescriptionRuns,
-                                      defaultFontDescription,
-                                      defaultPointSize,
+                                      defaultFontId,
                                       0u,
                                       numberOfCharacters,
                                       fontRuns );
@@ -319,8 +284,7 @@ bool ValidateFontTest( const ValidateFontsData& data )
     multilanguageSupport.ValidateFonts( utf32,
                                         scripts,
                                         data.fontDescriptionRuns,
-                                        defaultFontDescription,
-                                        defaultPointSize,
+                                        defaultFontId,
                                         data.index,
                                         data.numberOfCharacters,
                                         fontRuns );
@@ -489,9 +453,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     const_cast<char*>( "DejaVu Sans" ),
     11u,
-    TextAbstraction::FontWeight::NONE,
-    TextAbstraction::FontWidth::NONE,
-    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     true,
     false,
@@ -507,8 +471,8 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NONE,
-    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
@@ -526,8 +490,8 @@ int UtcDaliTextMergeFontDescriptions(void)
     NULL,
     0u,
     TextAbstraction::FontWeight::BOLD,
-    TextAbstraction::FontWidth::NONE,
-    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
     true,
@@ -543,9 +507,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NONE,
-    TextAbstraction::FontWidth::NONE,
-    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
     NON_DEFAULT_FONT_SIZE,
     false,
     false,
@@ -561,9 +525,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWeight::NORMAL,
     TextAbstraction::FontWidth::EXPANDED,
-    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontSlant::NORMAL,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
     false,
index d06ba71..33a8744 100644 (file)
@@ -142,7 +142,7 @@ public:
   void GetDescription( FontId id, FontDescription& fontDescription ){}
   PointSize26Dot6 GetPointSize( FontId id ){return 9;}
   FontId FindDefaultFont( Character charcode, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
-  FontId FindFallbackFont( Character charcode, const FontDescription& fontDescription, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
+  FontId FindFallbackFont( FontId preferredFont, Character charcode, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
   FontId GetFontId( const FontPath& path, PointSize26Dot6 pointSize, FaceIndex faceIndex ){return 0;}
   FontId GetFontId( const FontDescription& fontDescription,PointSize26Dot6 pointSize, FaceIndex faceIndex ){return 0;}
   bool IsScalable( const FontPath& path ){return true;}
@@ -407,9 +407,9 @@ FontId FontClient::FindDefaultFont( Character charcode, PointSize26Dot6 pointSiz
   return GetImplementation(*this).FindDefaultFont( charcode, pointSize, preferColor );
 }
 
-FontId FontClient::FindFallbackFont( Character charcode, const FontDescription& fontDescription, PointSize26Dot6 pointSize, bool preferColor )
+FontId FontClient::FindFallbackFont( FontId preferredFont, Character charcode, PointSize26Dot6 pointSize, bool preferColor )
 {
-  return GetImplementation(*this).FindFallbackFont( charcode, fontDescription, pointSize, preferColor );
+  return GetImplementation(*this).FindFallbackFont( preferredFont, charcode, pointSize, preferColor );
 }
 
 FontId FontClient::GetFontId( const FontPath& path, PointSize26Dot6 pointSize, FaceIndex faceIndex )
index 3fad598..731b89d 100644 (file)
@@ -31,23 +31,25 @@ namespace Text
 {
 
 void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
+                            Vector<FontId>& fontIds,
+                            Vector<bool>& isDefaultFont,
                             const TextAbstraction::FontDescription& defaultFontDescription,
                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-                            CharacterIndex characterIndex,
-                            TextAbstraction::FontDescription& fontDescription,
-                            TextAbstraction::PointSize26Dot6& fontPointSize,
-                            bool& isDefaultFont )
+                            CharacterIndex startIndex,
+                            Length numberOfCharacters )
 {
-  // Initialize with the default font's point size.
-  fontPointSize = defaultPointSize;
+  // Get the handle to the font client.
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
 
-  // Initialize with the style parameters of the default font's style.
-  fontDescription = defaultFontDescription;
+  // Pointer to the font id buffer.
+  FontId* fontIdsBuffer = fontIds.Begin();
 
-  // Initialize as a default font.
-  isDefaultFont = true;
+  // Pointer to the 'is default' font buffer.
+  bool* isDefaultFontBuffer = isDefaultFont.Begin();
 
-  Length runIndex = 0u;
+  // Used to temporarily store the style per character.
+  TextAbstraction::FontDescription fontDescription;
+  TextAbstraction::PointSize26Dot6 fontSize;
 
   Length familyIndex = 0u;
   Length weightIndex = 0u;
@@ -55,88 +57,119 @@ void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
   Length slantIndex = 0u;
   Length sizeIndex = 0u;
 
-  bool familyOverriden = false;
-  bool weightOverriden = false;
-  bool widthOverriden = false;
-  bool slantOverriden = false;
-  bool sizeOverriden = false;
-
-  // Traverse all the font descriptions.
-  const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin();
-  for( Vector<FontDescriptionRun>::ConstIterator it = fontDescriptionsBuffer,
-         endIt = fontDescriptions.End();
-       it != endIt;
-       ++it, ++runIndex )
+  // Traverse all the characters.
+  const CharacterIndex lastCharacterPlusOne = startIndex + numberOfCharacters;
+  for( CharacterIndex index = startIndex; index < lastCharacterPlusOne; ++index )
   {
-    // Check whether the character's font is modified by the current font description.
-    const FontDescriptionRun& fontRun = *it;
-    if( ( characterIndex >= fontRun.characterRun.characterIndex ) &&
-        ( characterIndex < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) )
+    bool& defaultFont = *(isDefaultFontBuffer + index - startIndex );
+
+    Length runIndex = 0u;
+
+    bool familyOverriden = false;
+    bool weightOverriden = false;
+    bool widthOverriden = false;
+    bool slantOverriden = false;
+    bool sizeOverriden = false;
+
+    // Traverse all the font descriptions.
+    const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin();
+    for( Vector<FontDescriptionRun>::ConstIterator it = fontDescriptionsBuffer,
+           endIt = fontDescriptions.End();
+         it != endIt;
+         ++it, ++runIndex )
     {
-      if( fontRun.familyDefined )
+      // Check whether the character's font is modified by the current font description.
+      const FontDescriptionRun& fontRun = *it;
+      if( ( index >= fontRun.characterRun.characterIndex ) &&
+          ( index < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) )
       {
-        isDefaultFont = false;
-        familyOverriden = true;
-        familyIndex = runIndex;
+        if( fontRun.familyDefined )
+        {
+          defaultFont = false;
+          familyOverriden = true;
+          familyIndex = runIndex;
+        }
+        if( fontRun.weightDefined )
+        {
+          defaultFont = false;
+          weightOverriden = true;
+          weightIndex = runIndex;
+        }
+        if( fontRun.widthDefined )
+        {
+          defaultFont = false;
+          widthOverriden = true;
+          widthIndex = runIndex;
+        }
+        if( fontRun.slantDefined )
+        {
+          defaultFont = false;
+          slantOverriden = true;
+          slantIndex = runIndex;
+        }
+        if( fontRun.sizeDefined )
+        {
+          defaultFont = false;
+          sizeOverriden = true;
+          sizeIndex = runIndex;
+        }
       }
-      if( fontRun.weightDefined )
+    }
+
+    // Get the font id if is not the default font.
+    if( !defaultFont )
+    {
+      if( familyOverriden )
       {
-        isDefaultFont = false;
-        weightOverriden = true;
-        weightIndex = runIndex;
+        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex );
+        fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength ); // TODO Could use move constructor when switch to c++11.
       }
-      if( fontRun.widthDefined )
+      else
       {
-        isDefaultFont = false;
-        widthOverriden = true;
-        widthIndex = runIndex;
+        fontDescription.family = defaultFontDescription.family;
       }
-      if( fontRun.slantDefined )
+
+      if( weightOverriden )
       {
-        isDefaultFont = false;
-        slantOverriden = true;
-        slantIndex = runIndex;
+        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex );
+        fontDescription.weight = fontRun.weight;
       }
-      if( fontRun.sizeDefined )
+      else
       {
-        isDefaultFont = false;
-        sizeOverriden = true;
-        sizeIndex = runIndex;
+        fontDescription.weight = defaultFontDescription.weight;
       }
-    }
-  }
 
-  // Get the font's description if is not the default font.
-  if( !isDefaultFont )
-  {
-    if( familyOverriden )
-    {
-      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex );
-      fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength );
-    }
-
-    if( weightOverriden )
-    {
-      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex );
-      fontDescription.weight = fontRun.weight;
-    }
+      if( widthOverriden )
+      {
+        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex );
+        fontDescription.width = fontRun.width;
+      }
+      else
+      {
+        fontDescription.width = defaultFontDescription.width;
+      }
 
-    if( widthOverriden )
-    {
-      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex );
-      fontDescription.width = fontRun.width;
-    }
+      if( slantOverriden )
+      {
+        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex );
+        fontDescription.slant = fontRun.slant;
+      }
+      else
+      {
+        fontDescription.slant = defaultFontDescription.slant;
+      }
 
-    if( slantOverriden )
-    {
-      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex );
-      fontDescription.slant = fontRun.slant;
-    }
+      if( sizeOverriden )
+      {
+        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex );
+        fontSize = fontRun.size;
+      }
+      else
+      {
+        fontSize = defaultPointSize;
+      }
 
-    if( sizeOverriden )
-    {
-      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex );
-      fontPointSize = fontRun.size;
+      *( fontIdsBuffer + index - startIndex ) = fontClient.GetFontId( fontDescription, fontSize );
     }
   }
 }
index 14dee1b..8052638 100644 (file)
@@ -35,23 +35,23 @@ namespace Text
 {
 
 /**
- * @brief Merges font's descriptions to retrieve the combined font's description for a given character.
+ * @brief Merges the font descriptions to retrieve the font Id for each character.
  *
- * @param[in] fontDescriptions The font's descriptions for the whole text.
- * @param[in] defaultFontDescription The default font's description.
- * @param[in] defaultPointSize The default font's point size.
- * @param[in] characterIndex Index to the character to retrieve its font's description.
- * @param[out] fontDescription The font's description for the character.
- * @param[out] fontPointSize The font's point size for the character.
+ * @param[in] fontDescriptions The font descriptions.
+ * @param[out] fontIds The font id for each character.
  * @param[out] isDefaultFont Whether the font is a default one.
+ * @param[in] defaultFontDescription The default font description.
+ * @param[in] defaultPointSize The default font size.
+ * @param[in] startIndex The character from where the fonts are merged.
+ * @param[in] numberOfCharacters The number of characters to set the font.
  */
 void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
+                            Vector<FontId>& fontIds,
+                            Vector<bool>& isDefaultFont,
                             const TextAbstraction::FontDescription& defaultFontDescription,
                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-                            CharacterIndex characterIndex,
-                            TextAbstraction::FontDescription& fontDescription,
-                            TextAbstraction::PointSize26Dot6& fontPointSize,
-                            bool& isDefaultFont );
+                            CharacterIndex startIndex,
+                            Length numberOfCharacters );
 
 /**
  * @brief Retrieves the script Id from the script run for a given character's @p index.
index 750fab7..8b491b0 100644 (file)
@@ -63,9 +63,7 @@ bool ValidateFontsPerScript::IsValidFont( FontId fontId ) const
   return false;
 }
 
-FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient,
-                               const TextAbstraction::FontDescription& description,
-                               PointSize26Dot6 size ) const
+FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient, PointSize26Dot6 size ) const
 {
   for( Vector<FontId>::ConstIterator it = mFonts.Begin(),
          endIt = mFonts.End();
@@ -73,13 +71,7 @@ FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient,
        ++it )
   {
     const FontId fontId = *it;
-    TextAbstraction::FontDescription fontDescription;
-    fontClient.GetDescription( fontId, fontDescription );
-
-    if( ( size == fontClient.GetPointSize( fontId ) ) &&
-        ( description.weight == fontDescription.weight ) &&
-        ( description.width == fontDescription.width ) &&
-        ( description.slant == fontDescription.slant ) )
+    if( size == fontClient.GetPointSize( fontId ) )
     {
       return fontId;
     }
@@ -382,8 +374,7 @@ void MultilanguageSupport::SetScripts( const Vector<Character>& text,
 void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                                           const Vector<ScriptRun>& scripts,
                                           const Vector<FontDescriptionRun>& fontDescriptions,
-                                          const TextAbstraction::FontDescription& defaultFontDescription,
-                                          TextAbstraction::PointSize26Dot6 defaultFontPointSize,
+                                          FontId defaultFontId,
                                           CharacterIndex startIndex,
                                           Length numberOfCharacters,
                                           Vector<FontRun>& fonts )
@@ -433,13 +424,36 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
   // Get the font client.
   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
 
-  const Character* const textBuffer = text.Begin();
+  // Get the default font description and default size.
+  TextAbstraction::FontDescription defaultFontDescription;
+  TextAbstraction::PointSize26Dot6 defaultPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
+  if( defaultFontId > 0u )
+  {
+    fontClient.GetDescription( defaultFontId, defaultFontDescription );
+    defaultPointSize = fontClient.GetPointSize( defaultFontId );
+  }
+
+  // Merge font descriptions
+  Vector<FontId> fontIds;
+  fontIds.Resize( numberOfCharacters, defaultFontId );
+  Vector<bool> isDefaultFont;
+  isDefaultFont.Resize( numberOfCharacters, true );
+  MergeFontDescriptions( fontDescriptions,
+                         fontIds,
+                         isDefaultFont,
+                         defaultFontDescription,
+                         defaultPointSize,
+                         startIndex,
+                         numberOfCharacters );
 
-  // Iterators of the script runs.
+  const Character* const textBuffer = text.Begin();
+  const FontId* const fontIdsBuffer = fontIds.Begin();
+  const bool* const isDefaultFontBuffer = isDefaultFont.Begin();
   Vector<ScriptRun>::ConstIterator scriptRunIt = scripts.Begin();
   Vector<ScriptRun>::ConstIterator scriptRunEndIt = scripts.End();
   bool isNewParagraphCharacter = false;
 
+  PointSize26Dot6 currentPointSize = defaultPointSize;
   FontId currentFontId = 0u;
   FontId previousFontId = 0u;
   bool isPreviousEmojiScript = false;
@@ -454,26 +468,24 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
     // Get the current character.
     const Character character = *( textBuffer + index );
 
-    TextAbstraction::FontDescription currentFontDescription;
-    TextAbstraction::PointSize26Dot6 currentFontPointSize = defaultFontPointSize;
-    bool isDefaultFont = true;
-    MergeFontDescriptions( fontDescriptions,
-                           defaultFontDescription,
-                           defaultFontPointSize,
-                           index,
-                           currentFontDescription,
-                           currentFontPointSize,
-                           isDefaultFont );
-
     // Get the font for the current character.
-    FontId fontId = fontClient.GetFontId( currentFontDescription, currentFontPointSize );
-    currentFontId = fontId;
+    FontId fontId = *( fontIdsBuffer + index - startIndex );
+
+    // Whether the font being validated for the current character is a default one not set by the user.
+    const bool isDefault = *( isDefaultFontBuffer + index - startIndex );
 
     // Get the script for the current character.
     const Script script = GetScript( index,
                                      scriptRunIt,
                                      scriptRunEndIt );
 
+    // Get the current point size.
+    if( currentFontId != fontId )
+    {
+      currentPointSize = fontClient.GetPointSize( fontId );
+      currentFontId = fontId;
+    }
+
 #ifdef DEBUG_ENABLED
     {
       Dali::TextAbstraction::FontDescription description;
@@ -497,9 +509,7 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
     FontId cachedDefaultFontId = 0u;
     if( NULL != defaultFonts )
     {
-      cachedDefaultFontId = defaultFonts->FindFont( fontClient,
-                                                    currentFontDescription,
-                                                    currentFontPointSize );
+      cachedDefaultFontId = defaultFonts->FindFont( fontClient, currentPointSize );
     }
 
     // Whether the cached default font is valid.
@@ -552,7 +562,7 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
       if( isCommonScript )
       {
         if( isValidCachedDefaultFont &&
-            ( isDefaultFont || ( currentFontId == previousFontId ) ) &&
+            ( isDefault || ( currentFontId == previousFontId ) ) &&
             !isEmojiScript )
         {
           // At this point the character common for all scripts has no font assigned.
@@ -621,10 +631,7 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
               const bool preferColor = ( TextAbstraction::EMOJI == script );
 
               // Find a fallback-font.
-              fontId = fontClient.FindFallbackFont( character,
-                                                    currentFontDescription,
-                                                    currentFontPointSize,
-                                                    preferColor );
+              fontId = fontClient.FindFallbackFont( currentFontId, character, currentPointSize, preferColor );
 
               if( 0u == fontId )
               {
@@ -632,15 +639,13 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                 defaultFontsPerScript = *( defaultFontPerScriptCacheBuffer + TextAbstraction::LATIN );
                 if( NULL != defaultFontsPerScript )
                 {
-                  fontId = defaultFontsPerScript->FindFont( fontClient,
-                                                            currentFontDescription,
-                                                            currentFontPointSize );
+                  fontId = defaultFontsPerScript->FindFont( fontClient, currentPointSize );
                 }
               }
 
               if( 0u == fontId )
               {
-                fontId = fontClient.FindDefaultFont( UTF32_A, currentFontPointSize );
+                fontId = fontClient.FindDefaultFont( UTF32_A, currentPointSize );
               }
 
               // Cache the font.
index 3f568a2..ff5e94d 100644 (file)
@@ -94,14 +94,11 @@ struct DefaultFonts
    * @brief Finds a default font for the given @p size.
    *
    * @param[in] fontClient The font client.
-   * @param[in] description The font's description.
    * @param[in] size The given size.
    *
    * @return The font id of a default font for the given @p size. If there isn't any font cached it returns 0.
    */
-  FontId FindFont( TextAbstraction::FontClient& fontClient,
-                   const TextAbstraction::FontDescription& description,
-                   PointSize26Dot6 size ) const;
+  FontId FindFont( TextAbstraction::FontClient& fontClient, PointSize26Dot6 size ) const;
 
   Vector<FontId> mFonts;
 };
@@ -144,8 +141,7 @@ public:
   void ValidateFonts( const Vector<Character>& text,
                       const Vector<ScriptRun>& scripts,
                       const Vector<FontDescriptionRun>& fontDescriptions,
-                      const TextAbstraction::FontDescription& defaultFontDescription,
-                      TextAbstraction::PointSize26Dot6 defaultFontPointSize,
+                      FontId defaultFontId,
                       CharacterIndex startIndex,
                       Length numberOfCharacters,
                       Vector<FontRun>& fonts );
index 795e7ae..e612054 100644 (file)
@@ -62,8 +62,7 @@ void MultilanguageSupport::SetScripts( const Vector<Character>& text,
 void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                                           const Vector<ScriptRun>& scripts,
                                           const Vector<FontDescriptionRun>& fontDescriptions,
-                                          const TextAbstraction::FontDescription& defaultFontDescription,
-                                          TextAbstraction::PointSize26Dot6 defaultFontPointSize,
+                                          FontId defaultFontId,
                                           CharacterIndex startIndex,
                                           Length numberOfCharacters,
                                           Vector<FontRun>& fonts )
@@ -71,8 +70,7 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
   GetImplementation( *this ).ValidateFonts( text,
                                             scripts,
                                             fontDescriptions,
-                                            defaultFontDescription,
-                                            defaultFontPointSize,
+                                            defaultFontId,
                                             startIndex,
                                             numberOfCharacters,
                                             fonts );
index 718ecdb..d4fd1c7 100644 (file)
@@ -112,9 +112,8 @@ public:
    *
    * @param[in] text Vector of UTF-32 characters.
    * @param[in] scripts Vector containing the script runs for the whole text.
-   * @param[in] fontDescriptions The fonts set through the mark-up string or the input style set through the property system.
-   * @param[in] defaultFontDescription The default font's description set through the property system.
-   * @param[in] defaultFontPointSize The default font's point size set through the property system.
+   * @param[in] fontDescriptions The fonts set by the application developers.
+   * @param[in] defaultFontId The default font's id.
    * @param[in] startIndex The character from where the font info is set.
    * @param[in] numberOfCharacters The number of characters to set the font.
    * @param[out] fonts The validated fonts.
@@ -122,8 +121,7 @@ public:
   void ValidateFonts( const Vector<Character>& text,
                       const Vector<ScriptRun>& scripts,
                       const Vector<FontDescriptionRun>& fontDescriptions,
-                      const TextAbstraction::FontDescription& defaultFontDescription,
-                      TextAbstraction::PointSize26Dot6 defaultFontPointSize,
+                      FontId defaultFontId,
                       CharacterIndex startIndex,
                       Length numberOfCharacters,
                       Vector<FontRun>& fonts );
index 14670ae..95115da 100644 (file)
@@ -824,22 +824,15 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
       // Validate the fonts set through the mark-up string.
       Vector<FontDescriptionRun>& fontDescriptionRuns = mLogicalModel->mFontDescriptionRuns;
 
-      // Get the default font's description.
-      TextAbstraction::FontDescription defaultFontDescription;
-      TextAbstraction::PointSize26Dot6 defaultPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
-      if( NULL != mFontDefaults )
-      {
-        defaultFontDescription = mFontDefaults->mFontDescription;
-        defaultPointSize = mFontDefaults->mDefaultPointSize * 64u;
-      }
+      // Get the default font id.
+      const FontId defaultFontId = ( NULL == mFontDefaults ) ? 0u : mFontDefaults->GetFontId( mFontClient );
 
       // Validates the fonts. If there is a character with no assigned font it sets a default one.
       // After this call, fonts are validated.
       multilanguageSupport.ValidateFonts( utf32Characters,
                                           scripts,
                                           fontDescriptionRuns,
-                                          defaultFontDescription,
-                                          defaultPointSize,
+                                          defaultFontId,
                                           startIndex,
                                           requestedNumberOfCharacters,
                                           validFonts );
index f6544cb..4c0316f 100644 (file)
@@ -428,7 +428,7 @@ void Controller::SetDefaultFontFamily( const std::string& defaultFontFamily )
 
   mImpl->mFontDefaults->mFontDescription.family = defaultFontFamily;
   DALI_LOG_INFO( gLogFilter, Debug::General, "Controller::SetDefaultFontFamily %s\n", defaultFontFamily.c_str());
-  mImpl->mFontDefaults->familyDefined = !defaultFontFamily.empty();
+  mImpl->mFontDefaults->familyDefined = true;
 
   // Clear the font-specific data
   ClearFontData();
index 190a3f3..b31decb 100644 (file)
@@ -78,7 +78,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Weight key
       Property::Value* weightValue = map.Find( WEIGHT_KEY );
 
-      FontWeight weight = TextAbstraction::FontWeight::NONE;
+      FontWeight weight = TextAbstraction::FontWeight::NORMAL;
       const bool weightDefined = weightValue != NULL;
       if( weightDefined )
       {
@@ -93,7 +93,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Width key
       Property::Value* widthValue = map.Find( WIDTH_KEY );
 
-      FontWidth width = TextAbstraction::FontWidth::NONE;
+      FontWidth width = TextAbstraction::FontWidth::NORMAL;
       const bool widthDefined = widthValue != NULL;
       if( widthDefined )
       {
@@ -108,7 +108,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Slant key
       Property::Value* slantValue = map.Find( SLANT_KEY );
 
-      FontSlant slant = TextAbstraction::FontSlant::NONE;
+      FontSlant slant = TextAbstraction::FontSlant::NORMAL;
       const bool slantDefined = slantValue != NULL;
       if( slantDefined )
       {
@@ -125,20 +125,17 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
         case FontStyle::DEFAULT:
         {
           // Sets the default font's style values.
-          if( !weightDefined ||
-              ( weightDefined && ( controller->GetDefaultFontWeight() != weight ) ) )
+          if( weightDefined && ( controller->GetDefaultFontWeight() != weight ) )
           {
             controller->SetDefaultFontWeight( weight );
           }
 
-          if( !widthDefined ||
-              ( widthDefined && ( controller->GetDefaultFontWidth() != width ) ) )
+          if( widthDefined && ( controller->GetDefaultFontWidth() != width ) )
           {
             controller->SetDefaultFontWidth( width );
           }
 
-          if( !slantDefined ||
-              ( slantDefined && ( controller->GetDefaultFontSlant() != slant ) ) )
+          if( slantDefined && ( controller->GetDefaultFontSlant() != slant ) )
           {
             controller->SetDefaultFontSlant( slant );
           }
@@ -147,46 +144,23 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
         case FontStyle::INPUT:
         {
           // Sets the input font's style values.
-          if( !weightDefined ||
-              ( weightDefined && ( controller->GetInputFontWeight() != weight ) ) )
+          if( weightDefined && ( controller->GetInputFontWeight() != weight ) )
           {
             controller->SetInputFontWeight( weight );
           }
 
-          if( !widthDefined ||
-              ( widthDefined && ( controller->GetInputFontWidth() != width ) ) )
+          if( widthDefined && ( controller->GetInputFontWidth() != width ) )
           {
             controller->SetInputFontWidth( width );
           }
 
-          if( !slantDefined ||
-              ( slantDefined && ( controller->GetInputFontSlant() != slant ) ) )
+          if( slantDefined && ( controller->GetInputFontSlant() != slant ) )
           {
             controller->SetInputFontSlant( slant );
           }
           break;
         }
       }
-    } // map not empty
-    else
-    {
-      switch( type )
-      {
-        case FontStyle::DEFAULT:
-        {
-          controller->SetDefaultFontWeight( TextAbstraction::FontWeight::NONE );
-          controller->SetDefaultFontWidth( TextAbstraction::FontWidth::NONE );
-          controller->SetDefaultFontSlant( TextAbstraction::FontSlant::NONE );
-          break;
-        }
-        case FontStyle::INPUT:
-        {
-          controller->SetInputFontWeight( TextAbstraction::FontWeight::NONE );
-          controller->SetInputFontWidth( TextAbstraction::FontWidth::NONE );
-          controller->SetInputFontSlant( TextAbstraction::FontSlant::NONE );
-          break;
-        }
-      }
     }
   }
 }