Fix SVACE issue
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / rendering / text-typesetter.cpp
index b524710..9559460 100755 (executable)
@@ -181,6 +181,9 @@ void TypesetGlyph( GlyphData& data,
   }
   else
   {
+    // Whether the given glyph is a color one.
+    const bool isColorGlyph = Pixel::BGRA8888 == data.glyphBitmap.format;
+
     // Initial vertical offset.
     const int yOffset = data.verticalOffset + position->y;
 
@@ -208,21 +211,24 @@ void TypesetGlyph( GlyphData& data,
 
         uint8_t* bitmapBuffer = reinterpret_cast< uint8_t* >( data.bitmapBuffer.GetBuffer() );
 
-        // Update the alpha channel.
-        const uint8_t alpha = *( data.glyphBitmap.buffer + glyphBufferOffset + index );
-
-        // Copy non-transparent pixels only
-        if ( alpha > 0u )
+        if ( !isColorGlyph )
         {
-          // Check alpha of overlapped pixels
-          uint8_t& currentAlpha = *( bitmapBuffer + verticalOffset + xOffsetIndex );
-          uint8_t newAlpha = static_cast<uint8_t>( color->a * static_cast<float>( alpha ) );
-
-          // For any pixel overlapped with the pixel in previous glyphs, make sure we don't
-          // overwrite a previous bigger alpha with a smaller alpha (in order to avoid
-          // semi-transparent gaps between joint glyphs with overlapped pixels, which could
-          // happen, for example, in the RTL text when we copy glyphs from right to left).
-          *( bitmapBuffer + verticalOffset + xOffsetIndex ) = std::max( currentAlpha, newAlpha );
+          // Update the alpha channel.
+          const uint8_t alpha = *( data.glyphBitmap.buffer + glyphBufferOffset + index );
+
+          // Copy non-transparent pixels only
+          if ( alpha > 0u )
+          {
+            // Check alpha of overlapped pixels
+            uint8_t& currentAlpha = *( bitmapBuffer + verticalOffset + xOffsetIndex );
+            uint8_t newAlpha = static_cast<uint8_t>( color->a * static_cast<float>( alpha ) );
+
+            // For any pixel overlapped with the pixel in previous glyphs, make sure we don't
+            // overwrite a previous bigger alpha with a smaller alpha (in order to avoid
+            // semi-transparent gaps between joint glyphs with overlapped pixels, which could
+            // happen, for example, in the RTL text when we copy glyphs from right to left).
+            *( bitmapBuffer + verticalOffset + xOffsetIndex ) = std::max( currentAlpha, newAlpha );
+          }
         }
       }
     }
@@ -275,17 +281,17 @@ PixelData Typesetter::Render( const Vector2& size, RenderBehaviour behaviour, bo
 
   switch( mModel->GetVerticalAlignment() )
   {
-    case Layout::VERTICAL_ALIGN_TOP:
+    case VerticalAlignment::TOP:
     {
       // No offset to add.
       break;
     }
-    case Layout::VERTICAL_ALIGN_CENTER:
+    case VerticalAlignment::CENTER:
     {
       penY = static_cast<int>( 0.5f * ( size.height - layoutSize.height ) );
       break;
     }
-    case Layout::VERTICAL_ALIGN_BOTTOM:
+    case VerticalAlignment::BOTTOM:
     {
       penY = static_cast<int>( size.height - layoutSize.height );
       break;
@@ -603,7 +609,7 @@ Devel::PixelBuffer Typesetter::CreateImageBuffer( const unsigned int bufferWidth
 
       for( unsigned int y = underlineYOffset; y < underlineYOffset + maxUnderlineThickness; y++ )
       {
-        if( ( y < 0 ) || ( y > bufferHeight - 1 ) )
+        if( y > bufferHeight - 1 )
         {
           // Do not write out of bounds.
           break;
@@ -611,7 +617,7 @@ Devel::PixelBuffer Typesetter::CreateImageBuffer( const unsigned int bufferWidth
 
         for( unsigned int x = glyphData.horizontalOffset + lineExtentLeft; x <= glyphData.horizontalOffset + lineExtentRight; x++ )
         {
-          if( ( x < 0 ) || ( x > bufferWidth - 1 ) )
+          if( x > bufferWidth - 1 )
           {
             // Do not write out of bounds.
             break;