Merge "Stop setting crazy Z value with controls (at the moment depth is ignored by...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / rendering / atlas / text-atlas-renderer.cpp
index e6d548f..2e94ce1 100644 (file)
 #include <dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h>
 
 // EXTERNAL INCLUDES
-#include <dali/dali.h>
-#include <dali/devel-api/object/property-buffer.h>
-#include <dali/devel-api/rendering/geometry.h>
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/common/stage.h>
+#include <dali/public-api/images/frame-buffer-image.h>
+#include <dali/public-api/render-tasks/render-task.h>
+#include <dali/public-api/render-tasks/render-task-list.h>
 #include <dali/devel-api/rendering/renderer.h>
-#include <dali/devel-api/rendering/sampler.h>
-#include <dali/devel-api/rendering/shader.h>
+#include <dali/devel-api/rendering/geometry.h>
 #include <dali/devel-api/text-abstraction/font-client.h>
-#include <dali/integration-api/debug.h>
+
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
+#include <dali-toolkit/internal/text/text-view.h>
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -50,7 +52,6 @@ const uint32_t DEFAULT_ATLAS_HEIGHT = 512u;
 }
 struct AtlasRenderer::Impl : public ConnectionTracker
 {
-
   enum Style
   {
     STYLE_NORMAL,
@@ -59,15 +60,30 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
   struct MeshRecord
   {
+    MeshRecord()
+    : mColor( Color::BLACK ),
+      mAtlasId( 0 )
+    {
+    }
+
     Vector4 mColor;
     uint32_t mAtlasId;
     AtlasManager::Mesh2D mMesh;
     FrameBufferImage mBuffer;
-    bool mIsUnderline;
   };
 
   struct Extent
   {
+    Extent()
+    : mBaseLine( 0.0f ),
+      mLeft( 0.0f ),
+      mRight( 0.0f ),
+      mUnderlinePosition( 0.0f ),
+      mUnderlineThickness( 0.0f ),
+      mMeshRecordIndex( 0 )
+    {
+    }
+
     float mBaseLine;
     float mLeft;
     float mRight;
@@ -78,6 +94,13 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
   struct MaxBlockSize
   {
+    MaxBlockSize()
+    : mFontId( 0 ),
+      mNeededBlockWidth( 0 ),
+      mNeededBlockHeight( 0 )
+    {
+    }
+
     FontId mFontId;
     uint32_t mNeededBlockWidth;
     uint32_t mNeededBlockHeight;
@@ -85,12 +108,25 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
   struct CheckEntry
   {
+    CheckEntry()
+    : mFontId( 0 ),
+      mIndex( 0 )
+    {
+    }
+
     FontId mFontId;
     Text::GlyphIndex mIndex;
   };
 
   struct TextCacheEntry
   {
+    TextCacheEntry()
+    : mFontId( 0 ),
+      mIndex( 0 ),
+      mImageId( 0 )
+    {
+    }
+
     FontId mFontId;
     Text::GlyphIndex mIndex;
     uint32_t mImageId;
@@ -142,10 +178,11 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
     // Avoid emptying mTextCache (& removing references) until after incremented references for the new text
     Vector< TextCacheEntry > newTextCache;
+    const GlyphInfo* const glyphsBuffer = glyphs.Begin();
 
     for( uint32_t i = 0, glyphSize = glyphs.Size(); i < glyphSize; ++i )
     {
-      const GlyphInfo& glyph = glyphs[ i ];
+      const GlyphInfo& glyph = *( glyphsBuffer + i );
 
       // No operation for white space
       if ( glyph.width && glyph.height )
@@ -157,7 +194,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker
           FontMetrics fontMetrics;
           mFontClient.GetFontMetrics( glyph.fontId, fontMetrics );
           currentUnderlinePosition = ceil( fabsf( fontMetrics.underlinePosition ) );
-          float descender = ceil( fabsf( fontMetrics.descender ) );
+          const float descender = ceil( fabsf( fontMetrics.descender ) );
 
           if ( underlineHeight == ZERO )
           {
@@ -261,7 +298,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                         slot );
         lastFontId = glyph.fontId;
       }
-    }
+    } // glyphs
 
     // Now remove references for the old text
     RemoveText();
@@ -351,15 +388,6 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     actor.SetParentOrigin( ParentOrigin::CENTER ); // Keep all of the origins aligned
     actor.SetSize( actorSize );
     actor.SetColor( meshRecord.mColor );
-
-    if ( meshRecord.mIsUnderline )
-    {
-      actor.SetColorMode( USE_OWN_COLOR );
-    }
-    else
-    {
-      actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
-    }
     return actor;
   }
 
@@ -379,7 +407,10 @@ struct AtlasRenderer::Impl : public ConnectionTracker
 
       // Check to see if there's a mesh data object that references the same atlas ?
       uint32_t index = 0;
-      for ( std::vector< MeshRecord >::iterator mIt = meshContainer.begin(); mIt != meshContainer.end(); ++mIt, ++index )
+      for ( std::vector< MeshRecord >::iterator mIt = meshContainer.begin(),
+              mEndIt = meshContainer.end();
+            mIt != mEndIt;
+            ++mIt, ++index )
       {
         if ( slot.mAtlasId == mIt->mAtlasId && color == mIt->mColor )
         {
@@ -402,7 +433,6 @@ struct AtlasRenderer::Impl : public ConnectionTracker
       meshRecord.mAtlasId = slot.mAtlasId;
       meshRecord.mMesh = newMesh;
       meshRecord.mColor = color;
-      meshRecord.mIsUnderline = false;
       meshContainer.push_back( meshRecord );
 
       // Adjust extents for this new meshrecord
@@ -428,7 +458,10 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                       float underlineThickness )
   {
     bool foundExtent = false;
-    for ( Vector< Extent >::Iterator eIt = extents.Begin(); eIt != extents.End(); ++eIt )
+    for ( Vector< Extent >::Iterator eIt = extents.Begin(),
+            eEndIt = extents.End();
+          eIt != eEndIt;
+          ++eIt )
     {
       if ( Equals( baseLine, eIt->mBaseLine ) )
       {
@@ -491,14 +524,17 @@ struct AtlasRenderer::Impl : public ConnectionTracker
     }
   }
 
-  void GenerateUnderlines( std::vector< MeshRecord>& meshRecords,
+  void GenerateUnderlines( std::vector< MeshRecord >& meshRecords,
                            Vector< Extent >& extents,
                            const Vector4& underlineColor,
                            const Vector4& textColor )
   {
     AtlasManager::Mesh2D newMesh;
     unsigned short faceIndex = 0;
-    for ( Vector< Extent >::ConstIterator eIt = extents.Begin(); eIt != extents.End(); ++eIt )
+    for ( Vector< Extent >::ConstIterator eIt = extents.Begin(),
+            eEndIt = extents.End();
+          eIt != eEndIt;
+          ++eIt )
     {
       AtlasManager::Vertex2D vert;
       uint32_t index = eIt->mMeshRecordIndex;
@@ -553,7 +589,6 @@ struct AtlasRenderer::Impl : public ConnectionTracker
         record.mMesh = newMesh;
         record.mAtlasId = meshRecords[ index ].mAtlasId;
         record.mColor = underlineColor;
-        record.mIsUnderline = true;
         meshRecords.push_back( record );
       }
     }