Changeset 195699 in webkit


Ignore:
Timestamp:
Jan 27, 2016 3:31:38 PM (8 years ago)
Author:
Simon Fraser
Message:

Support CSS3 Images values for the image-rendering property
https://bugs.webkit.org/show_bug.cgi?id=153556

Reviewed by Dean Jackson.

Source/WebCore:

CSS3 Images has the following values for image-rendering:

auto, crisp-edges, pixelated

The old code supported:

optimizeSpeed, optimizeQuality, -webkit-crisp-edges, -webkit-optimize-contrast

Add support for the new values without prefixes. Map -webkit-crisp-edges to crisp-edges,
and -webkit-optimize-contrast to crisp-edges. Support pixelated which behaves like
crisp-edges (a low quality scale).

The spec says that optimizeQuality should behave like 'auto', but that would be
a behavior change since ImageQualityController::shouldPaintAtLowQuality() currently
uses it as a trigger to avoid low quality scaling, so don't change that for now.

No new tests, covered by fast/css/script-tests/image-rendering-parsing.js

  • css/CSSParser.cpp:

(WebCore::isValidKeywordPropertyAndValue):

  • css/CSSPrimitiveValueMappings.h:

(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator EImageRendering):

  • css/CSSValueKeywords.in:
  • rendering/ImageQualityController.cpp:

(WebCore::ImageQualityController::shouldPaintAtLowQuality):

  • rendering/RenderHTMLCanvas.cpp:

(WebCore::RenderHTMLCanvas::paintReplaced):

  • rendering/style/RenderStyleConstants.h:
  • rendering/style/StyleRareInheritedData.h: Need another bit.

Source/WebInspectorUI:

Add "crisp-edges", "pixelated" to the suggestions for image-rendering.

  • UserInterface/Models/CSSKeywordCompletions.js:

LayoutTests:

Update for new values. Add a new SVG shape-rendering test which would have
detected a bug I caused with an earlier patch.

  • fast/css/image-rendering-parsing-expected.txt:
  • fast/css/script-tests/image-rendering-parsing.js:
  • svg/css/script-tests/shape-rendering-parsing.js: Added.
  • svg/css/shape-rendering-parsing.html: Added.
Location:
trunk
Files:
3 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r195697 r195699  
     12016-01-27  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Support CSS3 Images values for the image-rendering property
     4        https://bugs.webkit.org/show_bug.cgi?id=153556
     5
     6        Reviewed by Dean Jackson.
     7
     8        Update for new values. Add a new SVG shape-rendering test which would have
     9        detected a bug I caused with an earlier patch.
     10
     11        * fast/css/image-rendering-parsing-expected.txt:
     12        * fast/css/script-tests/image-rendering-parsing.js:
     13        * svg/css/script-tests/shape-rendering-parsing.js: Added.
     14        * svg/css/shape-rendering-parsing.html: Added.
     15
    1162016-01-27  Brady Eidson  <beidson@apple.com>
    217
  • trunk/LayoutTests/fast/css/image-rendering-parsing-expected.txt

    r148949 r195699  
    88PASS getComputedStyle(div).getPropertyValue('image-rendering') is "auto"
    99PASS div.style.getPropertyCSSValue('image-rendering').cssValueType is CSSValue.CSS_PRIMITIVE_VALUE
     10PASS div.style.getPropertyValue('image-rendering') is "crisp-edges"
     11PASS getComputedStyle(div).getPropertyValue('image-rendering') is "crisp-edges"
     12PASS div.style.getPropertyCSSValue('image-rendering').cssValueType is CSSValue.CSS_PRIMITIVE_VALUE
     13PASS div.style.getPropertyValue('image-rendering') is "pixelated"
     14PASS getComputedStyle(div).getPropertyValue('image-rendering') is "pixelated"
     15PASS div.style.getPropertyCSSValue('image-rendering').cssValueType is CSSValue.CSS_PRIMITIVE_VALUE
    1016PASS div.style.getPropertyValue('image-rendering') is "-webkit-crisp-edges"
    11 PASS getComputedStyle(div).getPropertyValue('image-rendering') is "-webkit-crisp-edges"
     17PASS getComputedStyle(div).getPropertyValue('image-rendering') is "crisp-edges"
    1218PASS div.style.getPropertyCSSValue('image-rendering').cssValueType is CSSValue.CSS_PRIMITIVE_VALUE
    1319PASS div.style.getPropertyValue('image-rendering') is "-webkit-optimize-contrast"
    14 PASS getComputedStyle(div).getPropertyValue('image-rendering') is "-webkit-crisp-edges"
     20PASS getComputedStyle(div).getPropertyValue('image-rendering') is "crisp-edges"
    1521PASS div.style.getPropertyCSSValue('image-rendering').cssValueType is CSSValue.CSS_PRIMITIVE_VALUE
    1622PASS div.style.getPropertyValue('image-rendering') is "optimizespeed"
  • trunk/LayoutTests/fast/css/script-tests/image-rendering-parsing.js

    r148949 r195699  
    1515
    1616testImageRendering('auto', 'auto');
    17 testImageRendering('-webkit-crisp-edges', '-webkit-crisp-edges');
    18 testImageRendering('-webkit-optimize-contrast', '-webkit-crisp-edges');
     17testImageRendering('crisp-edges', 'crisp-edges');
     18testImageRendering('pixelated', 'pixelated');
     19testImageRendering('-webkit-crisp-edges', 'crisp-edges');
     20testImageRendering('-webkit-optimize-contrast', 'crisp-edges');
    1921testImageRendering('optimizespeed', 'optimizespeed');
    2022testImageRendering('optimizequality', 'optimizequality');
  • trunk/Source/WebCore/ChangeLog

    r195698 r195699  
     12016-01-27  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Support CSS3 Images values for the image-rendering property
     4        https://bugs.webkit.org/show_bug.cgi?id=153556
     5
     6        Reviewed by Dean Jackson.
     7
     8        CSS3 Images has the following values for image-rendering:
     9            auto, crisp-edges, pixelated
     10
     11        The old code supported:
     12            optimizeSpeed, optimizeQuality, -webkit-crisp-edges, -webkit-optimize-contrast
     13
     14        Add support for the new values without prefixes. Map -webkit-crisp-edges to crisp-edges,
     15        and -webkit-optimize-contrast to crisp-edges. Support pixelated which behaves like
     16        crisp-edges (a low quality scale).
     17
     18        The spec says that optimizeQuality should behave like 'auto', but that would be
     19        a behavior change since ImageQualityController::shouldPaintAtLowQuality() currently
     20        uses it as a trigger to avoid low quality scaling, so don't change that for now.
     21
     22        No new tests, covered by fast/css/script-tests/image-rendering-parsing.js
     23
     24        * css/CSSParser.cpp:
     25        (WebCore::isValidKeywordPropertyAndValue):
     26        * css/CSSPrimitiveValueMappings.h:
     27        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
     28        (WebCore::CSSPrimitiveValue::operator EImageRendering):
     29        * css/CSSValueKeywords.in:
     30        * rendering/ImageQualityController.cpp:
     31        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
     32        * rendering/RenderHTMLCanvas.cpp:
     33        (WebCore::RenderHTMLCanvas::paintReplaced):
     34        * rendering/style/RenderStyleConstants.h:
     35        * rendering/style/StyleRareInheritedData.h: Need another bit.
     36
    1372016-01-27  Anders Carlsson  <andersca@apple.com>
    238
  • trunk/Source/WebCore/css/CSSParser.cpp

    r195529 r195699  
    707707            return true;
    708708        break;
    709     case CSSPropertyImageRendering: // auto | optimizeSpeed | optimizeQuality | -webkit-crisp-edges | -webkit-optimize-contrast
     709    case CSSPropertyImageRendering: // auto | optimizeSpeed | optimizeQuality | -webkit-crisp-edges | -webkit-optimize-contrast | crisp-edges | pixelated
     710        // optimizeSpeed and optimizeQuality are deprecated; a user agent must accept them as valid values but must treat them as having the same behavior as pixelated and auto respectively.
    710711        if (valueID == CSSValueAuto || valueID == CSSValueOptimizespeed || valueID == CSSValueOptimizequality
    711             || valueID == CSSValueWebkitCrispEdges || valueID == CSSValueWebkitOptimizeContrast)
     712            || valueID == CSSValueWebkitCrispEdges || valueID == CSSValueWebkitOptimizeContrast || valueID == CSSValueCrispEdges || valueID == CSSValuePixelated)
    712713            return true;
    713714        break;
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r194496 r195699  
    43224322}
    43234323
    4324 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering e)
    4325     : CSSValue(PrimitiveClass)
    4326 {
    4327     m_primitiveUnitType = CSS_VALUE_ID;
    4328     switch (e) {
     4324template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EImageRendering imageRendering)
     4325    : CSSValue(PrimitiveClass)
     4326{
     4327    m_primitiveUnitType = CSS_VALUE_ID;
     4328    switch (imageRendering) {
    43294329    case ImageRenderingAuto:
    43304330        m_value.valueID = CSSValueAuto;
    43314331        break;
    43324332    case ImageRenderingCrispEdges:
    4333         m_value.valueID = CSSValueWebkitCrispEdges;
     4333        m_value.valueID = CSSValueCrispEdges;
     4334        break;
     4335    case ImageRenderingPixelated:
     4336        m_value.valueID = CSSValuePixelated;
    43344337        break;
    43354338    case ImageRenderingOptimizeSpeed:
     
    43504353        return ImageRenderingAuto;
    43514354    case CSSValueWebkitOptimizeContrast:
     4355    case CSSValueCrispEdges:
    43524356    case CSSValueWebkitCrispEdges:
    43534357        return ImageRenderingCrispEdges;
     4358    case CSSValuePixelated:
     4359        return ImageRenderingPixelated;
    43544360    case CSSValueOptimizespeed:
    43554361        return ImageRenderingOptimizeSpeed;
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r194104 r195699  
    10511051// image-rendering
    10521052// auto
    1053 // optimizeSpeed
    1054 optimizeQuality
     1053// optimizeSpeed (deprecated)
     1054optimizeQuality // ( deprecated)
     1055crisp-edges
     1056pixelated
    10551057-webkit-crisp-edges
    10561058-webkit-optimize-contrast
  • trunk/Source/WebCore/rendering/ImageQualityController.cpp

    r191049 r195699  
    110110    case ImageRenderingOptimizeSpeed:
    111111    case ImageRenderingCrispEdges:
     112    case ImageRenderingPixelated:
    112113        return true;
    113114    case ImageRenderingOptimizeQuality:
    114         return false;
     115        return false; // FIXME: CSS 3 Images says that optimizeQuality should behave like 'auto', but that prevents authors from overriding this low quality rendering behavior.
    115116    case ImageRenderingAuto:
    116117        break;
  • trunk/Source/WebCore/rendering/RenderHTMLCanvas.cpp

    r194496 r195699  
    8585    }
    8686
    87     bool useLowQualityScale = style().imageRendering() == ImageRenderingCrispEdges || style().imageRendering() == ImageRenderingOptimizeSpeed;
     87    bool useLowQualityScale = style().imageRendering() == ImageRenderingCrispEdges || style().imageRendering() == ImageRenderingPixelated || style().imageRendering() == ImageRenderingOptimizeSpeed;
    8888    canvasElement().paint(context, replacedContentRect, useLowQualityScale);
    8989}
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r195293 r195699  
    594594enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
    595595
    596 enum EImageRendering { ImageRenderingAuto = 0, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality, ImageRenderingCrispEdges };
     596enum EImageRendering {
     597    ImageRenderingAuto = 0,
     598    ImageRenderingOptimizeSpeed,
     599    ImageRenderingOptimizeQuality,
     600    ImageRenderingCrispEdges,
     601    ImageRenderingPixelated
     602};
    597603
    598604enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
  • trunk/Source/WebCore/rendering/style/StyleRareInheritedData.h

    r192290 r195699  
    111111    unsigned m_imageOrientation : 4; // ImageOrientationEnum
    112112#endif
    113     unsigned m_imageRendering : 2; // EImageRendering
     113    unsigned m_imageRendering : 3; // EImageRendering
    114114    unsigned m_lineSnap : 2; // LineSnap
    115115    unsigned m_lineAlign : 1; // LineAlign
  • trunk/Source/WebInspectorUI/ChangeLog

    r195645 r195699  
     12016-01-27  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Support CSS3 Images values for the image-rendering property
     4        https://bugs.webkit.org/show_bug.cgi?id=153556
     5
     6        Reviewed by Dean Jackson.
     7
     8        Add "crisp-edges", "pixelated" to the suggestions for image-rendering.
     9
     10        * UserInterface/Models/CSSKeywordCompletions.js:
     11
    1122016-01-26  Joseph Pecoraro  <pecoraro@apple.com>
    213
  • trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js

    r191715 r195699  
    393393    ],
    394394    "image-rendering": [
    395         "auto", "optimizeSpeed", "optimizeQuality", "-webkit-crisp-edges", "-webkit-optimize-contrast"
     395        "auto", "optimizeSpeed", "optimizeQuality", "-webkit-crisp-edges", "-webkit-optimize-contrast", "crisp-edges", "pixelated"
    396396    ],
    397397    "alignment-baseline": [
Note: See TracChangeset for help on using the changeset viewer.