Ignore:
Timestamp:
Jun 24, 2012, 6:46:14 PM (13 years ago)
Author:
[email protected]
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:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/css/StyleBuilder.cpp

    r120849 r121127  
    17861786    {
    17871787        ApplyPropertyDefaultBase<ImageResolutionSource, &RenderStyle::imageResolutionSource, ImageResolutionSource, &RenderStyle::setImageResolutionSource, ImageResolutionSource, &RenderStyle::initialImageResolutionSource>::applyInheritValue(styleResolver);
     1788        ApplyPropertyDefaultBase<ImageResolutionSnap, &RenderStyle::imageResolutionSnap, ImageResolutionSnap, &RenderStyle::setImageResolutionSnap, ImageResolutionSnap, &RenderStyle::initialImageResolutionSnap>::applyInheritValue(styleResolver);
    17881789        ApplyPropertyDefaultBase<float, &RenderStyle::imageResolution, float, &RenderStyle::setImageResolution, float, &RenderStyle::initialImageResolution>::applyInheritValue(styleResolver);
    17891790    }
     
    17921793    {
    17931794        ApplyPropertyDefaultBase<ImageResolutionSource, &RenderStyle::imageResolutionSource, ImageResolutionSource, &RenderStyle::setImageResolutionSource, ImageResolutionSource, &RenderStyle::initialImageResolutionSource>::applyInitialValue(styleResolver);
     1795        ApplyPropertyDefaultBase<ImageResolutionSnap, &RenderStyle::imageResolutionSnap, ImageResolutionSnap, &RenderStyle::setImageResolutionSnap, ImageResolutionSnap, &RenderStyle::initialImageResolutionSnap>::applyInitialValue(styleResolver);
    17941796        ApplyPropertyDefaultBase<float, &RenderStyle::imageResolution, float, &RenderStyle::setImageResolution, float, &RenderStyle::initialImageResolution>::applyInitialValue(styleResolver);
    17951797    }
     
    18011803        CSSValueList* valueList = static_cast<CSSValueList*>(value);
    18021804        ImageResolutionSource source = RenderStyle::initialImageResolutionSource();
     1805        ImageResolutionSnap snap = RenderStyle::initialImageResolutionSnap();
    18031806        double resolution = RenderStyle::initialImageResolution();
    18041807        for (size_t i = 0; i < valueList->length(); i++) {
     
    18091812            if (primitiveValue->getIdent() == CSSValueFromImage)
    18101813                source = ImageResolutionFromImage;
     1814            else if (primitiveValue->getIdent() == CSSValueSnap)
     1815                snap = ImageResolutionSnapPixels;
    18111816            else
    18121817                resolution = primitiveValue->getDoubleValue(CSSPrimitiveValue::CSS_DPPX);
    18131818        }
    18141819        styleResolver->style()->setImageResolutionSource(source);
     1820        styleResolver->style()->setImageResolutionSnap(snap);
    18151821        styleResolver->style()->setImageResolution(resolution);
    18161822    }
Note: See TracChangeset for help on using the changeset viewer.