Revert "Added UNDERLINE_HEIGHT property to TextLabel to override adaptor metrics... 32/38032/1
authorPaul Wisbey <p.wisbey@samsung.com>
Thu, 9 Apr 2015 16:51:52 +0000 (09:51 -0700)
committerPaul Wisbey <p.wisbey@samsung.com>
Thu, 9 Apr 2015 16:51:52 +0000 (09:51 -0700)
This reverts commit 52117490d94d8242addbe1608efe64364fdb308a.

Change-Id: I7e078755ae7cd90bfc9dab3325f76a10cf790b49

dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-controller.h
dali-toolkit/internal/text/text-view-interface.h
dali-toolkit/internal/text/text-view.cpp
dali-toolkit/internal/text/text-view.h
dali-toolkit/internal/text/visual-model-impl.cpp
dali-toolkit/internal/text/visual-model-impl.h
dali-toolkit/public-api/controls/text-controls/text-label.h

index 43d0cff..73f40e9 100644 (file)
@@ -88,7 +88,6 @@ DALI_PROPERTY_REGISTRATION( TextLabel, "shadow-offset",        VECTOR2, SHADOW_O
 DALI_PROPERTY_REGISTRATION( TextLabel, "shadow-color",         VECTOR4, SHADOW_COLOR         )
 DALI_PROPERTY_REGISTRATION( TextLabel, "underline-enabled",    BOOLEAN, UNDERLINE_ENABLED    )
 DALI_PROPERTY_REGISTRATION( TextLabel, "underline-color",      VECTOR4, UNDERLINE_COLOR      )
-DALI_PROPERTY_REGISTRATION( TextLabel, "underline-height",     FLOAT,   UNDERLINE_HEIGHT       )
 DALI_TYPE_REGISTRATION_END()
 
 } // namespace
@@ -290,20 +289,6 @@ void TextLabel::SetProperty( BaseObject* object, Property::Index index, const Pr
         }
         break;
       }
-
-      case Toolkit::TextLabel::Property::UNDERLINE_HEIGHT:
-      {
-        if( impl.mController )
-        {
-          float height = value.Get< float >();
-          if ( impl.mController->GetUnderlineHeight() != height )
-          {
-            impl.mController->SetUnderlineHeight( height );
-            impl.RequestTextRelayout();
-          }
-        }
-        break;
-      }
     }
   }
 }
@@ -402,14 +387,6 @@ Property::Value TextLabel::GetProperty( BaseObject* object, Property::Index inde
         }
         break;
       }
-      case Toolkit::TextLabel::Property::UNDERLINE_HEIGHT:
-      {
-        if ( impl.mController )
-        {
-          value = impl.mController->GetUnderlineHeight();
-        }
-        break;
-      }
     }
   }
 
index 016284a..fda82f4 100644 (file)
@@ -19,7 +19,6 @@
 #include <dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h>
 
 // EXTERNAL INCLUDES
-#include <math.h>
 #include <dali/dali.h>
 #include <dali/integration-api/debug.h>
 
@@ -39,10 +38,6 @@ using namespace Dali::Toolkit::Text;
 
 namespace
 {
-  const float ZERO( 0.0f );
-  const float HALF( 0.5f );
-  const float ONE( 1.0f );
-  const float TWO( 2.0f );
   const Vector2 DEFAULT_ATLAS_SIZE( 512.0f, 512.0f );
   const Vector2 DEFAULT_BLOCK_SIZE( 16.0f, 16.0f );
   const Vector2 PADDING( 4.0f, 4.0f ); // Allow for variation in font glyphs
@@ -107,21 +102,19 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                   const Vector4& textColor,
                   const Vector2& shadowOffset,
                   const Vector4& shadowColor,
-                  bool underlineEnabled,
-                  const Vector4& underlineColor,
-                  float underlineHeight )
+                  float underlineEnabled,
+                  const Vector4& underlineColor )
   {
     AtlasManager::AtlasSlot slot;
     std::vector< MeshRecord > meshContainer;
     Vector< Extent > extents;
 
-    float currentUnderlinePosition = ZERO;
-    float currentUnderlineThickness = underlineHeight;
-
+    float currentUnderlinePosition = 0.0f;
+    float currentUnderlineThickness = 0.0f;
     FontId lastFontId = 0;
     Style style = STYLE_NORMAL;
 
-    if ( fabsf( shadowOffset.x ) > Math::MACHINE_EPSILON_1 || fabsf( shadowOffset.y ) > Math::MACHINE_EPSILON_1 )
+    if ( shadowOffset.x != 0.0f || shadowOffset.y != 0.0f )
     {
       style = STYLE_DROP_SHADOW;
     }
@@ -147,33 +140,13 @@ struct AtlasRenderer::Impl : public ConnectionTracker
           // We need to fetch fresh font underline metrics
           FontMetrics fontMetrics;
           mFontClient.GetFontMetrics( glyph.fontId, fontMetrics );
-          currentUnderlinePosition = FontMetricsRoundUp( fabsf( fontMetrics.underlinePosition ) );
-          float descender = FontMetricsRoundUp( fabsf( fontMetrics.descender ) );
+          currentUnderlinePosition = fontMetrics.underlinePosition;
+          currentUnderlineThickness = fontMetrics.underlineThickness;
 
-          if ( underlineHeight == ZERO )
+          // Ensure that an underline is at least 1 pixel high
+          if ( currentUnderlineThickness < 1.0f )
           {
-            currentUnderlineThickness = fontMetrics.underlineThickness;
-
-            // Ensure underline will be at least a pixel high
-            if ( currentUnderlineThickness < ONE )
-            {
-              currentUnderlineThickness = ONE;
-            }
-            else
-            {
-              currentUnderlineThickness = FontMetricsRoundUp( currentUnderlineThickness );
-            }
-          }
-
-          // Clamp the underline position at the font descender and check for ( as EFL describes it ) a broken font
-          if ( currentUnderlinePosition > descender )
-          {
-            currentUnderlinePosition = descender;
-          }
-          if ( ZERO == currentUnderlinePosition )
-          {
-            // Move offset down by one ( EFL behavior )
-            currentUnderlinePosition = ONE;
+            currentUnderlineThickness = 1.0f;
           }
         }
 
@@ -200,6 +173,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                 mGlyphManager.SetNewAtlasSize( DEFAULT_ATLAS_SIZE, mBlockSizes[ j ].mNeededBlockSize );
               }
             }
+            lastFontId = glyph.fontId;
           }
 
           // Glyph doesn't currently exist in atlas so upload
@@ -225,7 +199,6 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                         currentUnderlineThickness,
                         slot );
       }
-      lastFontId = glyph.fontId;
     }
 
     if ( underlineEnabled )
@@ -316,13 +289,14 @@ struct AtlasRenderer::Impl : public ConnectionTracker
       uint32_t index = 0;
       for ( std::vector< MeshRecord >::iterator mIt = meshContainer.begin(); mIt != meshContainer.end(); ++mIt, ++index )
       {
-        if ( slot.mAtlasId == mIt->mAtlasId && color == mIt->mColor )
+        if ( slot.mAtlasId == mIt->mAtlasId )
         {
           // Stitch the mesh to the existing mesh and adjust any extents
           mGlyphManager.StitchMesh( mIt->mMeshData, newMeshData );
           AdjustExtents( extents,
                          meshContainer,
                          index,
+                         color,
                          left,
                          right,
                          baseLine,
@@ -344,6 +318,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker
       AdjustExtents( extents,
                      meshContainer,
                      meshContainer.size() - 1u,
+                     color,
                      left,
                      right,
                      baseLine,
@@ -356,6 +331,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker
   void AdjustExtents( Vector< Extent >& extents,
                       std::vector< MeshRecord>& meshRecords,
                       uint32_t index,
+                      const Vector4& color,
                       float left,
                       float right,
                       float baseLine,
@@ -367,17 +343,21 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     {
       if ( Equals( baseLine, eIt->mBaseLine ) )
       {
-        foundExtent = true;
-        if ( left < eIt->mLeft )
-        {
-          eIt->mLeft = left;
-        }
-        if ( right > eIt->mRight  )
+        // If we've found an extent with the same color then we don't need to create a new extent
+        if ( color == meshRecords[ index ].mColor )
         {
-          eIt->mRight = right;
+          foundExtent = true;
+          if ( left < eIt->mLeft )
+          {
+            eIt->mLeft = left;
+          }
+          if ( right > eIt->mRight  )
+          {
+            eIt->mRight = right;
+          }
         }
-
-        if ( underlinePosition > eIt->mUnderlinePosition )
+        // Font metrics use negative values for lower underline positions
+        if ( underlinePosition < eIt->mUnderlinePosition )
         {
           eIt->mUnderlinePosition = underlinePosition;
         }
@@ -451,25 +431,15 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     }
   }
 
-  float FontMetricsRoundUp( float value )
-  {
-    double integral_part;
-    if ( modf( value, &integral_part ) )
-    {
-      return ( static_cast< float >( integral_part ) + 1.0f );
-    }
-    else
-    {
-      return static_cast< float >( integral_part );
-    }
-  }
-
   void GenerateUnderlines( std::vector< MeshRecord>& meshRecords,
                            Vector< Extent >& extents,
                            const Vector4& underlineColor,
                            const Vector4& textColor )
   {
     MeshData newMeshData;
+    const float zero = 0.0f;
+    const float half = 0.5f;
+
     for ( Vector< Extent >::ConstIterator eIt = extents.Begin(); eIt != extents.End(); ++eIt )
     {
       MeshData::VertexContainer newVerts;
@@ -478,28 +448,28 @@ struct AtlasRenderer::Impl : public ConnectionTracker
       Vector2 uv = mGlyphManager.GetAtlasSize( meshRecords[ index ].mAtlasId );
 
       // Make sure we don't hit texture edge for single pixel texture ( filled pixel is in top left of every atlas )
-      float u = HALF / uv.x;
-      float v = HALF / uv.y;
+      float u = half / uv.x;
+      float v = half / uv.y;
       float thickness = eIt->mUnderlineThickness;
-      float baseLine = eIt->mBaseLine + eIt->mUnderlinePosition - ( thickness * HALF );
+      float baseLine = eIt->mBaseLine - eIt->mUnderlinePosition - ( thickness * 0.5f );
       float tlx = eIt->mLeft;
       float brx = eIt->mRight;
 
-      newVerts.push_back( MeshData::Vertex( Vector3( tlx, baseLine, ZERO ),
-                                            Vector2::ZERO,
-                                            Vector3::ZERO ) );
+      newVerts.push_back( MeshData::Vertex( Vector3( tlx, baseLine, zero ),
+                                            Vector2( zero, zero ),
+                                            Vector3( zero, zero, zero ) ) );
 
-      newVerts.push_back( MeshData::Vertex( Vector3( brx, baseLine, ZERO ),
-                                            Vector2( u, ZERO ),
-                                            Vector3::ZERO ) );
+      newVerts.push_back( MeshData::Vertex( Vector3( brx, baseLine, zero ),
+                                            Vector2( u, zero ),
+                                            Vector3( zero, zero, zero ) ) );
 
-      newVerts.push_back( MeshData::Vertex( Vector3( tlx, baseLine + thickness, ZERO ),
-                                            Vector2( ZERO, v ),
-                                            Vector3::ZERO ) );
+      newVerts.push_back( MeshData::Vertex( Vector3( tlx, baseLine + thickness, zero ),
+                                            Vector2( zero, v ),
+                                            Vector3( zero, zero, zero ) ) );
 
-      newVerts.push_back( MeshData::Vertex( Vector3( brx, baseLine + thickness, ZERO ),
+      newVerts.push_back( MeshData::Vertex( Vector3( brx, baseLine + thickness, zero ),
                                             Vector2( u, v ),
-                                            Vector3::ZERO ) );
+                                            Vector3( zero, zero, zero ) ) );
 
       newMeshData.SetVertices( newVerts );
       newMeshData.SetFaceIndices( mFace );
@@ -530,10 +500,12 @@ struct AtlasRenderer::Impl : public ConnectionTracker
   {
     // Scan vertex buffer to determine width and height of effect buffer needed
     MeshData::VertexContainer verts = meshRecord.mMeshData.GetVertices();
+    const float one = 1.0f;
+    const float zero = 0.0f;
     float tlx = verts[ 0 ].x;
     float tly = verts[ 0 ].y;
-    float brx = ZERO;
-    float bry = ZERO;
+    float brx = zero;
+    float bry = zero;
 
     for ( uint32_t i = 0; i < verts.size(); ++i )
     {
@@ -557,8 +529,8 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
     float width = brx - tlx;
     float height = bry - tly;
-    float divWidth = TWO / width;
-    float divHeight = TWO / height;
+    float divWidth = 2.0f / width;
+    float divHeight = 2.0f / height;
 
     // Create a buffer to render to
     meshRecord.mBuffer = FrameBufferImage::New( width, height );
@@ -567,21 +539,21 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     MeshData::VertexContainer vertices;
     MeshData::FaceIndices face;
 
-    vertices.push_back( MeshData::Vertex( Vector3( tlx + shadowOffset.x, tly + shadowOffset.y, ZERO ),
-                                          Vector2::ZERO,
-                                          Vector3::ZERO ) );
+    vertices.push_back( MeshData::Vertex( Vector3( tlx + shadowOffset.x, tly + shadowOffset.y, zero ),
+                                          Vector2( zero, zero ),
+                                          Vector3( zero, zero, zero ) ) );
 
-    vertices.push_back( MeshData::Vertex( Vector3( brx + shadowOffset.x, tly + shadowOffset.y, ZERO ),
-                                          Vector2( ONE, ZERO ),
-                                          Vector3::ZERO ) );
+    vertices.push_back( MeshData::Vertex( Vector3( brx + shadowOffset.x, tly + shadowOffset.y, zero ),
+                                          Vector2( one, zero ),
+                                          Vector3( zero, zero, zero ) ) );
 
-    vertices.push_back( MeshData::Vertex( Vector3( tlx + shadowOffset.x, bry + shadowOffset.y, ZERO ),
-                                          Vector2( ZERO, ONE ),
-                                          Vector3::ZERO ) );
+    vertices.push_back( MeshData::Vertex( Vector3( tlx + shadowOffset.x, bry + shadowOffset.y, zero ),
+                                          Vector2( zero, one ),
+                                          Vector3( zero, zero, zero ) ) );
 
-    vertices.push_back( MeshData::Vertex( Vector3( brx + shadowOffset.x, bry + shadowOffset.y, ZERO ),
-                                          Vector2::ONE,
-                                          Vector3::ZERO ) );
+    vertices.push_back( MeshData::Vertex( Vector3( brx + shadowOffset.x, bry + shadowOffset.y, zero ),
+                                          Vector2( one, one ),
+                                          Vector3( zero, zero, zero ) ) );
 
     MeshData meshData;
     Material newMaterial = Material::New("effect buffer");
@@ -606,8 +578,8 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     for ( uint32_t i = 0; i < verts.size(); ++i )
     {
       MeshData::Vertex vertex = verts[ i ];
-      vertex.x = ( ( vertex.x - tlx ) * divWidth ) - ONE;
-      vertex.y = ( ( vertex.y - tly ) * divHeight ) - ONE;
+      vertex.x = ( ( vertex.x - tlx ) * divWidth ) - one;
+      vertex.y = ( ( vertex.y - tly ) * divHeight ) - one;
       newVerts.push_back( vertex );
     }
 
@@ -704,8 +676,7 @@ RenderableActor AtlasRenderer::Render( Text::ViewInterface& view )
                       view.GetShadowOffset(),
                       view.GetShadowColor(),
                       view.IsUnderlineEnabled(),
-                      view.GetUnderlineColor(),
-                      view.GetUnderlineHeight() );
+                      view.GetUnderlineColor() );
   }
   return mImpl->mActor;
 }
index d86d4f5..7d05f52 100644 (file)
@@ -987,7 +987,6 @@ struct Controller::Impl
     mVisualModel->SetShadowOffset( Vector2::ZERO );
     mVisualModel->SetShadowColor( Vector4::ZERO );
     mVisualModel->SetUnderlineEnabled( false );
-    mVisualModel->SetUnderlineHeight( 0.0f );
   }
 
   ~Impl()
@@ -1211,11 +1210,6 @@ bool Controller::IsUnderlineEnabled() const
   return mImpl->mVisualModel->IsUnderlineEnabled();
 }
 
-float Controller::GetUnderlineHeight() const
-{
-  return mImpl->mVisualModel->GetUnderlineHeight();
-}
-
 void Controller::SetTextColor( const Vector4& textColor )
 {
   mImpl->mVisualModel->SetTextColor( textColor );
@@ -1241,11 +1235,6 @@ void Controller::SetUnderlineEnabled( bool enabled )
   mImpl->mVisualModel->SetUnderlineEnabled( enabled );
 }
 
-void Controller::SetUnderlineHeight( float height )
-{
-  mImpl->mVisualModel->SetUnderlineHeight( height );
-}
-
 void Controller::EnableTextInput( DecoratorPtr decorator )
 {
   if( !mImpl->mTextInput )
index 076897a..0234e7c 100644 (file)
@@ -243,20 +243,6 @@ public:
   bool IsUnderlineEnabled() const;
 
   /**
-   * @brief Set the override used for underline height, 0 indicates height will be supplied by adaptor
-   *
-   * @param[in] height The height in pixels of the underline
-   */
-  void SetUnderlineHeight( float height );
-
-  /**
-   * @brief Retrieves the override height of an underline, 0 indicates height is supplied by adaptor
-   *
-   * @return The height of the underline, or 0 if height is not overrided.
-   */
-  float GetUnderlineHeight() const;
-
-  /**
    * @brief Called to enable text input.
    *
    * @note Only selectable or editable controls should calls this.
index 68d5e97..116ad50 100644 (file)
@@ -117,19 +117,12 @@ public:
   virtual const Vector4& GetUnderlineColor() const = 0;
 
   /**
-   * @brief Returns whether underline is enabled or not.
+   * @brief Returns whether is underline is enabled or not.
    *
    * @return The underline state.
    */
   virtual bool IsUnderlineEnabled() const = 0;
 
-  /**
-   * @brief Retrieves the underline height override
-   *
-   * @return Returns the override height for an underline, 0 indicates that adaptor will determine the height
-   */
-  virtual float GetUnderlineHeight() const = 0;
-
 };
 
 } // namespace Text
index 61073fe..b0825f6 100644 (file)
@@ -101,16 +101,6 @@ bool View::IsUnderlineEnabled() const
   return false;
 }
 
-float View::GetUnderlineHeight() const
-{
-  if ( mImpl->mVisualModel )
-  {
-    VisualModel& model = *mImpl->mVisualModel;
-    return model.GetUnderlineHeight();
-  }
-  return 0.0f;
-}
-
 Length View::GetNumberOfGlyphs() const
 {
   if( mImpl->mVisualModel )
index e611c3c..b9bd7fc 100644 (file)
@@ -101,11 +101,6 @@ public:
    */
   virtual bool IsUnderlineEnabled() const;
 
-  /**
-   * @copydoc Dali::Toolkit::Text::ViewInterface::GetUnderlineHeight()
-   */
-  virtual float GetUnderlineHeight() const;
-
 private:
 
   // Undefined
index a5fead4..c070179 100644 (file)
@@ -441,11 +441,6 @@ void VisualModel::SetUnderlineEnabled( bool enabled )
   mUnderlineEnabled = enabled;
 }
 
-void VisualModel::SetUnderlineHeight( float height )
-{
-  mUnderlineHeight = height;
-}
-
 const Vector4& VisualModel::GetTextColor() const
 {
   return mTextColor;
@@ -471,11 +466,6 @@ bool VisualModel::IsUnderlineEnabled() const
   return mUnderlineEnabled;
 }
 
-float VisualModel::GetUnderlineHeight() const
-{
-  return mUnderlineHeight;
-}
-
 void VisualModel::ClearCaches()
 {
   mCachedLineIndex = 0u;
@@ -497,12 +487,11 @@ VisualModel::VisualModel()
   mShadowColor(),
   mUnderlineColor(),
   mShadowOffset(),
-  mUnderlineHeight( 0.0f ),
-  mUnderlineEnabled( false ),
-  mUnderlineColorSet( false ),
   mNaturalSize(),
   mActualSize(),
-  mCachedLineIndex( 0u )
+  mCachedLineIndex( 0u ),
+  mUnderlineEnabled( false ),
+  mUnderlineColorSet( false )
 {
 }
 
index 292adc7..aa8a75f 100644 (file)
@@ -477,20 +477,6 @@ public:
    */
   void ClearCaches();
 
-  /**
-   * @brief Set the override used for underline height, 0 indicates height will be supplied by adaptor
-   *
-   * @param[in] height The height in pixels of the underline
-   */
-  void SetUnderlineHeight( float height );
-
-  /**
-   * @brief Retrieves the underline height override
-   *
-   * @return Returns the override height for an underline, 0 indicates that adaptor will determine the height
-   */
-  float GetUnderlineHeight() const;
-
 protected:
 
   /**
@@ -525,10 +511,6 @@ public:
   Vector4                mShadowColor;          ///< Color of drop shadow
   Vector4                mUnderlineColor;       ///< Color of underline
   Vector2                mShadowOffset;         ///< Offset for drop shadow, 0 indicates no shadow
-  float                  mUnderlineHeight;      ///< Fixed height for underline to override adaptor supplied settings.
-  bool                   mUnderlineEnabled:1;   ///< Underline enabled flag
-  bool                   mUnderlineColorSet:1;  ///< Has the underline color been explicitly set?
-
 
 private:
 
@@ -538,6 +520,9 @@ private:
   // Caches to increase performance in some consecutive operations.
   LineIndex mCachedLineIndex; ///< Used to increase performance in consecutive calls to GetLineOfGlyph() or GetLineOfCharacter() with consecutive glyphs or characters.
 
+public:
+  bool                   mUnderlineEnabled:1;   ///< Underline enabled flag
+  bool                   mUnderlineColorSet:1;  ///< Has the underline color been explicitly set?
 };
 
 } // namespace Text
index b11bd13..7ecb200 100644 (file)
@@ -57,20 +57,19 @@ public:
   {
     enum
     {
-      RENDERING_BACKEND = PROPERTY_START_INDEX, ///< name "rendering-backend",    The type or rendering e.g. bitmap-based,          type INT
-      TEXT,                                     ///< name "text",                 The text to display in UTF-8 format,              type STRING
-      FONT_FAMILY,                              ///< name "font-family",          The requested font family,                        type STRING
-      FONT_STYLE,                               ///< name "font-style",           The requested font style e.g. Regular/Italic,     type STRING
-      POINT_SIZE,                               ///< name "point-size",           The size of font in points,                       type FLOAT
-      MULTI_LINE,                               ///< name "multi-line",           The single-line or multi-line layout option,      type BOOLEAN
-      HORIZONTAL_ALIGNMENT,                     ///< name "horizontal-alignment", The line horizontal alignment,                    type STRING,  values "BEGIN", "CENTER", "END"
-      VERTICAL_ALIGNMENT,                       ///< name "vertical-alignment",   The line vertical alignment,                      type STRING,  values   "TOP",   "CENTER",   "BOTTOM"
-      TEXT_COLOR,                               ///< name "text-color",           The text color,                                   type VECTOR4
-      SHADOW_OFFSET,                            ///< name "shadow-offset",        The drop shadow offset 0 indicates no shadow,     type VECTOR2
-      SHADOW_COLOR,                             ///< name "shadow-color",         The color of a drop shadow,                       type VECTOR4
-      UNDERLINE_ENABLED,                        ///< name "underline-enabled",    The underline enabled flag,                       type BOOLEAN
-      UNDERLINE_COLOR,                          ///< name "underline-color",      The color of the underline,                       type VECTOR4
-      UNDERLINE_HEIGHT                          ///< name "underline-height",     Overrides the underline height from font metrics, type FLOAT
+      RENDERING_BACKEND = PROPERTY_START_INDEX, ///< name "rendering-backend",    The type or rendering e.g. bitmap-based,      type INT
+      TEXT,                                     ///< name "text",                 The text to display in UTF-8 format,          type STRING
+      FONT_FAMILY,                              ///< name "font-family",          The requested font family,                    type STRING
+      FONT_STYLE,                               ///< name "font-style",           The requested font style e.g. Regular/Italic, type STRING
+      POINT_SIZE,                               ///< name "point-size",           The size of font in points,                   type FLOAT
+      MULTI_LINE,                               ///< name "multi-line",           The single-line or multi-line layout option,  type BOOLEAN
+      HORIZONTAL_ALIGNMENT,                     ///< name "horizontal-alignment", The line horizontal alignment,                type STRING,  values "BEGIN", "CENTER", "END"
+      VERTICAL_ALIGNMENT,                       ///< name "vertical-alignment",   The line vertical alignment,                  type STRING,  values   "TOP",   "CENTER",   "BOTTOM"
+      TEXT_COLOR,                               ///< name "text-color",           The text color,                               type VECTOR4
+      SHADOW_OFFSET,                            ///< name "shadow-offset",        The drop shadow offset 0 indicates no shadow, type VECTOR2
+      SHADOW_COLOR,                             ///< name "shadow-color",         The color of a drop shadow,                   type VECTOR4
+      UNDERLINE_ENABLED,                        ///< name "underline-enabled",    The underline enabled flag                    type BOOLEAN
+      UNDERLINE_COLOR,                          ///< name "underline-color",      The color of the underline                    type VECTOR4
     };
   };