Commit b2595b18 authored by ajuma's avatar ajuma Committed by Commit bot

Use correct size for unattached canvases when building canvas filters

The equivalent bug for attached canvases was fixed in
http://crrev.com/370047, but unattached canvases were ignored
there.

BUG=561045

Review URL: https://codereview.chromium.org/1613193002

Cr-Commit-Position: refs/heads/master@{#370719}
parent 34d463ba
<svg style="display: block; width: 0; height: 0">
<defs>
<filter id="crop" primitiveUnits="objectBoundingBox">
<femerge x="0" y="0" width="50%" height="40%">
<femergenode in="SourceGraphic"></femergenode>
</femerge>
</filter>
</defs>
</svg>
<canvas id="canvas" width="100" height="100"></canvas>
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.filter = 'url(#crop)';
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 90, 90);
</script>
<svg style="display: block; width: 0; height: 0">
<defs>
<filter id="crop" primitiveUnits="objectBoundingBox">
<femerge x="0" y="0" width="50%" height="40%">
<femergenode in="SourceGraphic"></femergenode>
</femerge>
</filter>
</defs>
</svg>
<script>
var canvas = document.createElement('canvas');
canvas.width = 100;
canvas.height = 100;
var ctx = canvas.getContext('2d');
ctx.filter = 'url(#crop)';
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 90, 90);
document.body.appendChild(canvas);
</script>
...@@ -100,13 +100,11 @@ PassRefPtrWillBeRawPtr<Filter> ReferenceFilterBuilder::build(float zoom, Element ...@@ -100,13 +100,11 @@ PassRefPtrWillBeRawPtr<Filter> ReferenceFilterBuilder::build(float zoom, Element
SVGFilterElement& filterElement = toSVGFilterElement(*filter); SVGFilterElement& filterElement = toSVGFilterElement(*filter);
FloatRect referenceBox; FloatRect referenceBox;
if (element->inDocument() && element->layoutObject() && element->layoutObject()->enclosingLayer()) { if (referenceBoxSize) {
if (referenceBoxSize) { referenceBox = FloatRect(FloatPoint(), *referenceBoxSize);
referenceBox = FloatRect(FloatPoint(), *referenceBoxSize); } else if (element->inDocument() && element->layoutObject() && element->layoutObject()->enclosingLayer()) {
} else { FloatSize size(element->layoutObject()->enclosingLayer()->physicalBoundingBoxIncludingReflectionAndStackingChildren(LayoutPoint()).size());
FloatSize size(element->layoutObject()->enclosingLayer()->physicalBoundingBoxIncludingReflectionAndStackingChildren(LayoutPoint()).size()); referenceBox = FloatRect(FloatPoint(), size);
referenceBox = FloatRect(FloatPoint(), size);
}
} }
referenceBox.scale(1.0f / zoom); referenceBox.scale(1.0f / zoom);
FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(&filterElement, filterElement.filterUnits()->currentValue()->enumValue(), referenceBox); FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(&filterElement, filterElement.filterUnits()->currentValue()->enumValue(), referenceBox);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment