Changeset 148208 in webkit


Ignore:
Timestamp:
Apr 11, 2013 9:19:39 AM (11 years ago)
Author:
allan.jensen@digia.com
Message:

Use CSS4 image-rendering to determing image scaling quality
https://bugs.webkit.org/show_bug.cgi?id=113405

Reviewed by Simon Fraser.

Source/WebCore:

Implement the new CSS4 image-rendering property values.

Image scaling now uses low-quality (pixelated) scaling for
crisp-edges, pixelated and optimizeSpeed values, and always
use high quality (smooth) scaling for -webkit-smooth and
optimizeQuality. The latter can be used to disable low quality
scaling during CSS animations or live resizing.

The new values are protected with a new CSS4_IMAGES feature, but
the crisp-edge value has been introduced before to displace the
deprecated -webkit-optimize-contrast value, and optimizeSpeed
and optimizeQuality values are supported for SVG compatibility.

  • css/CSSParser.cpp:

(WebCore::isValidKeywordPropertyAndValue):

  • css/CSSPrimitiveValueMappings.h:

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

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

(WebCore::ImageQualityController::shouldPaintAtLowQuality):

  • rendering/RenderHTMLCanvas.cpp:

(WebCore::RenderHTMLCanvas::paintReplaced):

  • rendering/style/RenderStyleConstants.h:

Tools:

Introduce new flag to enable experimental support for CSS4 Images.

  • Scripts/webkitperl/FeatureList.pm:
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r148206 r148208  
     12013-04-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>
     2
     3        Use CSS4 image-rendering to determing image scaling quality
     4        https://bugs.webkit.org/show_bug.cgi?id=113405
     5
     6        Reviewed by Simon Fraser.
     7
     8        Implement the new CSS4 image-rendering property values.
     9
     10        Image scaling now uses low-quality (pixelated) scaling for
     11        crisp-edges, pixelated and optimizeSpeed values, and always
     12        use high quality (smooth) scaling for -webkit-smooth and
     13        optimizeQuality. The latter can be used to disable low quality
     14        scaling during CSS animations or live resizing.
     15
     16        The new values are protected with a new CSS4_IMAGES feature, but
     17        the crisp-edge value has been introduced before to displace the
     18        deprecated -webkit-optimize-contrast value, and optimizeSpeed
     19        and optimizeQuality values are supported for SVG compatibility.
     20
     21        * css/CSSParser.cpp:
     22        (WebCore::isValidKeywordPropertyAndValue):
     23        * css/CSSPrimitiveValueMappings.h:
     24        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
     25        (WebCore::CSSPrimitiveValue::operator EImageRendering):
     26        * css/CSSValueKeywords.in:
     27        * rendering/RenderBoxModelObject.cpp:
     28        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
     29        * rendering/RenderHTMLCanvas.cpp:
     30        (WebCore::RenderHTMLCanvas::paintReplaced):
     31        * rendering/style/RenderStyleConstants.h:
     32
    1332013-04-11  Adenilson Cavalcanti  <cavalcantii@gmail.com>
    234
  • trunk/Source/WebCore/css/CSSParser.cpp

    r148205 r148208  
    727727            return true;
    728728        break;
    729     case CSSPropertyImageRendering: // auto | optimizeContrast
    730         if (valueID == CSSValueAuto || valueID == CSSValueWebkitOptimizeContrast)
     729    case CSSPropertyImageRendering: // auto | crisp-edges | pixelated | -webkit-smooth | optimizeSpeed | optimizeQuality | -webkit-optimize-contrast
     730#if ENABLE(CSS4_IMAGES)
     731        if (valueID == CSSValueAuto || valueID == CSSValueCrispEdges || valueID == CSSValuePixelated
     732            || valueID == CSSValueWebkitSmooth || valueID == CSSValueWebkitOptimizeContrast
     733            || valueID == CSSValueOptimizespeed || valueID == CSSValueOptimizequality)
    731734            return true;
     735#else
     736        if (valueID == CSSValueAuto || valueID == CSSValueCrispEdges || valueID == CSSValueWebkitOptimizeContrast
     737            || valueID == CSSValueOptimizespeed || valueID == CSSValueOptimizequality)
     738            return true;
     739#endif
    732740        break;
    733741    case CSSPropertyListStylePosition: // inside | outside | inherit
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r148070 r148208  
    40324032        m_value.ident = CSSValueAuto;
    40334033        break;
     4034    case ImageRenderingCrispEdges:
     4035        m_value.ident = CSSValueCrispEdges;
     4036        break;
     4037    case ImageRenderingPixelated:
     4038        m_value.ident = CSSValuePixelated;
     4039        break;
     4040    case ImageRenderingSmooth:
     4041        m_value.ident = CSSValueWebkitSmooth;
     4042        break;
    40344043    case ImageRenderingOptimizeSpeed:
    40354044        m_value.ident = CSSValueOptimizespeed;
     
    40384047        m_value.ident = CSSValueOptimizequality;
    40394048        break;
    4040     case ImageRenderingOptimizeContrast:
    4041         m_value.ident = CSSValueWebkitOptimizeContrast;
    4042         break;
    40434049    }
    40444050}
     
    40494055    case CSSValueAuto:
    40504056        return ImageRenderingAuto;
     4057    case CSSValueWebkitOptimizeContrast:
     4058    case CSSValueCrispEdges:
     4059        return ImageRenderingCrispEdges;
     4060    case CSSValuePixelated:
     4061        return ImageRenderingPixelated;
     4062    case CSSValueWebkitSmooth:
     4063        return ImageRenderingSmooth;
    40514064    case CSSValueOptimizespeed:
    40524065        return ImageRenderingOptimizeSpeed;
    40534066    case CSSValueOptimizequality:
    40544067        return ImageRenderingOptimizeQuality;
    4055     case CSSValueWebkitOptimizeContrast:
    4056         return ImageRenderingOptimizeContrast;
    40574068    }
    40584069
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r148070 r148208  
    933933
    934934// image-rendering
    935 //auto
    936 //optimizeSpeed
     935// auto
     936// optimizeSpeed
     937crisp-edges
     938pixelated
     939-webkit-smooth
    937940optimizeQuality
    938941-webkit-optimize-contrast
  • trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp

    r148172 r148208  
    162162        return false;
    163163
    164     if (object->style()->imageRendering() == ImageRenderingOptimizeContrast)
     164    switch (object->style()->imageRendering()) {
     165    case ImageRenderingOptimizeSpeed:
     166    case ImageRenderingCrispEdges:
     167    case ImageRenderingPixelated:
    165168        return true;
    166    
     169    case ImageRenderingOptimizeQuality:
     170    case ImageRenderingSmooth:
     171        return false;
     172    case ImageRenderingAuto:
     173        break;
     174    }
     175
    167176    // Make sure to use the unzoomed image size, since if a full page zoom is in effect, the image
    168177    // is actually being scaled.
  • trunk/Source/WebCore/rendering/RenderHTMLCanvas.cpp

    r133172 r148208  
    6969    }
    7070
    71     bool useLowQualityScale = style()->imageRendering() == ImageRenderingOptimizeContrast;
     71    bool useLowQualityScale = style()->imageRendering() == ImageRenderingPixelated || style()->imageRendering() == ImageRenderingCrispEdges || style()->imageRendering() == ImageRenderingOptimizeSpeed;
    7272    static_cast<HTMLCanvasElement*>(node())->paint(paintInfo.context, rect, useLowQualityScale);
    7373}
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r148070 r148208  
    480480enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
    481481
    482 enum EImageRendering { ImageRenderingAuto, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality, ImageRenderingOptimizeContrast };
     482enum EImageRendering {
     483    ImageRenderingAuto, ImageRenderingOptimizeSpeed, ImageRenderingOptimizeQuality,
     484    ImageRenderingCrispEdges, ImageRenderingPixelated, ImageRenderingSmooth
     485};
    483486
    484487enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
  • trunk/Tools/ChangeLog

    r148190 r148208  
     12013-04-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>
     2
     3        Use CSS4 image-rendering to determing image scaling quality
     4        https://bugs.webkit.org/show_bug.cgi?id=113405
     5
     6        Reviewed by Simon Fraser.
     7
     8        Introduce new flag to enable experimental support for CSS4 Images.
     9
     10        * Scripts/webkitperl/FeatureList.pm:
     11
    1122013-04-11  Ryosuke Niwa  <rniwa@webkit.org>
    213
  • trunk/Tools/Scripts/webkitperl/FeatureList.pm

    r148088 r148208  
    5454    $css3TextSupport,
    5555    $css3TextLineBreakSupport,
     56    $css4ImagesSupport,
    5657    $cssBoxDecorationBreakSupport,
    5758    $cssDeviceAdaptation,
     
    199200      define => "ENABLE_CSS3_TEXT_LINE_BREAK", default => 0, value => \$css3TextLineBreakSupport },
    200201
     202    { option => "css4-images", desc => "Toggle CSS4 Images support",
     203      define => "ENABLE_CSS4_IMAGES", default => 0, value => \$css4ImagesSupport },
     204
    201205    { option => "css-box-decoration-break", desc => "Toggle CSS box-decoration-break support",
    202206      define => "ENABLE_CSS_BOX_DECORATION_BREAK", default => 1, value => \$cssBoxDecorationBreakSupport },
Note: See TracChangeset for help on using the changeset viewer.