<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[180511] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/180511">180511</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-23 12:31:04 -0800 (Mon, 23 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
https://bugs.webkit.org/show_bug.cgi?id=141729.

Patch by Said Abou-Hallawa &lt;sabouhallawa@apple.com&gt; on 2015-02-23
Reviewed by Simon Fraser.

Source/WebCore:

When drawing an SVG image and the drawing context is set to be transparent,
make sure this transparency is applied to the compositing layer.

Test: svg/canvas/canvas-global-alpha-svg.html

* platform/graphics/GraphicsContext.cpp:
(WebCore::GraphicsContext::setAlpha): Make setAlpha() calls the platform
function and sets 'm_state.alpha' to the input value.

(WebCore::GraphicsContext::alpha): Add a new function 'alpha()' which
returns the value of the global alpha.

* platform/graphics/GraphicsContext.h:
(WebCore::GraphicsContextState::GraphicsContextState): Add a new member
'alpha' to the context state since the getter function CGContextGetAlpha
is defined only in a private header file. Also move single line functions
from the source file to the header file.

* platform/graphics/cairo/GraphicsContextCairo.cpp:
(WebCore::GraphicsContext::setPlatformAlpha):
(WebCore::GraphicsContext::setAlpha): Deleted.
* platform/graphics/cg/GraphicsContextCG.cpp:
(WebCore::GraphicsContext::setPlatformAlpha):
(WebCore::GraphicsContext::setAlpha): Deleted.
Rename setAlpha() to setPlatformAlpha() in the platform files. Add setAlpha()
to the core file. setAlpha() will set the value of 'm_state.alpha' and call
setPlatformAlpha().

* svg/graphics/SVGImage.cpp:
(WebCore::SVGImage::draw): If the drawing context is transparent, apply its
global alpha value to the compositing layer.

LayoutTests:

Add a new test which draws an SVG image on a canvas after setting its
globalAlpha to a value less than 1.

* svg/canvas/canvas-global-alpha-svg-expected.html: Added.
* svg/canvas/canvas-global-alpha-svg.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsContextcpp">trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsContexth">trunk/Source/WebCore/platform/graphics/GraphicsContext.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscairoGraphicsContextCairocpp">trunk/Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscgGraphicsContextCGcpp">trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp</a></li>
<li><a href="#trunkSourceWebCoresvggraphicsSVGImagecpp">trunk/Source/WebCore/svg/graphics/SVGImage.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestssvgcanvascanvasglobalalphasvgexpectedhtml">trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg-expected.html</a></li>
<li><a href="#trunkLayoutTestssvgcanvascanvasglobalalphasvghtml">trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/LayoutTests/ChangeLog        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2015-02-23  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
+        https://bugs.webkit.org/show_bug.cgi?id=141729.
+
+        Reviewed by Simon Fraser.
+
+        Add a new test which draws an SVG image on a canvas after setting its 
+        globalAlpha to a value less than 1.
+
+        * svg/canvas/canvas-global-alpha-svg-expected.html: Added.
+        * svg/canvas/canvas-global-alpha-svg.html: Added.
+
</ins><span class="cx"> 2015-02-23  Gyuyoung Kim  &lt;gyuyoung.kim@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed EFL gardening. Mark tests of css3 overflow, border to ImageOnlyFailure.
</span></span></pre></div>
<a id="trunkLayoutTestssvgcanvascanvasglobalalphasvgexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg-expected.html (0 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg-expected.html                                (rev 0)
+++ trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg-expected.html        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+  &lt;style&gt;
+    div {
+      border-width: 25px;
+      border-style: solid;
+      border-color: green;
+    }
+    .main {
+      width: 100px;
+      height: 100px;
+    }
+    .sub {
+      width: 50px;
+      height: 50px;
+    }
+    .sub-sub {
+      width: 0px;
+      height: 0px;
+    }
+    .low-opacity {
+      opacity: 0.2;   
+    }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+  &lt;div class=&quot;main&quot;&gt;
+    &lt;div class=&quot;sub low-opacity&quot;&gt;
+      &lt;div class=&quot;sub-sub low-opacity&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+  &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgcanvascanvasglobalalphasvghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg.html (0 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg.html                                (rev 0)
+++ trunk/LayoutTests/svg/canvas/canvas-global-alpha-svg.html        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;body&gt;
+  &lt;canvas id=&quot;canvas&quot;&gt;&lt;/canvas&gt;
+  &lt;script&gt;
+    var canvas = document.getElementById(&quot;canvas&quot;);
+    canvas.width  = 150;
+    canvas.height = 150;
+    
+    var context = canvas.getContext(&quot;2d&quot;);    
+    context.strokeStyle = &quot;green&quot;;
+    context.lineWidth = 50;
+    context.strokeRect(0,0,150,150);
+
+    var svgImage = new Image();
+    svgImage.onload = function() {
+      context.globalAlpha = 0.2;
+          context.drawImage(svgImage, 25, 25);
+    };
+    
+    svgImage.src = &quot;data:image/svg+xml, \
+    &lt;svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'&gt; \
+      &lt;rect width='100%' height='100%' style='fill:none;stroke:green;stroke-width:50%;'/&gt; \
+      &lt;rect x='25%' y='25%' width='50%' height='50%' fill='green' fill-opacity='0.2'/&gt; \
+    &lt;/svg&gt;&quot;;
+  &lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/ChangeLog        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2015-02-23  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
+        https://bugs.webkit.org/show_bug.cgi?id=141729.
+
+        Reviewed by Simon Fraser.
+
+        When drawing an SVG image and the drawing context is set to be transparent,
+        make sure this transparency is applied to the compositing layer.
+
+        Test: svg/canvas/canvas-global-alpha-svg.html
+
+        * platform/graphics/GraphicsContext.cpp:
+        (WebCore::GraphicsContext::setAlpha): Make setAlpha() calls the platform
+        function and sets 'm_state.alpha' to the input value.
+
+        (WebCore::GraphicsContext::alpha): Add a new function 'alpha()' which
+        returns the value of the global alpha.
+        
+        * platform/graphics/GraphicsContext.h:
+        (WebCore::GraphicsContextState::GraphicsContextState): Add a new member
+        'alpha' to the context state since the getter function CGContextGetAlpha
+        is defined only in a private header file. Also move single line functions
+        from the source file to the header file.
+    
+        * platform/graphics/cairo/GraphicsContextCairo.cpp:
+        (WebCore::GraphicsContext::setPlatformAlpha):
+        (WebCore::GraphicsContext::setAlpha): Deleted.
+        * platform/graphics/cg/GraphicsContextCG.cpp:
+        (WebCore::GraphicsContext::setPlatformAlpha):
+        (WebCore::GraphicsContext::setAlpha): Deleted.
+        Rename setAlpha() to setPlatformAlpha() in the platform files. Add setAlpha()
+        to the core file. setAlpha() will set the value of 'm_state.alpha' and call
+        setPlatformAlpha().
+    
+        * svg/graphics/SVGImage.cpp:
+        (WebCore::SVGImage::draw): If the drawing context is transparent, apply its
+        global alpha value to the compositing layer.
+        
</ins><span class="cx"> 2015-02-23  Eric Carlson  &lt;eric.carlson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Occasional crash in MediaPlayer::setPrivateBrowsingMode
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -208,12 +208,6 @@
</span><span class="cx">     clearPlatformShadow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool GraphicsContext::hasShadow() const
-{
-    return m_state.shadowColor.isValid() &amp;&amp; m_state.shadowColor.alpha()
-           &amp;&amp; (m_state.shadowBlur || m_state.shadowOffset.width() || m_state.shadowOffset.height());
-}
-
</del><span class="cx"> bool GraphicsContext::getShadow(FloatSize&amp; offset, float&amp; blur, Color&amp; color, ColorSpace&amp; colorSpace) const
</span><span class="cx"> {
</span><span class="cx">     offset = m_state.shadowOffset;
</span><span class="lines">@@ -224,11 +218,6 @@
</span><span class="cx">     return hasShadow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool GraphicsContext::hasBlurredShadow() const
-{
-    return m_state.shadowColor.isValid() &amp;&amp; m_state.shadowColor.alpha() &amp;&amp; m_state.shadowBlur;
-}
-
</del><span class="cx"> #if USE(CAIRO)
</span><span class="cx"> bool GraphicsContext::mustUseShadowBlur() const
</span><span class="cx"> {
</span><span class="lines">@@ -247,36 +236,6 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-float GraphicsContext::strokeThickness() const
-{
-    return m_state.strokeThickness;
-}
-
-StrokeStyle GraphicsContext::strokeStyle() const
-{
-    return m_state.strokeStyle;
-}
-
-Color GraphicsContext::strokeColor() const
-{
-    return m_state.strokeColor;
-}
-
-ColorSpace GraphicsContext::strokeColorSpace() const
-{
-    return m_state.strokeColorSpace;
-}
-
-WindRule GraphicsContext::fillRule() const
-{
-    return m_state.fillRule;
-}
-
-void GraphicsContext::setFillRule(WindRule fillRule)
-{
-    m_state.fillRule = fillRule;
-}
-
</del><span class="cx"> void GraphicsContext::setFillColor(const Color&amp; color, ColorSpace colorSpace)
</span><span class="cx"> {
</span><span class="cx">     m_state.fillColor = color;
</span><span class="lines">@@ -286,53 +245,18 @@
</span><span class="cx">     setPlatformFillColor(color, colorSpace);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Color GraphicsContext::fillColor() const
</del><ins>+void GraphicsContext::setShouldAntialias(bool shouldAntialias)
</ins><span class="cx"> {
</span><del>-    return m_state.fillColor;
</del><ins>+    m_state.shouldAntialias = shouldAntialias;
+    setPlatformShouldAntialias(shouldAntialias);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ColorSpace GraphicsContext::fillColorSpace() const
</del><ins>+void GraphicsContext::setShouldSmoothFonts(bool shouldSmoothFonts)
</ins><span class="cx"> {
</span><del>-    return m_state.fillColorSpace;
</del><ins>+    m_state.shouldSmoothFonts = shouldSmoothFonts;
+    setPlatformShouldSmoothFonts(shouldSmoothFonts);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsContext::setShouldAntialias(bool b)
-{
-    m_state.shouldAntialias = b;
-    setPlatformShouldAntialias(b);
-}
-
-bool GraphicsContext::shouldAntialias() const
-{
-    return m_state.shouldAntialias;
-}
-
-void GraphicsContext::setShouldSmoothFonts(bool b)
-{
-    m_state.shouldSmoothFonts = b;
-    setPlatformShouldSmoothFonts(b);
-}
-
-bool GraphicsContext::shouldSmoothFonts() const
-{
-    return m_state.shouldSmoothFonts;
-}
-
-void GraphicsContext::setShouldSubpixelQuantizeFonts(bool b)
-{
-    m_state.shouldSubpixelQuantizeFonts = b;
-}
-
-bool GraphicsContext::shouldSubpixelQuantizeFonts() const
-{
-    return m_state.shouldSubpixelQuantizeFonts;
-}
-
-const GraphicsContextState&amp; GraphicsContext::state() const
-{
-    return m_state;
-}
-
</del><span class="cx"> void GraphicsContext::setStrokePattern(Ref&lt;Pattern&gt;&amp;&amp; pattern)
</span><span class="cx"> {
</span><span class="cx">     m_state.strokeGradient.clear();
</span><span class="lines">@@ -357,36 +281,6 @@
</span><span class="cx">     m_state.fillPattern.clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Gradient* GraphicsContext::fillGradient() const
-{
-    return m_state.fillGradient.get();
-}
-
-Gradient* GraphicsContext::strokeGradient() const
-{
-    return m_state.strokeGradient.get();
-}
-
-Pattern* GraphicsContext::fillPattern() const
-{
-    return m_state.fillPattern.get();
-}
-
-Pattern* GraphicsContext::strokePattern() const
-{
-    return m_state.strokePattern.get();
-}
-
-void GraphicsContext::setShadowsIgnoreTransforms(bool ignoreTransforms)
-{
-    m_state.shadowsIgnoreTransforms = ignoreTransforms;
-}
-
-bool GraphicsContext::shadowsIgnoreTransforms() const
-{
-    return m_state.shadowsIgnoreTransforms;
-}
-
</del><span class="cx"> void GraphicsContext::beginTransparencyLayer(float opacity)
</span><span class="cx"> {
</span><span class="cx">     beginPlatformTransparencyLayer(opacity);
</span><span class="lines">@@ -400,32 +294,12 @@
</span><span class="cx">     --m_transparencyCount;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool GraphicsContext::isInTransparencyLayer() const
-{
-    return (m_transparencyCount &gt; 0) &amp;&amp; supportsTransparencyLayers();
-}
-
-bool GraphicsContext::updatingControlTints() const
-{
-    return m_updatingControlTints;
-}
-
</del><span class="cx"> void GraphicsContext::setUpdatingControlTints(bool b)
</span><span class="cx"> {
</span><span class="cx">     setPaintingDisabled(b);
</span><span class="cx">     m_updatingControlTints = b;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsContext::setPaintingDisabled(bool f)
-{
-    m_state.paintingDisabled = f;
-}
-
-bool GraphicsContext::paintingDisabled() const
-{
-    return m_state.paintingDisabled;
-}
-
</del><span class="cx"> float GraphicsContext::drawText(const FontCascade&amp; font, const TextRun&amp; run, const FloatPoint&amp; point, int from, int to)
</span><span class="cx"> {
</span><span class="cx">     if (paintingDisabled())
</span><span class="lines">@@ -610,11 +484,6 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-TextDrawingModeFlags GraphicsContext::textDrawingMode() const
-{
-    return m_state.textDrawingMode;
-}
-
</del><span class="cx"> void GraphicsContext::setTextDrawingMode(TextDrawingModeFlags mode)
</span><span class="cx"> {
</span><span class="cx">     m_state.textDrawingMode = mode;
</span><span class="lines">@@ -679,6 +548,12 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+void GraphicsContext::setAlpha(float alpha)
+{
+    m_state.alpha = alpha;
+    setPlatformAlpha(alpha);
+}
+
</ins><span class="cx"> void GraphicsContext::setCompositeOperation(CompositeOperator compositeOperation, BlendMode blendMode)
</span><span class="cx"> {
</span><span class="cx">     m_state.compositeOperator = compositeOperation;
</span><span class="lines">@@ -686,26 +561,6 @@
</span><span class="cx">     setPlatformCompositeOperation(compositeOperation, blendMode);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-CompositeOperator GraphicsContext::compositeOperation() const
-{
-    return m_state.compositeOperator;
-}
-
-BlendMode GraphicsContext::blendModeOperation() const
-{
-    return m_state.blendMode;
-}
-
-void GraphicsContext::setDrawLuminanceMask(bool drawLuminanceMask)
-{
-    m_state.drawLuminanceMask = drawLuminanceMask;
-}
-
-bool GraphicsContext::drawLuminanceMask() const
-{
-    return m_state.drawLuminanceMask;
-}
-
</del><span class="cx"> #if !USE(CG)
</span><span class="cx"> // Implement this if you want to go ahead and push the drawing mode into your native context
</span><span class="cx"> // immediately.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsContext.h (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsContext.h        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/platform/graphics/GraphicsContext.h        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -113,19 +113,7 @@
</span><span class="cx"> 
</span><span class="cx">     struct GraphicsContextState {
</span><span class="cx">         GraphicsContextState()
</span><del>-            : strokeThickness(0)
-            , shadowBlur(0)
-            , textDrawingMode(TextModeFill)
-            , strokeColor(Color::black)
-            , fillColor(Color::black)
-            , strokeStyle(SolidStroke)
-            , fillRule(RULE_NONZERO)
-            , strokeColorSpace(ColorSpaceDeviceRGB)
-            , fillColorSpace(ColorSpaceDeviceRGB)
-            , shadowColorSpace(ColorSpaceDeviceRGB)
-            , compositeOperator(CompositeSourceOver)
-            , blendMode(BlendModeNormal)
-            , shouldAntialias(true)
</del><ins>+            : shouldAntialias(true)
</ins><span class="cx">             , shouldSmoothFonts(true)
</span><span class="cx">             , shouldSubpixelQuantizeFonts(true)
</span><span class="cx">             , paintingDisabled(false)
</span><span class="lines">@@ -147,24 +135,25 @@
</span><span class="cx"> 
</span><span class="cx">         FloatSize shadowOffset;
</span><span class="cx"> 
</span><del>-        float strokeThickness;
-        float shadowBlur;
</del><ins>+        float strokeThickness { 0 };
+        float shadowBlur { 0 };
</ins><span class="cx"> 
</span><del>-        TextDrawingModeFlags textDrawingMode;
</del><ins>+        TextDrawingModeFlags textDrawingMode { TextModeFill };
</ins><span class="cx"> 
</span><del>-        Color strokeColor;
-        Color fillColor;
</del><ins>+        Color strokeColor { Color::black };
+        Color fillColor { Color::black };
</ins><span class="cx">         Color shadowColor;
</span><span class="cx"> 
</span><del>-        StrokeStyle strokeStyle;
-        WindRule fillRule;
</del><ins>+        StrokeStyle strokeStyle { SolidStroke };
+        WindRule fillRule { RULE_NONZERO };
</ins><span class="cx"> 
</span><del>-        ColorSpace strokeColorSpace;
-        ColorSpace fillColorSpace;
-        ColorSpace shadowColorSpace;
</del><ins>+        ColorSpace strokeColorSpace { ColorSpaceDeviceRGB };
+        ColorSpace fillColorSpace { ColorSpaceDeviceRGB };
+        ColorSpace shadowColorSpace { ColorSpaceDeviceRGB };
</ins><span class="cx"> 
</span><del>-        CompositeOperator compositeOperator;
-        BlendMode blendMode;
</del><ins>+        float alpha { 1 };
+        CompositeOperator compositeOperator { CompositeSourceOver };
+        BlendMode blendMode { BlendModeNormal };
</ins><span class="cx"> 
</span><span class="cx">         bool shouldAntialias : 1;
</span><span class="cx">         bool shouldSmoothFonts : 1;
</span><span class="lines">@@ -216,47 +205,50 @@
</span><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT PlatformGraphicsContext* platformContext() const;
</span><span class="cx"> 
</span><del>-        float strokeThickness() const;
</del><span class="cx">         void setStrokeThickness(float);
</span><del>-        StrokeStyle strokeStyle() const;
</del><ins>+        float strokeThickness() const { return m_state.strokeThickness; }
+
</ins><span class="cx">         void setStrokeStyle(StrokeStyle);
</span><del>-        Color strokeColor() const;
-        ColorSpace strokeColorSpace() const;
</del><ins>+        StrokeStyle strokeStyle() const { return m_state.strokeStyle; }
+
</ins><span class="cx">         WEBCORE_EXPORT void setStrokeColor(const Color&amp;, ColorSpace);
</span><ins>+        Color strokeColor() const { return m_state.strokeColor; }
+        ColorSpace strokeColorSpace() const { return m_state.strokeColorSpace; }
</ins><span class="cx"> 
</span><span class="cx">         void setStrokePattern(Ref&lt;Pattern&gt;&amp;&amp;);
</span><del>-        Pattern* strokePattern() const;
</del><ins>+        Pattern* strokePattern() const { return m_state.strokePattern.get(); }
</ins><span class="cx"> 
</span><span class="cx">         void setStrokeGradient(Ref&lt;Gradient&gt;&amp;&amp;);
</span><del>-        Gradient* strokeGradient() const;
</del><ins>+        Gradient* strokeGradient() const { return m_state.strokeGradient.get(); }
</ins><span class="cx"> 
</span><del>-        WindRule fillRule() const;
-        void setFillRule(WindRule);
-        Color fillColor() const;
-        ColorSpace fillColorSpace() const;
</del><ins>+        void setFillRule(WindRule fillRule) { m_state.fillRule = fillRule; }
+        WindRule fillRule() const { return m_state.fillRule; }
+    
</ins><span class="cx">         WEBCORE_EXPORT void setFillColor(const Color&amp;, ColorSpace);
</span><ins>+        Color fillColor() const { return m_state.fillColor; }
+        ColorSpace fillColorSpace() const { return m_state.fillColorSpace; }
</ins><span class="cx"> 
</span><span class="cx">         void setFillPattern(Ref&lt;Pattern&gt;&amp;&amp;);
</span><del>-        Pattern* fillPattern() const;
</del><ins>+        Pattern* fillPattern() const { return m_state.fillPattern.get(); }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void setFillGradient(Ref&lt;Gradient&gt;&amp;&amp;);
</span><del>-        Gradient* fillGradient() const;
</del><ins>+        Gradient* fillGradient() const { return m_state.fillGradient.get(); }
</ins><span class="cx"> 
</span><del>-        void setShadowsIgnoreTransforms(bool);
-        bool shadowsIgnoreTransforms() const;
</del><ins>+        void setShadowsIgnoreTransforms(bool shadowsIgnoreTransforms) { m_state.shadowsIgnoreTransforms = shadowsIgnoreTransforms; }
+        bool shadowsIgnoreTransforms() const { return m_state.shadowsIgnoreTransforms; }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void setShouldAntialias(bool);
</span><del>-        bool shouldAntialias() const;
</del><ins>+        bool shouldAntialias() const { return m_state.shouldAntialias; }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void setShouldSmoothFonts(bool);
</span><del>-        bool shouldSmoothFonts() const;
</del><ins>+        bool shouldSmoothFonts() const { return m_state.shouldSmoothFonts; }
</ins><span class="cx"> 
</span><span class="cx">         // Normally CG enables subpixel-quantization because it improves the performance of aligning glyphs.
</span><span class="cx">         // In some cases we have to disable to to ensure a high-quality output of the glyphs.
</span><del>-        void setShouldSubpixelQuantizeFonts(bool);
-        bool shouldSubpixelQuantizeFonts() const;
</del><ins>+        void setShouldSubpixelQuantizeFonts(bool shouldSubpixelQuantizeFonts) { m_state.shouldSubpixelQuantizeFonts = shouldSubpixelQuantizeFonts; }
+        bool shouldSubpixelQuantizeFonts() const { return m_state.shouldSubpixelQuantizeFonts; }
</ins><span class="cx"> 
</span><del>-        const GraphicsContextState&amp; state() const;
</del><ins>+        const GraphicsContextState&amp; state() const { return m_state; }
</ins><span class="cx"> 
</span><span class="cx"> #if USE(CG)
</span><span class="cx">         void applyStrokePattern();
</span><span class="lines">@@ -338,9 +330,9 @@
</span><span class="cx">         
</span><span class="cx">         IntRect clipBounds() const;
</span><span class="cx"> 
</span><del>-        TextDrawingModeFlags textDrawingMode() const;
</del><span class="cx">         void setTextDrawingMode(TextDrawingModeFlags);
</span><del>-        
</del><ins>+        TextDrawingModeFlags textDrawingMode() const { return m_state.textDrawingMode; }
+
</ins><span class="cx">         float drawText(const FontCascade&amp;, const TextRun&amp;, const FloatPoint&amp;, int from = 0, int to = -1);
</span><span class="cx">         void drawGlyphs(const FontCascade&amp;, const Font&amp;, const GlyphBuffer&amp;, int from, int numGlyphs, const FloatPoint&amp;);
</span><span class="cx">         void drawEmphasisMarks(const FontCascade&amp;, const TextRun&amp; , const AtomicString&amp; mark, const FloatPoint&amp;, int from = 0, int to = -1);
</span><span class="lines">@@ -367,26 +359,28 @@
</span><span class="cx">         static void updateDocumentMarkerResources();
</span><span class="cx">         void drawLineForDocumentMarker(const FloatPoint&amp;, float width, DocumentMarkerLineStyle);
</span><span class="cx"> 
</span><del>-        WEBCORE_EXPORT bool paintingDisabled() const;
-        void setPaintingDisabled(bool);
</del><ins>+        void setPaintingDisabled(bool paintingDisabled) { m_state.paintingDisabled = paintingDisabled; }
+        WEBCORE_EXPORT bool paintingDisabled() const { return m_state.paintingDisabled; }
</ins><span class="cx"> 
</span><del>-        WEBCORE_EXPORT bool updatingControlTints() const;
</del><span class="cx">         void setUpdatingControlTints(bool);
</span><ins>+        WEBCORE_EXPORT bool updatingControlTints() const { return m_updatingControlTints; }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void beginTransparencyLayer(float opacity);
</span><span class="cx">         WEBCORE_EXPORT void endTransparencyLayer();
</span><del>-        bool isInTransparencyLayer() const;
</del><ins>+        bool isInTransparencyLayer() const { return (m_transparencyCount &gt; 0) &amp;&amp; supportsTransparencyLayers(); }
</ins><span class="cx"> 
</span><del>-        bool hasShadow() const;
</del><span class="cx">         WEBCORE_EXPORT void setShadow(const FloatSize&amp;, float blur, const Color&amp;, ColorSpace);
</span><span class="cx">         // Legacy shadow blur radius is used for canvas, and -webkit-box-shadow.
</span><span class="cx">         // It has different treatment of radii &gt; 8px.
</span><span class="cx">         void setLegacyShadow(const FloatSize&amp;, float blur, const Color&amp;, ColorSpace);
</span><span class="cx"> 
</span><del>-        bool getShadow(FloatSize&amp;, float&amp;, Color&amp;, ColorSpace&amp;) const;
</del><span class="cx">         WEBCORE_EXPORT void clearShadow();
</span><ins>+        bool getShadow(FloatSize&amp;, float&amp;, Color&amp;, ColorSpace&amp;) const;
</ins><span class="cx"> 
</span><del>-        bool hasBlurredShadow() const;
</del><ins>+        bool hasVisibleShadow() const { return m_state.shadowColor.isValid() &amp;&amp; m_state.shadowColor.alpha(); }
+        bool hasShadow() const { return hasVisibleShadow() &amp;&amp; (m_state.shadowBlur || m_state.shadowOffset.width() || m_state.shadowOffset.height()); }
+        bool hasBlurredShadow() const { return hasVisibleShadow() &amp;&amp; m_state.shadowBlur; }
+
</ins><span class="cx"> #if USE(CAIRO)
</span><span class="cx">         bool mustUseShadowBlur() const;
</span><span class="cx"> #endif
</span><span class="lines">@@ -403,13 +397,14 @@
</span><span class="cx">         void setMiterLimit(float);
</span><span class="cx"> 
</span><span class="cx">         void setAlpha(float);
</span><ins>+        float alpha() const { return m_state.alpha; }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void setCompositeOperation(CompositeOperator, BlendMode = BlendModeNormal);
</span><del>-        CompositeOperator compositeOperation() const;
-        BlendMode blendModeOperation() const;
</del><ins>+        CompositeOperator compositeOperation() const { return m_state.compositeOperator; }
+        BlendMode blendModeOperation() const { return m_state.blendMode; }
</ins><span class="cx"> 
</span><del>-        void setDrawLuminanceMask(bool);
-        bool drawLuminanceMask() const;
</del><ins>+        void setDrawLuminanceMask(bool drawLuminanceMask) { m_state.drawLuminanceMask = drawLuminanceMask; }
+        bool drawLuminanceMask() const { return m_state.drawLuminanceMask; }
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT void clip(const Path&amp;, WindRule = RULE_EVENODD);
</span><span class="cx"> 
</span><span class="lines">@@ -540,6 +535,7 @@
</span><span class="cx">         void setPlatformShadow(const FloatSize&amp;, float blur, const Color&amp;, ColorSpace);
</span><span class="cx">         void clearPlatformShadow();
</span><span class="cx"> 
</span><ins>+        void setPlatformAlpha(float);
</ins><span class="cx">         void setPlatformCompositeOperation(CompositeOperator, BlendMode = BlendModeNormal);
</span><span class="cx"> 
</span><span class="cx">         void beginPlatformTransparencyLayer(float opacity);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscairoGraphicsContextCairocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -928,7 +928,7 @@
</span><span class="cx">     cairo_set_miter_limit(platformContext()-&gt;cr(), miter);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsContext::setAlpha(float alpha)
</del><ins>+void GraphicsContext::setPlatformAlpha(float alpha)
</ins><span class="cx"> {
</span><span class="cx">     platformContext()-&gt;setGlobalAlpha(alpha);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscgGraphicsContextCGcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -996,13 +996,6 @@
</span><span class="cx">     CGContextSetMiterLimit(platformContext(), limit);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsContext::setAlpha(float alpha)
-{
-    if (paintingDisabled())
-        return;
-    CGContextSetAlpha(platformContext(), alpha);
-}
-
</del><span class="cx"> void GraphicsContext::clearRect(const FloatRect&amp; r)
</span><span class="cx"> {
</span><span class="cx">     if (paintingDisabled())
</span><span class="lines">@@ -1481,6 +1474,13 @@
</span><span class="cx">     CGContextSetShouldSmoothFonts(platformContext(), enable);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void GraphicsContext::setPlatformAlpha(float alpha)
+{
+    if (paintingDisabled())
+        return;
+    CGContextSetAlpha(platformContext(), alpha);
+}
+
</ins><span class="cx"> void GraphicsContext::setPlatformCompositeOperation(CompositeOperator mode, BlendMode blendMode)
</span><span class="cx"> {
</span><span class="cx">     if (paintingDisabled())
</span></span></pre></div>
<a id="trunkSourceWebCoresvggraphicsSVGImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/graphics/SVGImage.cpp (180510 => 180511)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/graphics/SVGImage.cpp        2015-02-23 19:27:36 UTC (rev 180510)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.cpp        2015-02-23 20:31:04 UTC (rev 180511)
</span><span class="lines">@@ -229,9 +229,11 @@
</span><span class="cx">     GraphicsContextStateSaver stateSaver(*context);
</span><span class="cx">     context-&gt;setCompositeOperation(compositeOp, blendMode);
</span><span class="cx">     context-&gt;clip(enclosingIntRect(dstRect));
</span><del>-    bool compositingRequiresTransparencyLayer = compositeOp != CompositeSourceOver || blendMode != BlendModeNormal;
</del><ins>+
+    float alpha = context-&gt;alpha();
+    bool compositingRequiresTransparencyLayer = compositeOp != CompositeSourceOver || blendMode != BlendModeNormal || alpha &lt; 1;
</ins><span class="cx">     if (compositingRequiresTransparencyLayer) {
</span><del>-        context-&gt;beginTransparencyLayer(1);
</del><ins>+        context-&gt;beginTransparencyLayer(alpha);
</ins><span class="cx">         context-&gt;setCompositeOperation(CompositeSourceOver, BlendModeNormal);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>