Changeset 285543 in webkit
- Timestamp:
- Nov 9, 2021, 4:40:53 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 51 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285538 r285543 1 2021-11-09 Said Abou-Hallawa <said@apple.com> 2 3 [GPU Process] Introduce FilterFunction and make it the base class of Filter and FilterEffect 4 https://bugs.webkit.org/show_bug.cgi?id=232413 5 rdar://84966765 6 7 Reviewed by Myles C. Maxfield. 8 9 This allows CSSFilter to hold a list of FilterFunctions. The Filter in 10 this case will act like a composite pattern of FilterEffects. 11 12 This patch also 13 1. Removes the virtual function filterName() from all the FilterEffect 14 classes. It replaces it with a static function in FilterFunction. 15 2. Removes the virtual function filterEffectType() and the function 16 FilterEffect::filterEffectClassType() since they can both be replaced 17 by FilterFunction::filterType(). 18 3. Adds trait macros for all FilterEffects and the SVGFilters class. 19 20 * Sources.txt: 21 * WebCore.xcodeproj/project.pbxproj: 22 * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm: 23 (WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering): 24 (WebCore::FilterEffectRendererCoreImage::connectCIFilters): 25 * platform/graphics/filters/FEBlend.cpp: 26 (WebCore::FEBlend::FEBlend): 27 * platform/graphics/filters/FEBlend.h: 28 (): Deleted. 29 * platform/graphics/filters/FEColorMatrix.cpp: 30 (WebCore::FEColorMatrix::FEColorMatrix): 31 * platform/graphics/filters/FEColorMatrix.h: 32 (isType): Deleted. 33 * platform/graphics/filters/FEComponentTransfer.cpp: 34 (WebCore::FEComponentTransfer::FEComponentTransfer): 35 * platform/graphics/filters/FEComponentTransfer.h: 36 (isType): Deleted. 37 * platform/graphics/filters/FEComposite.cpp: 38 (WebCore::FEComposite::FEComposite): 39 * platform/graphics/filters/FEComposite.h: 40 * platform/graphics/filters/FEConvolveMatrix.cpp: 41 (WebCore::FEConvolveMatrix::FEConvolveMatrix): 42 * platform/graphics/filters/FEConvolveMatrix.h: 43 * platform/graphics/filters/FEDiffuseLighting.cpp: 44 (WebCore::FEDiffuseLighting::FEDiffuseLighting): 45 * platform/graphics/filters/FEDiffuseLighting.h: 46 * platform/graphics/filters/FEDisplacementMap.cpp: 47 (WebCore::FEDisplacementMap::FEDisplacementMap): 48 * platform/graphics/filters/FEDisplacementMap.h: 49 * platform/graphics/filters/FEDropShadow.cpp: 50 (WebCore::FEDropShadow::FEDropShadow): 51 * platform/graphics/filters/FEDropShadow.h: 52 (): Deleted. 53 * platform/graphics/filters/FEFlood.cpp: 54 (WebCore::FEFlood::FEFlood): 55 * platform/graphics/filters/FEFlood.h: 56 * platform/graphics/filters/FEGaussianBlur.cpp: 57 (WebCore::FEGaussianBlur::FEGaussianBlur): 58 * platform/graphics/filters/FEGaussianBlur.h: 59 (): Deleted. 60 * platform/graphics/filters/FELighting.h: 61 * platform/graphics/filters/FEMerge.cpp: 62 (WebCore::FEMerge::FEMerge): 63 * platform/graphics/filters/FEMerge.h: 64 (): Deleted. 65 * platform/graphics/filters/FEMorphology.cpp: 66 (WebCore::FEMorphology::FEMorphology): 67 * platform/graphics/filters/FEMorphology.h: 68 * platform/graphics/filters/FEOffset.cpp: 69 (WebCore::FEOffset::FEOffset): 70 * platform/graphics/filters/FEOffset.h: 71 (): Deleted. 72 * platform/graphics/filters/FESpecularLighting.cpp: 73 (WebCore::FESpecularLighting::FESpecularLighting): 74 * platform/graphics/filters/FESpecularLighting.h: 75 * platform/graphics/filters/FETile.cpp: 76 (WebCore::FETile::FETile): 77 (WebCore::FETile::platformApplySoftware): 78 * platform/graphics/filters/FETile.h: 79 * platform/graphics/filters/FETurbulence.cpp: 80 (WebCore::FETurbulence::FETurbulence): 81 * platform/graphics/filters/FETurbulence.h: 82 * platform/graphics/filters/Filter.h: 83 (WebCore::Filter::Filter): 84 * platform/graphics/filters/FilterEffect.cpp: 85 (WebCore::FilterEffect::FilterEffect): 86 (WebCore::FilterEffect::determineFilterPrimitiveSubregion): 87 (WebCore::FilterEffect::createImageBufferResult): 88 (WebCore::FilterEffect::createUnmultipliedImageResult): 89 (WebCore::FilterEffect::createPremultipliedImageResult): 90 * platform/graphics/filters/FilterEffect.h: 91 (isType): 92 (WebCore::FilterEffect::filterEffectType const): Deleted. 93 (WebCore::FilterEffect::filterEffectClassType const): Deleted. 94 * platform/graphics/filters/FilterFunction.cpp: Added. 95 (WebCore::FilterFunction::FilterFunction): 96 (WebCore::FilterFunction::filterName): 97 * platform/graphics/filters/FilterFunction.h: Added. 98 (WebCore::FilterFunction::filterType const): 99 (WebCore::FilterFunction::isCSSFilter const): 100 (WebCore::FilterFunction::isSVGFilter const): 101 (WebCore::FilterFunction::isFilter const): 102 (WebCore::FilterFunction::isFilterEffect const): 103 (WebCore::FilterFunction::sourceAlphaName): 104 (WebCore::FilterFunction::sourceGraphicName): 105 (WebCore::FilterFunction::filterName const): 106 * platform/graphics/filters/SourceAlpha.cpp: 107 (WebCore::SourceAlpha::SourceAlpha): 108 (WebCore::SourceAlpha::effectName): Deleted. 109 * platform/graphics/filters/SourceAlpha.h: 110 (WebCore::SourceAlpha::effectName): 111 (): Deleted. 112 * platform/graphics/filters/SourceGraphic.cpp: 113 (WebCore::SourceGraphic::effectName): Deleted. 114 * platform/graphics/filters/SourceGraphic.h: 115 (WebCore::SourceGraphic::effectName): 116 (WebCore::SourceGraphic::SourceGraphic): 117 (): Deleted. 118 (isType): Deleted. 119 * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: 120 * rendering/CSSFilter.cpp: 121 (WebCore::CSSFilter::CSSFilter): 122 * svg/graphics/filters/SVGFEImage.cpp: 123 (WebCore::FEImage::FEImage): 124 * svg/graphics/filters/SVGFEImage.h: 125 * svg/graphics/filters/SVGFilter.cpp: 126 (WebCore::SVGFilter::SVGFilter): 127 * svg/graphics/filters/SVGFilter.h: 128 (isType): 129 * svg/graphics/filters/SVGFilterBuilder.cpp: 130 1 131 2021-11-09 Commit Queue <commit-queue@webkit.org> 2 132 -
trunk/Source/WebCore/Sources.txt
r285528 r285543 2092 2092 platform/graphics/filters/FilterEffect.cpp 2093 2093 platform/graphics/filters/FilterEffectRenderer.cpp 2094 platform/graphics/filters/FilterFunction.cpp 2094 2095 platform/graphics/filters/FilterOperation.cpp 2095 2096 platform/graphics/filters/FilterOperations.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r285528 r285543 10849 10849 724EE54F1DC7F25B00A91FFB /* ActivityStateChangeObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityStateChangeObserver.h; sourceTree = "<group>"; }; 10850 10850 7252396B254CADC200F5FB15 /* NativeImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NativeImage.cpp; sourceTree = "<group>"; }; 10851 7262D756272A174100C56A09 /* FilterFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterFunction.h; sourceTree = "<group>"; }; 10852 7262D757272A174100C56A09 /* FilterFunction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilterFunction.cpp; sourceTree = "<group>"; }; 10851 10853 7266F0132241BCE200833975 /* SVGPropertyAnimatorFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPropertyAnimatorFactory.h; sourceTree = "<group>"; }; 10852 10854 7266F0142241BFB200833975 /* SVGPrimitivePropertyAnimatorImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPrimitivePropertyAnimatorImpl.h; sourceTree = "<group>"; }; … … 18908 18910 isa = PBXGroup; 18909 18911 children = ( 18912 1A569CE20D7E2B82007C3983 /* objc */, 18910 18913 599E758F11055A1F00D904FA /* Bridge.h */, 18911 18914 1A71D5790F33819000F9CE4E /* IdentifierRep.cpp */, 18912 18915 1A71D57A0F33819000F9CE4E /* IdentifierRep.h */, 18913 18916 59B5977111086556007159E8 /* jsc */, 18914 1A569CE20D7E2B82007C3983 /* objc */,18915 18917 1A569CEF0D7E2B82007C3983 /* runtime_array.cpp */, 18916 18918 1A569CF00D7E2B82007C3983 /* runtime_array.h */, … … 25870 25872 2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */, 25871 25873 2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */, 25874 7262D757272A174100C56A09 /* FilterFunction.cpp */, 25875 7262D756272A174100C56A09 /* FilterFunction.h */, 25872 25876 49ECEB631499790D00CDD3A4 /* FilterOperation.cpp */, 25873 25877 49ECEB641499790D00CDD3A4 /* FilterOperation.h */, -
trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm
r284481 r285543 73 73 { 74 74 // FIXME: change return value to true once they are implemented 75 switch (effect.filter EffectClassType()) {75 switch (effect.filterType()) { 76 76 case FilterEffect::Type::SourceGraphic: 77 77 return true; 78 78 79 case FilterEffect::Type:: ColorMatrix: {79 case FilterEffect::Type::FEColorMatrix: { 80 80 switch (downcast<FEColorMatrix>(effect).type()) { 81 81 case FECOLORMATRIX_TYPE_UNKNOWN: … … 89 89 } 90 90 91 case FilterEffect::Type:: ComponentTransfer:91 case FilterEffect::Type::FEComponentTransfer: 92 92 return isNullOrLinearComponentTransferFunction(downcast<FEComponentTransfer>(effect)); 93 93 94 case FilterEffect::Type::Blend: 95 case FilterEffect::Type::Composite: 96 case FilterEffect::Type::ConvolveMatrix: 97 case FilterEffect::Type::DiffuseLighting: 98 case FilterEffect::Type::DisplacementMap: 99 case FilterEffect::Type::DropShadow: 100 case FilterEffect::Type::Flood: 101 case FilterEffect::Type::GaussianBlur: 102 case FilterEffect::Type::Image: 103 case FilterEffect::Type::Lighting: 104 case FilterEffect::Type::Merge: 105 case FilterEffect::Type::Morphology: 106 case FilterEffect::Type::Offset: 107 case FilterEffect::Type::SpecularLighting: 108 case FilterEffect::Type::Tile: 109 case FilterEffect::Type::Turbulence: 110 case FilterEffect::Type::SourceAlpha: 94 default: 111 95 return false; 112 96 } … … 138 122 return nullptr; 139 123 140 switch (effect.filter EffectClassType()) {124 switch (effect.filterType()) { 141 125 case FilterEffect::Type::SourceGraphic: 142 126 return imageForSourceGraphic(downcast<SourceGraphic>(effect)); 143 case FilterEffect::Type:: ColorMatrix:127 case FilterEffect::Type::FEColorMatrix: 144 128 return imageForFEColorMatrix(downcast<FEColorMatrix>(effect), inputImages); 145 case FilterEffect::Type:: ComponentTransfer:129 case FilterEffect::Type::FEComponentTransfer: 146 130 return imageForFEComponentTransfer(downcast<FEComponentTransfer>(effect), inputImages); 147 131 148 // FIXME: Implement those filters using CIFilter so that the function returns a valid CIImage149 case FilterEffect::Type::Blend:150 case FilterEffect::Type::Composite:151 case FilterEffect::Type::ConvolveMatrix:152 case FilterEffect::Type::DiffuseLighting:153 case FilterEffect::Type::DisplacementMap:154 case FilterEffect::Type::DropShadow:155 case FilterEffect::Type::Flood:156 case FilterEffect::Type::GaussianBlur:157 case FilterEffect::Type::Image:158 case FilterEffect::Type::Lighting:159 case FilterEffect::Type::Merge:160 case FilterEffect::Type::Morphology:161 case FilterEffect::Type::Offset:162 case FilterEffect::Type::SpecularLighting:163 case FilterEffect::Type::Tile:164 case FilterEffect::Type::Turbulence:165 case FilterEffect::Type::SourceAlpha:166 132 default: 167 133 return nullptr; -
trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp
r285090 r285543 36 36 37 37 FEBlend::FEBlend(Filter& filter, BlendMode mode) 38 : FilterEffect(filter, Type::Blend)38 : FilterEffect(filter, FilterEffect::Type::FEBlend) 39 39 , m_mode(mode) 40 40 { -
trunk/Source/WebCore/platform/graphics/filters/FEBlend.h
r225366 r285543 37 37 38 38 private: 39 const char* filterName() const final { return "FEBlend"; }40 41 39 void platformApplySoftware() override; 42 40 void platformApplyGeneric(unsigned char* srcPixelArrayA, unsigned char* srcPixelArrayB, unsigned char* dstPixelArray, … … 54 52 } // namespace WebCore 55 53 54 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEBlend) -
trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp
r285071 r285543 37 37 38 38 FEColorMatrix::FEColorMatrix(Filter& filter, ColorMatrixType type, Vector<float>&& values) 39 : FilterEffect(filter, Type::ColorMatrix)39 : FilterEffect(filter, FilterEffect::Type::FEColorMatrix) 40 40 , m_type(type) 41 41 , m_values(WTFMove(values)) -
trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h
r275471 r285543 53 53 FEColorMatrix(Filter&, ColorMatrixType, Vector<float>&&); 54 54 55 const char* filterName() const final { return "FEColorMatrix"; }56 57 55 void platformApplySoftware() override; 58 56 … … 94 92 } // namespace WebCore 95 93 96 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEColorMatrix) 97 static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ColorMatrix; } 98 SPECIALIZE_TYPE_TRAITS_END() 99 94 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEColorMatrix) -
trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp
r277313 r285543 34 34 namespace WebCore { 35 35 36 FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction, 37 const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction) 38 : FilterEffect(filter, Type::ComponentTransfer) 36 FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction, const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction) 37 : FilterEffect(filter, FilterEffect::Type::FEComponentTransfer) 39 38 , m_redFunction(redFunction) 40 39 , m_greenFunction(greenFunction) -
trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h
r266740 r285543 66 66 const ComponentTransferFunction& blueFunc, const ComponentTransferFunction& alphaFunc); 67 67 68 const char* filterName() const final { return "FEComponentTransfer"; }69 70 68 using LookupTable = std::array<uint8_t, 256>; 71 69 … … 90 88 } // namespace WebCore 91 89 92 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEComponentTransfer) 93 static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ComponentTransfer; } 94 SPECIALIZE_TYPE_TRAITS_END() 90 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComponentTransfer) -
trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp
r285090 r285543 34 34 35 35 FEComposite::FEComposite(Filter& filter, const CompositeOperationType& type, float k1, float k2, float k3, float k4) 36 : FilterEffect(filter, Type::Composite)36 : FilterEffect(filter, FilterEffect::Type::FEComposite) 37 37 , m_type(type) 38 38 , m_k1(k1) -
trunk/Source/WebCore/platform/graphics/filters/FEComposite.h
r225366 r285543 65 65 FEComposite(Filter&, const CompositeOperationType&, float, float, float, float); 66 66 67 const char* filterName() const final { return "FEComposite"; }68 69 67 void correctFilterResultIfNeeded() override; 70 68 void determineAbsolutePaintRect() override; … … 91 89 } // namespace WebCore 92 90 91 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComposite) -
trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp
r284135 r285543 33 33 namespace WebCore { 34 34 35 FEConvolveMatrix::FEConvolveMatrix(Filter& filter, const IntSize& kernelSize, 36 float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode, 37 const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix) 38 : FilterEffect(filter, Type::ConvolveMatrix) 35 FEConvolveMatrix::FEConvolveMatrix(Filter& filter, const IntSize& kernelSize, float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode, const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix) 36 : FilterEffect(filter, FilterEffect::Type::FEConvolveMatrix) 39 37 , m_kernelSize(kernelSize) 40 38 , m_divisor(divisor) -
trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h
r225366 r285543 81 81 const IntPoint&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&); 82 82 83 const char* filterName() const final { return "FEConvolveMatrix"; }84 85 83 void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); } 86 84 … … 116 114 } // namespace WebCore 117 115 116 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEConvolveMatrix) -
trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp
r264805 r285543 29 29 30 30 FEDiffuseLighting::FEDiffuseLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float diffuseConstant, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource) 31 : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::DiffuseLighting)31 : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FEDiffuseLighting) 32 32 { 33 33 } … … 37 37 return adoptRef(*new FEDiffuseLighting(filter, lightingColor, surfaceScale, diffuseConstant, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource))); 38 38 } 39 40 FEDiffuseLighting::~FEDiffuseLighting() = default;41 39 42 40 bool FEDiffuseLighting::setDiffuseConstant(float diffuseConstant) -
trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h
r225366 r285543 31 31 public: 32 32 static Ref<FEDiffuseLighting> create(Filter&, const Color&, float, float, float, float, Ref<LightSource>&&); 33 virtual ~FEDiffuseLighting();34 33 35 34 float diffuseConstant() const { return m_diffuseConstant; } … … 44 43 } // namespace WebCore 45 44 45 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDiffuseLighting) -
trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp
r277986 r285543 33 33 34 34 FEDisplacementMap::FEDisplacementMap(Filter& filter, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float scale) 35 : FilterEffect(filter, Type::DisplacementMap)35 : FilterEffect(filter, FilterEffect::Type::FEDisplacementMap) 36 36 , m_xChannelSelector(xChannelSelector) 37 37 , m_yChannelSelector(yChannelSelector) -
trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h
r277986 r285543 55 55 FEDisplacementMap(Filter&, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float); 56 56 57 const char* filterName() const final { return "FEDisplacementMap"; }58 59 57 void platformApplySoftware() override; 60 58 … … 73 71 } // namespace WebCore 74 72 73 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDisplacementMap) -
trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp
r285071 r285543 33 33 34 34 FEDropShadow::FEDropShadow(Filter& filter, float stdX, float stdY, float dx, float dy, const Color& shadowColor, float shadowOpacity) 35 : FilterEffect(filter, Type::DropShadow)35 : FilterEffect(filter, FilterEffect::Type::FEDropShadow) 36 36 , m_stdX(stdX) 37 37 , m_stdY(stdY) -
trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h
r251119 r285543 51 51 FEDropShadow(Filter&, float, float, float, float, const Color&, float); 52 52 53 const char* filterName() const final { return "FEDropShadow"; }54 55 53 void platformApplySoftware() override; 56 54 … … 71 69 } // namespace WebCore 72 70 71 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDropShadow) -
trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp
r264805 r285543 32 32 33 33 FEFlood::FEFlood(Filter& filter, const Color& floodColor, float floodOpacity) 34 : FilterEffect(filter, Type::Flood)34 : FilterEffect(filter, FilterEffect::Type::FEFlood) 35 35 , m_floodColor(floodColor) 36 36 , m_floodOpacity(floodOpacity) -
trunk/Source/WebCore/platform/graphics/filters/FEFlood.h
r277986 r285543 48 48 FEFlood(Filter&, const Color&, float); 49 49 50 const char* filterName() const final { return "FEFlood"; }51 52 50 void platformApplySoftware() override; 53 51 … … 62 60 } // namespace WebCore 63 61 62 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEFlood) -
trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp
r284857 r285543 81 81 82 82 FEGaussianBlur::FEGaussianBlur(Filter& filter, float x, float y, EdgeModeType edgeMode) 83 : FilterEffect(filter, Type::GaussianBlur)83 : FilterEffect(filter, FilterEffect::Type::FEGaussianBlur) 84 84 , m_stdX(x) 85 85 , m_stdY(y) -
trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h
r285185 r285543 48 48 FEGaussianBlur(Filter&, float, float, EdgeModeType); 49 49 50 const char* filterName() const final { return "FEGaussianBlur"; }51 52 50 static const int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs 53 51 … … 81 79 } // namespace WebCore 82 80 81 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEGaussianBlur) -
trunk/Source/WebCore/platform/graphics/filters/FELighting.h
r284857 r285543 131 131 FELighting(Filter&, LightingType, const Color&, float, float, float, float, float, float, Ref<LightSource>&&, Type); 132 132 133 const char* filterName() const final { return "FELighting"; }134 135 133 bool drawLighting(Uint8ClampedArray&, int, int); 136 134 -
trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp
r264805 r285543 30 30 31 31 FEMerge::FEMerge(Filter& filter) 32 : FilterEffect(filter, Type::Merge)32 : FilterEffect(filter, FilterEffect::Type::FEMerge) 33 33 { 34 34 } -
trunk/Source/WebCore/platform/graphics/filters/FEMerge.h
r225366 r285543 34 34 FEMerge(Filter&); 35 35 36 const char* filterName() const final { return "FEMerge"; }37 38 36 void platformApplySoftware() override; 39 37 … … 43 41 } // namespace WebCore 44 42 43 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMerge) -
trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp
r284857 r285543 37 37 38 38 FEMorphology::FEMorphology(Filter& filter, MorphologyOperatorType type, float radiusX, float radiusY) 39 : FilterEffect(filter, Type::Morphology)39 : FilterEffect(filter, FilterEffect::Type::FEMorphology) 40 40 , m_type(type) 41 41 , m_radiusX(radiusX) -
trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h
r225366 r285543 49 49 FEMorphology(Filter&, MorphologyOperatorType, float radiusX, float radiusY); 50 50 51 const char* filterName() const final { return "FEMorphology"; }52 53 51 void platformApplySoftware() override; 54 52 … … 87 85 } // namespace WebCore 88 86 87 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMorphology) -
trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp
r264805 r285543 32 32 33 33 FEOffset::FEOffset(Filter& filter, float dx, float dy) 34 : FilterEffect(filter, Type::Offset)34 : FilterEffect(filter, FilterEffect::Type::FEOffset) 35 35 , m_dx(dx) 36 36 , m_dy(dy) -
trunk/Source/WebCore/platform/graphics/filters/FEOffset.h
r225366 r285543 40 40 FEOffset(Filter&, float dx, float dy); 41 41 42 const char* filterName() const final { return "FEOffset"; }43 44 42 void platformApplySoftware() override; 45 43 … … 54 52 } // namespace WebCore 55 53 54 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEOffset) -
trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp
r264805 r285543 29 29 30 30 FESpecularLighting::FESpecularLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float specularConstant, float specularExponent, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource) 31 : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::SpecularLighting)31 : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FESpecularLighting) 32 32 { 33 33 } … … 37 37 return adoptRef(*new FESpecularLighting(filter, lightingColor, surfaceScale, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource))); 38 38 } 39 40 FESpecularLighting::~FESpecularLighting() = default;41 39 42 40 bool FESpecularLighting::setSpecularConstant(float specularConstant) -
trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h
r225366 r285543 29 29 public: 30 30 static Ref<FESpecularLighting> create(Filter&, const Color&, float, float, float, float, float, Ref<LightSource>&&); 31 virtual ~FESpecularLighting();32 31 33 32 float specularConstant() const { return m_specularConstant; } … … 45 44 } // namespace WebCore 46 45 46 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FESpecularLighting) -
trunk/Source/WebCore/platform/graphics/filters/FETile.cpp
r277986 r285543 33 33 34 34 FETile::FETile(Filter& filter) 35 : FilterEffect(filter, Type::Tile)35 : FilterEffect(filter, FilterEffect::Type::FETile) 36 36 { 37 37 } … … 59 59 FloatPoint inMaxEffectLocation = tileRect.location(); 60 60 FloatPoint maxEffectLocation = maxEffectRect().location(); 61 if (in->filter EffectType() == FilterEffectTypeSourceInput) {61 if (in->filterType() == FilterEffect::Type::SourceGraphic || in->filterType() == FilterEffect::Type::SourceAlpha) { 62 62 Filter& filter = this->filter(); 63 63 tileRect = filter.filterRegion(); -
trunk/Source/WebCore/platform/graphics/filters/FETile.h
r225366 r285543 34 34 FETile(Filter&); 35 35 36 const char* filterName() const final { return "FETile"; }37 38 FilterEffectType filterEffectType() const override { return FilterEffectTypeTile; }39 40 36 void platformApplySoftware() override; 41 37 … … 47 43 } // namespace WebCore 48 44 45 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETile) -
trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp
r284857 r285543 50 50 51 51 FETurbulence::FETurbulence(Filter& filter, TurbulenceType type, float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed, bool stitchTiles) 52 : FilterEffect(filter, Type::Turbulence)52 : FilterEffect(filter, FilterEffect::Type::FETurbulence) 53 53 , m_type(type) 54 54 , m_baseFrequencyX(baseFrequencyX) -
trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h
r285185 r285543 106 106 FETurbulence(Filter&, TurbulenceType, float, float, int, float, bool); 107 107 108 const char* filterName() const final { return "FETurbulence"; }109 110 108 void platformApplySoftware() override; 111 109 void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); } … … 130 128 } // namespace WebCore 131 129 130 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETurbulence) -
trunk/Source/WebCore/platform/graphics/filters/Filter.h
r269323 r285543 2 2 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 3 3 * Copyright (C) 2013 Google Inc. All rights reserved. 4 * Copyright (C) 2021 Apple Inc. All rights reserved. 4 5 * 5 6 * This library is free software; you can redistribute it and/or … … 22 23 23 24 #include "AffineTransform.h" 25 #include "FilterFunction.h" 24 26 #include "FloatRect.h" 25 27 #include "GraphicsTypes.h" 26 28 #include "ImageBuffer.h" 27 #include <wtf/RefCounted.h>28 29 29 30 namespace WebCore { … … 31 32 class FilterEffect; 32 33 33 class Filter : public RefCounted<Filter>{34 class Filter : public FilterFunction { 34 35 public: 35 Filter(const AffineTransform& absoluteTransform, float filterScale = 1)36 : m_absoluteTransform(absoluteTransform)37 , m_filterScale(filterScale)38 { }39 virtual ~Filter() = default;40 41 36 void setSourceImage(RefPtr<ImageBuffer>&& sourceImage) { m_sourceImage = WTFMove(sourceImage); } 42 37 ImageBuffer* sourceImage() { return m_sourceImage.get(); } … … 63 58 64 59 protected: 65 explicit Filter(const FloatSize& filterResolution) 66 : m_filterResolution(filterResolution) 60 Filter(Filter::Type filterType, const AffineTransform& absoluteTransform, float filterScale = 1) 61 : FilterFunction(filterType) 62 , m_absoluteTransform(absoluteTransform) 63 , m_filterScale(filterScale) 64 { 65 } 66 67 Filter(Filter::Type filterType, const FloatSize& filterResolution) 68 : FilterFunction(filterType) 69 , m_filterResolution(filterResolution) 67 70 { 68 71 } -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r279847 r285543 46 46 namespace WebCore { 47 47 48 FilterEffect::FilterEffect(Filter& filter, Type type) 49 : m_filter(filter) 50 , m_filterEffectClassType(type) 51 { 52 } 53 54 FilterEffect::~FilterEffect() = default; 48 FilterEffect::FilterEffect(Filter& filter, FilterEffect::Type type) 49 : FilterFunction(type) 50 , m_filter(filter) 51 { 52 } 55 53 56 54 void FilterEffect::determineAbsolutePaintRect() … … 111 109 112 110 // After calling determineFilterPrimitiveSubregion on the target effect, reset the subregion again for <feTile>. 113 if (filter EffectType() == FilterEffectTypeTile)111 if (filterType() == FilterEffect::Type::FETile) 114 112 subregion = m_filter.filterRegionInUserSpace(); 115 113 … … 573 571 ImageBuffer* FilterEffect::createImageBufferResult() 574 572 { 575 LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName() , this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height());573 LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName().characters8(), this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height()); 576 574 577 575 // Only one result type is allowed. … … 587 585 std::optional<PixelBuffer>& FilterEffect::createUnmultipliedImageResult() 588 586 { 589 LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName() , this);587 LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName().characters8(), this); 590 588 591 589 // Only one result type is allowed. … … 606 604 std::optional<PixelBuffer>& FilterEffect::createPremultipliedImageResult() 607 605 { 608 LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName() , this);606 LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName().characters8(), this); 609 607 610 608 // Only one result type is allowed. -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h
r283605 r285543 25 25 #include "AlphaPremultiplication.h" 26 26 #include "DestinationColorSpace.h" 27 #include "FilterFunction.h" 27 28 #include "FloatRect.h" 28 29 #include "IntRect.h" … … 31 32 #include <JavaScriptCore/Forward.h> 32 33 #include <wtf/MathExtras.h> 33 #include <wtf/RefCounted.h>34 34 #include <wtf/RefPtr.h> 35 35 #include <wtf/Vector.h> … … 47 47 typedef Vector<RefPtr<FilterEffect>> FilterEffectVector; 48 48 49 enum FilterEffectType { 50 FilterEffectTypeUnknown, 51 FilterEffectTypeImage, 52 FilterEffectTypeTile, 53 FilterEffectTypeSourceInput 54 }; 55 56 class FilterEffect : public RefCounted<FilterEffect> { 49 class FilterEffect : public FilterFunction { 57 50 public: 58 enum class Type : uint8_t {59 Blend,60 ColorMatrix,61 ComponentTransfer,62 Composite,63 ConvolveMatrix,64 DiffuseLighting,65 DisplacementMap,66 DropShadow,67 Flood,68 GaussianBlur,69 Image,70 Lighting,71 Merge,72 Morphology,73 Offset,74 SpecularLighting,75 Tile,76 Turbulence,77 SourceAlpha,78 SourceGraphic79 };80 virtual ~FilterEffect();81 82 51 void clearResult(); 83 52 void clearResultsRecursive(); … … 126 95 virtual void determineAbsolutePaintRect(); 127 96 128 virtual FilterEffectType filterEffectType() const { return FilterEffectTypeUnknown; }129 130 97 virtual IntOutsets outsets() const { return IntOutsets(); } 131 98 … … 157 124 FloatPoint mapPointFromUserSpaceToBuffer(FloatPoint) const; 158 125 159 Type filterEffectClassType() const { return m_filterEffectClassType; }160 161 126 Filter& filter() { return m_filter; } 162 127 const Filter& filter() const { return m_filter; } … … 184 149 FilterEffect(Filter&, Type); 185 150 186 virtual const char* filterName() const = 0;187 188 151 ImageBuffer* createImageBufferResult(); 189 152 std::optional<PixelBuffer>& createUnmultipliedImageResult(); … … 249 212 #endif 250 213 DestinationColorSpace m_resultColorSpace { DestinationColorSpace::SRGB() }; 251 252 const Type m_filterEffectClassType;253 214 }; 254 215 … … 257 218 } // namespace WebCore 258 219 220 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FilterEffect) 221 static bool isType(const WebCore::FilterFunction& function) { return function.isFilterEffect(); } 222 SPECIALIZE_TYPE_TRAITS_END() 223 224 #define SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(ClassName) \ 225 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ClassName) \ 226 static bool isType(const WebCore::FilterEffect& effect) { return effect.filterType() == WebCore::FilterEffect::Type::ClassName; } \ 227 SPECIALIZE_TYPE_TRAITS_END() -
trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp
r264805 r285543 24 24 #include "Filter.h" 25 25 #include "GraphicsContext.h" 26 #include <wtf/NeverDestroyed.h>27 #include <wtf/StdLibExtras.h>28 26 #include <wtf/text/TextStream.h> 29 #include <wtf/text/WTFString.h>30 27 31 28 namespace WebCore { … … 36 33 } 37 34 38 const AtomString& SourceAlpha::effectName() 35 SourceAlpha::SourceAlpha(FilterEffect& sourceEffect) 36 : FilterEffect(sourceEffect.filter(), FilterEffect::Type::SourceAlpha) 39 37 { 40 s tatic MainThreadNeverDestroyed<const AtomString> s_effectName("SourceAlpha", AtomString::ConstructFromLiteral);41 return s_effectName;38 setOperatingColorSpace(sourceEffect.operatingColorSpace()); 39 inputEffects().append(&sourceEffect); 42 40 } 43 41 … … 70 68 } 71 69 72 SourceAlpha::SourceAlpha(FilterEffect& sourceEffect)73 : FilterEffect(sourceEffect.filter(), Type::SourceAlpha)74 {75 setOperatingColorSpace(sourceEffect.operatingColorSpace());76 inputEffects().append(&sourceEffect);77 }78 79 70 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h
r246490 r285543 18 18 */ 19 19 20 #ifndef SourceAlpha_h 21 #define SourceAlpha_h 20 #pragma once 22 21 23 22 #include "FilterEffect.h" … … 29 28 static Ref<SourceAlpha> create(FilterEffect&); 30 29 31 static const AtomString& effectName();30 static AtomString effectName() { return FilterEffect::sourceAlphaName(); } 32 31 33 32 private: 34 33 explicit SourceAlpha(FilterEffect&); 35 FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }36 37 const char* filterName() const final { return "SourceAlpha"; }38 34 39 35 void platformApplySoftware() override; … … 44 40 } //namespace WebCore 45 41 46 #endif // SourceAlpha_h 42 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceAlpha) -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp
r261013 r285543 23 23 #include "Filter.h" 24 24 #include "GraphicsContext.h" 25 #include <wtf/NeverDestroyed.h>26 #include <wtf/StdLibExtras.h>27 25 #include <wtf/text/TextStream.h> 28 #include <wtf/text/WTFString.h>29 26 30 27 namespace WebCore { … … 33 30 { 34 31 return adoptRef(*new SourceGraphic(filter)); 35 }36 37 const AtomString& SourceGraphic::effectName()38 {39 static MainThreadNeverDestroyed<const AtomString> s_effectName("SourceGraphic", AtomString::ConstructFromLiteral);40 return s_effectName;41 32 } 42 33 -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h
r277986 r285543 19 19 */ 20 20 21 #ifndef SourceGraphic_h 22 #define SourceGraphic_h 21 #pragma once 23 22 24 23 #include "FilterEffect.h" 25 #include "Filter.h"26 24 27 25 namespace WebCore { … … 31 29 static Ref<SourceGraphic> create(Filter&); 32 30 33 static const AtomString& effectName();31 static AtomString effectName() { return FilterEffect::sourceGraphicName(); } 34 32 35 33 private: 36 34 SourceGraphic(Filter& filter) 37 : FilterEffect(filter, Type::SourceGraphic)35 : FilterEffect(filter, FilterEffect::Type::SourceGraphic) 38 36 { 39 37 setOperatingColorSpace(DestinationColorSpace::SRGB()); 40 38 } 41 39 42 const char* filterName() const final { return "SourceGraphic"; }43 44 40 void determineAbsolutePaintRect() override; 45 41 void platformApplySoftware() override; 46 42 WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override; 47 48 FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }49 43 }; 50 44 51 45 } //namespace WebCore 52 46 53 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SourceGraphic) 54 static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::SourceGraphic; } 55 SPECIALIZE_TYPE_TRAITS_END() 56 57 58 #endif // SourceGraphic_h 47 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceGraphic) -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp
r285027 r285543 34 34 #include "CAAudioStreamDescription.h" 35 35 #include "LibWebRTCAudioFormat.h" 36 #include "LibWebRTCAudioModule.h" 36 37 #include "Logging.h" 37 38 #include <pal/avfoundation/MediaTimeAVFoundation.h> -
trunk/Source/WebCore/rendering/CSSFilter.cpp
r285090 r285543 61 61 62 62 CSSFilter::CSSFilter() 63 : Filter(F loatSize { 1, 1 })63 : Filter(Filter::Type::CSSFilter, FloatSize { 1, 1 }) 64 64 , m_sourceGraphic(SourceGraphic::create(*this)) 65 65 { -
trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp
r285481 r285543 43 43 44 44 FEImage::FEImage(Filter& filter, SourceImage&& sourceImage, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue& preserveAspectRatio) 45 : FilterEffect(filter, Type:: Image)45 : FilterEffect(filter, Type::FEImage) 46 46 , m_sourceImage(WTFMove(sourceImage)) 47 47 , m_sourceImageRect(sourceImageRect) -
trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h
r285481 r285543 25 25 26 26 #include "FilterEffect.h" 27 #include "RenderingResourceIdentifier.h"28 27 #include "SVGPreserveAspectRatioValue.h" 29 28 … … 35 34 class FEImage final : public FilterEffect { 36 35 public: 37 using SourceImage = std::variant< 38 Ref<Image>, 39 Ref<ImageBuffer> 40 >; 36 using SourceImage = std::variant<Ref<Image>, Ref<ImageBuffer>>; 41 37 42 38 static Ref<FEImage> create(Filter&, Ref<Image>&&, const SVGPreserveAspectRatioValue&); … … 48 44 private: 49 45 FEImage(Filter&, SourceImage&&, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue&); 50 51 const char* filterName() const final { return "FEImage"; }52 46 53 47 void platformApplySoftware() final; … … 61 55 62 56 } // namespace WebCore 57 58 SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEImage) -
trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp
r226981 r285543 26 26 27 27 SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode) 28 : Filter( absoluteTransform)28 : Filter(Filter::Type::CSSFilter, absoluteTransform) 29 29 , m_absoluteSourceDrawingRegion(absoluteSourceDrawingRegion) 30 30 , m_targetBoundingBox(targetBoundingBox) -
trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h
r235644 r285543 58 58 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SVGFilter) 59 59 static bool isType(const WebCore::Filter& filter) { return filter.isSVGFilter(); } 60 static bool isType(const WebCore::FilterFunction& function) { return function.isSVGFilter(); } 60 61 SPECIALIZE_TYPE_TRAITS_END() -
trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
r257199 r285543 22 22 23 23 #include "FilterEffect.h" 24 #include "ImageBuffer.h" 24 25 #include "SourceAlpha.h" 25 26 #include "SourceGraphic.h"
Note:
See TracChangeset
for help on using the changeset viewer.