Changeset 186391 in webkit


Ignore:
Timestamp:
Jul 6, 2015, 6:15:01 PM (10 years ago)
Author:
Simon Fraser
Message:

Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494, r186180)
https://bugs.webkit.org/show_bug.cgi?id=146653

Reviewed by Dean Jackson.

Fixes rdar://problem/21435233.

r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
was not being maintained, so revert it.

This patch reverts r177494.

Source/WebCore:

  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::ComputedStyleExtractor::propertyValue):

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseFillProperty):
(WebCore::CSSParser::parseMaskImage): Deleted.

  • css/CSSParser.h:
  • css/CSSPropertyNames.in:
  • css/CSSValue.h:
  • css/StyleBuilderConverter.h:

(WebCore::StyleBuilderConverter::convertMaskImageOperations): Deleted.

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::loadPendingSVGDocuments):
(WebCore::StyleResolver::loadPendingImages):
(WebCore::StyleResolver::adjustStyleForMaskImages): Deleted.
(WebCore::StyleResolver::applyMatchedProperties): Deleted.

  • css/StyleResolver.h:
  • page/FrameView.cpp:

(WebCore::FrameView::containsSVGDocument):

  • page/FrameView.h:
  • page/animation/CSSPropertyAnimation.cpp:

(WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
(WebCore::blendFunc): Deleted.
(WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper): Deleted.
(WebCore::MaskImagePropertyWrapper::equals): Deleted.

  • platform/ScrollView.h:

(WebCore::ScrollView::containsSVGDocument):

  • platform/graphics/MaskImageOperation.cpp:

(WebCore::MaskImageOperation::~MaskImageOperation): Deleted.
(WebCore::MaskImageOperation::operator==): Deleted.

  • platform/graphics/MaskImageOperation.h:
  • rendering/RenderBox.cpp:

(WebCore::RenderBox::maskClipRect):

  • rendering/RenderBoxModelObject.cpp:

(WebCore::RenderBoxModelObject::paintFillLayerExtended):

  • rendering/RenderElement.cpp:

(WebCore::RenderElement::updateFillImages):
(WebCore::RenderElement::~RenderElement): Deleted.

  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::~RenderLayer): Deleted.
(WebCore::RenderLayer::calculateClipRects): Deleted.

  • rendering/RenderLayer.h:
  • rendering/RenderLayerMaskImageInfo.cpp: Removed.
  • rendering/style/FillLayer.h:

(WebCore::FillLayer::image):
(WebCore::FillLayer::imageOrMaskImage):

  • rendering/style/RenderStyle.cpp:

(WebCore::RenderStyle::setMaskImage): Deleted.

  • rendering/style/RenderStyle.h:

LayoutTests:

  • css3/masking/mask-base64-expected.html: Removed.
  • css3/masking/mask-base64.html: Removed.
  • css3/masking/mask-multiple-values-expected.html: Removed.
  • css3/masking/mask-multiple-values.html: Removed.
  • css3/masking/mask-repeat-space-padding-expected.html:
  • css3/masking/mask-repeat-space-padding.html:
  • css3/masking/mask-svg-clipped-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-clipped-fragmentId.html: Removed.
  • css3/masking/mask-svg-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-fragmentId.html: Removed.
  • css3/masking/mask-svg-inline-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-inline-fragmentId.html: Removed.
  • css3/masking/mask-svg-inline-invalid-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-inline-invalid-fragmentId.html: Removed.
  • css3/masking/mask-svg-invalid-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-invalid-fragmentId.html: Removed.
  • css3/masking/mask-svg-no-fragmentId-expected.html: Removed.
  • css3/masking/mask-svg-no-fragmentId-tiled-expected.html: Removed.
  • css3/masking/mask-svg-no-fragmentId-tiled.html: Removed.
  • css3/masking/mask-svg-no-fragmentId.html: Removed.
  • css3/masking/mask-svg-script-entire-svg-to-mask-expected.html: Removed.
  • css3/masking/mask-svg-script-entire-svg-to-mask.html: Removed.
  • css3/masking/mask-svg-script-mask-to-entire-svg-expected.html: Removed.
  • css3/masking/mask-svg-script-mask-to-entire-svg.html: Removed.
  • css3/masking/mask-svg-script-mask-to-none-expected.html: Removed.
  • css3/masking/mask-svg-script-mask-to-none.html: Removed.
  • css3/masking/mask-svg-script-mask-to-png-expected.html: Removed.
  • css3/masking/mask-svg-script-mask-to-png.html: Removed.
  • css3/masking/mask-svg-script-none-to-mask-expected.html: Removed.
  • css3/masking/mask-svg-script-none-to-mask.html: Removed.
  • css3/masking/mask-svg-script-none-to-png-expected.html: Removed.
  • css3/masking/mask-svg-script-none-to-png.html: Removed.
  • css3/masking/mask-svg-script-png-to-mask-expected.html: Removed.
  • css3/masking/mask-svg-script-png-to-mask.html: Removed.
  • css3/masking/mask-svg-script-png-to-none-expected.html: Removed.
  • css3/masking/mask-svg-script-png-to-none.html: Removed.
  • css3/masking/resources/masks.svg: Removed.
Location:
trunk
Files:
25 deleted
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r186388 r186391  
     12015-07-06  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494, r186180)
     4        https://bugs.webkit.org/show_bug.cgi?id=146653
     5
     6        Reviewed by Dean Jackson.
     7
     8        Fixes rdar://problem/21435233.
     9
     10        r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
     11        was not being maintained, so revert it.
     12
     13        This patch reverts r177494.
     14
     15        * css3/masking/mask-base64-expected.html: Removed.
     16        * css3/masking/mask-base64.html: Removed.
     17        * css3/masking/mask-multiple-values-expected.html: Removed.
     18        * css3/masking/mask-multiple-values.html: Removed.
     19        * css3/masking/mask-repeat-space-padding-expected.html:
     20        * css3/masking/mask-repeat-space-padding.html:
     21        * css3/masking/mask-svg-clipped-fragmentId-expected.html: Removed.
     22        * css3/masking/mask-svg-clipped-fragmentId.html: Removed.
     23        * css3/masking/mask-svg-fragmentId-expected.html: Removed.
     24        * css3/masking/mask-svg-fragmentId.html: Removed.
     25        * css3/masking/mask-svg-inline-fragmentId-expected.html: Removed.
     26        * css3/masking/mask-svg-inline-fragmentId.html: Removed.
     27        * css3/masking/mask-svg-inline-invalid-fragmentId-expected.html: Removed.
     28        * css3/masking/mask-svg-inline-invalid-fragmentId.html: Removed.
     29        * css3/masking/mask-svg-invalid-fragmentId-expected.html: Removed.
     30        * css3/masking/mask-svg-invalid-fragmentId.html: Removed.
     31        * css3/masking/mask-svg-no-fragmentId-expected.html: Removed.
     32        * css3/masking/mask-svg-no-fragmentId-tiled-expected.html: Removed.
     33        * css3/masking/mask-svg-no-fragmentId-tiled.html: Removed.
     34        * css3/masking/mask-svg-no-fragmentId.html: Removed.
     35        * css3/masking/mask-svg-script-entire-svg-to-mask-expected.html: Removed.
     36        * css3/masking/mask-svg-script-entire-svg-to-mask.html: Removed.
     37        * css3/masking/mask-svg-script-mask-to-entire-svg-expected.html: Removed.
     38        * css3/masking/mask-svg-script-mask-to-entire-svg.html: Removed.
     39        * css3/masking/mask-svg-script-mask-to-none-expected.html: Removed.
     40        * css3/masking/mask-svg-script-mask-to-none.html: Removed.
     41        * css3/masking/mask-svg-script-mask-to-png-expected.html: Removed.
     42        * css3/masking/mask-svg-script-mask-to-png.html: Removed.
     43        * css3/masking/mask-svg-script-none-to-mask-expected.html: Removed.
     44        * css3/masking/mask-svg-script-none-to-mask.html: Removed.
     45        * css3/masking/mask-svg-script-none-to-png-expected.html: Removed.
     46        * css3/masking/mask-svg-script-none-to-png.html: Removed.
     47        * css3/masking/mask-svg-script-png-to-mask-expected.html: Removed.
     48        * css3/masking/mask-svg-script-png-to-mask.html: Removed.
     49        * css3/masking/mask-svg-script-png-to-none-expected.html: Removed.
     50        * css3/masking/mask-svg-script-png-to-none.html: Removed.
     51        * css3/masking/resources/masks.svg: Removed.
     52
    1532015-07-06  Daniel Bates  <dabates@apple.com>
    254
  • trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html

    r177494 r186391  
    2727                for (var x = 0; x < width; x += sizeX + spaceX) {
    2828                    for (var y = 0; y < height; y += sizeY + spaceY) {
    29                         urls.push("url(resources/circle.svg)");
     29                        urls.push("url(resources/circle.png)");
    3030                        size.push(sizeX + "px " + sizeY + "px");
    3131                        position.push(x + "px " + y + "px");
  • trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html

    r177494 r186391  
    1414                border: 50px solid blue;
    1515                padding: 50px;
    16                 -webkit-mask-image: url("resources/circle.svg");
     16                -webkit-mask-image: url("resources/circle.png");
    1717                -webkit-mask-size: 100px;
    1818                -webkit-mask-repeat: space;
  • trunk/Source/WebCore/ChangeLog

    r186390 r186391  
     12015-07-06  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494, r186180)
     4        https://bugs.webkit.org/show_bug.cgi?id=146653
     5
     6        Reviewed by Dean Jackson.
     7
     8        Fixes rdar://problem/21435233.
     9
     10        r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
     11        was not being maintained, so revert it.
     12
     13        This patch reverts r177494.
     14
     15        * WebCore.xcodeproj/project.pbxproj:
     16        * css/CSSComputedStyleDeclaration.cpp:
     17        (WebCore::ComputedStyleExtractor::propertyValue):
     18        * css/CSSParser.cpp:
     19        (WebCore::CSSParser::parseFillProperty):
     20        (WebCore::CSSParser::parseMaskImage): Deleted.
     21        * css/CSSParser.h:
     22        * css/CSSPropertyNames.in:
     23        * css/CSSValue.h:
     24        * css/StyleBuilderConverter.h:
     25        (WebCore::StyleBuilderConverter::convertMaskImageOperations): Deleted.
     26        * css/StyleResolver.cpp:
     27        (WebCore::StyleResolver::loadPendingSVGDocuments):
     28        (WebCore::StyleResolver::loadPendingImages):
     29        (WebCore::StyleResolver::adjustStyleForMaskImages): Deleted.
     30        (WebCore::StyleResolver::applyMatchedProperties): Deleted.
     31        * css/StyleResolver.h:
     32        * page/FrameView.cpp:
     33        (WebCore::FrameView::containsSVGDocument):
     34        * page/FrameView.h:
     35        * page/animation/CSSPropertyAnimation.cpp:
     36        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
     37        (WebCore::blendFunc): Deleted.
     38        (WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper): Deleted.
     39        (WebCore::MaskImagePropertyWrapper::equals): Deleted.
     40        * platform/ScrollView.h:
     41        (WebCore::ScrollView::containsSVGDocument):
     42        * platform/graphics/MaskImageOperation.cpp:
     43        (WebCore::MaskImageOperation::~MaskImageOperation): Deleted.
     44        (WebCore::MaskImageOperation::operator==): Deleted.
     45        * platform/graphics/MaskImageOperation.h:
     46        * rendering/RenderBox.cpp:
     47        (WebCore::RenderBox::maskClipRect):
     48        * rendering/RenderBoxModelObject.cpp:
     49        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
     50        * rendering/RenderElement.cpp:
     51        (WebCore::RenderElement::updateFillImages):
     52        (WebCore::RenderElement::~RenderElement): Deleted.
     53        * rendering/RenderLayer.cpp:
     54        (WebCore::RenderLayer::~RenderLayer): Deleted.
     55        (WebCore::RenderLayer::calculateClipRects): Deleted.
     56        * rendering/RenderLayer.h:
     57        * rendering/RenderLayerMaskImageInfo.cpp: Removed.
     58        * rendering/style/FillLayer.h:
     59        (WebCore::FillLayer::image):
     60        (WebCore::FillLayer::imageOrMaskImage):
     61        * rendering/style/RenderStyle.cpp:
     62        (WebCore::RenderStyle::setMaskImage): Deleted.
     63        * rendering/style/RenderStyle.h:
     64
    1652015-07-06  Simon Fraser  <simon.fraser@apple.com>
    266
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r186375 r186391  
    23292329                6C6CCAB019DC42B90043D5DB /* WebKitCSSResourceValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C6CCAAE19DC42B90043D5DB /* WebKitCSSResourceValue.cpp */; };
    23302330                6C6CCAB119DC42B90043D5DB /* WebKitCSSResourceValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C6CCAAF19DC42B90043D5DB /* WebKitCSSResourceValue.h */; };
    2331                 6CBFE4A419EBF2D400CA2F9D /* RenderLayerMaskImageInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CBFE4A219EBF2D400CA2F9D /* RenderLayerMaskImageInfo.cpp */; };
    23322331                6CBFE4A519EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */; };
    23332332                6CDDE8D01770BB220016E072 /* RegionOversetState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C70A81417707C49009A446E /* RegionOversetState.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    96119610                6C6CCAAF19DC42B90043D5DB /* WebKitCSSResourceValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitCSSResourceValue.h; sourceTree = "<group>"; };
    96129611                6C70A81417707C49009A446E /* RegionOversetState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegionOversetState.h; sourceTree = "<group>"; };
    9613                 6CBFE4A219EBF2D400CA2F9D /* RenderLayerMaskImageInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderLayerMaskImageInfo.cpp; sourceTree = "<group>"; };
    96149612                6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLayerMaskImageInfo.h; sourceTree = "<group>"; };
    96159613                6E0E5699183BFFE600E0E8D5 /* FloatRoundedRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatRoundedRect.cpp; sourceTree = "<group>"; };
     
    2288022878                                50D10D971545F5760096D288 /* RenderLayerFilterInfo.cpp */,
    2288122879                                50D10D981545F5760096D288 /* RenderLayerFilterInfo.h */,
    22882                                 6CBFE4A219EBF2D400CA2F9D /* RenderLayerMaskImageInfo.cpp */,
    2288322880                                6CBFE4A319EBF2D400CA2F9D /* RenderLayerMaskImageInfo.h */,
    2288422881                                3C244FE5A375AC633F88BE6F /* RenderLayerModelObject.cpp */,
     
    2981029807                                0F580CFE0F12DE9B0051D689 /* RenderLayerCompositor.cpp in Sources */,
    2981129808                                50D10D991545F5760096D288 /* RenderLayerFilterInfo.cpp in Sources */,
    29812                                 6CBFE4A419EBF2D400CA2F9D /* RenderLayerMaskImageInfo.cpp in Sources */,
    2981329809                                3C244FEBA375AC633F88BE6F /* RenderLayerModelObject.cpp in Sources */,
    2981429810                                BC33FB1B0F30EE85002CDD7C /* RenderLineBoxList.cpp in Sources */,
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r185238 r186391  
    19071907        case CSSPropertyBackgroundColor:
    19081908            return cssValuePool().createColorValue(m_allowVisitedStyle? style->visitedDependentColor(CSSPropertyBackgroundColor).rgb() : style->backgroundColor().rgb());
    1909         case CSSPropertyBackgroundImage: {
    1910             const FillLayer* layers = style->backgroundLayers();
     1909        case CSSPropertyBackgroundImage:
     1910        case CSSPropertyWebkitMaskImage: {
     1911            const FillLayer* layers = propertyID == CSSPropertyWebkitMaskImage ? style->maskLayers() : style->backgroundLayers();
    19111912            if (!layers)
    19121913                return cssValuePool().createIdentifierValue(CSSValueNone);
     
    19231924                if (currLayer->image())
    19241925                    list->append(*currLayer->image()->cssValue());
    1925                 else
    1926                     list->append(cssValuePool().createIdentifierValue(CSSValueNone));
    1927             }
    1928             return list.release();
    1929         }
    1930         case CSSPropertyWebkitMaskImage: {
    1931             const FillLayer* layers = style->maskLayers();
    1932             if (!layers)
    1933                 return cssValuePool().createIdentifierValue(CSSValueNone);
    1934 
    1935             if (!layers->next()) {
    1936                 if (layers->maskImage().get())
    1937                     return layers->maskImage()->cssValue();
    1938 
    1939                 return cssValuePool().createIdentifierValue(CSSValueNone);
    1940             }
    1941 
    1942             RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
    1943             for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) {
    1944                 if (currLayer->maskImage().get())
    1945                     list->append(*currLayer->maskImage()->cssValue());
    19461926                else
    19471927                    list->append(cssValuePool().createIdentifierValue(CSSValueNone));
  • trunk/Source/WebCore/css/CSSParser.cpp

    r186279 r186391  
    9191#include "WebKitCSSFilterValue.h"
    9292#include "WebKitCSSRegionRule.h"
    93 #include "WebKitCSSResourceValue.h"
    9493#include "WebKitCSSTransformValue.h"
    9594#include <JavaScriptCore/Profile.h>
     
    47054704                    break;
    47064705                case CSSPropertyBackgroundImage:
     4706                case CSSPropertyWebkitMaskImage:
    47074707                    if (parseFillImage(*m_valueList, currValue))
    4708                         m_valueList->next();
    4709                     break;
    4710                 case CSSPropertyWebkitMaskImage:
    4711                     if (parseMaskImage(*m_valueList, currValue))
    47124708                        m_valueList->next();
    47134709                    break;
     
    99129908}
    99139909
    9914 bool CSSParser::parseMaskImage(CSSParserValueList& valueList, RefPtr<CSSValue>& outValue)
    9915 {
    9916     outValue = nullptr;
    9917     CSSParserValue* value = valueList.current();
    9918     if (value->id == CSSValueNone) {
    9919         outValue = WebKitCSSResourceValue::create(cssValuePool().createIdentifierValue(CSSValueNone));
    9920         return outValue.get();
    9921     }
    9922 
    9923     RefPtr<CSSValue> resourceValue;
    9924     if (value->unit == CSSPrimitiveValue::CSS_URI) {
    9925         if (protocolIs(value->string, "data"))
    9926             parseFillImage(valueList, resourceValue);
    9927         else
    9928             resourceValue = CSSPrimitiveValue::create(completeURL(value->string), CSSPrimitiveValue::CSS_URI);
    9929     } else
    9930         parseFillImage(valueList, resourceValue);
    9931 
    9932     if (resourceValue)
    9933         outValue = WebKitCSSResourceValue::create(resourceValue);
    9934 
    9935     return outValue.get();
    9936 }
    9937 
    99389910#if ENABLE(CSS_REGIONS)
    99399911static bool validFlowName(const String& flowName)
  • trunk/Source/WebCore/css/CSSParser.h

    r185908 r186391  
    158158    SourceSize sourceSize(std::unique_ptr<MediaQueryExp>&&, CSSParserValue&);
    159159
    160     // FIXME: Maybe these two methods could be combined into one.
    161     bool parseMaskImage(CSSParserValueList&, RefPtr<CSSValue>&);
    162160    bool parseFillImage(CSSParserValueList&, RefPtr<CSSValue>&);
    163161
  • trunk/Source/WebCore/css/CSSPropertyNames.in

    r185925 r186391  
    539539-webkit-mask-clip [FillLayerProperty, NameForMethods=Clip]
    540540-webkit-mask-composite [FillLayerProperty, NameForMethods=Composite]
    541 -webkit-mask-image [Custom=Initial|Inherit, Converter=MaskImageOperations]
     541-webkit-mask-image [FillLayerProperty, NameForMethods=Image]
    542542-webkit-mask-origin [FillLayerProperty, NameForMethods=Origin]
    543543-webkit-mask-position [Longhands=-webkit-mask-position-x|-webkit-mask-position-y]
  • trunk/Source/WebCore/css/CSSValue.h

    r185731 r186391  
    172172        SVGColorClass,
    173173        SVGPaintClass,
    174         WebKitCSSResourceClass,
    175174
    176175#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
     
    190189        GridLineNamesClass,
    191190#endif
     191        WebKitCSSResourceClass
    192192
    193193        // Do not append non-list class types here.
  • trunk/Source/WebCore/css/StyleBuilderConverter.h

    r185925 r186391  
    105105    static Optional<Length> convertMarqueeIncrement(StyleResolver&, CSSValue&);
    106106    static Optional<FilterOperations> convertFilterOperations(StyleResolver&, CSSValue&);
    107     static Vector<RefPtr<MaskImageOperation>> convertMaskImageOperations(StyleResolver&, CSSValue&);
    108107#if PLATFORM(IOS)
    109108    static bool convertTouchCallout(StyleResolver&, CSSValue&);
     
    10141013}
    10151014
    1016 inline Vector<RefPtr<MaskImageOperation>> StyleBuilderConverter::convertMaskImageOperations(StyleResolver& styleResolver, CSSValue& value)
    1017 {
    1018     Vector<RefPtr<MaskImageOperation>> operations;
    1019     RefPtr<WebKitCSSResourceValue> maskImageValue;
    1020     RefPtr<CSSValueList> maskImagesList;
    1021     CSSValueList::iterator listIterator;
    1022     if (is<WebKitCSSResourceValue>(value))
    1023         maskImageValue = &downcast<WebKitCSSResourceValue>(value);
    1024     else if (is<CSSValueList>(value)) {
    1025         maskImagesList = &downcast<CSSValueList>(value);
    1026         listIterator = maskImagesList->begin();
    1027         maskImageValue = maskImageValueFromIterator(*maskImagesList, listIterator);
    1028     }
    1029 
    1030     while (maskImageValue.get()) {
    1031         RefPtr<CSSValue> maskInnerValue = maskImageValue->innerValue();
    1032 
    1033         RefPtr<MaskImageOperation> newMaskImage;
    1034         if (is<CSSPrimitiveValue>(maskInnerValue.get())) {
    1035             RefPtr<CSSPrimitiveValue> primitiveValue = downcast<CSSPrimitiveValue>(maskInnerValue.get());
    1036             if (primitiveValue->isValueID() && primitiveValue->getValueID() == CSSValueNone)
    1037                 newMaskImage = MaskImageOperation::create();
    1038             else {
    1039                 String cssUrl = primitiveValue->getStringValue();
    1040                 URL url = styleResolver.document().completeURL(cssUrl);
    1041 
    1042                 bool isExternalDocument = SVGURIReference::isExternalURIReference(cssUrl, styleResolver.document());
    1043                 newMaskImage = MaskImageOperation::create(maskImageValue, cssUrl, url.fragmentIdentifier(), isExternalDocument, &styleResolver.document().cachedResourceLoader());
    1044                 if (isExternalDocument)
    1045                     styleResolver.state().maskImagesWithPendingSVGDocuments().append(newMaskImage);
    1046             }
    1047         } else {
    1048             if (RefPtr<StyleImage> image = styleResolver.styleImage(CSSPropertyWebkitMaskImage, *maskInnerValue))
    1049                 newMaskImage = MaskImageOperation::create(image);
    1050         }
    1051 
    1052         // If we didn't get a valid value, use None so we keep the correct number and order of masks.
    1053         if (!newMaskImage)
    1054             newMaskImage = MaskImageOperation::create();
    1055 
    1056         operations.append(newMaskImage);
    1057 
    1058         if (maskImagesList)
    1059             maskImageValue = maskImageValueFromIterator(*maskImagesList, ++listIterator);
    1060         else
    1061             maskImageValue = nullptr;
    1062     }
    1063 
    1064     return operations;
    1065 }
    1066 
    10671015inline RefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSettings(StyleResolver&, CSSValue& value)
    10681016{
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r186388 r186391  
    11591159}
    11601160
    1161 void StyleResolver::adjustStyleForMaskImages()
    1162 {
    1163     // If we already have the same mask image objects loaded on the old style,
    1164     // use the old ones instead of loading new ones.
    1165     RenderStyle* newStyle = m_state.style();
    1166     RenderStyle* oldStyle = (m_state.element() ? m_state.element()->renderStyle() : nullptr);
    1167 
    1168     if (newStyle && oldStyle) {
    1169         Vector<RefPtr<MaskImageOperation>> removedExternalResources;
    1170        
    1171         // Get all mask objects from the old style in a vector
    1172         // so we can remove them as we match them, making the following steps faster.
    1173         Vector<RefPtr<MaskImageOperation>> oldStyleMaskImages;
    1174         const FillLayer* oldMaskLayer = oldStyle->maskLayers();
    1175         while (oldMaskLayer) {
    1176             RefPtr<MaskImageOperation> oldMaskImage = oldMaskLayer->maskImage();
    1177             if (oldMaskImage.get())
    1178                 oldStyleMaskImages.append(oldMaskImage);
    1179 
    1180             oldMaskLayer = oldMaskLayer->next();
    1181         }
    1182 
    1183         if (oldStyleMaskImages.isEmpty())
    1184             return;
    1185 
    1186         // Try to match the new mask objects through the list from the old style.
    1187         // This should work perfectly and optimal when the list of masks remained
    1188         // the same and also work correctly (but slower) when they were reordered.
    1189         FillLayer* newMaskLayer = &newStyle->ensureMaskLayers();
    1190         int countOldStyleMaskImages = oldStyleMaskImages.size();
    1191         while (newMaskLayer && countOldStyleMaskImages) {
    1192             RefPtr<MaskImageOperation> newMaskImage = newMaskLayer->maskImage();
    1193             if (newMaskImage.get()) {
    1194                 for (int i = 0; i < countOldStyleMaskImages; i++) {
    1195                     RefPtr<MaskImageOperation> oldMaskImage = oldStyleMaskImages[i];
    1196                     if (*oldMaskImage == *newMaskImage) {
    1197                         newMaskLayer->setMaskImage(oldMaskImage);
    1198                         if (newMaskImage->isExternalDocument())
    1199                             removedExternalResources.append(newMaskImage);
    1200 
    1201                         oldStyleMaskImages.remove(i);
    1202                         countOldStyleMaskImages--;
    1203                         break;
    1204                     }
    1205                 }
    1206             }
    1207 
    1208             newMaskLayer = newMaskLayer->next();
    1209         }
    1210 
    1211         Vector<RefPtr<MaskImageOperation>>& pendingResources = m_state.maskImagesWithPendingSVGDocuments();
    1212         pendingResources.removeAllMatching([&removedExternalResources] (const RefPtr<MaskImageOperation>& resource) {
    1213             return removedExternalResources.contains(resource);
    1214         });
    1215     }
    1216 }
    1217 
    12181161void StyleResolver::adjustRenderStyle(RenderStyle& style, const RenderStyle& parentStyle, Element *e)
    12191162{
     
    18111754    // so to preserve behavior, we queue them up during cascade and flush here.
    18121755    cascade.applyDeferredProperties(*this);
    1813    
    1814     adjustStyleForMaskImages();
    18151756
    18161757    // Start loading resources referenced by this style.
     
    22402181    // reentering styleForElement().
    22412182    ASSERT(state.style());
    2242     if (!state.style())
    2243         return;
    2244    
    2245     bool hasFilters = (state.style()->hasFilter() && !state.filtersWithPendingSVGDocuments().isEmpty());
    2246     bool hasMasks = (state.style()->hasMask() && !state.maskImagesWithPendingSVGDocuments().isEmpty());
    2247    
    2248     if (!hasFilters && !hasMasks)
     2183    if (!state.style() || !state.style()->hasFilter() || state.filtersWithPendingSVGDocuments().isEmpty())
    22492184        return;
    22502185
     
    22542189    CachedResourceLoader& cachedResourceLoader = state.document().cachedResourceLoader();
    22552190   
    2256     if (hasFilters) {
    2257         for (auto& filterOperation : state.filtersWithPendingSVGDocuments())
    2258             filterOperation->getOrCreateCachedSVGDocumentReference()->load(cachedResourceLoader, options);
    2259 
    2260         state.filtersWithPendingSVGDocuments().clear();
    2261     }
    2262    
    2263     if (hasMasks) {
    2264         for (auto& maskImageOperation : state.maskImagesWithPendingSVGDocuments())
    2265             maskImageOperation->ensureCachedSVGDocumentReference()->load(cachedResourceLoader, options);
    2266 
    2267         state.maskImagesWithPendingSVGDocuments().clear();
    2268     }
     2191    for (auto& filterOperation : state.filtersWithPendingSVGDocuments())
     2192        filterOperation->getOrCreateCachedSVGDocumentReference()->load(cachedResourceLoader, options);
     2193
     2194    state.filtersWithPendingSVGDocuments().clear();
    22692195}
    22702196
     
    25292455        case CSSPropertyWebkitMaskImage: {
    25302456            for (FillLayer* maskLayer = &m_state.style()->ensureMaskLayers(); maskLayer; maskLayer = maskLayer->next()) {
    2531                 RefPtr<MaskImageOperation> maskImage = maskLayer->maskImage();
    2532                 auto* styleImage = maskImage.get() ? maskImage->image() : nullptr;
     2457                auto* styleImage = maskLayer->image();
    25332458                if (is<StylePendingImage>(styleImage))
    2534                     maskImage->setImage(loadPendingImage(downcast<StylePendingImage>(*styleImage)));
     2459                    maskLayer->setImage(loadPendingImage(downcast<StylePendingImage>(*styleImage)));
    25352460            }
    25362461            break;
  • trunk/Source/WebCore/css/StyleResolver.h

    r182224 r186391  
    303303   
    304304    void adjustStyleForInterCharacterRuby();
    305     void adjustStyleForMaskImages();
    306305   
    307306    bool fastRejectSelector(const RuleData&) const;
  • trunk/Source/WebCore/page/FrameView.cpp

    r186269 r186391  
    45094509}
    45104510
     4511bool FrameView::containsSVGDocument() const
     4512{
     4513    if (frame().document())
     4514        return frame().document()->isSVGDocument();
     4515   
     4516    return false;
     4517}
     4518
    45114519void FrameView::notifyWidgetsInAllFrames(WidgetNotification notification)
    45124520{
  • trunk/Source/WebCore/page/FrameView.h

    r186165 r186391  
    562562    virtual bool isVerticalDocument() const override;
    563563    virtual bool isFlippedDocument() const override;
     564    virtual bool containsSVGDocument() const override;
    564565
    565566private:
  • trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp

    r185925 r186391  
    4343#include "FloatConversion.h"
    4444#include "IdentityTransformOperation.h"
    45 #include "MaskImageOperation.h"
    4645#include "Matrix3DTransformOperation.h"
    4746#include "MatrixTransformOperation.h"
     
    349348}
    350349
    351 static inline PassRefPtr<MaskImageOperation> blendFunc(const AnimationBase* anim, const RefPtr<MaskImageOperation> from, const RefPtr<MaskImageOperation> to, double progress)
    352 {
    353     if (!from.get() || !to.get())
    354         return to;
    355 
    356     // Only animates between masks using images (PNG, entire SVG, generated image).
    357     // It does not animate between <mask> elements (file.svg#identifier).
    358     if (from->image() && to->image())
    359         return MaskImageOperation::create(blendFunc(anim, from->image(), to->image(), progress));
    360 
    361     return to;
    362 }
    363 
    364350static inline NinePieceImage blendFunc(const AnimationBase* anim, const NinePieceImage& from, const NinePieceImage& to, double progress)
    365351{
     
    525511        StyleImage* imageB = (b->*m_getter)();
    526512        return StyleImage::imagesEquivalent(imageA, imageB);
    527     }
    528 };
    529 
    530 class MaskImagePropertyWrapper : public PropertyWrapper<const RefPtr<MaskImageOperation>> {
    531     WTF_MAKE_FAST_ALLOCATED;
    532 public:
    533     MaskImagePropertyWrapper()
    534         : PropertyWrapper<const RefPtr<MaskImageOperation>>(CSSPropertyWebkitMaskImage, &RenderStyle::maskImage, &RenderStyle::setMaskImage)
    535     {
    536     }
    537    
    538     virtual bool equals(const RenderStyle* a, const RenderStyle* b) const
    539     {
    540         // If the style pointers are the same, don't bother doing the test.
    541         // If either is null, return false. If both are null, return true.
    542         if (a == b)
    543             return true;
    544         if (!a || !b)
    545             return false;
    546        
    547         const RefPtr<MaskImageOperation> maskImageA = (a->*m_getter)();
    548         const RefPtr<MaskImageOperation> maskImageB = (b->*m_getter)();
    549         StyleImage* styleImageA = (maskImageA ? maskImageA->image() : nullptr);
    550         StyleImage* styleImageB = (maskImageB ? maskImageB->image() : nullptr);
    551         return StyleImage::imagesEquivalent(styleImageA, styleImageB);
    552513    }
    553514};
     
    12401201        new FillLayersPropertyWrapper(CSSPropertyBackgroundImage, &RenderStyle::backgroundLayers, &RenderStyle::ensureBackgroundLayers),
    12411202        new StyleImagePropertyWrapper(CSSPropertyListStyleImage, &RenderStyle::listStyleImage, &RenderStyle::setListStyleImage),
    1242         new MaskImagePropertyWrapper(),
     1203        new StyleImagePropertyWrapper(CSSPropertyWebkitMaskImage, &RenderStyle::maskImage, &RenderStyle::setMaskImage),
    12431204
    12441205        new StyleImagePropertyWrapper(CSSPropertyBorderImageSource, &RenderStyle::borderImageSource, &RenderStyle::setBorderImageSource),
  • trunk/Source/WebCore/platform/ScrollView.h

    r185893 r186391  
    409409    virtual bool isVerticalDocument() const { return true; }
    410410    virtual bool isFlippedDocument() const { return false; }
     411    virtual bool containsSVGDocument() const { return false; }
    411412
    412413    // Called to update the scrollbars to accurately reflect the state of the view.
  • trunk/Source/WebCore/platform/graphics/MaskImageOperation.cpp

    r186390 r186391  
    8383MaskImageOperation::~MaskImageOperation()
    8484{
    85     setRenderLayerImageClient(nullptr);
    86 }
    87 
    88 bool MaskImageOperation::operator==(const MaskImageOperation& other) const
    89 {
    90     if (m_url.length())
    91         return (m_url == other.m_url && m_fragment == other.m_fragment && m_isExternalDocument == other.m_isExternalDocument);
    92 
    93     return m_styleImage.get() == other.m_styleImage.get();
    9485}
    9586
  • trunk/Source/WebCore/platform/graphics/MaskImageOperation.h

    r184749 r186391  
    5656
    5757    virtual ~MaskImageOperation();
    58    
    59     bool operator==(const MaskImageOperation&) const;
    60     inline bool operator!=(const MaskImageOperation& other) const { return !operator==(other); }
    6158
    6259    const String& url() const { return m_url; }
    6360    const String& fragment() const { return m_fragment; }
    64     bool isExternalDocument() const { return m_isExternalDocument; }
    6561    StyleImage* image() const { return m_styleImage.get(); }
    6662    void setImage(PassRefPtr<StyleImage>);
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r186279 r186391  
    15741574    LayoutRect borderBox = borderBoxRect();
    15751575    for (const FillLayer* maskLayer = style().maskLayers(); maskLayer; maskLayer = maskLayer->next()) {
    1576         if (maskLayer->maskImage()) {
     1576        if (maskLayer->image()) {
    15771577            // Masks should never have fixed attachment, so it's OK for paintContainer to be null.
    15781578            BackgroundImageGeometry geometry = calculateBackgroundImageGeometry(nullptr, *maskLayer, paintOffset, borderBox);
  • trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp

    r186299 r186391  
    2828
    2929#include "BorderEdge.h"
    30 #include "CachedImage.h"
    31 #include "CachedSVGDocument.h"
    3230#include "FloatRoundedRect.h"
    3331#include "Frame.h"
     
    5048#include "RenderNamedFlowThread.h"
    5149#include "RenderRegion.h"
    52 #include "RenderSVGResourceMasker.h"
    5350#include "RenderTable.h"
    5451#include "RenderTableRow.h"
     
    5653#include "RenderTextFragment.h"
    5754#include "RenderView.h"
    58 #include "SVGImageForContainer.h"
    5955#include "ScrollingConstraints.h"
    6056#include "Settings.h"
    61 #include "StyleCachedImage.h"
    6257#include "TransformState.h"
    6358#include <wtf/NeverDestroyed.h>
     
    685680
    686681    // Fast path for drawing simple color backgrounds.
    687     if (!isRoot && !clippedWithLocalScrolling && !shouldPaintBackgroundImage && isBorderFill && !bgLayer->hasMaskImage() && !bgLayer->next()) {
     682    if (!isRoot && !clippedWithLocalScrolling && !shouldPaintBackgroundImage && isBorderFill && !bgLayer->next()) {
    688683        if (!colorVisible)
    689684            return;
     
    845840
    846841    // no progressive loading of the background image
    847     if (!baseBgColorOnly && (shouldPaintBackgroundImage || bgLayer->hasMaskImage())) {
     842    if (!baseBgColorOnly && shouldPaintBackgroundImage) {
    848843        BackgroundImageGeometry geometry = calculateBackgroundImageGeometry(paintInfo.paintContainer, *bgLayer, rect.location(), scrolledPaintRect, backgroundObject);
    849844        geometry.clip(LayoutRect(pixelSnappedRect));
    850 
    851845        if (!geometry.destRect().isEmpty()) {
    852             bool didPaintCustomMask = false;
    853846            CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer->composite() : op;
    854847            auto clientForBackgroundImage = backgroundObject ? backgroundObject : this;
    855             RefPtr<Image> image = (bgImage ? bgImage->image(clientForBackgroundImage, geometry.tileSize()) : nullptr);
    856             if (!image.get() && bgLayer->hasMaskImage())
    857                 didPaintCustomMask = bgLayer->maskImage()->drawMask(*this, geometry, context, compositeOp);
    858 
    859             if (!didPaintCustomMask && shouldPaintBackgroundImage) {
    860                 context->setDrawLuminanceMask(bgLayer->maskSourceType() == MaskLuminance);
    861                 bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.get(), bgLayer, geometry.tileSize());
    862                 if (image.get())
    863                     image->setSpaceSize(geometry.spaceSize());
    864                 context->drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), toLayoutPoint(geometry.relativePhase()), geometry.tileSize(), ImagePaintingOptions(compositeOp, bgLayer->blendMode(), ImageOrientationDescription(), useLowQualityScaling));
    865             }
     848            RefPtr<Image> image = bgImage->image(clientForBackgroundImage, geometry.tileSize());
     849            context->setDrawLuminanceMask(bgLayer->maskSourceType() == MaskLuminance);
     850            bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.get(), bgLayer, geometry.tileSize());
     851            if (image.get())
     852                image->setSpaceSize(geometry.spaceSize());
     853            context->drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), toLayoutPoint(geometry.relativePhase()), geometry.tileSize(), ImagePaintingOptions(compositeOp, bgLayer->blendMode(), ImageOrientationDescription(), useLowQualityScaling));
    866854        }
    867855    }
  • trunk/Source/WebCore/rendering/RenderElement.cpp

    r185606 r186391  
    124124            if (StyleImage* maskImage = maskLayer->image())
    125125                maskImage->removeClient(this);
    126             else if (maskLayer->maskImage().get())
    127                 maskLayer->maskImage()->removeRendererImageClient(this);
    128126        }
    129127
     
    333331    // Go through the new layers and addClients first, to avoid removing all clients of an image.
    334332    for (const FillLayer* currNew = newLayers; currNew; currNew = currNew->next()) {
    335         if (StyleImage* image = currNew->image())
    336             image->addClient(this);
    337         else if (currNew->maskImage().get())
    338             currNew->maskImage()->addRendererImageClient(this);
     333        if (currNew->image())
     334            currNew->image()->addClient(this);
    339335    }
    340336
    341337    for (const FillLayer* currOld = oldLayers; currOld; currOld = currOld->next()) {
    342         if (StyleImage* image = currOld->image())
    343             image->removeClient(this);
    344         else if (currOld->maskImage().get())
    345             currOld->maskImage()->removeRendererImageClient(this);
     338        if (currOld->image())
     339            currOld->image()->removeClient(this);
    346340    }
    347341}
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r185858 r186391  
    371371
    372372    FilterInfo::remove(*this);
    373     MaskImageInfo::remove(*this);
    374373
    375374    // Child layers will be deleted by their corresponding render objects, so
     
    67146713#endif
    67156714    updateOrRemoveFilterClients();
    6716     updateOrRemoveMaskImageClients();
    67176715
    67186716    updateNeedsCompositedScrolling();
     
    68696867}
    68706868
    6871 void RenderLayer::updateOrRemoveMaskImageClients()
    6872 {
    6873     if (renderer().style().maskImage().get())
    6874         MaskImageInfo::get(*this).updateMaskImageClients();
    6875     else if (MaskImageInfo* maskImageInfo = MaskImageInfo::getIfExists(*this))
    6876         maskImageInfo->removeMaskImageClients();
    6877 }
    6878 
    68796869void RenderLayer::updateOrRemoveFilterEffectRenderer()
    68806870{
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r184932 r186391  
    921921    void updateOrRemoveFilterClients();
    922922    void updateOrRemoveFilterEffectRenderer();
    923     void updateOrRemoveMaskImageClients();
    924923
    925924#if ENABLE(CSS_COMPOSITING)
  • trunk/Source/WebCore/rendering/style/FillLayer.h

    r186279 r186391  
    6969    ~FillLayer();
    7070
    71     StyleImage* image() const { return hasMaskImage() ? maskImage()->image() : m_image.get(); }
    7271    const RefPtr<MaskImageOperation>& maskImage() const { return m_maskImageOperation; }
     72    StyleImage* image() const { return m_image.get(); }
     73    StyleImage* imageOrMaskImage() const { return hasMaskImage() ? maskImage()->image() : image(); }
    7374    const Length& xPosition() const { return m_xPosition; }
    7475    const Length& yPosition() const { return m_yPosition; }
     
    182183    std::unique_ptr<FillLayer> m_next;
    183184
    184     // FIXME: A FillLayer will always have at least one of these pointers null.
    185     // Maybe we could group them together somehow and decrease the size of FillLayer.
    186185    RefPtr<MaskImageOperation> m_maskImageOperation;
    187186    RefPtr<StyleImage> m_image;
  • trunk/Source/WebCore/rendering/style/RenderStyle.cpp

    r186279 r186391  
    896896    return false;
    897897}
    898    
    899 void RenderStyle::setMaskImage(const Vector<RefPtr<MaskImageOperation>>& ops)
    900 {
    901     FillLayer* curLayer = &rareNonInheritedData.access()->m_mask;
    902     while (curLayer) {
    903         curLayer->setMaskImage(nullptr);
    904         curLayer = curLayer->next();
    905     }
    906 
    907     curLayer = &rareNonInheritedData.access()->m_mask;
    908     FillLayer* prevLayer = nullptr;
    909     for (auto& maskImage : ops) {
    910         if (!curLayer) {
    911             prevLayer->setNext(std::make_unique<FillLayer>(MaskFillLayer));
    912             curLayer = prevLayer->next();
    913         }
    914 
    915         curLayer->setMaskImage(maskImage);
    916         prevLayer = curLayer;
    917         curLayer = curLayer->next();
    918     }
    919 }
    920898
    921899void RenderStyle::setClip(Length top, Length right, Length bottom, Length left)
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r185238 r186391  
    108108class FontMetrics;
    109109class IntRect;
    110 class MaskImageOperation;
    111110class Pair;
    112111class ShadowData;
     
    810809    const FillLayer* backgroundLayers() const { return &(m_background->background()); }
    811810
     811    StyleImage* maskImage() const { return rareNonInheritedData->m_mask.image(); }
    812812    EFillRepeat maskRepeatX() const { return static_cast<EFillRepeat>(rareNonInheritedData->m_mask.repeatX()); }
    813813    EFillRepeat maskRepeatY() const { return static_cast<EFillRepeat>(rareNonInheritedData->m_mask.repeatY()); }
     
    10501050    void setPageScaleTransform(float);
    10511051
    1052     bool hasMask() const { return rareNonInheritedData->m_mask.hasNonEmptyMaskImage() || rareNonInheritedData->m_mask.hasImage() || rareNonInheritedData->m_maskBoxImage.hasImage(); }
     1052    bool hasMask() const { return rareNonInheritedData->m_mask.hasImage() || rareNonInheritedData->m_maskBoxImage.hasImage(); }
    10531053
    10541054    TextCombine textCombine() const { return static_cast<TextCombine>(rareNonInheritedData->m_textCombine); }
     
    11561156    const FilterOperations& filter() const { return rareNonInheritedData->m_filter->m_operations; }
    11571157    bool hasFilter() const { return !rareNonInheritedData->m_filter->m_operations.operations().isEmpty(); }
    1158    
    1159     RefPtr<MaskImageOperation>& mutableMaskImage() { return rareNonInheritedData.access()->m_mask.m_maskImageOperation; }
    1160     const RefPtr<MaskImageOperation> maskImage() const { return rareNonInheritedData->m_mask.maskImage(); }
    11611158
    11621159#if ENABLE(FILTERS_LEVEL_2)
     
    14131410        }
    14141411    }
     1412
     1413    void setMaskImage(PassRefPtr<StyleImage> v) { rareNonInheritedData.access()->m_mask.setImage(v); }
    14151414
    14161415    void setMaskBoxImage(const NinePieceImage& b) { SET_VAR(rareNonInheritedData, m_maskBoxImage, b); }
     
    16191618#endif
    16201619
    1621     void setMaskImage(const Vector<RefPtr<MaskImageOperation>>&);
    1622     void setMaskImage(const RefPtr<MaskImageOperation> maskImage) { Vector<RefPtr<MaskImageOperation>> vectMask; vectMask.append(maskImage); setMaskImage(vectMask); }
    1623 
    16241620    void setTabSize(unsigned size) { SET_VAR(rareInheritedData, m_tabSize, size); }
    16251621
Note: See TracChangeset for help on using the changeset viewer.