[dali_1.9.1] Merge branch 'devel/master' 62/226262/1
authorGyörgy Straub <g.straub@partner.samsung.com>
Fri, 28 Feb 2020 09:10:22 +0000 (09:10 +0000)
committerGyörgy Straub <g.straub@partner.samsung.com>
Fri, 28 Feb 2020 09:10:22 +0000 (09:10 +0000)
Change-Id: I33173f6cd46f1b79dc4d1c490183799707c594e0

34 files changed:
automated-tests/resources/fonts/noto/LICENSE_OFL.txt [new file with mode: 0644]
automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/LICENSE [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Bold.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Italic.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Regular.ttf [new file with mode: 0644]
automated-tests/src/dali-toolkit-internal/CMakeLists.txt
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-CharacterSetConversion.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.cpp
automated-tests/src/dali-toolkit-styling/CMakeLists.txt
automated-tests/src/dali-toolkit/CMakeLists.txt
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-feedback-player.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-input-method-context.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-input-method-context.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.cpp [deleted file]
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.h [deleted file]
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-sound-player.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-test-application.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-text-abstraction.cpp
dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.cpp
dali-toolkit/devel-api/visual-factory/visual-factory.cpp
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp
dali-toolkit/internal/styling/style-manager-impl.cpp
dali-toolkit/internal/text/character-set-conversion.cpp
dali-toolkit/internal/text/layouts/layout-engine.cpp
dali-toolkit/internal/text/multi-language-support-impl.cpp
dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.cpp
dali-toolkit/internal/text/rendering/text-backend-impl.cpp
dali-toolkit/internal/text/rendering/vector-based/vector-blob-atlas-share.cpp
dali-toolkit/internal/text/text-controller-impl.cpp
dali-toolkit/public-api/accessibility-manager/accessibility-manager.cpp
dali-toolkit/public-api/dali-toolkit-version.cpp
packaging/dali-toolkit.spec

diff --git a/automated-tests/resources/fonts/noto/LICENSE_OFL.txt b/automated-tests/resources/fonts/noto/LICENSE_OFL.txt
new file mode 100644 (file)
index 0000000..d952d62
--- /dev/null
@@ -0,0 +1,92 @@
+This Font Software is licensed under the SIL Open Font License,
+Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font
+creation efforts of academic and linguistic communities, and to
+provide a free and open framework in which fonts may be shared and
+improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply to
+any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software
+components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to,
+deleting, or substituting -- in part or in whole -- any of the
+components of the Original Version, by changing formats or by porting
+the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed,
+modify, redistribute, and sell modified and unmodified copies of the
+Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in
+Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the
+corresponding Copyright Holder. This restriction only applies to the
+primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created using
+the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf b/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf
new file mode 100644 (file)
index 0000000..be82967
Binary files /dev/null and b/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/LICENSE b/automated-tests/resources/fonts/roboto/LICENSE
new file mode 100644 (file)
index 0000000..261eeb9
--- /dev/null
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf b/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf
new file mode 100644 (file)
index 0000000..8869666
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf b/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf
new file mode 100644 (file)
index 0000000..f7f845a
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf b/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf
new file mode 100644 (file)
index 0000000..a76d286
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf b/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf
new file mode 100644 (file)
index 0000000..ddee473
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf differ
index 9954a74..650bbee 100755 (executable)
@@ -47,7 +47,6 @@ LIST(APPEND TC_SOURCES
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-orientation.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-physical-keyboard.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-style-monitor.cpp
-   ../dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-test-application.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-timer.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-tts-player.cpp
index 3175baf..f3725d2 100755 (executable)
@@ -134,6 +134,8 @@ int UtcDaliTextCharacterSetConversionGetUtf8Length(void)
   const static uint8_t U2 = 2u;
   const static uint8_t U3 = 3u;
   const static uint8_t U4 = 4u;
+  const static uint8_t U5 = 5u;
+  const static uint8_t U6 = 6u;
   const static uint8_t U0 = 0u;
   const static uint8_t UTF8_LENGTH[256] = {
     U1, U1, U1, U1, U1, U1, U1, U1, U1, U1, //
@@ -167,8 +169,11 @@ int UtcDaliTextCharacterSetConversionGetUtf8Length(void)
 
     U4, U4, U4, U4, U4, U4, U4, U4,         // lead byte = 1111 0xxx (U+10000 - U+1FFFFF)
 
-    U0, U0, U0, U0,                         // Non valid.
-    U0, U0, U0, U0,                         // Non valid.
+    U5, U5, U5, U5,                         // lead byte = 1111 10xx (U+200000 - U+3FFFFFF)
+
+    U6, U6,                                 // lead byte = 1111 110x (U+4000000 - U+7FFFFFFF)
+
+    U0, U0,                                 // Non valid.
   };
 
   for( unsigned int index = 0; index < 256u; ++index )
@@ -211,8 +216,18 @@ int UtcDaliTextCharacterSetConversionGetNumberOfUtf8Characters(void)
       "\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84",
       7u,
     },
+    {
+      "5 bytes test",
+      "\xF8\xA0\x80\x80\x80",
+      1u,
+    },
+    {
+      "6 bytes test",
+      "\xFC\x84\x80\x80\x80\x80",
+      1u,
+    },
   };
-  const unsigned int numberOfTests = 4u;
+  const unsigned int numberOfTests = 6u;
 
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
@@ -235,6 +250,8 @@ int UtcDaliTextCharacterSetConversionGetNumberOfUtf8Bytes(void)
   unsigned int utf32_02[] = { 0x645, 0x631, 0x62D, 0x628, 0x627, 0x20, 0x628, 0x627, 0x644, 0x639, 0x627, 0x644, 0x645 }; // مرحبا بالعالم
   unsigned int utf32_03[] = { 0x939, 0x948, 0x932, 0x94B, 0x20, 0x935, 0x930, 0x94D, 0x932, 0x94D, 0x921 }; // हैलो वर्ल्ड
   unsigned int utf32_04[] = { 0x1F601, 0x20, 0x1F602, 0x20, 0x1F603, 0x20, 0x1F604 }; // Emojis
+  unsigned int utf32_05[] = { 0x800000 };
+  unsigned int utf32_06[] = { 0x4000000 };
 
   const GetNumberOfUtf8BytesData data[] =
   {
@@ -262,8 +279,20 @@ int UtcDaliTextCharacterSetConversionGetNumberOfUtf8Bytes(void)
       7u,
       19u,
     },
+    {
+      "5 bytes test",
+      utf32_05,
+      1u,
+      5u,
+    },
+    {
+      "6 bytes test",
+      utf32_06,
+      1u,
+      6u
+    },
   };
-  const unsigned int numberOfTests = 4u;
+  const unsigned int numberOfTests = 6u;
 
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
@@ -282,14 +311,16 @@ int UtcDaliTextCharacterSetConversionUtf8ToUtf32(void)
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliTextCharacterSetConversionGetNumberOfUtf8Bytes");
 
-  char utf8_06[] = { -8, -7, -6, -5, -4, -3, -2, -1 }; // Invalid string
+  char utf8_06[] = { -2, -1 }; // Invalid string
 
   unsigned int utf32_01[] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 }; // Hello World
   unsigned int utf32_02[] = { 0xA, 0x20, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0xA, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 }; // Hello World + CR and CR+LF
   unsigned int utf32_03[] = { 0x645, 0x631, 0x62D, 0x628, 0x627, 0x20, 0x628, 0x627, 0x644, 0x639, 0x627, 0x644, 0x645 }; // مرحبا بالعالم
   unsigned int utf32_04[] = { 0x939, 0x948, 0x932, 0x94B, 0x20, 0x935, 0x930, 0x94D, 0x932, 0x94D, 0x921 }; // हैलो वर्ल्ड
   unsigned int utf32_05[] = { 0x1F601, 0x20, 0x1F602, 0x20, 0x1F603, 0x20, 0x1F604 }; // Emojis
-  unsigned int utf32_06[] = { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; // Invalid string
+  unsigned int utf32_06[] = { 0x800000 };
+  unsigned int utf32_07[] = { 0x4000000 };
+  unsigned int utf32_08[] = { 0x20, 0x20 }; // Invalid string
 
   const Utf8ToUtf32Data data[] =
   {
@@ -319,12 +350,22 @@ int UtcDaliTextCharacterSetConversionUtf8ToUtf32(void)
       utf32_05,
     },
     {
+      "5 bytes test",
+      "\xF8\xA0\x80\x80\x80",
+      utf32_06,
+    },
+    {
+      "6 bytes test",
+      "\xFC\x84\x80\x80\x80\x80",
+      utf32_07,
+    },
+    {
       "Invalid text",
       utf8_06,
-      utf32_06,
+      utf32_08,
     },
   };
-  const unsigned int numberOfTests = 6u;
+  const unsigned int numberOfTests = 8u;
 
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
@@ -347,6 +388,8 @@ int UtcDaliTextCharacterSetConversionUtf32ToUtf8(void)
   unsigned int utf32_02[] = { 0x645, 0x631, 0x62D, 0x628, 0x627, 0x20, 0x628, 0x627, 0x644, 0x639, 0x627, 0x644, 0x645 }; // مرحبا بالعالم
   unsigned int utf32_03[] = { 0x939, 0x948, 0x932, 0x94B, 0x20, 0x935, 0x930, 0x94D, 0x932, 0x94D, 0x921 }; // हैलो वर्ल्ड
   unsigned int utf32_04[] = { 0x1F601, 0x20, 0x1F602, 0x20, 0x1F603, 0x20, 0x1F604 }; // Emojis
+  unsigned int utf32_05[] = { 0x800000 };
+  unsigned int utf32_06[] = { 0x4000000 };
 
   struct Utf32ToUtf8Data data[] =
   {
@@ -374,9 +417,21 @@ int UtcDaliTextCharacterSetConversionUtf32ToUtf8(void)
       7u,
       "\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84",
     },
+    {
+      "5 bytes test",
+      utf32_05,
+      1u,
+      "\xF8\xA0\x80\x80\x80",
+    },
+    {
+      "6 bytes test",
+      utf32_06,
+      1u,
+      "\xFC\x84\x80\x80\x80\x80",
+    },
   };
 
-  const unsigned int numberOfTests = 4u;
+  const unsigned int numberOfTests = 6u;
 
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
index 2bdd217..9dd7d57 100755 (executable)
@@ -17,6 +17,7 @@
 
 #include <iostream>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include <dali-toolkit/internal/text/shaper.h>
 #include <dali-toolkit-test-suite-utils.h>
@@ -44,6 +45,7 @@ using namespace Text;
 
 namespace
 {
+const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
 
 struct GlyphInfoData
 {
@@ -130,6 +132,7 @@ bool ShapeInfoTest( const ShapeInfoData& data )
 
   const Vector<FontDescriptionRun> fontDescriptions;
   const LayoutOptions options;
+
   CreateTextModel( data.text,
                    textArea,
                    data.fontDescriptions,
@@ -236,6 +239,33 @@ bool ShapeInfoTest( const ShapeInfoData& data )
     if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) )
     {
       std::cout << "  different glyph info, index : " << index << std::endl;
+
+      const GlyphInfo& glyphInfo = glyphs[index];
+      std::cout << "            fontId : " << glyphInfo.fontId << std::endl;
+      std::cout << "             index : " << glyphInfo.index << std::endl;
+      std::cout << "             width : " << glyphInfo.width << std::endl;
+      std::cout << "            height : " << glyphInfo.height << std::endl;
+      std::cout << "          xBearing : " << glyphInfo.xBearing << std::endl;
+      std::cout << "          yBearing : " << glyphInfo.yBearing << std::endl;
+      std::cout << "           advance : " << glyphInfo.advance << std::endl;
+      std::cout << "       scaleFactor : " << glyphInfo.scaleFactor << std::endl;
+      std::cout << "  isItalicRequired : " << glyphInfo.isItalicRequired << std::endl;
+      std::cout << "    isBoldRequired : " << glyphInfo.isBoldRequired << std::endl;
+
+      std::cout << "  Expected : " << std::endl;
+      const GlyphInfoData& expectedGlyphInfo = data.glyphs[index];
+      std::cout << "            fontId : " << expectedGlyphInfo.fontId << std::endl;
+      std::cout << "             index : " << expectedGlyphInfo.index << std::endl;
+      std::cout << "             width : " << expectedGlyphInfo.width << std::endl;
+      std::cout << "            height : " << expectedGlyphInfo.height << std::endl;
+      std::cout << "          xBearing : " << expectedGlyphInfo.xBearing << std::endl;
+      std::cout << "          yBearing : " << expectedGlyphInfo.yBearing << std::endl;
+      std::cout << "           advance : " << expectedGlyphInfo.advance << std::endl;
+      std::cout << "       scaleFactor : " << expectedGlyphInfo.scaleFactor << std::endl;
+      std::cout << "  isItalicRequired : " << expectedGlyphInfo.isItalicRequired << std::endl;
+      std::cout << "    isBoldRequired : " << expectedGlyphInfo.isBoldRequired << std::endl;
+
+
       return false;
     }
   }
@@ -276,6 +306,34 @@ bool ShapeInfoTest( const ShapeInfoData& data )
   return true;
 }
 
+void LoadTextShapeFonts()
+{
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.SetDpi( 96u, 96u );
+
+  char* pathNamePtr = get_current_dir_name();
+  const std::string pathName( pathNamePtr );
+  free( pathNamePtr );
+
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/noto/NotoSansMalayalam-Regular.ttf" );
+}
+
+void LoadSoftwareStylingFonts()
+{
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.SetDpi( 96u, 96u );
+
+  char* pathNamePtr = get_current_dir_name();
+  const std::string pathName( pathNamePtr );
+  free( pathNamePtr );
+
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Regular.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Bold.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Italic.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-BoldItalic.ttf" );
+}
+
 } // namespace
 
 //////////////////////////////////////////////////////////
@@ -286,17 +344,17 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs02[] =
   {
-    { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
+    { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
   };
 
   CharacterIndex characterIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
@@ -304,23 +362,23 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs03[] =
   {
-    { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
+    { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
   };
 
   CharacterIndex characterIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u };
@@ -329,18 +387,18 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs04[] =
   {
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1693u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1721u, 0.f, 0.f, 0.f, 0.f, 20.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1722u, 0.f, 0.f, 0.f, 0.f, 18.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1718u, 0.f, 0.f, 0.f, 0.f, 14.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 27u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 55u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 56u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 52u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
   };
 
   CharacterIndex characterIndices04[] = { 0u, 0u, 0u, 2u, 2u, 2u, 4u, 4u, 4u, 6u, 6u, 6u };
@@ -348,79 +406,79 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs05[] =
   {
-    { 1u, 47u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 87u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 87u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 280u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 310u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 314u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 314u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 84u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 5039u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 69u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 311u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 403u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 296u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 70u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 70u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 17u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 310u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 297u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 297u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  4u, 0.f, 0.f, 0.f, 0.f,  3.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
   };
 
@@ -444,6 +502,160 @@ int UtcDaliTextShape(void)
   CharacterIndex newParagraphGlyphs06[] = { 49u };
   CharacterIndex newParagraphGlyphs07[] = { 73u };
 
+  Vector<FontDescriptionRun> fontDescriptions01;
+  Vector<FontDescriptionRun> fontDescriptions02;
+  Vector<FontDescriptionRun> fontDescriptions03;
+  Vector<FontDescriptionRun> fontDescriptions04;
+  Vector<FontDescriptionRun> fontDescriptions05;
+  Vector<FontDescriptionRun> fontDescriptions06;
+
+  const std::string fontFamily( "TizenSans" );
+  const std::string fontFamilyMalayalam( "Noto Sans Malayalam" );
+
+  FontDescriptionRun fontDescriptionRun01 =
+  {
+    {
+      0u,
+      11u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun01.familyLength = fontFamily.size();
+  fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+  memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
+
+  fontDescriptions01.PushBack( fontDescriptionRun01 );
+
+  FontDescriptionRun fontDescriptionRun02 =
+  {
+    {
+      0u,
+      17u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun02.familyLength = fontFamily.size();
+  fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+  memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+
+  fontDescriptions02.PushBack( fontDescriptionRun02 );
+
+  FontDescriptionRun fontDescriptionRun03 =
+  {
+    {
+      0u,
+      8u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun03.familyLength = fontFamilyMalayalam.size();
+  fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+  memcpy( fontDescriptionRun03.familyName, fontFamilyMalayalam.c_str(), fontDescriptionRun03.familyLength );
+
+  fontDescriptions03.PushBack( fontDescriptionRun03 );
+
+  FontDescriptionRun fontDescriptionRun04 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun04.familyLength = fontFamily.size();
+  fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+  memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength );
+
+  fontDescriptions04.PushBack( fontDescriptionRun04 );
+
+  FontDescriptionRun fontDescriptionRun05 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun05.familyLength = fontFamily.size();
+  fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+  memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength );
+
+  fontDescriptions05.PushBack( fontDescriptionRun05 );
+
+  FontDescriptionRun fontDescriptionRun06 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun06.familyLength = fontFamily.size();
+  fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+  memcpy( fontDescriptionRun06.familyName, fontFamily.c_str(), fontDescriptionRun06.familyLength );
+
+  fontDescriptions06.PushBack( fontDescriptionRun06 );
+
   struct ShapeInfoData data[] =
   {
     {
@@ -452,11 +664,11 @@ int UtcDaliTextShape(void)
       0u,
       0u,
       0u,
-      NULL,
-      NULL,
-      NULL,
+      nullptr,
+      nullptr,
+      nullptr,
       0u,
-      NULL
+      nullptr
     },
     {
       "Latin script",
@@ -468,7 +680,8 @@ int UtcDaliTextShape(void)
       characterIndices02,
       charactersPerGlyph02,
       0u,
-      NULL
+      nullptr,
+      fontDescriptions01
     },
     {
       "Latin script. Some paragraphs.",
@@ -480,7 +693,8 @@ int UtcDaliTextShape(void)
       characterIndices03,
       charactersPerGlyph03,
       2u,
-      newParagraphGlyphs03
+      newParagraphGlyphs03,
+      fontDescriptions02
     },
     {
       "Malayalam script. More glyphs than characters.",
@@ -492,7 +706,8 @@ int UtcDaliTextShape(void)
       characterIndices04,
       charactersPerGlyph04,
       0u,
-      NULL
+      nullptr,
+      fontDescriptions03
     },
     {
       "Latin script with some paragraphs. Update initial paragraph.",
@@ -504,7 +719,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs05
+      newParagraphGlyphs05,
+      fontDescriptions04
     },
     {
       "Latin script with some paragraphs. Update mid paragraph.",
@@ -516,7 +732,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs06
+      newParagraphGlyphs06,
+      fontDescriptions05
     },
     {
       "Latin script with some paragraphs. Update final paragraph.",
@@ -528,7 +745,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs07
+      newParagraphGlyphs07,
+      fontDescriptions06
     },
   };
   const unsigned int numberOfTests = 7u;
@@ -536,6 +754,8 @@ int UtcDaliTextShape(void)
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
+    LoadTextShapeFonts();
+
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);
@@ -552,41 +772,49 @@ int UtcDaliTextSoftwareStyling(void)
 
   struct GlyphInfoData glyphs01[] =
   {
-    { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
-    { 2u, 12298u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
-    { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
+    { 4u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+    { 4u, 39u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f, true, true },
+    { 4u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+    { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
   };
   struct GlyphInfoData glyphs02[] =
   {
-    { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, false },
-    { 2u, 12298u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, true },
-    { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true,  false },
+    { 1u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false, false },
+    { 2u, 39u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false,  true },
+    { 3u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true,  false },
+    { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true,   true },
   };
 
-  CharacterIndex characterIndices[] = { 0u, 1u, 2u };
-  Length charactersPerGlyph[] = { 1u, 1u, 1u };
+  CharacterIndex characterIndices[] = { 0u, 1u, 2u, 3u };
+  Length charactersPerGlyph[] = { 1u, 1u, 1u, 1u };
 
   Vector<FontDescriptionRun> fontDescriptions01;
   Vector<FontDescriptionRun> fontDescriptions02;
 
+  const std::string fontFamily( "Roboto" );
+
   FontDescriptionRun fontDescriptionRun01 =
   {
     {
       0u,
-      3u
+      4u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     true,
     false,
     true,
     false
   };
+  fontDescriptionRun01.familyLength = fontFamily.size();
+  fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+  memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
+
   fontDescriptions01.PushBack(fontDescriptionRun01);
 
   FontDescriptionRun fontDescriptionRun02 =
@@ -595,86 +823,120 @@ int UtcDaliTextSoftwareStyling(void)
       0u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     false,
     false,
     false,
     false
   };
+  fontDescriptionRun02.familyLength = fontFamily.size();
+  fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+  memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+
   FontDescriptionRun fontDescriptionRun03 =
   {
     {
       1u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     true,
     false,
     false,
     false
   };
+  fontDescriptionRun03.familyLength = fontFamily.size();
+  fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+  memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
+
   FontDescriptionRun fontDescriptionRun04 =
   {
     {
       2u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
     false,
     false,
+    true,
+    false
+  };
+  fontDescriptionRun04.familyLength = fontFamily.size();
+  fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+  memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength );
+
+  FontDescriptionRun fontDescriptionRun05 =
+  {
+    {
+      3u,
+      1u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::BOLD,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::ITALIC,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    true,
     false,
     true,
     false
   };
+  fontDescriptionRun05.familyLength = fontFamily.size();
+  fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+  memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength );
 
   fontDescriptions02.PushBack(fontDescriptionRun02);
   fontDescriptions02.PushBack(fontDescriptionRun03);
   fontDescriptions02.PushBack(fontDescriptionRun04);
+  fontDescriptions02.PushBack(fontDescriptionRun05);
 
 
   struct ShapeInfoData data[] =
   {
     {
-      "Chiness script. Characters have same font description",
-      "未取得",
+      "Latin script. Characters have same font description",
+      "ABCD",
       0u,
-      3u,
-      3u,
+      4u,
+      4u,
       glyphs01,
       characterIndices,
       charactersPerGlyph,
       0u,
-      NULL,
+      nullptr,
       fontDescriptions01
     },
     {
-      "Chiness script. Each character has different font description.",
-      "未取得",
+      "Latin script. Each character has different font description.",
+      "ABCD",
       0u,
-      3u,
-      3u,
+      4u,
+      4u,
       glyphs02,
       characterIndices,
       charactersPerGlyph,
       0u,
-      NULL,
+      nullptr,
       fontDescriptions02
     }
   };
@@ -684,6 +946,8 @@ int UtcDaliTextSoftwareStyling(void)
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
+    LoadSoftwareStylingFonts();
+
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);
index 0b08ff4..b4414fe 100644 (file)
@@ -28,7 +28,6 @@ LIST(APPEND TC_SOURCES
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-orientation.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-physical-keyboard.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-style-monitor.cpp
-   ../dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-sound-player.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-test-application.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-text-abstraction.cpp
index 7177d8c..76492c3 100755 (executable)
@@ -86,7 +86,6 @@ LIST(APPEND TC_SOURCES
   dali-toolkit-test-utils/toolkit-orientation.cpp
   dali-toolkit-test-utils/toolkit-physical-keyboard.cpp
   dali-toolkit-test-utils/toolkit-style-monitor.cpp
-  dali-toolkit-test-utils/toolkit-singleton-service.cpp
   dali-toolkit-test-utils/toolkit-test-application.cpp
   dali-toolkit-test-utils/toolkit-timer.cpp
   dali-toolkit-test-utils/toolkit-trigger-event-factory.cpp
index 999249a..9111d8d 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 #include <dali/devel-api/adaptor-framework/feedback-player.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/public-api/object/base-object.h>
 
 using namespace Dali;
index 2446f29..0f74724 100755 (executable)
@@ -60,7 +60,7 @@ public:
   void ApplyOptions( const InputMethodOptions& options );
   bool FilterEventKey( const Dali::KeyEvent& keyEvent );
   void SetPreeditStyle( Dali::InputMethodContext::PreeditStyle type );
-  void GetPreeditStyle( Vector< Dali::InputMethodContext::PreeditAttributeData >& attrs ) const;
+  void GetPreeditStyle( Dali::InputMethodContext::PreEditAttributeDataContainer& attrs ) const;
 
 public:  // Signals
   ActivatedSignalType& ActivatedSignal() { return mActivatedSignal; }
@@ -87,7 +87,7 @@ private:
   bool mRestoreAfterFocusLost:1;             ///< Whether the keyboard needs to be restored (activated ) after focus regained.
   bool mIdleCallbackConnected:1;             ///< Whether the idle callback is already connected.
   InputMethodOptions        mOptions;
-  Vector< Dali::InputMethodContext::PreeditAttributeData > mPreeditAttrs; ///< Stores preedit attr data
+  Dali::InputMethodContext::PreEditAttributeDataContainer mPreeditAttrs; ///< Stores preedit attribute data
 
   ActivatedSignalType      mActivatedSignal;
   KeyboardEventSignalType  mEventSignal;
@@ -223,7 +223,7 @@ void InputMethodContext::SetPreeditStyle( Dali::InputMethodContext::PreeditStyle
   mPreeditAttrs.PushBack( data );
 }
 
-void InputMethodContext::GetPreeditStyle( Vector< Dali::InputMethodContext::PreeditAttributeData >& attrs ) const
+void InputMethodContext::GetPreeditStyle( Dali::InputMethodContext::PreEditAttributeDataContainer& attrs ) const
 {
   attrs = mPreeditAttrs;
 }
@@ -328,7 +328,7 @@ void InputMethodContext::SetPreeditStyle( Dali::InputMethodContext::PreeditStyle
   Internal::Adaptor::InputMethodContext::GetImplementation(*this).SetPreeditStyle( type );
 }
 
-void InputMethodContext::GetPreeditStyle( Vector< Dali::InputMethodContext::PreeditAttributeData >& attrs ) const
+void InputMethodContext::GetPreeditStyle( Dali::InputMethodContext::PreEditAttributeDataContainer& attrs ) const
 {
   Internal::Adaptor::InputMethodContext::GetImplementation(*this).GetPreeditStyle( attrs );
 }
index 395ad4d..d53e02a 100755 (executable)
@@ -117,9 +117,16 @@ public:
    */
   struct PreeditAttributeData
   {
-    PreeditStyle preeditType; /// The preedit style type
-    unsigned int startIndex;  /// The start index of preedit
-    unsigned int endIndex;    /// The end index of preedit
+    PreeditAttributeData()
+    : preeditType( PreeditStyle::NONE ),
+      startIndex( 0 ),
+      endIndex( 0 )
+    {
+    }
+
+    PreeditStyle preeditType;  /// The preedit style type
+    unsigned int startIndex;   /// The start index of preedit
+    unsigned int endIndex;     /// The end index of preedit
   };
 
   /**
@@ -203,6 +210,8 @@ public:
   typedef Signal< void () > VoidSignalType;
   typedef Signal< void (bool) > StatusSignalType;
 
+  using PreEditAttributeDataContainer = Vector< Dali::InputMethodContext::PreeditAttributeData >;
+
 public:
 
   /**
@@ -323,11 +332,11 @@ public:
   void SetPreeditStyle( PreeditStyle type );
 
   /**
-   * @brief Gets the preedit attrs data.
+   * @brief Gets the preedit attributes data.
    *
-   * @param[out] attrs The preedit attrs data.
+   * @param[out] attrs The preedit attributes data.
    */
-  void GetPreeditStyle( Vector<PreeditAttributeData>& attrs ) const;
+  void GetPreeditStyle( Dali::InputMethodContext::PreEditAttributeDataContainer& attrs ) const;
 
 public:
 
diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.cpp
deleted file mode 100644 (file)
index 7ba5ca4..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <toolkit-singleton-service.h>
-
-#include <dali-toolkit/public-api/dali-toolkit-common.h>
-#include <dali/public-api/object/base-object.h>
-#include <dali/devel-api/common/map-wrapper.h>
-#include <dali/public-api/signals/dali-signal.h>
-#include <dali/integration-api/processor-interface.h>
-
-namespace Dali
-{
-
-
-namespace Internal
-{
-namespace Adaptor
-{
-
-namespace
-{
-Dali::IntrusivePtr<SingletonService> gSingletonService;
-} // unnamed namespace
-
-
-class SingletonService : public Dali::BaseObject
-{
-public:
-
-  /**
-   * Create a SingletonService.
-   * This should only be called once by the Application class.
-   * @return A newly created SingletonService.
-   */
-  static Dali::SingletonService New()
-  {
-    DALI_ASSERT_ALWAYS( 0 && "SingletonService New method used");
-    gSingletonService = Dali::IntrusivePtr<SingletonService>( new SingletonService() );
-    return Dali::SingletonService( gSingletonService.Get() );
-  }
-
-  /**
-   * @copydoc Dali::SingletonService::Get()
-   */
-  static Dali::SingletonService Get()
-  {
-    Dali::SingletonService singletonService;
-    if ( !gSingletonService )
-    {
-      gSingletonService = Dali::IntrusivePtr<SingletonService>( new SingletonService() );
-    }
-    return Dali::SingletonService( gSingletonService.Get() );
-  }
-
-  /**
-   * @copydoc Dali::SingletonService::Register()
-   */
-  void Register( const std::type_info& info, BaseHandle singleton )
-  {
-    if( singleton )
-    {
-      mSingletonContainer.insert( SingletonPair( info.name(), singleton ) );
-
-      Integration::Processor* processor = dynamic_cast<Integration::Processor*>( &singleton.GetBaseObject() );
-      if( processor )
-      {
-        Integration::Core& core = mTestApplication->GetCore();
-        core.RegisterProcessor( *processor );
-      }
-    }
-  }
-
-  /**
-   * @copydoc Dali::SingletonService::UnregisterAll()
-   */
-  void UnregisterAll()
-  {
-    mSingletonContainer.clear();
-  }
-
-  /**
-   * @copydoc Dali::SingletonService::GetSingleton()
-   */
-  BaseHandle GetSingleton( const std::type_info& info ) const
-  {
-    BaseHandle object;
-
-    SingletonConstIter iter = mSingletonContainer.find(info.name());
-    if( iter != mSingletonContainer.end() )
-    {
-      object = ( *iter ).second;
-    }
-    return object;
-  }
-
-  void SetApplication( Dali::TestApplication& testApplication )
-  {
-    mTestApplication = &testApplication;
-  }
-
-private:
-
-  /**
-   * Private Constructor
-   * @see SingletonService::New()
-   */
-  SingletonService()
-  : mSingletonContainer()
-  {
-    // Can only have one instance of SingletonService
-    DALI_ASSERT_ALWAYS( !gSingletonService && "Only one instance of SingletonService is allowed");
-    gSingletonService = this;
-  }
-
-  /**
-   * Virtual Destructor
-   */
-  virtual ~SingletonService()
-  {
-    gSingletonService = 0;
-  }
-
-  // Undefined
-  SingletonService( const SingletonService& );
-  SingletonService& operator=( SingletonService& );
-
-private:
-  typedef std::pair<std::string, BaseHandle> SingletonPair;
-  typedef std::map<std::string, BaseHandle>  SingletonContainer;
-  typedef SingletonContainer::const_iterator SingletonConstIter;
-
-  SingletonContainer mSingletonContainer; ///< The container to look up singleton by its type name
-  TestApplication* mTestApplication;
-};
-
-} // namespace Adaptor
-} // namespace Internal
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-inline Internal::Adaptor::SingletonService& GetImplementation(Dali::SingletonService& player)
-{
-  DALI_ASSERT_ALWAYS( player && "SingletonService handle is empty" );
-  BaseObject& handle = player.GetBaseObject();
-  return static_cast<Internal::Adaptor::SingletonService&>(handle);
-}
-
-inline const Internal::Adaptor::SingletonService& GetImplementation(const Dali::SingletonService& player)
-{
-  DALI_ASSERT_ALWAYS( player && "SingletonService handle is empty" );
-  const BaseObject& handle = player.GetBaseObject();
-  return static_cast<const Internal::Adaptor::SingletonService&>(handle);
-}
-
-SingletonService::SingletonService()
-{
-}
-
-SingletonService SingletonService::New()
-{
-  return Internal::Adaptor::SingletonService::New();
-}
-
-SingletonService SingletonService::Get()
-{
-  return Internal::Adaptor::SingletonService::Get();
-}
-
-SingletonService::~SingletonService()
-{
-}
-
-void SingletonService::Register( const std::type_info& info, BaseHandle singleton )
-{
-  GetImplementation( *this ).Register( info, singleton );
-}
-
-void SingletonService::UnregisterAll()
-{
-  GetImplementation( *this ).UnregisterAll();
-}
-
-BaseHandle SingletonService::GetSingleton( const std::type_info& info ) const
-{
-  return GetImplementation( *this ).GetSingleton( info );
-}
-
-SingletonService::SingletonService( Internal::Adaptor::SingletonService* singletonService )
-: BaseHandle( singletonService )
-{
-}
-
-} // namespace Dali
-
-
-namespace Test
-{
-
-void SetApplication( Dali::SingletonService singletonService, TestApplication& testApplication )
-{
-  GetImplementation( singletonService ).SetApplication( testApplication );
-}
-
-} // Test
diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-singleton-service.h
deleted file mode 100644 (file)
index 7f57f55..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef DALI_TOOLKIT_TEST_SINGLETON_SERVICE_H
-#define DALI_TOOLKIT_TEST_SINGLETON_SERVICE_H
-
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
-#include "test-application.h"
-
-namespace Test
-{
-
-void SetApplication( Dali::SingletonService singletonService, TestApplication& testApplication );
-
-} // Test
-
-#endif //DALI_TOOLKIT_TEST_SINGLETON_SERVICE_H
index 8eefcfa..167f6d8 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 #include <dali/public-api/object/base-object.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/devel-api/adaptor-framework/sound-player.h>
 
 using namespace Dali;
index fdcd24d..07c6ad8 100644 (file)
@@ -23,7 +23,6 @@
 #include <dali/devel-api/text-abstraction/font-client.h>
 #include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <toolkit-adaptor-impl.h>
-#include <toolkit-singleton-service.h>
 #include <toolkit-lifecycle-controller.h>
 
 namespace Dali
@@ -49,9 +48,6 @@ ToolkitTestApplication::ToolkitTestApplication( size_t surfaceWidth, size_t surf
   // Core needs to be initialized next before we start the adaptor
   InitializeCore();
 
-  auto singletonService = SingletonService::Get();
-  Test::SetApplication( singletonService, *this );
-
   // This will also emit the window created signals
   AdaptorImpl::GetImpl( *mAdaptor ).Start( *mMainWindow );
 
index 5b478ba..cae7871 100755 (executable)
@@ -22,7 +22,7 @@
 #include <dali/devel-api/text-abstraction/segmentation.h>
 #include <dali/devel-api/text-abstraction/shaping.h>
 #include <dali/public-api/object/base-object.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <cstring>
 
 using namespace Dali;
index 8f11b45..a951045 100644 (file)
@@ -19,7 +19,7 @@
 #include "keyinput-focus-manager.h"
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/focus-manager/keyinput-focus-manager-impl.h>
index 666a2a1..b24adbb 100644 (file)
@@ -19,7 +19,7 @@
 #include "visual-factory.h"
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/devel-api/adaptor-framework/environment-variable.h>
 
 // INTERNAL INCLUDES
index 4bc1cc5..c0fffa0 100644 (file)
@@ -22,7 +22,7 @@
 #include <cstring> // for strcmp
 #include <dali/public-api/actors/layer.h>
 #include <dali/devel-api/adaptor-framework/accessibility-adaptor.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/devel-api/adaptor-framework/lifecycle-controller.h>
 #include <dali/public-api/animation/constraints.h>
 #include <dali/public-api/common/stage.h>
index 106ec54..066d812 100644 (file)
@@ -18,7 +18,7 @@
 #include "style-manager-impl.h"
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/public-api/object/type-registry.h>
 #include <dali/public-api/object/type-registry-helper.h>
 #include <dali/integration-api/debug.h>
index d79fbc3..7402292 100644 (file)
@@ -33,6 +33,8 @@ namespace
   const static uint8_t U2 = 2u;
   const static uint8_t U3 = 3u;
   const static uint8_t U4 = 4u;
+  const static uint8_t U5 = 5u;
+  const static uint8_t U6 = 6u;
   const static uint8_t U0 = 0u;
   const static uint8_t UTF8_LENGTH[256] = {
     U1, U1, U1, U1, U1, U1, U1, U1, U1, U1, //
@@ -66,8 +68,11 @@ namespace
 
     U4, U4, U4, U4, U4, U4, U4, U4,         // lead byte = 1111 0xxx (U+10000 - U+1FFFFF)
 
-    U0, U0, U0, U0,                         // Non valid.
-    U0, U0, U0, U0,                         // Non valid.
+    U5, U5, U5, U5,                         // lead byte = 1111 10xx (U+200000 - U+3FFFFFF)
+
+    U6, U6,                                 // lead byte = 1111 110x (U+4000000 - U+7FFFFFFF)
+
+    U0, U0,                                 // Non valid.
   };
 
   const uint8_t CR = 0xd;
@@ -118,6 +123,14 @@ uint32_t GetNumberOfUtf8Bytes( const uint32_t* const utf32, uint32_t numberOfCha
     {
       numberOfBytes += U4;
     }
+    else if( code < 0x4000000u )
+    {
+      numberOfBytes += U5;
+    }
+    else if( code < 0x80000000u )
+    {
+      numberOfBytes += U6;
+    }
   }
 
   return numberOfBytes;
@@ -197,6 +210,40 @@ uint32_t Utf8ToUtf32( const uint8_t* const utf8, uint32_t length, uint32_t* utf3
         break;
       }
 
+      case U5:
+      {
+        uint32_t& code = *utf32++;
+        code = leadByte & 0x03u;
+        begin++;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        break;
+      }
+
+      case U6:
+      {
+        uint32_t& code = *utf32++;
+        code = leadByte & 0x01u;
+        begin++;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        code <<= 6u;
+        code |= *begin++ & 0x3fu;
+        break;
+      }
+
       case U0:    // Invalid case
       {
         begin++;
@@ -231,13 +278,30 @@ uint32_t Utf32ToUtf8( const uint32_t* const utf32, uint32_t numberOfCharacters,
     }
     else if( code < 0x10000u )
     {
-      *utf8++ = static_cast<uint8_t>(   code >> 12u )          | 0xe0u; // lead byte for 2 byte sequence
+      *utf8++ = static_cast<uint8_t>(   code >> 12u )          | 0xe0u; // lead byte for 3 byte sequence
       *utf8++ = static_cast<uint8_t>( ( code >> 6u )  & 0x3f ) | 0x80u; // continuation byte
       *utf8++ = static_cast<uint8_t>(   code          & 0x3f ) | 0x80u; // continuation byte
     }
     else if( code < 0x200000u )
     {
-      *utf8++ = static_cast<uint8_t>(   code >> 18u )          | 0xf0u; // lead byte for 2 byte sequence
+      *utf8++ = static_cast<uint8_t>(   code >> 18u )          | 0xf0u; // lead byte for 4 byte sequence
+      *utf8++ = static_cast<uint8_t>( ( code >> 12u ) & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>( ( code >> 6u )  & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>(   code          & 0x3f ) | 0x80u; // continuation byte
+    }
+    else if( code < 0x4000000u )
+    {
+      *utf8++ = static_cast<uint8_t>(   code >> 24u )          | 0xf8u; // lead byte for 5 byte sequence
+      *utf8++ = static_cast<uint8_t>( ( code >> 18u ) & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>( ( code >> 12u ) & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>( ( code >> 6u )  & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>(   code          & 0x3f ) | 0x80u; // continuation byte
+    }
+    else if( code < 0x80000000u )
+    {
+      *utf8++ = static_cast<uint8_t>(   code >> 30u )          | 0xfcu; // lead byte for 6 byte sequence
+      *utf8++ = static_cast<uint8_t>( ( code >> 24u ) & 0x3f ) | 0x80u; // continuation byte
+      *utf8++ = static_cast<uint8_t>( ( code >> 18u ) & 0x3f ) | 0x80u; // continuation byte
       *utf8++ = static_cast<uint8_t>( ( code >> 12u ) & 0x3f ) | 0x80u; // continuation byte
       *utf8++ = static_cast<uint8_t>( ( code >> 6u )  & 0x3f ) | 0x80u; // continuation byte
       *utf8++ = static_cast<uint8_t>(   code          & 0x3f ) | 0x80u; // continuation byte
index 525e031..9dccc05 100755 (executable)
@@ -551,7 +551,7 @@ struct Engine::Impl
         tmpLineLayout.penX += tmpLineLayout.previousAdvance + tmpLineLayout.whiteSpaceLengthEndOfLine;
         tmpLineLayout.previousAdvance = ( glyphMetrics.advance + parameters.interGlyphExtraAdvance );
 
-        tmpLineLayout.length = tmpLineLayout.penX + glyphMetrics.xBearing + glyphMetrics.width;
+        tmpLineLayout.length = std::max( tmpLineLayout.length, tmpLineLayout.penX + glyphMetrics.xBearing + glyphMetrics.width );
 
         // Clear the white space length at the end of the line.
         tmpLineLayout.whiteSpaceLengthEndOfLine = 0.f;
index a8834b9..99a969c 100755 (executable)
@@ -20,7 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 #include <dali/devel-api/text-abstraction/font-client.h>
 
 // INTERNAL INCLUDES
index 357f431..4ce469e 100644 (file)
@@ -19,7 +19,7 @@
 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager-impl.h>
index 5ae10c8..10eb270 100644 (file)
@@ -20,7 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/text/rendering-backend.h>
index 81a2817..98c94a8 100644 (file)
@@ -20,7 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/base-object.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 namespace
 {
index c39d5e8..8f4de65 100755 (executable)
@@ -1086,16 +1086,16 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
       mEventData->mPreEditFlag &&
       ( 0u != mModel->mVisualModel->mCharactersToGlyph.Count() ) )
   {
-    Vector< Dali::InputMethodContext::PreeditAttributeData > attrs;
+    Dali::InputMethodContext::PreEditAttributeDataContainer attrs;
     mEventData->mInputMethodContext.GetPreeditStyle( attrs );
     Dali::InputMethodContext::PreeditStyle type = Dali::InputMethodContext::PreeditStyle::NONE;
 
     // Check the type of preedit and run it.
-    for( Vector<Dali::InputMethodContext::PreeditAttributeData>::Iterator it = attrs.Begin(), endIt = attrs.End(); it != endIt; it++ )
+    for( Dali::InputMethodContext::PreEditAttributeDataContainer::Iterator it = attrs.Begin(), endIt = attrs.End(); it != endIt; it++ )
     {
       Dali::InputMethodContext::PreeditAttributeData attrData = *it;
       DALI_LOG_INFO( gLogFilter, Debug::General, "Controller::UpdateModel PreeditStyle type : %d  start %d end %d \n", attrData.preeditType, attrData.startIndex, attrData.endIndex  );
-      type =  attrData.preeditType;
+      type = attrData.preeditType;
 
       // Check the number of commit characters for the start position.
       unsigned int numberOfCommit = mEventData->mPrimaryCursorPosition - mEventData->mPreEditLength;
@@ -1108,7 +1108,7 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
           // Add the underline for the pre-edit text.
           GlyphRun underlineRun;
           underlineRun.glyphIndex = attrData.startIndex + numberOfCommit;
-          underlineRun.numberOfGlyphs = attrData.endIndex - attrData.startIndex;
+          underlineRun.numberOfGlyphs = numberOfIndices;
           mModel->mVisualModel->mUnderlineRuns.PushBack( underlineRun );
           break;
         }
@@ -1152,7 +1152,7 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
 
           GlyphRun underlineRun;
           underlineRun.glyphIndex = attrData.startIndex + numberOfCommit;
-          underlineRun.numberOfGlyphs = attrData.endIndex - attrData.startIndex;
+          underlineRun.numberOfGlyphs = numberOfIndices;
           mModel->mVisualModel->mUnderlineRuns.PushBack( underlineRun );
           break;
         }
@@ -1167,7 +1167,7 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
 
           GlyphRun underlineRun;
           underlineRun.glyphIndex = attrData.startIndex + numberOfCommit;
-          underlineRun.numberOfGlyphs = attrData.endIndex - attrData.startIndex;
+          underlineRun.numberOfGlyphs = numberOfIndices;
           mModel->mVisualModel->mUnderlineRuns.PushBack( underlineRun );
           break;
         }
@@ -1182,7 +1182,7 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
 
           GlyphRun underlineRun;
           underlineRun.glyphIndex = attrData.startIndex + numberOfCommit;
-          underlineRun.numberOfGlyphs = attrData.endIndex - attrData.startIndex;
+          underlineRun.numberOfGlyphs = numberOfIndices;
           mModel->mVisualModel->mUnderlineRuns.PushBack( underlineRun );
           break;
         }
@@ -1197,7 +1197,7 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
 
           GlyphRun underlineRun;
           underlineRun.glyphIndex = attrData.startIndex + numberOfCommit;
-          underlineRun.numberOfGlyphs = attrData.endIndex - attrData.startIndex;
+          underlineRun.numberOfGlyphs = numberOfIndices;
           mModel->mVisualModel->mUnderlineRuns.PushBack( underlineRun );
           break;
         }
index e0d7b9a..a683838 100644 (file)
@@ -20,7 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/accessibility-manager/accessibility-manager-impl.h>
index 1ece1d1..d6ee5d7 100644 (file)
@@ -31,7 +31,7 @@ namespace Toolkit
 
 const unsigned int TOOLKIT_MAJOR_VERSION = 1;
 const unsigned int TOOLKIT_MINOR_VERSION = 9;
-const unsigned int TOOLKIT_MICRO_VERSION = 0;
+const unsigned int TOOLKIT_MICRO_VERSION = 1;
 const char * const TOOLKIT_BUILD_DATE    = __DATE__ " " __TIME__;
 
 #ifdef DEBUG_ENABLED
index 77aff09..7d63a05 100644 (file)
@@ -1,6 +1,6 @@
 Name:       dali-toolkit
 Summary:    Dali 3D engine Toolkit
-Version:    1.9.0
+Version:    1.9.1
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause and MIT