[WK2] Fix for Display error occur in Help Center of FaceBook page
authorShanmuga Pandi M <shanmuga.m@samsung.com>
Wed, 28 Aug 2013 13:35:10 +0000 (19:05 +0530)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Fri, 4 Oct 2013 11:45:18 +0000 (11:45 +0000)
[Title] Fix for Display error occur in Help Center of FaceBook page
[issue#] N_SE-47968
[Problem] Display error occurs due to painting SolidColor
[Cause] SolidColor is not having premultiplied color, but TextureMapperGL always uses a premultiplied color for emulator
[Solution] We must convert an unmultiplied color to a premultiplied color.
           This patch is based on below open source patch.
           http://trac.webkit.org/changeset/139674
[Developer] shanmuga.m

Change-Id: I286e32c3722648b6cc4f36b3dbc6f0d8d621111d

Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp
Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp

index cafd980..31d05c4 100755 (executable)
@@ -495,11 +495,11 @@ void TextureMapperGL::drawSolidColor(const FloatRect& rect, const Transformation
     GL_CMD(glUseProgram(program->id()));
 
     float r, g, b, a;
-    color.getRGBA(r, g, b, a);
+    Color(premultipliedARGBFromColor(color)).getRGBA(r, g, b, a);
     GL_CMD(glUniform4f(program->colorLocation(), r, g, b, a));
 
 #if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
-    drawQuad(rect, matrix, program.get(), GL_TRIANGLE_FAN, a < 1, false);
+    drawQuad(rect, matrix, program.get(), GL_TRIANGLE_FAN, a < 1, true);
 #else
     drawQuad(rect, matrix, program.get(), GL_TRIANGLE_FAN, a < 1);
 #endif
index b8c4cd7..4e3aa24 100755 (executable)
@@ -261,6 +261,15 @@ void TextureMapperLayer::paint()
     paintRecursive(options);
 }
 
+static Color blendWithOpacity(const Color& color, float opacity)
+{
+    RGBA32 rgba = color.rgb();
+    // See Color::getRGBA() to know how to extract alpha from color.
+    float alpha = alphaChannel(rgba) / 255.;
+    float effectiveAlpha = alpha * opacity;
+    return Color(colorWithOverrideAlpha(rgba, effectiveAlpha));
+}
+
 void TextureMapperLayer::paintSelf(const TextureMapperPaintOptions& options)
 {
     if (!m_state.visible || !m_state.contentsVisible)
@@ -274,11 +283,7 @@ void TextureMapperLayer::paintSelf(const TextureMapperPaintOptions& options)
 
     float opacity = options.opacity;
     if (m_state.backgroundColor.alpha() && !m_state.contentsRect.isEmpty()) {
-        Color color = m_state.backgroundColor;
-        float r, g, b, a;
-        color.getRGBA(r, g, b, a);
-        color = Color(r * opacity, g * opacity, b * opacity, a * opacity);
-        options.textureMapper->drawSolidColor(m_state.contentsRect, transform, color);
+       options.textureMapper->drawSolidColor(m_state.contentsRect, transform, blendWithOpacity(m_state.backgroundColor, opacity));
     }
 
 #if ENABLE(TIZEN_TEXTURE_MAPPER_CULLER)