Diff
Modified: trunk/Source/WebCore/ChangeLog (285542 => 285543)
--- trunk/Source/WebCore/ChangeLog 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/ChangeLog 2021-11-10 00:40:53 UTC (rev 285543)
@@ -1,3 +1,133 @@
+2021-11-09 Said Abou-Hallawa <[email protected]>
+
+ [GPU Process] Introduce FilterFunction and make it the base class of Filter and FilterEffect
+ https://bugs.webkit.org/show_bug.cgi?id=232413
+ rdar://84966765
+
+ Reviewed by Myles C. Maxfield.
+
+ This allows CSSFilter to hold a list of FilterFunctions. The Filter in
+ this case will act like a composite pattern of FilterEffects.
+
+ This patch also
+ 1. Removes the virtual function filterName() from all the FilterEffect
+ classes. It replaces it with a static function in FilterFunction.
+ 2. Removes the virtual function filterEffectType() and the function
+ FilterEffect::filterEffectClassType() since they can both be replaced
+ by FilterFunction::filterType().
+ 3. Adds trait macros for all FilterEffects and the SVGFilters class.
+
+ * Sources.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
+ (WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering):
+ (WebCore::FilterEffectRendererCoreImage::connectCIFilters):
+ * platform/graphics/filters/FEBlend.cpp:
+ (WebCore::FEBlend::FEBlend):
+ * platform/graphics/filters/FEBlend.h:
+ (): Deleted.
+ * platform/graphics/filters/FEColorMatrix.cpp:
+ (WebCore::FEColorMatrix::FEColorMatrix):
+ * platform/graphics/filters/FEColorMatrix.h:
+ (isType): Deleted.
+ * platform/graphics/filters/FEComponentTransfer.cpp:
+ (WebCore::FEComponentTransfer::FEComponentTransfer):
+ * platform/graphics/filters/FEComponentTransfer.h:
+ (isType): Deleted.
+ * platform/graphics/filters/FEComposite.cpp:
+ (WebCore::FEComposite::FEComposite):
+ * platform/graphics/filters/FEComposite.h:
+ * platform/graphics/filters/FEConvolveMatrix.cpp:
+ (WebCore::FEConvolveMatrix::FEConvolveMatrix):
+ * platform/graphics/filters/FEConvolveMatrix.h:
+ * platform/graphics/filters/FEDiffuseLighting.cpp:
+ (WebCore::FEDiffuseLighting::FEDiffuseLighting):
+ * platform/graphics/filters/FEDiffuseLighting.h:
+ * platform/graphics/filters/FEDisplacementMap.cpp:
+ (WebCore::FEDisplacementMap::FEDisplacementMap):
+ * platform/graphics/filters/FEDisplacementMap.h:
+ * platform/graphics/filters/FEDropShadow.cpp:
+ (WebCore::FEDropShadow::FEDropShadow):
+ * platform/graphics/filters/FEDropShadow.h:
+ (): Deleted.
+ * platform/graphics/filters/FEFlood.cpp:
+ (WebCore::FEFlood::FEFlood):
+ * platform/graphics/filters/FEFlood.h:
+ * platform/graphics/filters/FEGaussianBlur.cpp:
+ (WebCore::FEGaussianBlur::FEGaussianBlur):
+ * platform/graphics/filters/FEGaussianBlur.h:
+ (): Deleted.
+ * platform/graphics/filters/FELighting.h:
+ * platform/graphics/filters/FEMerge.cpp:
+ (WebCore::FEMerge::FEMerge):
+ * platform/graphics/filters/FEMerge.h:
+ (): Deleted.
+ * platform/graphics/filters/FEMorphology.cpp:
+ (WebCore::FEMorphology::FEMorphology):
+ * platform/graphics/filters/FEMorphology.h:
+ * platform/graphics/filters/FEOffset.cpp:
+ (WebCore::FEOffset::FEOffset):
+ * platform/graphics/filters/FEOffset.h:
+ (): Deleted.
+ * platform/graphics/filters/FESpecularLighting.cpp:
+ (WebCore::FESpecularLighting::FESpecularLighting):
+ * platform/graphics/filters/FESpecularLighting.h:
+ * platform/graphics/filters/FETile.cpp:
+ (WebCore::FETile::FETile):
+ (WebCore::FETile::platformApplySoftware):
+ * platform/graphics/filters/FETile.h:
+ * platform/graphics/filters/FETurbulence.cpp:
+ (WebCore::FETurbulence::FETurbulence):
+ * platform/graphics/filters/FETurbulence.h:
+ * platform/graphics/filters/Filter.h:
+ (WebCore::Filter::Filter):
+ * platform/graphics/filters/FilterEffect.cpp:
+ (WebCore::FilterEffect::FilterEffect):
+ (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
+ (WebCore::FilterEffect::createImageBufferResult):
+ (WebCore::FilterEffect::createUnmultipliedImageResult):
+ (WebCore::FilterEffect::createPremultipliedImageResult):
+ * platform/graphics/filters/FilterEffect.h:
+ (isType):
+ (WebCore::FilterEffect::filterEffectType const): Deleted.
+ (WebCore::FilterEffect::filterEffectClassType const): Deleted.
+ * platform/graphics/filters/FilterFunction.cpp: Added.
+ (WebCore::FilterFunction::FilterFunction):
+ (WebCore::FilterFunction::filterName):
+ * platform/graphics/filters/FilterFunction.h: Added.
+ (WebCore::FilterFunction::filterType const):
+ (WebCore::FilterFunction::isCSSFilter const):
+ (WebCore::FilterFunction::isSVGFilter const):
+ (WebCore::FilterFunction::isFilter const):
+ (WebCore::FilterFunction::isFilterEffect const):
+ (WebCore::FilterFunction::sourceAlphaName):
+ (WebCore::FilterFunction::sourceGraphicName):
+ (WebCore::FilterFunction::filterName const):
+ * platform/graphics/filters/SourceAlpha.cpp:
+ (WebCore::SourceAlpha::SourceAlpha):
+ (WebCore::SourceAlpha::effectName): Deleted.
+ * platform/graphics/filters/SourceAlpha.h:
+ (WebCore::SourceAlpha::effectName):
+ (): Deleted.
+ * platform/graphics/filters/SourceGraphic.cpp:
+ (WebCore::SourceGraphic::effectName): Deleted.
+ * platform/graphics/filters/SourceGraphic.h:
+ (WebCore::SourceGraphic::effectName):
+ (WebCore::SourceGraphic::SourceGraphic):
+ (): Deleted.
+ (isType): Deleted.
+ * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
+ * rendering/CSSFilter.cpp:
+ (WebCore::CSSFilter::CSSFilter):
+ * svg/graphics/filters/SVGFEImage.cpp:
+ (WebCore::FEImage::FEImage):
+ * svg/graphics/filters/SVGFEImage.h:
+ * svg/graphics/filters/SVGFilter.cpp:
+ (WebCore::SVGFilter::SVGFilter):
+ * svg/graphics/filters/SVGFilter.h:
+ (isType):
+ * svg/graphics/filters/SVGFilterBuilder.cpp:
+
2021-11-09 Commit Queue <[email protected]>
Unreviewed, reverting r285246.
Modified: trunk/Source/WebCore/Sources.txt (285542 => 285543)
--- trunk/Source/WebCore/Sources.txt 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/Sources.txt 2021-11-10 00:40:53 UTC (rev 285543)
@@ -2091,6 +2091,7 @@
platform/graphics/filters/FETurbulence.cpp
platform/graphics/filters/FilterEffect.cpp
platform/graphics/filters/FilterEffectRenderer.cpp
+platform/graphics/filters/FilterFunction.cpp
platform/graphics/filters/FilterOperation.cpp
platform/graphics/filters/FilterOperations.cpp
platform/graphics/filters/PointLightSource.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (285542 => 285543)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-11-10 00:40:53 UTC (rev 285543)
@@ -10848,6 +10848,8 @@
724EE54E1DC7F25B00A91FFB /* ActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityState.h; sourceTree = "<group>"; };
724EE54F1DC7F25B00A91FFB /* ActivityStateChangeObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityStateChangeObserver.h; sourceTree = "<group>"; };
7252396B254CADC200F5FB15 /* NativeImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NativeImage.cpp; sourceTree = "<group>"; };
+ 7262D756272A174100C56A09 /* FilterFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterFunction.h; sourceTree = "<group>"; };
+ 7262D757272A174100C56A09 /* FilterFunction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilterFunction.cpp; sourceTree = "<group>"; };
7266F0132241BCE200833975 /* SVGPropertyAnimatorFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPropertyAnimatorFactory.h; sourceTree = "<group>"; };
7266F0142241BFB200833975 /* SVGPrimitivePropertyAnimatorImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPrimitivePropertyAnimatorImpl.h; sourceTree = "<group>"; };
7266F0152241C09800833975 /* SVGPrimitivePropertyAnimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPrimitivePropertyAnimator.h; sourceTree = "<group>"; };
@@ -18907,11 +18909,11 @@
1A569CC40D7E2B60007C3983 /* bridge */ = {
isa = PBXGroup;
children = (
+ 1A569CE20D7E2B82007C3983 /* objc */,
599E758F11055A1F00D904FA /* Bridge.h */,
1A71D5790F33819000F9CE4E /* IdentifierRep.cpp */,
1A71D57A0F33819000F9CE4E /* IdentifierRep.h */,
59B5977111086556007159E8 /* jsc */,
- 1A569CE20D7E2B82007C3983 /* objc */,
1A569CEF0D7E2B82007C3983 /* runtime_array.cpp */,
1A569CF00D7E2B82007C3983 /* runtime_array.h */,
1A569CF10D7E2B82007C3983 /* runtime_method.cpp */,
@@ -25869,6 +25871,8 @@
08C925180FCC7C4A00480DEC /* FilterEffect.h */,
2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */,
2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */,
+ 7262D757272A174100C56A09 /* FilterFunction.cpp */,
+ 7262D756272A174100C56A09 /* FilterFunction.h */,
49ECEB631499790D00CDD3A4 /* FilterOperation.cpp */,
49ECEB641499790D00CDD3A4 /* FilterOperation.h */,
49ECEB651499790D00CDD3A4 /* FilterOperations.cpp */,
Modified: trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm 2021-11-10 00:40:53 UTC (rev 285543)
@@ -72,11 +72,11 @@
bool FilterEffectRendererCoreImage::supportsCoreImageRendering(FilterEffect& effect)
{
// FIXME: change return value to true once they are implemented
- switch (effect.filterEffectClassType()) {
+ switch (effect.filterType()) {
case FilterEffect::Type::SourceGraphic:
return true;
- case FilterEffect::Type::ColorMatrix: {
+ case FilterEffect::Type::FEColorMatrix: {
switch (downcast<FEColorMatrix>(effect).type()) {
case FECOLORMATRIX_TYPE_UNKNOWN:
case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
@@ -88,26 +88,10 @@
}
}
- case FilterEffect::Type::ComponentTransfer:
+ case FilterEffect::Type::FEComponentTransfer:
return isNullOrLinearComponentTransferFunction(downcast<FEComponentTransfer>(effect));
- case FilterEffect::Type::Blend:
- case FilterEffect::Type::Composite:
- case FilterEffect::Type::ConvolveMatrix:
- case FilterEffect::Type::DiffuseLighting:
- case FilterEffect::Type::DisplacementMap:
- case FilterEffect::Type::DropShadow:
- case FilterEffect::Type::Flood:
- case FilterEffect::Type::GaussianBlur:
- case FilterEffect::Type::Image:
- case FilterEffect::Type::Lighting:
- case FilterEffect::Type::Merge:
- case FilterEffect::Type::Morphology:
- case FilterEffect::Type::Offset:
- case FilterEffect::Type::SpecularLighting:
- case FilterEffect::Type::Tile:
- case FilterEffect::Type::Turbulence:
- case FilterEffect::Type::SourceAlpha:
+ default:
return false;
}
return false;
@@ -137,32 +121,14 @@
if (effect.absolutePaintRect().isEmpty() || ImageBuffer::sizeNeedsClamping(effect.absolutePaintRect().size()))
return nullptr;
- switch (effect.filterEffectClassType()) {
+ switch (effect.filterType()) {
case FilterEffect::Type::SourceGraphic:
return imageForSourceGraphic(downcast<SourceGraphic>(effect));
- case FilterEffect::Type::ColorMatrix:
+ case FilterEffect::Type::FEColorMatrix:
return imageForFEColorMatrix(downcast<FEColorMatrix>(effect), inputImages);
- case FilterEffect::Type::ComponentTransfer:
+ case FilterEffect::Type::FEComponentTransfer:
return imageForFEComponentTransfer(downcast<FEComponentTransfer>(effect), inputImages);
- // FIXME: Implement those filters using CIFilter so that the function returns a valid CIImage
- case FilterEffect::Type::Blend:
- case FilterEffect::Type::Composite:
- case FilterEffect::Type::ConvolveMatrix:
- case FilterEffect::Type::DiffuseLighting:
- case FilterEffect::Type::DisplacementMap:
- case FilterEffect::Type::DropShadow:
- case FilterEffect::Type::Flood:
- case FilterEffect::Type::GaussianBlur:
- case FilterEffect::Type::Image:
- case FilterEffect::Type::Lighting:
- case FilterEffect::Type::Merge:
- case FilterEffect::Type::Morphology:
- case FilterEffect::Type::Offset:
- case FilterEffect::Type::SpecularLighting:
- case FilterEffect::Type::Tile:
- case FilterEffect::Type::Turbulence:
- case FilterEffect::Type::SourceAlpha:
default:
return nullptr;
}
Modified: trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -35,7 +35,7 @@
namespace WebCore {
FEBlend::FEBlend(Filter& filter, BlendMode mode)
- : FilterEffect(filter, Type::Blend)
+ : FilterEffect(filter, FilterEffect::Type::FEBlend)
, m_mode(mode)
{
}
Modified: trunk/Source/WebCore/platform/graphics/filters/FEBlend.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEBlend.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEBlend.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,8 +36,6 @@
bool setBlendMode(BlendMode);
private:
- const char* filterName() const final { return "FEBlend"; }
-
void platformApplySoftware() override;
void platformApplyGeneric(unsigned char* srcPixelArrayA, unsigned char* srcPixelArrayB, unsigned char* dstPixelArray,
unsigned colorArrayLength);
@@ -53,3 +51,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEBlend)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,7 +36,7 @@
namespace WebCore {
FEColorMatrix::FEColorMatrix(Filter& filter, ColorMatrixType type, Vector<float>&& values)
- : FilterEffect(filter, Type::ColorMatrix)
+ : FilterEffect(filter, FilterEffect::Type::FEColorMatrix)
, m_type(type)
, m_values(WTFMove(values))
{
Modified: trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -52,8 +52,6 @@
private:
FEColorMatrix(Filter&, ColorMatrixType, Vector<float>&&);
- const char* filterName() const final { return "FEColorMatrix"; }
-
void platformApplySoftware() override;
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -93,7 +91,4 @@
} // namespace WebCore
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEColorMatrix)
- static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ColorMatrix; }
-SPECIALIZE_TYPE_TRAITS_END()
-
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEColorMatrix)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,9 +33,8 @@
namespace WebCore {
-FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction,
- const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction)
- : FilterEffect(filter, Type::ComponentTransfer)
+FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction, const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction)
+ : FilterEffect(filter, FilterEffect::Type::FEComponentTransfer)
, m_redFunction(redFunction)
, m_greenFunction(greenFunction)
, m_blueFunction(blueFunction)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -65,8 +65,6 @@
FEComponentTransfer(Filter&, const ComponentTransferFunction& redFunc, const ComponentTransferFunction& greenFunc,
const ComponentTransferFunction& blueFunc, const ComponentTransferFunction& alphaFunc);
- const char* filterName() const final { return "FEComponentTransfer"; }
-
using LookupTable = std::array<uint8_t, 256>;
static void computeIdentityTable(LookupTable&, const ComponentTransferFunction&);
@@ -89,6 +87,4 @@
} // namespace WebCore
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEComponentTransfer)
- static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ComponentTransfer; }
-SPECIALIZE_TYPE_TRAITS_END()
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComponentTransfer)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,7 +33,7 @@
namespace WebCore {
FEComposite::FEComposite(Filter& filter, const CompositeOperationType& type, float k1, float k2, float k3, float k4)
- : FilterEffect(filter, Type::Composite)
+ : FilterEffect(filter, FilterEffect::Type::FEComposite)
, m_type(type)
, m_k1(k1)
, m_k2(k2)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEComposite.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEComposite.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComposite.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -64,8 +64,6 @@
private:
FEComposite(Filter&, const CompositeOperationType&, float, float, float, float);
- const char* filterName() const final { return "FEComposite"; }
-
void correctFilterResultIfNeeded() override;
void determineAbsolutePaintRect() override;
@@ -90,3 +88,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComposite)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,10 +32,8 @@
namespace WebCore {
-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)
- : FilterEffect(filter, Type::ConvolveMatrix)
+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)
+ : FilterEffect(filter, FilterEffect::Type::FEConvolveMatrix)
, m_kernelSize(kernelSize)
, m_divisor(divisor)
, m_bias(bias)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -80,8 +80,6 @@
FEConvolveMatrix(Filter&, const IntSize&, float, float,
const IntPoint&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&);
- const char* filterName() const final { return "FEConvolveMatrix"; }
-
void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
void platformApplySoftware() override;
@@ -115,3 +113,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEConvolveMatrix)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,7 @@
namespace WebCore {
FEDiffuseLighting::FEDiffuseLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float diffuseConstant, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource)
- : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::DiffuseLighting)
+ : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FEDiffuseLighting)
{
}
@@ -37,8 +37,6 @@
return adoptRef(*new FEDiffuseLighting(filter, lightingColor, surfaceScale, diffuseConstant, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource)));
}
-FEDiffuseLighting::~FEDiffuseLighting() = default;
-
bool FEDiffuseLighting::setDiffuseConstant(float diffuseConstant)
{
if (m_diffuseConstant == diffuseConstant)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -30,7 +30,6 @@
class FEDiffuseLighting : public FELighting {
public:
static Ref<FEDiffuseLighting> create(Filter&, const Color&, float, float, float, float, Ref<LightSource>&&);
- virtual ~FEDiffuseLighting();
float diffuseConstant() const { return m_diffuseConstant; }
bool setDiffuseConstant(float);
@@ -43,3 +42,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDiffuseLighting)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
namespace WebCore {
FEDisplacementMap::FEDisplacementMap(Filter& filter, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float scale)
- : FilterEffect(filter, Type::DisplacementMap)
+ : FilterEffect(filter, FilterEffect::Type::FEDisplacementMap)
, m_xChannelSelector(xChannelSelector)
, m_yChannelSelector(yChannelSelector)
, m_scale(scale)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -54,8 +54,6 @@
private:
FEDisplacementMap(Filter&, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float);
- const char* filterName() const final { return "FEDisplacementMap"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -72,3 +70,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDisplacementMap)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
namespace WebCore {
FEDropShadow::FEDropShadow(Filter& filter, float stdX, float stdY, float dx, float dy, const Color& shadowColor, float shadowOpacity)
- : FilterEffect(filter, Type::DropShadow)
+ : FilterEffect(filter, FilterEffect::Type::FEDropShadow)
, m_stdX(stdX)
, m_stdY(stdY)
, m_dx(dx)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -50,8 +50,6 @@
private:
FEDropShadow(Filter&, float, float, float, float, const Color&, float);
- const char* filterName() const final { return "FEDropShadow"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override;
@@ -70,3 +68,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDropShadow)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -31,7 +31,7 @@
namespace WebCore {
FEFlood::FEFlood(Filter& filter, const Color& floodColor, float floodOpacity)
- : FilterEffect(filter, Type::Flood)
+ : FilterEffect(filter, FilterEffect::Type::FEFlood)
, m_floodColor(floodColor)
, m_floodOpacity(floodOpacity)
{
Modified: trunk/Source/WebCore/platform/graphics/filters/FEFlood.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEFlood.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEFlood.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -47,8 +47,6 @@
private:
FEFlood(Filter&, const Color&, float);
- const char* filterName() const final { return "FEFlood"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -61,3 +59,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEFlood)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -80,7 +80,7 @@
}
FEGaussianBlur::FEGaussianBlur(Filter& filter, float x, float y, EdgeModeType edgeMode)
- : FilterEffect(filter, Type::GaussianBlur)
+ : FilterEffect(filter, FilterEffect::Type::FEGaussianBlur)
, m_stdX(x)
, m_stdY(y)
, m_edgeMode(edgeMode)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -47,8 +47,6 @@
private:
FEGaussianBlur(Filter&, float, float, EdgeModeType);
- const char* filterName() const final { return "FEGaussianBlur"; }
-
static const int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs
struct PlatformApplyParameters {
@@ -80,3 +78,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEGaussianBlur)
Modified: trunk/Source/WebCore/platform/graphics/filters/FELighting.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FELighting.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FELighting.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -130,8 +130,6 @@
FELighting(Filter&, LightingType, const Color&, float, float, float, float, float, float, Ref<LightSource>&&, Type);
- const char* filterName() const final { return "FELighting"; }
-
bool drawLighting(Uint8ClampedArray&, int, int);
void setPixel(int offset, const LightingData&, const LightSource::PaintingData&, int x, int y, float factorX, float factorY, IntSize normalVector);
Modified: trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -29,7 +29,7 @@
namespace WebCore {
FEMerge::FEMerge(Filter& filter)
- : FilterEffect(filter, Type::Merge)
+ : FilterEffect(filter, FilterEffect::Type::FEMerge)
{
}
Modified: trunk/Source/WebCore/platform/graphics/filters/FEMerge.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEMerge.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMerge.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,8 +33,6 @@
private:
FEMerge(Filter&);
- const char* filterName() const final { return "FEMerge"; }
-
void platformApplySoftware() override;
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -42,3 +40,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMerge)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,7 +36,7 @@
namespace WebCore {
FEMorphology::FEMorphology(Filter& filter, MorphologyOperatorType type, float radiusX, float radiusY)
- : FilterEffect(filter, Type::Morphology)
+ : FilterEffect(filter, FilterEffect::Type::FEMorphology)
, m_type(type)
, m_radiusX(radiusX)
, m_radiusY(radiusY)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -48,8 +48,6 @@
private:
FEMorphology(Filter&, MorphologyOperatorType, float radiusX, float radiusY);
- const char* filterName() const final { return "FEMorphology"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override;
@@ -86,3 +84,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMorphology)
Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -31,7 +31,7 @@
namespace WebCore {
FEOffset::FEOffset(Filter& filter, float dx, float dy)
- : FilterEffect(filter, Type::Offset)
+ : FilterEffect(filter, FilterEffect::Type::FEOffset)
, m_dx(dx)
, m_dy(dy)
{
Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -39,8 +39,6 @@
private:
FEOffset(Filter&, float dx, float dy);
- const char* filterName() const final { return "FEOffset"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override;
@@ -53,3 +51,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEOffset)
Modified: trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,7 @@
namespace WebCore {
FESpecularLighting::FESpecularLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float specularConstant, float specularExponent, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource)
- : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::SpecularLighting)
+ : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FESpecularLighting)
{
}
@@ -37,8 +37,6 @@
return adoptRef(*new FESpecularLighting(filter, lightingColor, surfaceScale, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource)));
}
-FESpecularLighting::~FESpecularLighting() = default;
-
bool FESpecularLighting::setSpecularConstant(float specularConstant)
{
if (m_specularConstant == specularConstant)
Modified: trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,6 @@
class FESpecularLighting : public FELighting {
public:
static Ref<FESpecularLighting> create(Filter&, const Color&, float, float, float, float, float, Ref<LightSource>&&);
- virtual ~FESpecularLighting();
float specularConstant() const { return m_specularConstant; }
bool setSpecularConstant(float);
@@ -44,3 +43,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FESpecularLighting)
Modified: trunk/Source/WebCore/platform/graphics/filters/FETile.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FETile.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETile.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
namespace WebCore {
FETile::FETile(Filter& filter)
- : FilterEffect(filter, Type::Tile)
+ : FilterEffect(filter, FilterEffect::Type::FETile)
{
}
@@ -58,7 +58,7 @@
FloatRect tileRect = in->maxEffectRect();
FloatPoint inMaxEffectLocation = tileRect.location();
FloatPoint maxEffectLocation = maxEffectRect().location();
- if (in->filterEffectType() == FilterEffectTypeSourceInput) {
+ if (in->filterType() == FilterEffect::Type::SourceGraphic || in->filterType() == FilterEffect::Type::SourceAlpha) {
Filter& filter = this->filter();
tileRect = filter.filterRegion();
tileRect.scale(filter.filterResolution().width(), filter.filterResolution().height());
Modified: trunk/Source/WebCore/platform/graphics/filters/FETile.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FETile.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETile.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,10 +33,6 @@
private:
FETile(Filter&);
- const char* filterName() const final { return "FETile"; }
-
- FilterEffectType filterEffectType() const override { return FilterEffectTypeTile; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -46,3 +42,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETile)
Modified: trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -49,7 +49,7 @@
static const int s_randR = 2836; // m % a
FETurbulence::FETurbulence(Filter& filter, TurbulenceType type, float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed, bool stitchTiles)
- : FilterEffect(filter, Type::Turbulence)
+ : FilterEffect(filter, FilterEffect::Type::FETurbulence)
, m_type(type)
, m_baseFrequencyX(baseFrequencyX)
, m_baseFrequencyY(baseFrequencyY)
Modified: trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -105,8 +105,6 @@
FETurbulence(Filter&, TurbulenceType, float, float, int, float, bool);
- const char* filterName() const final { return "FETurbulence"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -129,3 +127,4 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETurbulence)
Modified: trunk/Source/WebCore/platform/graphics/filters/Filter.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/Filter.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/Filter.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Dirk Schulze <[email protected]>
* Copyright (C) 2013 Google Inc. All rights reserved.
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -21,23 +22,17 @@
#pragma once
#include "AffineTransform.h"
+#include "FilterFunction.h"
#include "FloatRect.h"
#include "GraphicsTypes.h"
#include "ImageBuffer.h"
-#include <wtf/RefCounted.h>
namespace WebCore {
class FilterEffect;
-class Filter : public RefCounted<Filter> {
+class Filter : public FilterFunction {
public:
- Filter(const AffineTransform& absoluteTransform, float filterScale = 1)
- : m_absoluteTransform(absoluteTransform)
- , m_filterScale(filterScale)
- { }
- virtual ~Filter() = default;
-
void setSourceImage(RefPtr<ImageBuffer>&& sourceImage) { m_sourceImage = WTFMove(sourceImage); }
ImageBuffer* sourceImage() { return m_sourceImage.get(); }
@@ -62,11 +57,19 @@
virtual FloatRect filterRegionInUserSpace() const = 0;
protected:
- explicit Filter(const FloatSize& filterResolution)
- : m_filterResolution(filterResolution)
+ Filter(Filter::Type filterType, const AffineTransform& absoluteTransform, float filterScale = 1)
+ : FilterFunction(filterType)
+ , m_absoluteTransform(absoluteTransform)
+ , m_filterScale(filterScale)
{
}
+ Filter(Filter::Type filterType, const FloatSize& filterResolution)
+ : FilterFunction(filterType)
+ , m_filterResolution(filterResolution)
+ {
+ }
+
private:
RefPtr<ImageBuffer> m_sourceImage;
FloatSize m_filterResolution;
Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -45,14 +45,12 @@
namespace WebCore {
-FilterEffect::FilterEffect(Filter& filter, Type type)
- : m_filter(filter)
- , m_filterEffectClassType(type)
+FilterEffect::FilterEffect(Filter& filter, FilterEffect::Type type)
+ : FilterFunction(type)
+ , m_filter(filter)
{
}
-FilterEffect::~FilterEffect() = default;
-
void FilterEffect::determineAbsolutePaintRect()
{
m_absolutePaintRect = IntRect();
@@ -110,7 +108,7 @@
subregion = m_filter.filterRegionInUserSpace();
// After calling determineFilterPrimitiveSubregion on the target effect, reset the subregion again for <feTile>.
- if (filterEffectType() == FilterEffectTypeTile)
+ if (filterType() == FilterEffect::Type::FETile)
subregion = m_filter.filterRegionInUserSpace();
auto boundaries = effectBoundaries();
@@ -572,7 +570,7 @@
ImageBuffer* FilterEffect::createImageBufferResult()
{
- LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName(), this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height());
+ LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName().characters8(), this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height());
// Only one result type is allowed.
ASSERT(!hasResult());
@@ -586,7 +584,7 @@
std::optional<PixelBuffer>& FilterEffect::createUnmultipliedImageResult()
{
- LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName(), this);
+ LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName().characters8(), this);
// Only one result type is allowed.
ASSERT(!hasResult());
@@ -605,7 +603,7 @@
std::optional<PixelBuffer>& FilterEffect::createPremultipliedImageResult()
{
- LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName(), this);
+ LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName().characters8(), this);
// Only one result type is allowed.
ASSERT(!hasResult());
Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -24,6 +24,7 @@
#include "AlphaPremultiplication.h"
#include "DestinationColorSpace.h"
+#include "FilterFunction.h"
#include "FloatRect.h"
#include "IntRect.h"
#include "IntRectExtent.h"
@@ -30,7 +31,6 @@
#include "PixelBuffer.h"
#include <_javascript_Core/Forward.h>
#include <wtf/MathExtras.h>
-#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
@@ -46,39 +46,8 @@
typedef Vector<RefPtr<FilterEffect>> FilterEffectVector;
-enum FilterEffectType {
- FilterEffectTypeUnknown,
- FilterEffectTypeImage,
- FilterEffectTypeTile,
- FilterEffectTypeSourceInput
-};
-
-class FilterEffect : public RefCounted<FilterEffect> {
+class FilterEffect : public FilterFunction {
public:
- enum class Type : uint8_t {
- Blend,
- ColorMatrix,
- ComponentTransfer,
- Composite,
- ConvolveMatrix,
- DiffuseLighting,
- DisplacementMap,
- DropShadow,
- Flood,
- GaussianBlur,
- Image,
- Lighting,
- Merge,
- Morphology,
- Offset,
- SpecularLighting,
- Tile,
- Turbulence,
- SourceAlpha,
- SourceGraphic
- };
- virtual ~FilterEffect();
-
void clearResult();
void clearResultsRecursive();
@@ -125,8 +94,6 @@
virtual void determineAbsolutePaintRect();
- virtual FilterEffectType filterEffectType() const { return FilterEffectTypeUnknown; }
-
virtual IntOutsets outsets() const { return IntOutsets(); }
enum class RepresentationType { TestOutput, Debugging };
@@ -156,8 +123,6 @@
FloatPoint mapPointFromUserSpaceToBuffer(FloatPoint) const;
- Type filterEffectClassType() const { return m_filterEffectClassType; }
-
Filter& filter() { return m_filter; }
const Filter& filter() const { return m_filter; }
@@ -183,8 +148,6 @@
protected:
FilterEffect(Filter&, Type);
- virtual const char* filterName() const = 0;
-
ImageBuffer* createImageBufferResult();
std::optional<PixelBuffer>& createUnmultipliedImageResult();
std::optional<PixelBuffer>& createPremultipliedImageResult();
@@ -248,8 +211,6 @@
DestinationColorSpace m_operatingColorSpace { DestinationColorSpace::SRGB() };
#endif
DestinationColorSpace m_resultColorSpace { DestinationColorSpace::SRGB() };
-
- const Type m_filterEffectClassType;
};
WEBCORE_EXPORT WTF::TextStream& operator<<(WTF::TextStream&, const FilterEffect&);
@@ -256,3 +217,11 @@
} // namespace WebCore
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FilterEffect)
+ static bool isType(const WebCore::FilterFunction& function) { return function.isFilterEffect(); }
+SPECIALIZE_TYPE_TRAITS_END()
+
+#define SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(ClassName) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ClassName) \
+ static bool isType(const WebCore::FilterEffect& effect) { return effect.filterType() == WebCore::FilterEffect::Type::ClassName; } \
+SPECIALIZE_TYPE_TRAITS_END()
Added: trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp (0 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp (rev 0)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "FilterFunction.h"
+
+#include <wtf/SortedArrayMap.h>
+
+namespace WebCore {
+
+FilterFunction::FilterFunction(Type filterType)
+ : m_filterType(filterType)
+{
+}
+
+AtomString FilterFunction::filterName(Type filterType)
+{
+ static constexpr std::pair<FilterFunction::Type, ASCIILiteral> namesArray[] = {
+ { FilterFunction::Type::CSSFilter, "CSSFilter"_s },
+ { FilterFunction::Type::SVGFilter, "SVGFilter"_s },
+
+ { FilterFunction::Type::FEBlend, "FEBlend"_s },
+ { FilterFunction::Type::FEColorMatrix, "FEColorMatrix"_s },
+ { FilterFunction::Type::FEComponentTransfer, "FEComponentTransfer"_s },
+ { FilterFunction::Type::FEComposite, "FEComposite"_s },
+ { FilterFunction::Type::FEConvolveMatrix, "FEConvolveMatrix"_s },
+ { FilterFunction::Type::FEDiffuseLighting, "FEDiffuseLighting"_s },
+ { FilterFunction::Type::FEDisplacementMap, "FEDisplacementMap"_s },
+ { FilterFunction::Type::FEDropShadow, "FEDropShadow"_s },
+ { FilterFunction::Type::FEFlood, "FEFlood"_s },
+ { FilterFunction::Type::FEGaussianBlur, "FEGaussianBlur"_s },
+ { FilterFunction::Type::FEImage, "FEImage"_s },
+ { FilterFunction::Type::FEMerge, "FEMerge"_s },
+ { FilterFunction::Type::FEMorphology, "FEMorphology"_s },
+ { FilterFunction::Type::FEOffset, "FEOffset"_s },
+ { FilterFunction::Type::FESpecularLighting, "FESpecularLighting"_s },
+ { FilterFunction::Type::FETile, "FETile"_s },
+ { FilterFunction::Type::FETurbulence, "FETurbulence"_s },
+
+ { FilterFunction::Type::SourceAlpha, "SourceAlpha"_s },
+ { FilterFunction::Type::SourceGraphic, "SourceGraphic"_s }
+ };
+
+ static constexpr SortedArrayMap namesMap { namesArray };
+
+ ASSERT(namesMap.tryGet(filterType));
+ return namesMap.get(filterType, ""_s);
+}
+
+} // namespace WebCore
Added: trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h (0 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/RefCounted.h>
+#include <wtf/text/AtomString.h>
+
+namespace WTF {
+class TextStream;
+}
+
+namespace WebCore {
+
+class FilterFunction : public RefCounted<FilterFunction> {
+public:
+ enum class Type : uint8_t {
+ CSSFilter,
+ SVGFilter,
+
+ FEFirst,
+
+ FEBlend = FEFirst,
+ FEColorMatrix,
+ FEComponentTransfer,
+ FEComposite,
+ FEConvolveMatrix,
+ FEDiffuseLighting,
+ FEDisplacementMap,
+ FEDropShadow,
+ FEFlood,
+ FEGaussianBlur,
+ FEImage,
+ FEMerge,
+ FEMorphology,
+ FEOffset,
+ FESpecularLighting,
+ FETile,
+ FETurbulence,
+ SourceAlpha,
+ SourceGraphic,
+
+ FELast = SourceGraphic
+ };
+
+ FilterFunction(Type);
+ virtual ~FilterFunction() = default;
+
+ Type filterType() const { return m_filterType; }
+
+ bool isCSSFilter() const { return m_filterType == Type::CSSFilter; }
+ bool isSVGFilter() const { return m_filterType == Type::SVGFilter; }
+ bool isFilter() const { return m_filterType == Type::CSSFilter || m_filterType == Type::SVGFilter; }
+ bool isFilterEffect() const { return m_filterType >= Type::FEFirst && m_filterType <= Type::FELast; }
+
+ static AtomString filterName(Type);
+ static AtomString sourceAlphaName() { return filterName(Type::SourceAlpha); }
+ static AtomString sourceGraphicName() { return filterName(Type::SourceGraphic); }
+ AtomString filterName() const { return filterName(m_filterType); }
+
+private:
+ Type m_filterType;
+};
+
+} // namespace WebCore
+
+namespace WTF {
+
+template<> struct EnumTraits<WebCore::FilterFunction::Type> {
+ using values = EnumValues<
+ WebCore::FilterFunction::Type,
+
+ WebCore::FilterFunction::Type::CSSFilter,
+ WebCore::FilterFunction::Type::SVGFilter,
+
+ WebCore::FilterFunction::Type::FEBlend,
+ WebCore::FilterFunction::Type::FEColorMatrix,
+ WebCore::FilterFunction::Type::FEComponentTransfer,
+ WebCore::FilterFunction::Type::FEComposite,
+ WebCore::FilterFunction::Type::FEConvolveMatrix,
+ WebCore::FilterFunction::Type::FEDiffuseLighting,
+ WebCore::FilterFunction::Type::FEDisplacementMap,
+ WebCore::FilterFunction::Type::FEDropShadow,
+ WebCore::FilterFunction::Type::FEFlood,
+ WebCore::FilterFunction::Type::FEGaussianBlur,
+ WebCore::FilterFunction::Type::FEImage,
+ WebCore::FilterFunction::Type::FEMerge,
+ WebCore::FilterFunction::Type::FEMorphology,
+ WebCore::FilterFunction::Type::FEOffset,
+ WebCore::FilterFunction::Type::FESpecularLighting,
+ WebCore::FilterFunction::Type::FETile,
+ WebCore::FilterFunction::Type::FETurbulence,
+ WebCore::FilterFunction::Type::SourceAlpha,
+ WebCore::FilterFunction::Type::SourceGraphic
+ >;
+};
+
+} // namespace WTF
Modified: trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -23,10 +23,7 @@
#include "Color.h"
#include "Filter.h"
#include "GraphicsContext.h"
-#include <wtf/NeverDestroyed.h>
-#include <wtf/StdLibExtras.h>
#include <wtf/text/TextStream.h>
-#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -35,10 +32,11 @@
return adoptRef(*new SourceAlpha(sourceEffect));
}
-const AtomString& SourceAlpha::effectName()
+SourceAlpha::SourceAlpha(FilterEffect& sourceEffect)
+ : FilterEffect(sourceEffect.filter(), FilterEffect::Type::SourceAlpha)
{
- static MainThreadNeverDestroyed<const AtomString> s_effectName("SourceAlpha", AtomString::ConstructFromLiteral);
- return s_effectName;
+ setOperatingColorSpace(sourceEffect.operatingColorSpace());
+ inputEffects().append(&sourceEffect);
}
void SourceAlpha::determineAbsolutePaintRect()
@@ -69,11 +67,4 @@
return ts;
}
-SourceAlpha::SourceAlpha(FilterEffect& sourceEffect)
- : FilterEffect(sourceEffect.filter(), Type::SourceAlpha)
-{
- setOperatingColorSpace(sourceEffect.operatingColorSpace());
- inputEffects().append(&sourceEffect);
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -17,8 +17,7 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef SourceAlpha_h
-#define SourceAlpha_h
+#pragma once
#include "FilterEffect.h"
@@ -28,14 +27,11 @@
public:
static Ref<SourceAlpha> create(FilterEffect&);
- static const AtomString& effectName();
+ static AtomString effectName() { return FilterEffect::sourceAlphaName(); }
private:
explicit SourceAlpha(FilterEffect&);
- FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }
- const char* filterName() const final { return "SourceAlpha"; }
-
void platformApplySoftware() override;
void determineAbsolutePaintRect() override;
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -43,4 +39,4 @@
} //namespace WebCore
-#endif // SourceAlpha_h
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceAlpha)
Modified: trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -22,10 +22,7 @@
#include "Filter.h"
#include "GraphicsContext.h"
-#include <wtf/NeverDestroyed.h>
-#include <wtf/StdLibExtras.h>
#include <wtf/text/TextStream.h>
-#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -34,12 +31,6 @@
return adoptRef(*new SourceGraphic(filter));
}
-const AtomString& SourceGraphic::effectName()
-{
- static MainThreadNeverDestroyed<const AtomString> s_effectName("SourceGraphic", AtomString::ConstructFromLiteral);
- return s_effectName;
-}
-
void SourceGraphic::determineAbsolutePaintRect()
{
Filter& filter = this->filter();
Modified: trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h (285542 => 285543)
--- trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -18,11 +18,9 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef SourceGraphic_h
-#define SourceGraphic_h
+#pragma once
#include "FilterEffect.h"
-#include "Filter.h"
namespace WebCore {
@@ -30,29 +28,20 @@
public:
static Ref<SourceGraphic> create(Filter&);
- static const AtomString& effectName();
+ static AtomString effectName() { return FilterEffect::sourceGraphicName(); }
private:
SourceGraphic(Filter& filter)
- : FilterEffect(filter, Type::SourceGraphic)
+ : FilterEffect(filter, FilterEffect::Type::SourceGraphic)
{
setOperatingColorSpace(DestinationColorSpace::SRGB());
}
- const char* filterName() const final { return "SourceGraphic"; }
-
void determineAbsolutePaintRect() override;
void platformApplySoftware() override;
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
-
- FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }
};
} //namespace WebCore
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SourceGraphic)
- static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::SourceGraphic; }
-SPECIALIZE_TYPE_TRAITS_END()
-
-
-#endif // SourceGraphic_h
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceGraphic)
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp (285542 => 285543)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,6 +33,7 @@
#include "AudioStreamDescription.h"
#include "CAAudioStreamDescription.h"
#include "LibWebRTCAudioFormat.h"
+#include "LibWebRTCAudioModule.h"
#include "Logging.h"
#include <pal/avfoundation/MediaTimeAVFoundation.h>
#include <wtf/FastMalloc.h>
Modified: trunk/Source/WebCore/rendering/CSSFilter.cpp (285542 => 285543)
--- trunk/Source/WebCore/rendering/CSSFilter.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/rendering/CSSFilter.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -60,7 +60,7 @@
}
CSSFilter::CSSFilter()
- : Filter(FloatSize { 1, 1 })
+ : Filter(Filter::Type::CSSFilter, FloatSize { 1, 1 })
, m_sourceGraphic(SourceGraphic::create(*this))
{
}
Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp (285542 => 285543)
--- trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -42,7 +42,7 @@
}
FEImage::FEImage(Filter& filter, SourceImage&& sourceImage, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue& preserveAspectRatio)
- : FilterEffect(filter, Type::Image)
+ : FilterEffect(filter, Type::FEImage)
, m_sourceImage(WTFMove(sourceImage))
, m_sourceImageRect(sourceImageRect)
, m_preserveAspectRatio(preserveAspectRatio)
Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h (285542 => 285543)
--- trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -24,7 +24,6 @@
#pragma once
#include "FilterEffect.h"
-#include "RenderingResourceIdentifier.h"
#include "SVGPreserveAspectRatioValue.h"
namespace WebCore {
@@ -34,10 +33,7 @@
class FEImage final : public FilterEffect {
public:
- using SourceImage = std::variant<
- Ref<Image>,
- Ref<ImageBuffer>
- >;
+ using SourceImage = std::variant<Ref<Image>, Ref<ImageBuffer>>;
static Ref<FEImage> create(Filter&, Ref<Image>&&, const SVGPreserveAspectRatioValue&);
static Ref<FEImage> create(Filter&, SourceImage&&, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue&);
@@ -48,8 +44,6 @@
private:
FEImage(Filter&, SourceImage&&, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue&);
- const char* filterName() const final { return "FEImage"; }
-
void platformApplySoftware() final;
void determineAbsolutePaintRect() final;
WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const final;
@@ -60,3 +54,5 @@
};
} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEImage)
Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp (285542 => 285543)
--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -25,7 +25,7 @@
namespace WebCore {
SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode)
- : Filter(absoluteTransform)
+ : Filter(Filter::Type::CSSFilter, absoluteTransform)
, m_absoluteSourceDrawingRegion(absoluteSourceDrawingRegion)
, m_targetBoundingBox(targetBoundingBox)
, m_filterRegion(filterRegion)
Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h (285542 => 285543)
--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h 2021-11-10 00:40:53 UTC (rev 285543)
@@ -57,4 +57,5 @@
SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SVGFilter)
static bool isType(const WebCore::Filter& filter) { return filter.isSVGFilter(); }
+ static bool isType(const WebCore::FilterFunction& function) { return function.isSVGFilter(); }
SPECIALIZE_TYPE_TRAITS_END()
Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp (285542 => 285543)
--- trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp 2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp 2021-11-10 00:40:53 UTC (rev 285543)
@@ -21,6 +21,7 @@
#include "SVGFilterBuilder.h"
#include "FilterEffect.h"
+#include "ImageBuffer.h"
#include "SourceAlpha.h"
#include "SourceGraphic.h"
#include <wtf/text/StringConcatenateNumbers.h>