X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=inline;f=dali-toolkit%2Finternal%2Ftext%2Frendering%2Fatlas%2Ftext-atlas-renderer.cpp;h=2e94ce13fdc88fe22c5f9b132278f14ba9f6a0ea;hb=5b3cf0e6742934674bdf62bbe15af00e39eae566;hp=e6d548fca1eaadf4c1cc8cdade03abe3795cf3d2;hpb=061df6115632f504e42ebdf8c4aa8a0d8010b341;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp index e6d548f..2e94ce1 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -19,17 +19,19 @@ #include // EXTERNAL INCLUDES -#include -#include -#include +#include +#include +#include +#include +#include #include -#include -#include +#include #include -#include + // INTERNAL INCLUDES #include #include +#include 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 ); } }