Title: [121127] trunk
Revision
121127
Author
[email protected]
Date
2012-06-24 18:46:14 -0700 (Sun, 24 Jun 2012)

Log Message

Add snap to css3-images image-resolution
https://bugs.webkit.org/show_bug.cgi?id=89745

Patch by David Barr <[email protected]> on 2012-06-24
Reviewed by Tony Chang.

Source/WebCore:

Due to floating point imprecision, it is difficult to be precise in dpcm.
So use PrimitiveValue::roundForImpreciseConversion rather than just floor.

No new tests; extended fast/css/image-resolution/image-resolution.html

* css/CSSParser.cpp: Accept snap identifier in image-resolution property.
(WebCore::CSSParser::parseImageResolution): Map CSSValueSnap to identifier value from cssValuePool.
* css/CSSValueKeywords.in: Add snap.
* css/StyleBuilder.cpp: Extend ApplyPropertyImageResolution to apply RenderStyle::imageResolutionSnap.
(WebCore::ApplyPropertyImageResolution::applyInheritValue): Apply RenderStyle::imageResolutionSnap.
(WebCore::ApplyPropertyImageResolution::applyInitialValue): Apply RenderStyle::imageResolutionSnap.
(WebCore::ApplyPropertyImageResolution::applyValue): Map CSSValueSnap to ImageResolutionSnapPixels.
* rendering/RenderImage.cpp: Extend conditions for recalculation of intrinsic size.
(WebCore::RenderImage::styleDidChange): Update intrinsic size if RenderStyle::imageResolutionSnap() has changed.
(WebCore::RenderImage::imageDimensionsChanged): Floor scale factor to int, round up if less than 0.01 away from ceiling.
* rendering/style/RenderStyle.cpp: Include StyleRareInheritedData::m_imageResolutionSnap in style diff.
(WebCore::RenderStyle::diff): Map change in StyleRareInheritedData::m_imageResolutionSnap to StyleDifferenceLayout.
* rendering/style/RenderStyle.h: Add RenderStyle::imageResolutionSnap, RenderStyle::setImageResolutionSnap, RenderStyle::initialImageResolutionSnap.
* rendering/style/RenderStyleConstants.h: Add enum ImageResolutionSnap.
* rendering/style/StyleRareInheritedData.cpp: Add StyleRareInheritedData::m_imageResolutionSnap.
(WebCore::StyleRareInheritedData::StyleRareInheritedData): Add m_imageResolutionSnap to default and copy constructor.
(WebCore::StyleRareInheritedData::operator==): Include m_imageResolutionSnap in comparison.
* rendering/style/StyleRareInheritedData.h: Add StyleRareInheritedData::m_imageResolutionSnap.
(StyleRareInheritedData): Add 1-bit field StyleRareInheritedData::m_imageResolutionSnap.

LayoutTests:

* fast/css/image-resolution/image-resolution-expected.txt:
* fast/css/image-resolution/image-resolution.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (121126 => 121127)


--- trunk/LayoutTests/ChangeLog	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/LayoutTests/ChangeLog	2012-06-25 01:46:14 UTC (rev 121127)
@@ -1,3 +1,13 @@
+2012-06-24  David Barr  <[email protected]>
+
+        Add snap to css3-images image-resolution
+        https://bugs.webkit.org/show_bug.cgi?id=89745
+
+        Reviewed by Tony Chang.
+
+        * fast/css/image-resolution/image-resolution-expected.txt:
+        * fast/css/image-resolution/image-resolution.html:
+
 2012-06-24  Oli Lan  <[email protected]>
 
         After Editor::setComposition is called, input should scroll to the end of the composition.

Modified: trunk/LayoutTests/fast/css/image-resolution/image-resolution-expected.txt (121126 => 121127)


--- trunk/LayoutTests/fast/css/image-resolution/image-resolution-expected.txt	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/LayoutTests/fast/css/image-resolution/image-resolution-expected.txt	2012-06-25 01:46:14 UTC (rev 121127)
@@ -219,6 +219,576 @@
 PASS img.style.cssText is "image-resolution: from-image; "
 PASS img.offsetWidth is 16
 PASS img.offsetHeight is 16
+TEST "0dppx snap"
+PASS img.style.cssText is ""
+TEST "snap 0dppx"
+PASS img.style.cssText is ""
+TEST "1dppx snap"
+PASS img.style.cssText is "image-resolution: 1dppx snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 1dppx"
+PASS img.style.cssText is "image-resolution: snap 1dppx; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "2dppx snap"
+PASS img.style.cssText is "image-resolution: 2dppx snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 2dppx"
+PASS img.style.cssText is "image-resolution: snap 2dppx; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "3dppx snap"
+PASS img.style.cssText is "image-resolution: 3dppx snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 3dppx"
+PASS img.style.cssText is "image-resolution: snap 3dppx; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "4dppx snap"
+PASS img.style.cssText is "image-resolution: 4dppx snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 4dppx"
+PASS img.style.cssText is "image-resolution: snap 4dppx; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "0dpi snap"
+PASS img.style.cssText is ""
+TEST "snap 0dpi"
+PASS img.style.cssText is ""
+TEST "96dpi snap"
+PASS img.style.cssText is "image-resolution: 96dpi snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 96dpi"
+PASS img.style.cssText is "image-resolution: snap 96dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "192dpi snap"
+PASS img.style.cssText is "image-resolution: 192dpi snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 192dpi"
+PASS img.style.cssText is "image-resolution: snap 192dpi; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "288dpi snap"
+PASS img.style.cssText is "image-resolution: 288dpi snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 288dpi"
+PASS img.style.cssText is "image-resolution: snap 288dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "384dpi snap"
+PASS img.style.cssText is "image-resolution: 384dpi snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 384dpi"
+PASS img.style.cssText is "image-resolution: snap 384dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "150dpi snap"
+PASS img.style.cssText is "image-resolution: 150dpi snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 150dpi"
+PASS img.style.cssText is "image-resolution: snap 150dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "300dpi snap"
+PASS img.style.cssText is "image-resolution: 300dpi snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 300dpi"
+PASS img.style.cssText is "image-resolution: snap 300dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "450dpi snap"
+PASS img.style.cssText is "image-resolution: 450dpi snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 450dpi"
+PASS img.style.cssText is "image-resolution: snap 450dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "600dpi snap"
+PASS img.style.cssText is "image-resolution: 600dpi snap; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "snap 600dpi"
+PASS img.style.cssText is "image-resolution: snap 600dpi; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "0dpcm snap"
+PASS img.style.cssText is ""
+TEST "snap 0dpcm"
+PASS img.style.cssText is ""
+TEST "37.7dpcm snap"
+PASS img.style.cssText is "image-resolution: 37.7dpcm snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 37.7dpcm"
+PASS img.style.cssText is "image-resolution: snap 37.7dpcm; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "75.5dpcm snap"
+PASS img.style.cssText is "image-resolution: 75.5dpcm snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 75.5dpcm"
+PASS img.style.cssText is "image-resolution: snap 75.5dpcm; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "113.3dpcm snap"
+PASS img.style.cssText is "image-resolution: 113.3dpcm snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 113.3dpcm"
+PASS img.style.cssText is "image-resolution: snap 113.3dpcm; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "151.1dpcm snap"
+PASS img.style.cssText is "image-resolution: 151.1dpcm snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 151.1dpcm"
+PASS img.style.cssText is "image-resolution: snap 151.1dpcm; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap"
+PASS img.style.cssText is ""
+TEST "0dppx from-image snap"
+PASS img.style.cssText is ""
+TEST "0dppx snap from-image"
+PASS img.style.cssText is ""
+TEST "from-image 0dppx snap"
+PASS img.style.cssText is ""
+TEST "from-image snap 0dppx"
+PASS img.style.cssText is ""
+TEST "snap 0dppx from-image"
+PASS img.style.cssText is ""
+TEST "snap from-image 0dppx"
+PASS img.style.cssText is ""
+TEST "1dppx from-image snap"
+PASS img.style.cssText is "image-resolution: 1dppx from-image snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "1dppx snap from-image"
+PASS img.style.cssText is "image-resolution: 1dppx snap from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image 1dppx snap"
+PASS img.style.cssText is "image-resolution: from-image 1dppx snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image snap 1dppx"
+PASS img.style.cssText is "image-resolution: from-image snap 1dppx; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 1dppx from-image"
+PASS img.style.cssText is "image-resolution: snap 1dppx from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap from-image 1dppx"
+PASS img.style.cssText is "image-resolution: snap from-image 1dppx; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "2dppx from-image snap"
+PASS img.style.cssText is "image-resolution: 2dppx from-image snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "2dppx snap from-image"
+PASS img.style.cssText is "image-resolution: 2dppx snap from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image 2dppx snap"
+PASS img.style.cssText is "image-resolution: from-image 2dppx snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image snap 2dppx"
+PASS img.style.cssText is "image-resolution: from-image snap 2dppx; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 2dppx from-image"
+PASS img.style.cssText is "image-resolution: snap 2dppx from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap from-image 2dppx"
+PASS img.style.cssText is "image-resolution: snap from-image 2dppx; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "3dppx from-image snap"
+PASS img.style.cssText is "image-resolution: 3dppx from-image snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "3dppx snap from-image"
+PASS img.style.cssText is "image-resolution: 3dppx snap from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image 3dppx snap"
+PASS img.style.cssText is "image-resolution: from-image 3dppx snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image snap 3dppx"
+PASS img.style.cssText is "image-resolution: from-image snap 3dppx; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 3dppx from-image"
+PASS img.style.cssText is "image-resolution: snap 3dppx from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap from-image 3dppx"
+PASS img.style.cssText is "image-resolution: snap from-image 3dppx; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "4dppx from-image snap"
+PASS img.style.cssText is "image-resolution: 4dppx from-image snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "4dppx snap from-image"
+PASS img.style.cssText is "image-resolution: 4dppx snap from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image 4dppx snap"
+PASS img.style.cssText is "image-resolution: from-image 4dppx snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image snap 4dppx"
+PASS img.style.cssText is "image-resolution: from-image snap 4dppx; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 4dppx from-image"
+PASS img.style.cssText is "image-resolution: snap 4dppx from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap from-image 4dppx"
+PASS img.style.cssText is "image-resolution: snap from-image 4dppx; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "0dpi from-image snap"
+PASS img.style.cssText is ""
+TEST "0dpi snap from-image"
+PASS img.style.cssText is ""
+TEST "from-image 0dpi snap"
+PASS img.style.cssText is ""
+TEST "from-image snap 0dpi"
+PASS img.style.cssText is ""
+TEST "snap 0dpi from-image"
+PASS img.style.cssText is ""
+TEST "snap from-image 0dpi"
+PASS img.style.cssText is ""
+TEST "96dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 96dpi from-image snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "96dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 96dpi snap from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image 96dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 96dpi snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image snap 96dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 96dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 96dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 96dpi from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap from-image 96dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 96dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "192dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 192dpi from-image snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "192dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 192dpi snap from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image 192dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 192dpi snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image snap 192dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 192dpi; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 192dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 192dpi from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap from-image 192dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 192dpi; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "288dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 288dpi from-image snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "288dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 288dpi snap from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image 288dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 288dpi snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image snap 288dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 288dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 288dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 288dpi from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap from-image 288dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 288dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "384dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 384dpi from-image snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "384dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 384dpi snap from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image 384dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 384dpi snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image snap 384dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 384dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 384dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 384dpi from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap from-image 384dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 384dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "150dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 150dpi from-image snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "150dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 150dpi snap from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image 150dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 150dpi snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image snap 150dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 150dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 150dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 150dpi from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap from-image 150dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 150dpi; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "300dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 300dpi from-image snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "300dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 300dpi snap from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image 300dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 300dpi snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image snap 300dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 300dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 300dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 300dpi from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap from-image 300dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 300dpi; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "450dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 450dpi from-image snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "450dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 450dpi snap from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image 450dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 450dpi snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image snap 450dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 450dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 450dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 450dpi from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap from-image 450dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 450dpi; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "600dpi from-image snap"
+PASS img.style.cssText is "image-resolution: 600dpi from-image snap; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "600dpi snap from-image"
+PASS img.style.cssText is "image-resolution: 600dpi snap from-image; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "from-image 600dpi snap"
+PASS img.style.cssText is "image-resolution: from-image 600dpi snap; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "from-image snap 600dpi"
+PASS img.style.cssText is "image-resolution: from-image snap 600dpi; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "snap 600dpi from-image"
+PASS img.style.cssText is "image-resolution: snap 600dpi from-image; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "snap from-image 600dpi"
+PASS img.style.cssText is "image-resolution: snap from-image 600dpi; "
+PASS img.offsetWidth is 2
+PASS img.offsetHeight is 2
+TEST "0dpcm from-image snap"
+PASS img.style.cssText is ""
+TEST "0dpcm snap from-image"
+PASS img.style.cssText is ""
+TEST "from-image 0dpcm snap"
+PASS img.style.cssText is ""
+TEST "from-image snap 0dpcm"
+PASS img.style.cssText is ""
+TEST "snap 0dpcm from-image"
+PASS img.style.cssText is ""
+TEST "snap from-image 0dpcm"
+PASS img.style.cssText is ""
+TEST "37.7dpcm from-image snap"
+PASS img.style.cssText is "image-resolution: 37.7dpcm from-image snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "37.7dpcm snap from-image"
+PASS img.style.cssText is "image-resolution: 37.7dpcm snap from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image 37.7dpcm snap"
+PASS img.style.cssText is "image-resolution: from-image 37.7dpcm snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "from-image snap 37.7dpcm"
+PASS img.style.cssText is "image-resolution: from-image snap 37.7dpcm; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap 37.7dpcm from-image"
+PASS img.style.cssText is "image-resolution: snap 37.7dpcm from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap from-image 37.7dpcm"
+PASS img.style.cssText is "image-resolution: snap from-image 37.7dpcm; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "75.5dpcm from-image snap"
+PASS img.style.cssText is "image-resolution: 75.5dpcm from-image snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "75.5dpcm snap from-image"
+PASS img.style.cssText is "image-resolution: 75.5dpcm snap from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image 75.5dpcm snap"
+PASS img.style.cssText is "image-resolution: from-image 75.5dpcm snap; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "from-image snap 75.5dpcm"
+PASS img.style.cssText is "image-resolution: from-image snap 75.5dpcm; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap 75.5dpcm from-image"
+PASS img.style.cssText is "image-resolution: snap 75.5dpcm from-image; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "snap from-image 75.5dpcm"
+PASS img.style.cssText is "image-resolution: snap from-image 75.5dpcm; "
+PASS img.offsetWidth is 8
+PASS img.offsetHeight is 8
+TEST "113.3dpcm from-image snap"
+PASS img.style.cssText is "image-resolution: 113.3dpcm from-image snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "113.3dpcm snap from-image"
+PASS img.style.cssText is "image-resolution: 113.3dpcm snap from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image 113.3dpcm snap"
+PASS img.style.cssText is "image-resolution: from-image 113.3dpcm snap; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "from-image snap 113.3dpcm"
+PASS img.style.cssText is "image-resolution: from-image snap 113.3dpcm; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap 113.3dpcm from-image"
+PASS img.style.cssText is "image-resolution: snap 113.3dpcm from-image; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "snap from-image 113.3dpcm"
+PASS img.style.cssText is "image-resolution: snap from-image 113.3dpcm; "
+PASS img.offsetWidth is 5
+PASS img.offsetHeight is 5
+TEST "151.1dpcm from-image snap"
+PASS img.style.cssText is "image-resolution: 151.1dpcm from-image snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "151.1dpcm snap from-image"
+PASS img.style.cssText is "image-resolution: 151.1dpcm snap from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image 151.1dpcm snap"
+PASS img.style.cssText is "image-resolution: from-image 151.1dpcm snap; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image snap 151.1dpcm"
+PASS img.style.cssText is "image-resolution: from-image snap 151.1dpcm; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap 151.1dpcm from-image"
+PASS img.style.cssText is "image-resolution: snap 151.1dpcm from-image; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "snap from-image 151.1dpcm"
+PASS img.style.cssText is "image-resolution: snap from-image 151.1dpcm; "
+PASS img.offsetWidth is 4
+PASS img.offsetHeight is 4
+TEST "from-image snap"
+PASS img.style.cssText is "image-resolution: from-image snap; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
+TEST "snap from-image"
+PASS img.style.cssText is "image-resolution: snap from-image; "
+PASS img.offsetWidth is 16
+PASS img.offsetHeight is 16
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/css/image-resolution/image-resolution.html (121126 => 121127)


--- trunk/LayoutTests/fast/css/image-resolution/image-resolution.html	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/LayoutTests/fast/css/image-resolution/image-resolution.html	2012-06-25 01:46:14 UTC (rev 121127)
@@ -27,6 +27,8 @@
     var value = explicit && explicit[1] * 1;
     var unit = explicit && explicit[3];
     var dppx = 1;
+    if (!unit && !fromImage)
+        return;
     if (unit && value <= 0)
         return;
     if (unit && value) {
@@ -38,28 +40,40 @@
             dppx = value / cssPxPerIn;
         else if (unit === 'dpcm')
             dppx = value / (cssPxPerIn / cmPerIn);
+        else
+            return;
     }
     if (fromImage && imgResolutionDppx)
         dppx = imgResolutionDppx;
     if (snap)
-        dppx = Math.floor(dppx);
+        dppx = Math.floor(dppx + 0.01);
     if (dppx <= 0)
         dppx = 1;
     return dppx;
 }
 
-function permute2(rule) {
+function permute3(rule) {
     var s = rule.trim().split(' ');
     if (s.length == 1)
         return s;
-    return [s.join(' '), [s[1], s[0]].join(' ')];
+    if (s.length == 2)
+        return [s.join(' '), [s[1], s[0]].join(' ')];
+    return [[s[0], s[1], s[2]].join(' '), [s[0], s[2], s[1]].join(' '),
+            [s[1], s[0], s[2]].join(' '), [s[1], s[2], s[0]].join(' '),
+            [s[2], s[0], s[1]].join(' '), [s[2], s[1], s[0]].join(' ')];
 }
 
 function generateTests(resolutions) {
     var tests = resolutions.slice();
     resolutions.forEach(function(resolution) {
-        tests.push.apply(tests, permute2(resolution + ' from-image'));
+        tests.push.apply(tests, permute3(resolution + ' from-image'));
     });
+    resolutions.forEach(function(resolution) {
+        tests.push.apply(tests, permute3(resolution + ' snap'));
+    });
+    resolutions.forEach(function(resolution) {
+        tests.push.apply(tests, permute3(resolution + ' from-image snap'));
+    });
     return tests;
 }
 

Modified: trunk/Source/WebCore/ChangeLog (121126 => 121127)


--- trunk/Source/WebCore/ChangeLog	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/ChangeLog	2012-06-25 01:46:14 UTC (rev 121127)
@@ -1,3 +1,35 @@
+2012-06-24  David Barr  <[email protected]>
+
+        Add snap to css3-images image-resolution
+        https://bugs.webkit.org/show_bug.cgi?id=89745
+
+        Reviewed by Tony Chang.
+
+        Due to floating point imprecision, it is difficult to be precise in dpcm.
+        So use PrimitiveValue::roundForImpreciseConversion rather than just floor.
+
+        No new tests; extended fast/css/image-resolution/image-resolution.html
+
+        * css/CSSParser.cpp: Accept snap identifier in image-resolution property.
+        (WebCore::CSSParser::parseImageResolution): Map CSSValueSnap to identifier value from cssValuePool.
+        * css/CSSValueKeywords.in: Add snap.
+        * css/StyleBuilder.cpp: Extend ApplyPropertyImageResolution to apply RenderStyle::imageResolutionSnap.
+        (WebCore::ApplyPropertyImageResolution::applyInheritValue): Apply RenderStyle::imageResolutionSnap.
+        (WebCore::ApplyPropertyImageResolution::applyInitialValue): Apply RenderStyle::imageResolutionSnap.
+        (WebCore::ApplyPropertyImageResolution::applyValue): Map CSSValueSnap to ImageResolutionSnapPixels.
+        * rendering/RenderImage.cpp: Extend conditions for recalculation of intrinsic size.
+        (WebCore::RenderImage::styleDidChange): Update intrinsic size if RenderStyle::imageResolutionSnap() has changed.
+        (WebCore::RenderImage::imageDimensionsChanged): Floor scale factor to int, round up if less than 0.01 away from ceiling.
+        * rendering/style/RenderStyle.cpp: Include StyleRareInheritedData::m_imageResolutionSnap in style diff.
+        (WebCore::RenderStyle::diff): Map change in StyleRareInheritedData::m_imageResolutionSnap to StyleDifferenceLayout.
+        * rendering/style/RenderStyle.h: Add RenderStyle::imageResolutionSnap, RenderStyle::setImageResolutionSnap, RenderStyle::initialImageResolutionSnap.
+        * rendering/style/RenderStyleConstants.h: Add enum ImageResolutionSnap.
+        * rendering/style/StyleRareInheritedData.cpp: Add StyleRareInheritedData::m_imageResolutionSnap.
+        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Add m_imageResolutionSnap to default and copy constructor.
+        (WebCore::StyleRareInheritedData::operator==): Include m_imageResolutionSnap in comparison.
+        * rendering/style/StyleRareInheritedData.h: Add StyleRareInheritedData::m_imageResolutionSnap.
+        (StyleRareInheritedData): Add 1-bit field StyleRareInheritedData::m_imageResolutionSnap.
+
 2012-06-24  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r121106.

Modified: trunk/Source/WebCore/css/CSSParser.cpp (121126 => 121127)


--- trunk/Source/WebCore/css/CSSParser.cpp	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/css/CSSParser.cpp	2012-06-25 01:46:14 UTC (rev 121127)
@@ -6904,12 +6904,16 @@
     RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
     bool haveResolution = false;
     bool haveFromImage = false;
+    bool haveSnap = false;
 
     CSSParserValue* value = valueList->current();
     while (value) {
         if (!haveFromImage && value->id == CSSValueFromImage) {
             list->append(cssValuePool().createIdentifierValue(value->id));
             haveFromImage = true;
+        } else if (!haveSnap && value->id == CSSValueSnap) {
+            list->append(cssValuePool().createIdentifierValue(value->id));
+            haveSnap = true;
         } else if (!haveResolution && validUnit(value, FResolution | FNonNeg) && value->fValue > 0) {
             list->append(createPrimitiveNumericValue(value));
             haveResolution = true;
@@ -6919,6 +6923,8 @@
     }
     if (!list->length())
         return 0;
+    if (!haveFromImage && !haveResolution)
+        return 0;
     return list;
 }
 #endif

Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (121126 => 121127)


--- trunk/Source/WebCore/css/CSSValueKeywords.in	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in	2012-06-25 01:46:14 UTC (rev 121127)
@@ -934,5 +934,6 @@
 
 #if defined(ENABLE_CSS_IMAGE_RESOLUTION) && ENABLE_CSS_IMAGE_RESOLUTION
 from-image
+snap
 #endif
 

Modified: trunk/Source/WebCore/css/StyleBuilder.cpp (121126 => 121127)


--- trunk/Source/WebCore/css/StyleBuilder.cpp	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/css/StyleBuilder.cpp	2012-06-25 01:46:14 UTC (rev 121127)
@@ -1785,12 +1785,14 @@
     static void applyInheritValue(StyleResolver* styleResolver)
     {
         ApplyPropertyDefaultBase<ImageResolutionSource, &RenderStyle::imageResolutionSource, ImageResolutionSource, &RenderStyle::setImageResolutionSource, ImageResolutionSource, &RenderStyle::initialImageResolutionSource>::applyInheritValue(styleResolver);
+        ApplyPropertyDefaultBase<ImageResolutionSnap, &RenderStyle::imageResolutionSnap, ImageResolutionSnap, &RenderStyle::setImageResolutionSnap, ImageResolutionSnap, &RenderStyle::initialImageResolutionSnap>::applyInheritValue(styleResolver);
         ApplyPropertyDefaultBase<float, &RenderStyle::imageResolution, float, &RenderStyle::setImageResolution, float, &RenderStyle::initialImageResolution>::applyInheritValue(styleResolver);
     }
 
     static void applyInitialValue(StyleResolver* styleResolver)
     {
         ApplyPropertyDefaultBase<ImageResolutionSource, &RenderStyle::imageResolutionSource, ImageResolutionSource, &RenderStyle::setImageResolutionSource, ImageResolutionSource, &RenderStyle::initialImageResolutionSource>::applyInitialValue(styleResolver);
+        ApplyPropertyDefaultBase<ImageResolutionSnap, &RenderStyle::imageResolutionSnap, ImageResolutionSnap, &RenderStyle::setImageResolutionSnap, ImageResolutionSnap, &RenderStyle::initialImageResolutionSnap>::applyInitialValue(styleResolver);
         ApplyPropertyDefaultBase<float, &RenderStyle::imageResolution, float, &RenderStyle::setImageResolution, float, &RenderStyle::initialImageResolution>::applyInitialValue(styleResolver);
     }
 
@@ -1800,6 +1802,7 @@
             return;
         CSSValueList* valueList = static_cast<CSSValueList*>(value);
         ImageResolutionSource source = RenderStyle::initialImageResolutionSource();
+        ImageResolutionSnap snap = RenderStyle::initialImageResolutionSnap();
         double resolution = RenderStyle::initialImageResolution();
         for (size_t i = 0; i < valueList->length(); i++) {
             CSSValue* item = valueList->itemWithoutBoundsCheck(i);
@@ -1808,10 +1811,13 @@
             CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(item);
             if (primitiveValue->getIdent() == CSSValueFromImage)
                 source = ImageResolutionFromImage;
+            else if (primitiveValue->getIdent() == CSSValueSnap)
+                snap = ImageResolutionSnapPixels;
             else
                 resolution = primitiveValue->getDoubleValue(CSSPrimitiveValue::CSS_DPPX);
         }
         styleResolver->style()->setImageResolutionSource(source);
+        styleResolver->style()->setImageResolutionSnap(snap);
         styleResolver->style()->setImageResolution(resolution);
     }
 

Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (121126 => 121127)


--- trunk/Source/WebCore/rendering/RenderImage.cpp	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp	2012-06-25 01:46:14 UTC (rev 121127)
@@ -140,6 +140,7 @@
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     if (diff == StyleDifferenceLayout
         && (oldStyle->imageResolution() != style()->imageResolution()
+            || oldStyle->imageResolutionSnap() != style()->imageResolutionSnap()
             || oldStyle->imageResolutionSource() != style()->imageResolutionSource()))
         imageDimensionsChanged(true /* imageSizeChanged */);
 #endif
@@ -198,7 +199,12 @@
 void RenderImage::imageDimensionsChanged(bool imageSizeChanged, const IntRect* rect)
 {
 #if ENABLE(CSS_IMAGE_RESOLUTION)
-    bool intrinsicSizeChanged = updateIntrinsicSizeIfNeeded(m_imageResource->imageSize(style()->effectiveZoom() / style()->imageResolution()), imageSizeChanged);
+    double scale = style()->imageResolution();
+    if (style()->imageResolutionSnap() == ImageResolutionSnapPixels)
+        scale = roundForImpreciseConversion<int>(scale);
+    if (scale <= 0)
+        scale = 1;
+    bool intrinsicSizeChanged = updateIntrinsicSizeIfNeeded(m_imageResource->imageSize(style()->effectiveZoom() / scale), imageSizeChanged);
 #else
     bool intrinsicSizeChanged = updateIntrinsicSizeIfNeeded(m_imageResource->imageSize(style()->effectiveZoom()), imageSizeChanged);
 #endif

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (121126 => 121127)


--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2012-06-25 01:46:14 UTC (rev 121127)
@@ -474,6 +474,7 @@
             || rareInheritedData->m_lineGrid != other->rareInheritedData->m_lineGrid
 #if ENABLE(CSS_IMAGE_RESOLUTION)
             || rareInheritedData->m_imageResolutionSource != other->rareInheritedData->m_imageResolutionSource
+            || rareInheritedData->m_imageResolutionSnap != other->rareInheritedData->m_imageResolutionSnap
             || rareInheritedData->m_imageResolution != other->rareInheritedData->m_imageResolution
 #endif
             || rareInheritedData->m_lineSnap != other->rareInheritedData->m_lineSnap

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (121126 => 121127)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2012-06-25 01:46:14 UTC (rev 121127)
@@ -983,6 +983,7 @@
 
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     ImageResolutionSource imageResolutionSource() const { return static_cast<ImageResolutionSource>(rareInheritedData->m_imageResolutionSource); }
+    ImageResolutionSnap imageResolutionSnap() const { return static_cast<ImageResolutionSnap>(rareInheritedData->m_imageResolutionSnap); }
     float imageResolution() const { return rareInheritedData->m_imageResolution; }
 #endif
     
@@ -1154,6 +1155,7 @@
 
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     void setImageResolutionSource(ImageResolutionSource v) { SET_VAR(rareInheritedData, m_imageResolutionSource, v) }
+    void setImageResolutionSnap(ImageResolutionSnap v) { SET_VAR(rareInheritedData, m_imageResolutionSnap, v) }
     void setImageResolution(float f) { SET_VAR(rareInheritedData, m_imageResolution, f) }
 #endif
 
@@ -1667,6 +1669,7 @@
     static LineBoxContain initialLineBoxContain() { return LineBoxContainBlock | LineBoxContainInline | LineBoxContainReplaced; }
     static EImageRendering initialImageRendering() { return ImageRenderingAuto; }
     static ImageResolutionSource initialImageResolutionSource() { return ImageResolutionSpecified; }
+    static ImageResolutionSnap initialImageResolutionSnap() { return ImageResolutionNoSnap; }
     static float initialImageResolution() { return 1; }
     static StyleImage* initialBorderImageSource() { return 0; }
     static StyleImage* initialMaskBoxImageSource() { return 0; }

Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.h (121126 => 121127)


--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.h	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.h	2012-06-25 01:46:14 UTC (rev 121127)
@@ -452,6 +452,8 @@
 
 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
 
+enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
+
 enum Order { LogicalOrder = 0, VisualOrder };
 
 enum RegionOverflow { AutoRegionOverflow, BreakRegionOverflow };

Modified: trunk/Source/WebCore/rendering/style/StyleRareInheritedData.cpp (121126 => 121127)


--- trunk/Source/WebCore/rendering/style/StyleRareInheritedData.cpp	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/style/StyleRareInheritedData.cpp	2012-06-25 01:46:14 UTC (rev 121127)
@@ -89,6 +89,7 @@
 #endif
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     , m_imageResolutionSource(RenderStyle::initialImageResolutionSource())
+    , m_imageResolutionSnap(RenderStyle::initialImageResolutionSnap())
 #endif
     , hyphenationLimitBefore(-1)
     , hyphenationLimitAfter(-1)
@@ -147,6 +148,7 @@
 #endif
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     , m_imageResolutionSource(o.m_imageResolutionSource)
+    , m_imageResolutionSnap(o.m_imageResolutionSnap)
 #endif
     , hyphenationString(o.hyphenationString)
     , hyphenationLimitBefore(o.hyphenationLimitBefore)
@@ -231,6 +233,7 @@
         && m_imageRendering == o.m_imageRendering
 #if ENABLE(CSS_IMAGE_RESOLUTION)
         && m_imageResolutionSource == o.m_imageResolutionSource
+        && m_imageResolutionSnap == o.m_imageResolutionSnap
         && m_imageResolution == o.m_imageResolution
 #endif
         && m_lineSnap == o.m_lineSnap

Modified: trunk/Source/WebCore/rendering/style/StyleRareInheritedData.h (121126 => 121127)


--- trunk/Source/WebCore/rendering/style/StyleRareInheritedData.h	2012-06-25 00:41:05 UTC (rev 121126)
+++ trunk/Source/WebCore/rendering/style/StyleRareInheritedData.h	2012-06-25 01:46:14 UTC (rev 121127)
@@ -103,6 +103,7 @@
 #endif
 #if ENABLE(CSS_IMAGE_RESOLUTION)
     unsigned m_imageResolutionSource : 1; // ImageResolutionSource
+    unsigned m_imageResolutionSnap : 1; // ImageResolutionSnap
 #endif
 
     AtomicString hyphenationString;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to