2012-01-21 Nikolas Zimmermann <nzimmermann@rim.com>
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 21 Jan 2012 12:28:20 +0000 (12:28 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 21 Jan 2012 12:28:20 +0000 (12:28 +0000)
        <feImage> ignores preserveAspectRatio="none"
        https://bugs.webkit.org/show_bug.cgi?id=76780

        Reviewed by Antti Koivisto.

        Add new testcase covering preserveAspectRatio="none" + <feImage>, which is now fixed.

        * platform/chromium/test_expectations.txt: Add new test, that needs a rebaseline.
        * platform/mac/svg/filters/feImage-preserveAspectratio-expected.png: Added.
        * platform/mac/svg/filters/feImage-preserveAspectratio-expected.txt: Added.
        * svg/filters/feImage-preserveAspectratio.svg: Added.

2012-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        <feImage> ignores preserveAspectRatio="none"
        https://bugs.webkit.org/show_bug.cgi?id=76780

        Reviewed by Antti Koivisto.

        preserveAspectRatio="none" was ignored in SVGFEImage. It always called transformRect() w/o checking
        whether it was supposed to transform the rect or not - move code from RenderSVGImage right into
        transformRect(), to do nothing if preserveAspectRatio="none" was given.

        Test: svg/filters/feImage-preserveAspectratio.svg

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::transformRect):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@105575 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/chromium/test_expectations.txt
LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.txt [new file with mode: 0644]
LayoutTests/svg/filters/feImage-preserveAspectratio.svg [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/svg/RenderSVGImage.cpp
Source/WebCore/svg/SVGPreserveAspectRatio.cpp

index e19e34e..e9632f1 100644 (file)
@@ -1,3 +1,17 @@
+2012-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>
+
+        <feImage> ignores preserveAspectRatio="none"
+        https://bugs.webkit.org/show_bug.cgi?id=76780
+
+        Reviewed by Antti Koivisto.
+
+        Add new testcase covering preserveAspectRatio="none" + <feImage>, which is now fixed.
+
+        * platform/chromium/test_expectations.txt: Add new test, that needs a rebaseline.
+        * platform/mac/svg/filters/feImage-preserveAspectratio-expected.png: Added.
+        * platform/mac/svg/filters/feImage-preserveAspectratio-expected.txt: Added.
+        * svg/filters/feImage-preserveAspectratio.svg: Added.
+
 2012-01-21  Jochen Eisinger  <jochen@chromium.org>
 
         history.replaceState should update the HistoryItem to use a GET method if previously non-GET (POST)
index c39ce35..4bafc6a 100644 (file)
@@ -3920,6 +3920,9 @@ BUGWK76647 : tables/mozilla/bugs/bug86708.html = IMAGE+TEXT
 BUGWK76647 : tables/mozilla_expected_failures/bugs/97619.html = IMAGE+TEXT
 BUGWK76647 : svg/zoom/page/zoom-background-images.html = IMAGE
 
+// Just needs a rebaseline.
+BUGWK76780 : svg/filters/feImage-preserveAspectRatio.svg = IMAGE+TEXT
+
 // Change error (misspelling) underlines from Windows look to Mac look.
 BUG_CARYCLARK MAC : editing/deleting/delete-3928305-fix.html = IMAGE
 BUG_CARYCLARK MAC : editing/deleting/delete-3959464-fix.html = IMAGE
diff --git a/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png b/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png
new file mode 100644 (file)
index 0000000..1f7d611
Binary files /dev/null and b/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.txt b/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.txt
new file mode 100644 (file)
index 0000000..196691d
--- /dev/null
@@ -0,0 +1,22 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 600x250
+  RenderSVGRoot {svg} at (0,0) size 600x250
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourceFilter {filter} [id="Default"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+        [feImage image-size="100x100"]
+      RenderSVGResourceFilter {filter} [id="Fitted"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
+        [feImage image-size="100x100"]
+      RenderSVGResourceFilter {filter} [id="Shifted"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
+        [feImage image-size="100x100"]
+    RenderSVGRect {rect} at (0,0) size 600x250 [stroke={[type=SOLID] [color=#0000FF]}] [x=1.00] [y=1.00] [width=598.00] [height=248.00]
+    RenderSVGContainer {g} at (40,5) size 520x241
+      RenderSVGRect {rect} at (40,5) size 120x241 [fill={[type=SOLID] [color=#000000]}] [x=50.00] [y=25.00] [width=100.00] [height=200.00]
+        [filter="Default"] RenderSVGResourceFilter {filter} at (40,5) size 120x240
+      RenderSVGRect {rect} at (49,24) size 102x202 [stroke={[type=SOLID] [color=#008000]}] [x=50.00] [y=25.00] [width=100.00] [height=200.00]
+      RenderSVGRect {rect} at (240,5) size 120x241 [fill={[type=SOLID] [color=#000000]}] [x=250.00] [y=25.00] [width=100.00] [height=200.00]
+        [filter="Fitted"] RenderSVGResourceFilter {filter} at (240,5) size 120x240
+      RenderSVGRect {rect} at (249,24) size 102x202 [stroke={[type=SOLID] [color=#008000]}] [x=250.00] [y=25.00] [width=100.00] [height=200.00]
+      RenderSVGRect {rect} at (440,5) size 120x241 [fill={[type=SOLID] [color=#000000]}] [x=450.00] [y=25.00] [width=100.00] [height=200.00]
+        [filter="Shifted"] RenderSVGResourceFilter {filter} at (440,5) size 120x240
+      RenderSVGRect {rect} at (449,24) size 102x202 [stroke={[type=SOLID] [color=#008000]}] [x=450.00] [y=25.00] [width=100.00] [height=200.00]
diff --git a/LayoutTests/svg/filters/feImage-preserveAspectratio.svg b/LayoutTests/svg/filters/feImage-preserveAspectratio.svg
new file mode 100644 (file)
index 0000000..43415e9
--- /dev/null
@@ -0,0 +1,33 @@
+<svg width="600" height="250" viewBox="0 0 600 250"
+     xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink">
+  <title>Example feImage - Examples of feImage use</title>
+  <desc>Three examples of using feImage, the first showing the
+        default rendering, the second showing the image fit
+        to a box and the third showing the image
+        shifted and clipped.</desc>
+  <defs>
+    <filter id="Default">
+      <feImage xlink:href="../W3C-SVG-1.1/resources/smiley.png" />
+    </filter>
+    <filter id="Fitted" primitiveUnits="objectBoundingBox">
+      <feImage xlink:href="../W3C-SVG-1.1/resources/smiley.png"
+              x="0" y="0" width="100%" height="100%"
+              preserveAspectRatio="none"/>
+    </filter>
+    <filter id="Shifted">
+      <feImage xlink:href="../W3C-SVG-1.1/resources/smiley.png"
+              x="500" y="5"/>
+    </filter>
+  </defs>
+  <rect fill="none" stroke="blue"  
+        x="1" y="1" width="598" height="248"/>
+  <g>
+    <rect x="50"  y="25" width="100" height="200" filter="url(#Default)"/>
+    <rect x="50"  y="25" width="100" height="200" fill="none" stroke="green"/>
+    <rect x="250" y="25" width="100" height="200" filter="url(#Fitted)"/>
+    <rect x="250" y="25" width="100" height="200" fill="none" stroke="green"/>
+    <rect x="450" y="25" width="100" height="200" filter="url(#Shifted)"/>
+    <rect x="450" y="25" width="100" height="200" fill="none" stroke="green"/>
+  </g>
+</svg>
index 379caf5..aba0d79 100644 (file)
@@ -1,3 +1,21 @@
+2012-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>
+
+        <feImage> ignores preserveAspectRatio="none"
+        https://bugs.webkit.org/show_bug.cgi?id=76780
+
+        Reviewed by Antti Koivisto.
+
+        preserveAspectRatio="none" was ignored in SVGFEImage. It always called transformRect() w/o checking
+        whether it was supposed to transform the rect or not - move code from RenderSVGImage right into
+        transformRect(), to do nothing if preserveAspectRatio="none" was given.
+
+        Test: svg/filters/feImage-preserveAspectratio.svg
+
+        * rendering/svg/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::paint):
+        * svg/SVGPreserveAspectRatio.cpp:
+        (WebCore::SVGPreserveAspectRatio::transformRect):
+
 2012-01-21  Jochen Eisinger  <jochen@chromium.org>
 
         history.replaceState should update the HistoryItem to use a GET method if previously non-GET (POST)
index 7720339..8a5b7c6 100644 (file)
@@ -131,8 +131,7 @@ void RenderSVGImage::paint(PaintInfo& paintInfo, const LayoutPoint&)
                 FloatRect srcRect(0, 0, image->width(), image->height());
 
                 SVGImageElement* imageElement = static_cast<SVGImageElement*>(node());
-                if (imageElement->preserveAspectRatio().align() != SVGPreserveAspectRatio::SVG_PRESERVEASPECTRATIO_NONE)
-                    imageElement->preserveAspectRatio().transformRect(destRect, srcRect);
+                imageElement->preserveAspectRatio().transformRect(destRect, srcRect);
 
                 childPaintInfo.context->drawImage(image.get(), ColorSpaceDeviceRGB, destRect, srcRect);
             }
index e81d80b..0e7da00 100644 (file)
@@ -159,6 +159,9 @@ bailOut:
 
 void SVGPreserveAspectRatio::transformRect(FloatRect& destRect, FloatRect& srcRect)
 {
+    if (m_align == SVG_PRESERVEASPECTRATIO_NONE)
+        return;
+
     FloatSize imageSize = srcRect.size();
     float origDestWidth = destRect.width();
     float origDestHeight = destRect.height();