Changeset 139770 in webkit


Ignore:
Timestamp:
Jan 15, 2013 12:02:20 PM (11 years ago)
Author:
krit@webkit.org
Message:

[CSS Filters] brightness() function doesn't work as specified
https://bugs.webkit.org/show_bug.cgi?id=106674

Source/WebCore:

Reviewed by Dean Jackson.

The brightness filter implementation modified the intercept instead of the slope on
the feComponentTransfer function. The passed amount acts as multiplier for each
color chanel now.

Existing tests cover the changes and were updated.

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseBuiltinFilterArguments):

  • platform/graphics/ca/mac/PlatformCALayerMac.mm:

(PlatformCALayer::setFilters):

  • rendering/FilterEffectRenderer.cpp:

(WebCore::FilterEffectRenderer::build):

LayoutTests:

Negative brightness values are possible but are meaningless. Modify the tests
to mainly use positive amounts for brightness tests.

Reviewed by Dean Jackson.

  • css3/filters/effect-brightness-clamping-hw.html:
  • css3/filters/effect-brightness-hw.html:
  • css3/filters/effect-combined-hw.html:
  • css3/filters/effect-combined.html:
  • css3/filters/multiple-filters-invalidation.html:
  • css3/filters/null-effect-check.html:
  • css3/filters/script-tests/filter-property-parsing-invalid.js:
  • css3/filters/script-tests/filter-property-parsing.js:
Location:
trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r139768 r139770  
     12013-01-13  Dirk Schulze  <dschulze@adobe.com>
     2
     3        [CSS Filters] brightness() function doesn't work as specified
     4        https://bugs.webkit.org/show_bug.cgi?id=106674
     5
     6        Negative brightness values are possible but are meaningless. Modify the tests
     7        to mainly use positive amounts for brightness tests.
     8
     9        Reviewed by Dean Jackson.
     10
     11        * css3/filters/effect-brightness-clamping-hw.html:
     12        * css3/filters/effect-brightness-hw.html:
     13        * css3/filters/effect-combined-hw.html:
     14        * css3/filters/effect-combined.html:
     15        * css3/filters/multiple-filters-invalidation.html:
     16        * css3/filters/null-effect-check.html:
     17        * css3/filters/script-tests/filter-property-parsing-invalid.js:
     18        * css3/filters/script-tests/filter-property-parsing.js:
     19
    1202013-01-15  Zan Dobersek  <zandobersek@gmail.com>
    221
  • trunk/LayoutTests/css3/filters/effect-brightness-clamping-hw.html

    r123790 r139770  
    44}
    55</style>
    6 <img style="-webkit-filter: brightness(-1) brightness(1)" src="resources/reference.png">
    7 <img style="-webkit-filter: brightness(-0.8) brightness(0.8)" src="resources/reference.png">
    8 <img style="-webkit-filter: brightness(-0.5) brightness(0.5)" src="resources/reference.png">
    9 <img style="-webkit-filter: brightness(-0.2) brightness(0.2)" src="resources/reference.png">
    10 <img style="-webkit-filter: brightness(0.2) brightness(-0.2)" src="resources/reference.png">
    11 <img style="-webkit-filter: brightness(0.5) brightness(-0.5)" src="resources/reference.png">
    12 <img style="-webkit-filter: brightness(0.8) brightness(-0.8)" src="resources/reference.png">
    13 <img style="-webkit-filter: brightness(1) brightness(-1)" src="resources/reference.png">
     6<img style="-webkit-filter: brightness(1) brightness(2)" src="resources/reference.png">
     7<img style="-webkit-filter: brightness(0.2) brightness(1.8)" src="resources/reference.png">
     8<img style="-webkit-filter: brightness(0.5) brightness(1.5)" src="resources/reference.png">
     9<img style="-webkit-filter: brightness(0.8) brightness(1.2)" src="resources/reference.png">
     10<img style="-webkit-filter: brightness(1.2) brightness(0.8)" src="resources/reference.png">
     11<img style="-webkit-filter: brightness(1.5) brightness(0.5)" src="resources/reference.png">
     12<img style="-webkit-filter: brightness(1.8) brightness(0.2)" src="resources/reference.png">
     13<img style="-webkit-filter: brightness(1) brightness(1)" src="resources/reference.png">
    1414<img style="-webkit-filter: brightness(0.8) grayscale(1)" src="resources/reference.png">
    1515<img style="-webkit-filter: brightness(0.5) blur(3px)" src="resources/reference.png">
  • trunk/LayoutTests/css3/filters/effect-brightness-hw.html

    r105576 r139770  
    44}
    55</style>
    6 <img style="-webkit-filter: brightness(-1)" src="resources/reference.png">
    7 <img style="-webkit-filter: brightness(-0.6)" src="resources/reference.png">
    8 <img style="-webkit-filter: brightness(-0.3)" src="resources/reference.png">
     6<img style="-webkit-filter: brightness(0)" src="resources/reference.png">
     7<img style="-webkit-filter: brightness(0.4)" src="resources/reference.png">
     8<img style="-webkit-filter: brightness(0.7)" src="resources/reference.png">
    99<img style="-webkit-filter: brightness()" src="resources/reference.png">
    10 <img style="-webkit-filter: brightness(0.3)" src="resources/reference.png">
    11 <img style="-webkit-filter: brightness(0.6)" src="resources/reference.png">
    12 <img style="-webkit-filter: brightness(1)" src="resources/reference.png">
     10<img style="-webkit-filter: brightness(1.3)" src="resources/reference.png">
     11<img style="-webkit-filter: brightness(1.6)" src="resources/reference.png">
     12<img style="-webkit-filter: brightness(2)" src="resources/reference.png">
  • trunk/LayoutTests/css3/filters/effect-combined-hw.html

    r105576 r139770  
    1010<img style="-webkit-filter: blur(3px) hue-rotate(-90deg) sepia()" src="resources/reference.png">
    1111<img style="-webkit-filter: blur(3px) opacity(0.5) hue-rotate(-90deg) sepia()" src="resources/reference.png">
    12 <img style="-webkit-filter: blur(3px) brightness(0.2) contrast(2)" src="resources/reference.png">
     12<img style="-webkit-filter: blur(3px) brightness(1.2) contrast(2)" src="resources/reference.png">
  • trunk/LayoutTests/css3/filters/effect-combined.html

    r119990 r139770  
    1515<img style="-webkit-filter: blur(3px) hue-rotate(-90deg) sepia()" src="resources/reference.png">
    1616<img style="-webkit-filter: blur(3px) opacity(0.5) hue-rotate(-90deg) sepia()" src="resources/reference.png">
    17 <img style="-webkit-filter: blur(3px) brightness(0.2) contrast(2)" src="resources/reference.png">
     17<img style="-webkit-filter: blur(3px) brightness(1.2) contrast(2)" src="resources/reference.png">
  • trunk/LayoutTests/css3/filters/filter-property-parsing-expected.txt

    r105576 r139770  
    637637PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
    638638PASS subRule.cssText is 'grayscale(0.25)'
     639
     640Parameter less than -100% : brightness(-1.1)
     641PASS cssRule.type is 1
     642PASS declaration.length is 1
     643PASS declaration.getPropertyValue('-webkit-filter') is 'brightness(-1.1)'
     644PASS jsWrapperClass(filterRule) is 'CSSValueList'
     645PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
     646PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
     647PASS filterRule.length is 1
     648PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
     649PASS subRule.cssText is 'brightness(-1.1)'
     650
     651Parameter more than 100% : brightness(101%)
     652PASS cssRule.type is 1
     653PASS declaration.length is 1
     654PASS declaration.getPropertyValue('-webkit-filter') is 'brightness(101%)'
     655PASS jsWrapperClass(filterRule) is 'CSSValueList'
     656PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
     657PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
     658PASS filterRule.length is 1
     659PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
     660PASS subRule.cssText is 'brightness(101%)'
    639661
    640662Rule combinations : grayscale(0.25) brightness(0.5)
  • trunk/LayoutTests/css3/filters/filter-property-parsing-invalid-expected.txt

    r105576 r139770  
    215215PASS declaration.getPropertyValue('-webkit-filter') is null
    216216
    217 Parameter out of bounds (negative) : brightness(-1.1)
    218 PASS cssRule.type is 1
    219 PASS declaration.length is 0
    220 PASS declaration.getPropertyValue('-webkit-filter') is null
    221 
    222 Parameter out of bounds (positive) : brightness(101%)
    223 PASS cssRule.type is 1
    224 PASS declaration.length is 0
    225 PASS declaration.getPropertyValue('-webkit-filter') is null
    226 
    227217Length instead of number : contrast(10px)
    228218PASS cssRule.type is 1
  • trunk/LayoutTests/css3/filters/multiple-filters-invalidation.html

    r119990 r139770  
    33<style>
    44html {
    5   -webkit-filter: brightness(0.1) contrast(120%);
     5  -webkit-filter: brightness(1.1) contrast(120%);
    66}
    77#rect {
  • trunk/LayoutTests/css3/filters/null-effect-check.html

    r127097 r139770  
    2424-->
    2525<div style="-webkit-filter: blur(0)"></div>
    26 <div style="-webkit-filter: brightness(0)"></div>
     26<div style="-webkit-filter: brightness(1)"></div>
    2727<div style="-webkit-filter: invert(0)"></div>
    2828<div style="-webkit-filter: contrast(1)"></div>
  • trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing-invalid.js

    r115265 r139770  
    7171testInvalidFilterRule("Too many parameters and commas", "brightness(0.5, 0.5)");
    7272testInvalidFilterRule("Trailing comma", "brightness(0.5,)");
    73 testInvalidFilterRule("Parameter out of bounds (negative)", "brightness(-1.1)");
    74 testInvalidFilterRule("Parameter out of bounds (positive)", "brightness(101%)");
    7573
    7674testInvalidFilterRule("Length instead of number", "contrast(10px)");
  • trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing.js

    r115265 r139770  
    328328              ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
    329329              ["brightness(0.5)", "grayscale(0.25)"]);
     330
     331testFilterRule("Parameter less than -100%",
     332              "brightness(-1.1)", 1, "brightness(-1.1)",
     333              ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
     334              ["brightness(-1.1)"]);
     335
     336testFilterRule("Parameter more than 100%",
     337              "brightness(101%)", 1, "brightness(101%)",
     338              ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
     339              ["brightness(101%)"]);
    330340
    331341testFilterRule("Rule combinations",
  • trunk/LayoutTests/platform/chromium/TestExpectations

    r139753 r139770  
    42674267crbug.com/169550 [ Debug ] platform/chromium/virtual/deferred/fast/images/icon-decoding.html [ Crash ]
    42684268
     4269# Brightnes filter update needs rebaseline.
     4270webkit.org/b/106746 css3/filters/effect-brightness-hw.html [ ImageOnlyFailure ]
     4271webkit.org/b/106746 css3/filters/effect-combined.html [ ImageOnlyFailure ]
     4272webkit.org/b/106746 css3/filters/effect-brightness-clamping.html [ ImageOnlyFailure ]
     4273webkit.org/b/106746 css3/filters/multiple-filters-invalidation.html [ ImageOnlyFailure ]
     4274webkit.org/b/106746 css3/filters/effect-combined-hw.html [ ImageOnlyFailure ]
     4275webkit.org/b/106746 css3/filters/effect-brightness.html [ ImageOnlyFailure ]
     4276webkit.org/b/106746 css3/filters/effect-brightness-clamping-hw.html [ ImageOnlyFailure ]
     4277webkit.org/b/106746 css3/filters/filter-property-parsing.html [ Failure ]
     4278
    42694279# Transient. Needs rebaseline.
    42704280webkit.org/b/103955 fast/repaint/caret-outside-block.html [ ImageOnlyFailure ]
  • trunk/Source/WebCore/ChangeLog

    r139768 r139770  
     12013-01-13  Dirk Schulze  <dschulze@adobe.com>
     2
     3        [CSS Filters] brightness() function doesn't work as specified
     4        https://bugs.webkit.org/show_bug.cgi?id=106674
     5
     6        Reviewed by Dean Jackson.
     7
     8        The brightness filter implementation modified the intercept instead of the slope on
     9        the feComponentTransfer function. The passed amount acts as multiplier for each
     10        color chanel now.
     11
     12        Existing tests cover the changes and were updated.
     13
     14        * css/CSSParser.cpp:
     15        (WebCore::CSSParser::parseBuiltinFilterArguments):
     16        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
     17        (PlatformCALayer::setFilters):
     18        * rendering/FilterEffectRenderer.cpp:
     19        (WebCore::FilterEffectRenderer::build):
     20
    1212013-01-15  Zan Dobersek  <zandobersek@gmail.com>
    222
  • trunk/Source/WebCore/css/CSSParser.cpp

    r139316 r139770  
    82718271    }
    82728272    case WebKitCSSFilterValue::BrightnessFilterOperation: {
    8273         // One optional argument, -1 to +1 or -100% to +100%, if missing use 0,
     8273        // One optional argument, if missing use 100%.
    82748274        if (args->size() > 1)
    82758275            return 0;
     
    82798279            if (!validUnit(value, FNumber | FPercent, CSSStrictMode))
    82808280                return 0;
    8281                
    8282             double amount = value->fValue;
    8283             double minAllowed = value->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? -100.0 : -1.0;
    8284             double maxAllowed = value->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? 100.0 : 1.0;
    8285             if (amount < minAllowed || amount > maxAllowed)
    8286                 return 0;
    8287 
    8288             filterValue->append(cssValuePool().createValue(amount, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit)));
     8281
     8282            filterValue->append(cssValuePool().createValue(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit)));
    82898283        }
    82908284        break;
  • trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm

    r137533 r139770  
    860860           
    861861            CAColorMatrix brightnessMatrix = {
    862                 1, 0, 0, 0, static_cast<float>(op->amount()),
    863                 0, 1, 0, 0, static_cast<float>(op->amount()),
    864                 0, 0, 1, 0, static_cast<float>(op->amount()),
     862                static_cast<float>(op->amount()), 0, 0, 0, 0,
     863                0, static_cast<float>(op->amount()), 0, 0, 0,
     864                0, 0, static_cast<float>(op->amount()), 0, 0,
    865865                0, 0, 0, 1, 0
    866866            };
  • trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp

    r138823 r139770  
    314314            ComponentTransferFunction transferFunction;
    315315            transferFunction.type = FECOMPONENTTRANSFER_TYPE_LINEAR;
    316             transferFunction.slope = 1;
    317             transferFunction.intercept = narrowPrecisionToFloat(componentTransferOperation->amount());
     316            transferFunction.slope = narrowPrecisionToFloat(componentTransferOperation->amount());
     317            transferFunction.intercept = 0;
    318318
    319319            ComponentTransferFunction nullFunction;
  • trunk/Source/WebCore/svg/SVGStylable.h

    r74782 r139770  
    3535    virtual ~SVGStylable() { }
    3636
    37     virtual CSSStyleDeclaration* style() = 0;
    38     virtual PassRefPtr<CSSValue> getPresentationAttribute(const String&) = 0;
     37    virtual CSSStyleDeclaration* style() { return 0; };
     38    virtual PassRefPtr<CSSValue> getPresentationAttribute(const String&) { return 0; };
    3939};
    4040
Note: See TracChangeset for help on using the changeset viewer.