[4.0] Support custom fonts registration
[platform/core/uifw/dali-adaptor.git] / text / dali / internal / text-abstraction / shaping-impl.h
index cfdd625..e528817 100644 (file)
 #include <dali/public-api/object/base-object.h>
 
 // INTERNAL INCLUDES
-#include <dali/public-api/text-abstraction/shaping.h>
+#include <dali/public-api/common/dali-vector.h>
+#include <dali/devel-api/text-abstraction/shaping.h>
 
 namespace Dali
 {
 
-namespace Internal
+namespace TextAbstraction
 {
 
-namespace TextAbstraction
+namespace Internal
 {
 
 /**
  * Implementation of the Shaping
  */
-
-class Shaping :  public Dali::BaseObject
+class Shaping : public BaseObject
 {
 public:
 
@@ -54,7 +54,28 @@ public:
   /**
    * @copydoc Dali::Shaping::Get()
    */
-  static Dali::TextAbstraction::Shaping Get();
+  static TextAbstraction::Shaping Get();
+
+  /**
+   * @copydoc Dali::Shaping::Shape()
+   */
+  Length Shape( const Character* const text,
+                Length numberOfCharacters,
+                FontId fontId,
+                Script script );
+
+  /**
+   * @copydoc Dali::Shaping::GetGlyphs()
+   */
+  void GetGlyphs( GlyphInfo* glyphInfo,
+                  CharacterIndex* glyphToCharacterMap );
+
+private:
+
+  /**
+   * Helper for lazy initialization.
+   */
+  void CreatePlugin();
 
 private:
 
@@ -62,29 +83,29 @@ private:
   Shaping( const Shaping& );
 
   // Undefined assignment constructor.
-  Shaping& operator=( Shaping& );
+  Shaping& operator=( const Shaping& );
 
-  void*   mPlugin;  ///< TODO replace this with shaping plugin
+  struct Plugin;
+  Plugin* mPlugin;
 
 }; // class Shaping
 
+} // namespace Internal
 
 } // namespace TextAbstraction
 
-} // namespace Internal
-
-inline static Internal::TextAbstraction::Shaping& GetImplementation(Dali::TextAbstraction::Shaping& shaping)
+inline static TextAbstraction::Internal::Shaping& GetImplementation( TextAbstraction::Shaping& shaping )
 {
   DALI_ASSERT_ALWAYS( shaping && "shaping handle is empty" );
   BaseObject& handle = shaping.GetBaseObject();
-  return static_cast<Internal::TextAbstraction::Shaping&>(handle);
+  return static_cast<TextAbstraction::Internal::Shaping&>( handle );
 }
 
-inline static const  Internal::TextAbstraction::Shaping& GetImplementation(const Dali::TextAbstraction::Shaping& shaping)
+inline static const TextAbstraction::Internal::Shaping& GetImplementation( const TextAbstraction::Shaping& shaping )
 {
   DALI_ASSERT_ALWAYS( shaping && "shaping handle is empty" );
   const BaseObject& handle = shaping.GetBaseObject();
-  return static_cast<const Internal::TextAbstraction::Shaping&>(handle);
+  return static_cast<const TextAbstraction::Internal::Shaping&>( handle );
 }
 
 } // namespace Dali