summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/graphics
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-09-29 17:32:26 +0100
committerSteve Block <steveblock@google.com>2010-09-29 17:35:08 +0100
commit68513a70bcd92384395513322f1b801e7bf9c729 (patch)
tree161b50f75a5921d61731bb25e730005994fcec85 /WebCore/svg/graphics
parentfd5c6425ce58eb75211be7718d5dee960842a37e (diff)
downloadexternal_webkit-68513a70bcd92384395513322f1b801e7bf9c729.zip
external_webkit-68513a70bcd92384395513322f1b801e7bf9c729.tar.gz
external_webkit-68513a70bcd92384395513322f1b801e7bf9c729.tar.bz2
Merge WebKit at r67908: Initial merge by Git
Change-Id: I43a553e7b3299b28cb6ee8aa035ed70fe342b972
Diffstat (limited to 'WebCore/svg/graphics')
-rw-r--r--WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp20
-rw-r--r--WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h6
-rw-r--r--WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp10
-rw-r--r--WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h4
-rw-r--r--WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp31
-rw-r--r--WebCore/svg/graphics/filters/SVGFEDisplacementMap.h9
-rw-r--r--WebCore/svg/graphics/filters/SVGFEFlood.cpp2
-rw-r--r--WebCore/svg/graphics/filters/SVGFEImage.cpp2
-rw-r--r--WebCore/svg/graphics/filters/SVGFELighting.cpp12
-rw-r--r--WebCore/svg/graphics/filters/SVGFELighting.h5
-rw-r--r--WebCore/svg/graphics/filters/SVGFEMerge.cpp57
-rw-r--r--WebCore/svg/graphics/filters/SVGFEMerge.h10
-rw-r--r--WebCore/svg/graphics/filters/SVGFEMorphology.cpp24
-rw-r--r--WebCore/svg/graphics/filters/SVGFEMorphology.h6
-rw-r--r--WebCore/svg/graphics/filters/SVGFEOffset.cpp26
-rw-r--r--WebCore/svg/graphics/filters/SVGFEOffset.h6
-rw-r--r--WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp10
-rw-r--r--WebCore/svg/graphics/filters/SVGFESpecularLighting.h5
-rw-r--r--WebCore/svg/graphics/filters/SVGFETile.cpp35
-rw-r--r--WebCore/svg/graphics/filters/SVGFETile.h9
-rw-r--r--WebCore/svg/graphics/filters/SVGFilter.cpp40
-rw-r--r--WebCore/svg/graphics/filters/SVGFilter.h9
22 files changed, 150 insertions, 188 deletions
diff --git a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp
index c1a1166..2dbc7ab 100644
--- a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp
@@ -33,11 +33,10 @@
namespace WebCore {
-FEConvolveMatrix::FEConvolveMatrix(FilterEffect* in, const IntSize& kernelSize,
+FEConvolveMatrix::FEConvolveMatrix(const IntSize& kernelSize,
float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode,
const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix)
: FilterEffect()
- , m_in(in)
, m_kernelSize(kernelSize)
, m_divisor(divisor)
, m_bias(bias)
@@ -49,11 +48,11 @@ FEConvolveMatrix::FEConvolveMatrix(FilterEffect* in, const IntSize& kernelSize,
{
}
-PassRefPtr<FEConvolveMatrix> FEConvolveMatrix::create(FilterEffect* in, const IntSize& kernelSize,
+PassRefPtr<FEConvolveMatrix> FEConvolveMatrix::create(const IntSize& kernelSize,
float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode,
const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix)
{
- return adoptRef(new FEConvolveMatrix(in, kernelSize, divisor, bias, targetOffset, edgeMode, kernelUnitLength,
+ return adoptRef(new FEConvolveMatrix(kernelSize, divisor, bias, targetOffset, edgeMode, kernelUnitLength,
preserveAlpha, kernelMatrix));
}
@@ -374,21 +373,22 @@ ALWAYS_INLINE void FEConvolveMatrix::setOuterPixels(PaintingData& paintingData,
void FEConvolveMatrix::apply(Filter* filter)
{
- m_in->apply(filter);
- if (!m_in->resultImage())
+ FilterEffect* in = inputEffect(0);
+ in->apply(filter);
+ if (!in->resultImage())
return;
if (!getEffectContext())
return;
IntRect imageRect(IntPoint(), resultImage()->size());
- IntRect effectDrawingRect = calculateDrawingIntRect(m_in->subRegion());
+ IntRect effectDrawingRect = calculateDrawingIntRect(in->filterPrimitiveSubregion());
RefPtr<CanvasPixelArray> srcPixelArray;
if (m_preserveAlpha)
- srcPixelArray = m_in->resultImage()->getUnmultipliedImageData(effectDrawingRect)->data();
+ srcPixelArray = in->resultImage()->getUnmultipliedImageData(effectDrawingRect)->data();
else
- srcPixelArray = m_in->resultImage()->getPremultipliedImageData(effectDrawingRect)->data();
+ srcPixelArray = in->resultImage()->getPremultipliedImageData(effectDrawingRect)->data();
RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
@@ -463,7 +463,7 @@ TextStream& FEConvolveMatrix::externalRepresentation(TextStream& ts, int indent)
<< "edgeMode=\"" << m_edgeMode << "\" "
<< "kernelUnitLength=\"" << m_kernelUnitLength << "\" "
<< "preserveAlpha=\"" << m_preserveAlpha << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
index 662d097..736933c 100644
--- a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
+++ b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
@@ -44,7 +44,7 @@ class CanvasPixelArray;
class FEConvolveMatrix : public FilterEffect {
public:
- static PassRefPtr<FEConvolveMatrix> create(FilterEffect*, const IntSize&,
+ static PassRefPtr<FEConvolveMatrix> create(const IntSize&,
float, float, const IntPoint&, EdgeModeType, const FloatPoint&,
bool, const Vector<float>&);
@@ -72,13 +72,12 @@ public:
bool preserveAlpha() const;
void setPreserveAlpha(bool);
- virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get()); }
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEConvolveMatrix(FilterEffect*, const IntSize&, float, float,
+ FEConvolveMatrix(const IntSize&, float, float,
const IntPoint&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&);
struct PaintingData {
@@ -101,7 +100,6 @@ private:
ALWAYS_INLINE void setInteriorPixels(PaintingData& paintingData, int clipRight, int clipBottom);
ALWAYS_INLINE void setOuterPixels(PaintingData& paintingData, int x1, int y1, int x2, int y2);
- RefPtr<FilterEffect> m_in;
IntSize m_kernelSize;
float m_divisor;
float m_bias;
diff --git a/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp b/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp
index 3a008fa..b439c46 100644
--- a/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp
@@ -29,17 +29,17 @@
namespace WebCore {
-FEDiffuseLighting::FEDiffuseLighting(FilterEffect* in, const Color& lightingColor, float surfaceScale,
+FEDiffuseLighting::FEDiffuseLighting(const Color& lightingColor, float surfaceScale,
float diffuseConstant, float kernelUnitLengthX, float kernelUnitLengthY, PassRefPtr<LightSource> lightSource)
- : FELighting(DiffuseLighting, in, lightingColor, surfaceScale, diffuseConstant, 0.0f, 0.0f, kernelUnitLengthX, kernelUnitLengthY, lightSource)
+ : FELighting(DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, lightSource)
{
}
-PassRefPtr<FEDiffuseLighting> FEDiffuseLighting::create(FilterEffect* in , const Color& lightingColor,
+PassRefPtr<FEDiffuseLighting> FEDiffuseLighting::create(const Color& lightingColor,
float surfaceScale, float diffuseConstant, float kernelUnitLengthX,
float kernelUnitLengthY, PassRefPtr<LightSource> lightSource)
{
- return adoptRef(new FEDiffuseLighting(in, lightingColor, surfaceScale, diffuseConstant, kernelUnitLengthX, kernelUnitLengthY, lightSource));
+ return adoptRef(new FEDiffuseLighting(lightingColor, surfaceScale, diffuseConstant, kernelUnitLengthX, kernelUnitLengthY, lightSource));
}
FEDiffuseLighting::~FEDiffuseLighting()
@@ -118,7 +118,7 @@ TextStream& FEDiffuseLighting::externalRepresentation(TextStream& ts, int indent
ts << " surfaceScale=\"" << m_surfaceScale << "\" "
<< "diffuseConstant=\"" << m_diffuseConstant << "\" "
<< "kernelUnitLength=\"" << m_kernelUnitLengthX << ", " << m_kernelUnitLengthY << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h b/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h
index ee4d5b1..0cdeae3 100644
--- a/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h
+++ b/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h
@@ -31,7 +31,7 @@ class LightSource;
class FEDiffuseLighting : public FELighting {
public:
- static PassRefPtr<FEDiffuseLighting> create(FilterEffect*, const Color&, float, float,
+ static PassRefPtr<FEDiffuseLighting> create(const Color&, float, float,
float, float, PassRefPtr<LightSource>);
virtual ~FEDiffuseLighting();
@@ -57,7 +57,7 @@ public:
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEDiffuseLighting(FilterEffect*, const Color&, float, float,
+ FEDiffuseLighting(const Color&, float, float,
float, float, PassRefPtr<LightSource>);
};
diff --git a/WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp b/WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp
index 3305f27..9d9857e 100644
--- a/WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp
@@ -33,21 +33,18 @@
namespace WebCore {
-FEDisplacementMap::FEDisplacementMap(FilterEffect* in, FilterEffect* in2, ChannelSelectorType xChannelSelector,
- ChannelSelectorType yChannelSelector, const float& scale)
+FEDisplacementMap::FEDisplacementMap(ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float scale)
: FilterEffect()
- , m_in(in)
- , m_in2(in2)
, m_xChannelSelector(xChannelSelector)
, m_yChannelSelector(yChannelSelector)
, m_scale(scale)
{
}
-PassRefPtr<FEDisplacementMap> FEDisplacementMap::create(FilterEffect* in, FilterEffect* in2,
- ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, const float& scale)
+PassRefPtr<FEDisplacementMap> FEDisplacementMap::create(ChannelSelectorType xChannelSelector,
+ ChannelSelectorType yChannelSelector, float scale)
{
- return adoptRef(new FEDisplacementMap(in, in2, xChannelSelector, yChannelSelector, scale));
+ return adoptRef(new FEDisplacementMap(xChannelSelector, yChannelSelector, scale));
}
ChannelSelectorType FEDisplacementMap::xChannelSelector() const
@@ -82,9 +79,11 @@ void FEDisplacementMap::setScale(float scale)
void FEDisplacementMap::apply(Filter* filter)
{
- m_in->apply(filter);
- m_in2->apply(filter);
- if (!m_in->resultImage() || !m_in2->resultImage())
+ FilterEffect* in = inputEffect(0);
+ FilterEffect* in2 = inputEffect(1);
+ in->apply(filter);
+ in2->apply(filter);
+ if (!in->resultImage() || !in2->resultImage())
return;
if (m_xChannelSelector == CHANNEL_UNKNOWN || m_yChannelSelector == CHANNEL_UNKNOWN)
@@ -93,11 +92,11 @@ void FEDisplacementMap::apply(Filter* filter)
if (!getEffectContext())
return;
- IntRect effectADrawingRect = calculateDrawingIntRect(m_in->scaledSubRegion());
- RefPtr<CanvasPixelArray> srcPixelArrayA(m_in->resultImage()->getPremultipliedImageData(effectADrawingRect)->data());
+ IntRect effectADrawingRect = calculateDrawingIntRect(in->repaintRectInLocalCoordinates());
+ RefPtr<CanvasPixelArray> srcPixelArrayA(in->resultImage()->getPremultipliedImageData(effectADrawingRect)->data());
- IntRect effectBDrawingRect = calculateDrawingIntRect(m_in2->scaledSubRegion());
- RefPtr<CanvasPixelArray> srcPixelArrayB(m_in2->resultImage()->getUnmultipliedImageData(effectBDrawingRect)->data());
+ IntRect effectBDrawingRect = calculateDrawingIntRect(in2->repaintRectInLocalCoordinates());
+ RefPtr<CanvasPixelArray> srcPixelArrayB(in2->resultImage()->getUnmultipliedImageData(effectBDrawingRect)->data());
IntRect imageRect(IntPoint(), resultImage()->size());
RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
@@ -163,8 +162,8 @@ TextStream& FEDisplacementMap::externalRepresentation(TextStream& ts, int indent
ts << " scale=\"" << m_scale << "\" "
<< "xChannelSelector=\"" << m_xChannelSelector << "\" "
<< "yChannelSelector=\"" << m_yChannelSelector << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
- m_in2->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
+ inputEffect(1)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEDisplacementMap.h b/WebCore/svg/graphics/filters/SVGFEDisplacementMap.h
index 7bb9d19..9e17da4 100644
--- a/WebCore/svg/graphics/filters/SVGFEDisplacementMap.h
+++ b/WebCore/svg/graphics/filters/SVGFEDisplacementMap.h
@@ -39,8 +39,7 @@ namespace WebCore {
class FEDisplacementMap : public FilterEffect {
public:
- static PassRefPtr<FEDisplacementMap> create(FilterEffect*, FilterEffect*, ChannelSelectorType,
- ChannelSelectorType, const float&);
+ static PassRefPtr<FEDisplacementMap> create(ChannelSelectorType, ChannelSelectorType, float);
ChannelSelectorType xChannelSelector() const;
void setXChannelSelector(const ChannelSelectorType);
@@ -51,17 +50,13 @@ namespace WebCore {
float scale() const;
void setScale(float scale);
- virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get(), m_in2.get()); }
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEDisplacementMap(FilterEffect*, FilterEffect*, ChannelSelectorType,
- ChannelSelectorType, const float&);
+ FEDisplacementMap(ChannelSelectorType, ChannelSelectorType, float);
- RefPtr<FilterEffect> m_in;
- RefPtr<FilterEffect> m_in2;
ChannelSelectorType m_xChannelSelector;
ChannelSelectorType m_yChannelSelector;
float m_scale;
diff --git a/WebCore/svg/graphics/filters/SVGFEFlood.cpp b/WebCore/svg/graphics/filters/SVGFEFlood.cpp
index 5286d80..a2b2cd2 100644
--- a/WebCore/svg/graphics/filters/SVGFEFlood.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEFlood.cpp
@@ -70,7 +70,7 @@ void FEFlood::apply(Filter*)
return;
Color color = colorWithOverrideAlpha(floodColor().rgb(), floodOpacity());
- filterContext->fillRect(FloatRect(FloatPoint(), scaledSubRegion().size()), color, DeviceColorSpace);
+ filterContext->fillRect(FloatRect(FloatPoint(), repaintRectInLocalCoordinates().size()), color, DeviceColorSpace);
}
void FEFlood::dump()
diff --git a/WebCore/svg/graphics/filters/SVGFEImage.cpp b/WebCore/svg/graphics/filters/SVGFEImage.cpp
index b21ceae..a3ac882 100644
--- a/WebCore/svg/graphics/filters/SVGFEImage.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEImage.cpp
@@ -55,7 +55,7 @@ void FEImage::apply(Filter*)
return;
FloatRect srcRect(FloatPoint(), m_image->size());
- FloatRect destRect(FloatPoint(), subRegion().size());
+ FloatRect destRect(FloatPoint(), filterPrimitiveSubregion().size());
m_preserveAspectRatio.transformRect(destRect, srcRect);
diff --git a/WebCore/svg/graphics/filters/SVGFELighting.cpp b/WebCore/svg/graphics/filters/SVGFELighting.cpp
index 7c3c81c..dc82840 100644
--- a/WebCore/svg/graphics/filters/SVGFELighting.cpp
+++ b/WebCore/svg/graphics/filters/SVGFELighting.cpp
@@ -35,12 +35,11 @@
namespace WebCore {
-FELighting::FELighting(LightingType lightingType, FilterEffect* in, const Color& lightingColor, float surfaceScale,
+FELighting::FELighting(LightingType lightingType, const Color& lightingColor, float surfaceScale,
float diffuseConstant, float specularConstant, float specularExponent,
float kernelUnitLengthX, float kernelUnitLengthY, PassRefPtr<LightSource> lightSource)
: FilterEffect()
, m_lightingType(lightingType)
- , m_in(in)
, m_lightSource(lightSource)
, m_lightingColor(lightingColor)
, m_surfaceScale(surfaceScale)
@@ -243,8 +242,9 @@ bool FELighting::drawLighting(CanvasPixelArray* pixels, int width, int height)
void FELighting::apply(Filter* filter)
{
- m_in->apply(filter);
- if (!m_in->resultImage())
+ FilterEffect* in = inputEffect(0);
+ in->apply(filter);
+ if (!in->resultImage())
return;
if (!getEffectContext())
@@ -252,8 +252,8 @@ void FELighting::apply(Filter* filter)
setIsAlphaImage(false);
- IntRect effectDrawingRect = calculateDrawingIntRect(m_in->scaledSubRegion());
- RefPtr<ImageData> srcImageData(m_in->resultImage()->getUnmultipliedImageData(effectDrawingRect));
+ IntRect effectDrawingRect = calculateDrawingIntRect(in->repaintRectInLocalCoordinates());
+ RefPtr<ImageData> srcImageData(in->resultImage()->getUnmultipliedImageData(effectDrawingRect));
CanvasPixelArray* srcPixelArray(srcImageData->data());
// FIXME: support kernelUnitLengths other than (1,1). The issue here is that the W3
diff --git a/WebCore/svg/graphics/filters/SVGFELighting.h b/WebCore/svg/graphics/filters/SVGFELighting.h
index 7db50e0..55802ca 100644
--- a/WebCore/svg/graphics/filters/SVGFELighting.h
+++ b/WebCore/svg/graphics/filters/SVGFELighting.h
@@ -42,7 +42,6 @@ class CanvasPixelArray;
class FELighting : public FilterEffect {
public:
- virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get()); }
void apply(Filter*);
protected:
@@ -72,15 +71,13 @@ protected:
ALWAYS_INLINE int downRightPixelValue();
};
- FELighting(LightingType, FilterEffect*, const Color&, float, float, float,
- float, float, float, PassRefPtr<LightSource>);
+ FELighting(LightingType, const Color&, float, float, float, float, float, float, PassRefPtr<LightSource>);
bool drawLighting(CanvasPixelArray*, int, int);
ALWAYS_INLINE void setPixel(LightingData&, LightSource::PaintingData&,
int lightX, int lightY, float factorX, int normalX, float factorY, int normalY);
LightingType m_lightingType;
- RefPtr<FilterEffect> m_in;
RefPtr<LightSource> m_lightSource;
Color m_lightingColor;
diff --git a/WebCore/svg/graphics/filters/SVGFEMerge.cpp b/WebCore/svg/graphics/filters/SVGFEMerge.cpp
index 11c7407..e92ce4c 100644
--- a/WebCore/svg/graphics/filters/SVGFEMerge.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEMerge.cpp
@@ -30,46 +30,24 @@
namespace WebCore {
-FEMerge::FEMerge(const Vector<RefPtr<FilterEffect> >& mergeInputs)
+FEMerge::FEMerge()
: FilterEffect()
- , m_mergeInputs(mergeInputs)
{
}
-PassRefPtr<FEMerge> FEMerge::create(const Vector<RefPtr<FilterEffect> >& mergeInputs)
+PassRefPtr<FEMerge> FEMerge::create()
{
- return adoptRef(new FEMerge(mergeInputs));
-}
-
-const Vector<RefPtr<FilterEffect> >& FEMerge::mergeInputs() const
-{
- return m_mergeInputs;
-}
-
-void FEMerge::setMergeInputs(const Vector<RefPtr<FilterEffect> >& mergeInputs)
-{
- m_mergeInputs = mergeInputs;
-}
-
-FloatRect FEMerge::uniteChildEffectSubregions(Filter* filter)
-{
- ASSERT(!m_mergeInputs.isEmpty());
-
- FloatRect uniteEffectRect = m_mergeInputs[0]->calculateEffectRect(filter);
-
- for (unsigned i = 1; i < m_mergeInputs.size(); i++)
- uniteEffectRect.unite(m_mergeInputs[i]->calculateEffectRect(filter));
-
- return uniteEffectRect;
+ return adoptRef(new FEMerge);
}
void FEMerge::apply(Filter* filter)
{
- ASSERT(!m_mergeInputs.isEmpty());
-
- for (unsigned i = 0; i < m_mergeInputs.size(); i++) {
- m_mergeInputs[i]->apply(filter);
- if (!m_mergeInputs[i]->resultImage())
+ unsigned size = numberOfEffectInputs();
+ ASSERT(size > 0);
+ for (unsigned i = 0; i < size; ++i) {
+ FilterEffect* in = inputEffect(i);
+ in->apply(filter);
+ if (!in->resultImage())
return;
}
@@ -77,9 +55,9 @@ void FEMerge::apply(Filter* filter)
if (!filterContext)
return;
- for (unsigned i = 0; i < m_mergeInputs.size(); i++) {
- FloatRect destRect = calculateDrawingRect(m_mergeInputs[i]->scaledSubRegion());
- filterContext->drawImageBuffer(m_mergeInputs[i]->resultImage(), DeviceColorSpace, destRect);
+ for (unsigned i = 0; i < size; ++i) {
+ FilterEffect* in = inputEffect(i);
+ filterContext->drawImageBuffer(in->resultImage(), DeviceColorSpace, calculateDrawingRect(in->repaintRectInLocalCoordinates()));
}
}
@@ -92,12 +70,11 @@ TextStream& FEMerge::externalRepresentation(TextStream& ts, int indent) const
writeIndent(ts, indent);
ts << "[feMerge";
FilterEffect::externalRepresentation(ts);
- ts << " mergeNodes=\"" << m_mergeInputs.size() << "\"]\n";
- if (!m_mergeInputs.isEmpty()) {
- const Vector<RefPtr<FilterEffect> >::const_iterator end = m_mergeInputs.end();
- for (Vector<RefPtr<FilterEffect> >::const_iterator it = m_mergeInputs.begin(); it != end; ++it)
- (*it)->externalRepresentation(ts, indent + 1);
- }
+ unsigned size = numberOfEffectInputs();
+ ASSERT(size > 0);
+ ts << " mergeNodes=\"" << size << "\"]\n";
+ for (unsigned i = 0; i < size; ++i)
+ inputEffect(i)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEMerge.h b/WebCore/svg/graphics/filters/SVGFEMerge.h
index 66decfc..439d789 100644
--- a/WebCore/svg/graphics/filters/SVGFEMerge.h
+++ b/WebCore/svg/graphics/filters/SVGFEMerge.h
@@ -31,20 +31,14 @@ namespace WebCore {
class FEMerge : public FilterEffect {
public:
- static PassRefPtr<FEMerge> create(const Vector<RefPtr<FilterEffect> >&);
+ static PassRefPtr<FEMerge> create();
- const Vector<RefPtr<FilterEffect> >& mergeInputs() const;
- void setMergeInputs(const Vector<RefPtr<FilterEffect> >& mergeInputs);
-
- virtual FloatRect uniteChildEffectSubregions(Filter*);
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEMerge(const Vector<RefPtr<FilterEffect> >&);
-
- Vector<RefPtr<FilterEffect> > m_mergeInputs;
+ FEMerge();
};
} // namespace WebCore
diff --git a/WebCore/svg/graphics/filters/SVGFEMorphology.cpp b/WebCore/svg/graphics/filters/SVGFEMorphology.cpp
index 3fdf369..6645259 100644
--- a/WebCore/svg/graphics/filters/SVGFEMorphology.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEMorphology.cpp
@@ -37,18 +37,17 @@ using std::max;
namespace WebCore {
-FEMorphology::FEMorphology(FilterEffect* in, MorphologyOperatorType type, float radiusX, float radiusY)
+FEMorphology::FEMorphology(MorphologyOperatorType type, float radiusX, float radiusY)
: FilterEffect()
- , m_in(in)
, m_type(type)
, m_radiusX(radiusX)
, m_radiusY(radiusY)
{
}
-PassRefPtr<FEMorphology> FEMorphology::create(FilterEffect* in, MorphologyOperatorType type, float radiusX, float radiusY)
+PassRefPtr<FEMorphology> FEMorphology::create(MorphologyOperatorType type, float radiusX, float radiusY)
{
- return adoptRef(new FEMorphology(in, type, radiusX, radiusY));
+ return adoptRef(new FEMorphology(type, radiusX, radiusY));
}
MorphologyOperatorType FEMorphology::morphologyOperator() const
@@ -83,14 +82,15 @@ void FEMorphology::setRadiusY(float radiusY)
void FEMorphology::apply(Filter* filter)
{
- m_in->apply(filter);
- if (!m_in->resultImage())
+ FilterEffect* in = inputEffect(0);
+ in->apply(filter);
+ if (!in->resultImage())
return;
-
+
if (!getEffectContext())
return;
- setIsAlphaImage(m_in->isAlphaImage());
+ setIsAlphaImage(in->isAlphaImage());
int radiusX = static_cast<int>(m_radiusX * filter->filterResolution().width());
int radiusY = static_cast<int>(m_radiusY * filter->filterResolution().height());
@@ -98,8 +98,8 @@ void FEMorphology::apply(Filter* filter)
return;
IntRect imageRect(IntPoint(), resultImage()->size());
- IntRect effectDrawingRect = calculateDrawingIntRect(m_in->scaledSubRegion());
- RefPtr<CanvasPixelArray> srcPixelArray(m_in->resultImage()->getPremultipliedImageData(effectDrawingRect)->data());
+ IntRect effectDrawingRect = calculateDrawingIntRect(in->repaintRectInLocalCoordinates());
+ RefPtr<CanvasPixelArray> srcPixelArray(in->resultImage()->getPremultipliedImageData(effectDrawingRect)->data());
RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
int effectWidth = effectDrawingRect.width() * 4;
@@ -179,8 +179,8 @@ TextStream& FEMorphology::externalRepresentation(TextStream& ts, int indent) con
ts << "[feMorphology";
FilterEffect::externalRepresentation(ts);
ts << " operator=\"" << morphologyOperator() << "\" "
- << "radius=\"" << radiusX() << ", " << radiusY() << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ << "radius=\"" << radiusX() << ", " << radiusY() << "\"]\n";
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEMorphology.h b/WebCore/svg/graphics/filters/SVGFEMorphology.h
index 79f292d..9743d2b 100644
--- a/WebCore/svg/graphics/filters/SVGFEMorphology.h
+++ b/WebCore/svg/graphics/filters/SVGFEMorphology.h
@@ -36,7 +36,7 @@ namespace WebCore {
class FEMorphology : public FilterEffect {
public:
- static PassRefPtr<FEMorphology> create(FilterEffect*, MorphologyOperatorType, float radiusX, float radiusY);
+ static PassRefPtr<FEMorphology> create(MorphologyOperatorType, float radiusX, float radiusY);
MorphologyOperatorType morphologyOperator() const;
void setMorphologyOperator(MorphologyOperatorType);
@@ -46,15 +46,13 @@ namespace WebCore {
float radiusY() const;
void setRadiusY(float);
- virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get()); }
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEMorphology(FilterEffect*, MorphologyOperatorType, float radiusX, float radiusY);
+ FEMorphology(MorphologyOperatorType, float radiusX, float radiusY);
- RefPtr<FilterEffect> m_in;
MorphologyOperatorType m_type;
float m_radiusX;
float m_radiusY;
diff --git a/WebCore/svg/graphics/filters/SVGFEOffset.cpp b/WebCore/svg/graphics/filters/SVGFEOffset.cpp
index e12b8e0..685bd7b 100644
--- a/WebCore/svg/graphics/filters/SVGFEOffset.cpp
+++ b/WebCore/svg/graphics/filters/SVGFEOffset.cpp
@@ -31,17 +31,16 @@
namespace WebCore {
-FEOffset::FEOffset(FilterEffect* in, const float& dx, const float& dy)
+FEOffset::FEOffset(float dx, float dy)
: FilterEffect()
- , m_in(in)
, m_dx(dx)
, m_dy(dy)
{
}
-PassRefPtr<FEOffset> FEOffset::create(FilterEffect* in, const float& dx, const float& dy)
+PassRefPtr<FEOffset> FEOffset::create(float dx, float dy)
{
- return adoptRef(new FEOffset(in, dx, dy));
+ return adoptRef(new FEOffset(dx, dy));
}
float FEOffset::dx() const
@@ -66,15 +65,16 @@ void FEOffset::setDy(float dy)
void FEOffset::apply(Filter* filter)
{
- m_in->apply(filter);
- if (!m_in->resultImage())
+ FilterEffect* in = inputEffect(0);
+ in->apply(filter);
+ if (!in->resultImage())
return;
GraphicsContext* filterContext = getEffectContext();
if (!filterContext)
return;
- setIsAlphaImage(m_in->isAlphaImage());
+ setIsAlphaImage(in->isAlphaImage());
FloatRect sourceImageRect = filter->sourceImageRect();
sourceImageRect.scale(filter->filterResolution().width(), filter->filterResolution().height());
@@ -86,12 +86,12 @@ void FEOffset::apply(Filter* filter)
m_dx *= filter->filterResolution().width();
m_dy *= filter->filterResolution().height();
- FloatRect dstRect = FloatRect(m_dx + m_in->scaledSubRegion().x() - scaledSubRegion().x(),
- m_dy + m_in->scaledSubRegion().y() - scaledSubRegion().y(),
- m_in->scaledSubRegion().width(),
- m_in->scaledSubRegion().height());
+ FloatRect dstRect = FloatRect(m_dx + in->repaintRectInLocalCoordinates().x() - repaintRectInLocalCoordinates().x(),
+ m_dy + in->repaintRectInLocalCoordinates().y() - repaintRectInLocalCoordinates().y(),
+ in->repaintRectInLocalCoordinates().width(),
+ in->repaintRectInLocalCoordinates().height());
- filterContext->drawImageBuffer(m_in->resultImage(), DeviceColorSpace, dstRect);
+ filterContext->drawImageBuffer(in->resultImage(), DeviceColorSpace, dstRect);
}
void FEOffset::dump()
@@ -104,7 +104,7 @@ TextStream& FEOffset::externalRepresentation(TextStream& ts, int indent) const
ts << "[feOffset";
FilterEffect::externalRepresentation(ts);
ts << " dx=\"" << dx() << "\" dy=\"" << dy() << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFEOffset.h b/WebCore/svg/graphics/filters/SVGFEOffset.h
index ad071d6..34ed97b 100644
--- a/WebCore/svg/graphics/filters/SVGFEOffset.h
+++ b/WebCore/svg/graphics/filters/SVGFEOffset.h
@@ -30,7 +30,7 @@ namespace WebCore {
class FEOffset : public FilterEffect {
public:
- static PassRefPtr<FEOffset> create(FilterEffect*, const float&, const float&);
+ static PassRefPtr<FEOffset> create(float, float);
float dx() const;
void setDx(float);
@@ -38,15 +38,13 @@ namespace WebCore {
float dy() const;
void setDy(float);
- virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return calculateUnionOfChildEffectSubregions(filter, m_in.get()); }
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FEOffset(FilterEffect*, const float&, const float&);
+ FEOffset(float, float);
- RefPtr<FilterEffect> m_in;
float m_dx;
float m_dy;
};
diff --git a/WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp b/WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp
index 5c6dc2a..33f7b6c 100644
--- a/WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp
+++ b/WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp
@@ -29,18 +29,18 @@
namespace WebCore {
-FESpecularLighting::FESpecularLighting(FilterEffect* in, const Color& lightingColor, float surfaceScale,
+FESpecularLighting::FESpecularLighting(const Color& lightingColor, float surfaceScale,
float specularConstant, float specularExponent, float kernelUnitLengthX,
float kernelUnitLengthY, PassRefPtr<LightSource> lightSource)
- : FELighting(SpecularLighting, in, lightingColor, surfaceScale, 0.0f, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, lightSource)
+ : FELighting(SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, lightSource)
{
}
-PassRefPtr<FESpecularLighting> FESpecularLighting::create(FilterEffect* in, const Color& lightingColor,
+PassRefPtr<FESpecularLighting> FESpecularLighting::create(const Color& lightingColor,
float surfaceScale, float specularConstant, float specularExponent,
float kernelUnitLengthX, float kernelUnitLengthY, PassRefPtr<LightSource> lightSource)
{
- return adoptRef(new FESpecularLighting(in, lightingColor, surfaceScale, specularConstant, specularExponent,
+ return adoptRef(new FESpecularLighting(lightingColor, surfaceScale, specularConstant, specularExponent,
kernelUnitLengthX, kernelUnitLengthY, lightSource));
}
@@ -130,7 +130,7 @@ TextStream& FESpecularLighting::externalRepresentation(TextStream& ts, int inden
ts << " surfaceScale=\"" << m_surfaceScale << "\" "
<< "specualConstant=\"" << m_specularConstant << "\" "
<< "specularExponent=\"" << m_specularExponent << "\"]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFESpecularLighting.h b/WebCore/svg/graphics/filters/SVGFESpecularLighting.h
index 3a49c1e..6067a76 100644
--- a/WebCore/svg/graphics/filters/SVGFESpecularLighting.h
+++ b/WebCore/svg/graphics/filters/SVGFESpecularLighting.h
@@ -29,7 +29,7 @@ namespace WebCore {
class FESpecularLighting : public FELighting {
public:
- static PassRefPtr<FESpecularLighting> create(FilterEffect*, const Color&, float, float,
+ static PassRefPtr<FESpecularLighting> create(const Color&, float, float,
float, float, float, PassRefPtr<LightSource>);
virtual ~FESpecularLighting();
@@ -58,8 +58,7 @@ public:
TextStream& externalRepresentation(TextStream&, int indent) const;
private:
- FESpecularLighting(FilterEffect*, const Color&, float, float, float,
- float, float, PassRefPtr<LightSource>);
+ FESpecularLighting(const Color&, float, float, float, float, float, PassRefPtr<LightSource>);
};
} // namespace WebCore
diff --git a/WebCore/svg/graphics/filters/SVGFETile.cpp b/WebCore/svg/graphics/filters/SVGFETile.cpp
index 56cbc1e..80eb9b3 100644
--- a/WebCore/svg/graphics/filters/SVGFETile.cpp
+++ b/WebCore/svg/graphics/filters/SVGFETile.cpp
@@ -31,40 +31,42 @@
namespace WebCore {
-FETile::FETile(FilterEffect* in)
+FETile::FETile()
: FilterEffect()
- , m_in(in)
{
}
-PassRefPtr<FETile> FETile::create(FilterEffect* in)
+PassRefPtr<FETile> FETile::create()
{
- return adoptRef(new FETile(in));
+ return adoptRef(new FETile);
}
-FloatRect FETile::uniteChildEffectSubregions(Filter* filter)
+FloatRect FETile::determineFilterPrimitiveSubregion(Filter* filter)
{
- m_in->calculateEffectRect(filter);
- return filter->filterRegion();
+ inputEffect(0)->determineFilterPrimitiveSubregion(filter);
+
+ filter->determineFilterPrimitiveSubregion(this, filter->filterRegion());
+ return filterPrimitiveSubregion();
}
void FETile::apply(Filter* filter)
{
- m_in->apply(filter);
- if (!m_in->resultImage())
+ FilterEffect* in = inputEffect(0);
+ in->apply(filter);
+ if (!in->resultImage())
return;
GraphicsContext* filterContext = getEffectContext();
if (!filterContext)
return;
- setIsAlphaImage(m_in->isAlphaImage());
+ setIsAlphaImage(in->isAlphaImage());
- IntRect tileRect = enclosingIntRect(m_in->scaledSubRegion());
+ IntRect tileRect = enclosingIntRect(in->repaintRectInLocalCoordinates());
// Source input needs more attention. It has the size of the filterRegion but gives the
// size of the cutted sourceImage back. This is part of the specification and optimization.
- if (m_in->isSourceInput()) {
+ if (in->isSourceInput()) {
FloatRect filterRegion = filter->filterRegion();
filterRegion.scale(filter->filterResolution().width(), filter->filterResolution().height());
tileRect = enclosingIntRect(filterRegion);
@@ -72,15 +74,16 @@ void FETile::apply(Filter* filter)
OwnPtr<ImageBuffer> tileImage = ImageBuffer::create(tileRect.size());
GraphicsContext* tileImageContext = tileImage->context();
- tileImageContext->drawImageBuffer(m_in->resultImage(), DeviceColorSpace, IntPoint());
+ tileImageContext->drawImageBuffer(in->resultImage(), DeviceColorSpace, IntPoint());
RefPtr<Pattern> pattern = Pattern::create(tileImage->copyImage(), true, true);
AffineTransform matrix;
- matrix.translate(m_in->scaledSubRegion().x() - scaledSubRegion().x(), m_in->scaledSubRegion().y() - scaledSubRegion().y());
+ matrix.translate(in->repaintRectInLocalCoordinates().x() - repaintRectInLocalCoordinates().x(),
+ in->repaintRectInLocalCoordinates().y() - repaintRectInLocalCoordinates().y());
pattern.get()->setPatternSpaceTransform(matrix);
filterContext->setFillPattern(pattern);
- filterContext->fillRect(FloatRect(FloatPoint(), scaledSubRegion().size()));
+ filterContext->fillRect(FloatRect(FloatPoint(), repaintRectInLocalCoordinates().size()));
}
void FETile::dump()
@@ -93,7 +96,7 @@ TextStream& FETile::externalRepresentation(TextStream& ts, int indent) const
ts << "[feTile";
FilterEffect::externalRepresentation(ts);
ts << "]\n";
- m_in->externalRepresentation(ts, indent + 1);
+ inputEffect(0)->externalRepresentation(ts, indent + 1);
return ts;
}
diff --git a/WebCore/svg/graphics/filters/SVGFETile.h b/WebCore/svg/graphics/filters/SVGFETile.h
index 7af9c13..128c9cb 100644
--- a/WebCore/svg/graphics/filters/SVGFETile.h
+++ b/WebCore/svg/graphics/filters/SVGFETile.h
@@ -30,17 +30,16 @@ namespace WebCore {
class FETile : public FilterEffect {
public:
- static PassRefPtr<FETile> create(FilterEffect*);
+ static PassRefPtr<FETile> create();
- virtual FloatRect uniteChildEffectSubregions(Filter*);
void apply(Filter*);
void dump();
TextStream& externalRepresentation(TextStream&, int indent) const;
+
+ virtual FloatRect determineFilterPrimitiveSubregion(Filter*);
private:
- FETile(FilterEffect*);
-
- RefPtr<FilterEffect> m_in;
+ FETile();
};
} // namespace WebCore
diff --git a/WebCore/svg/graphics/filters/SVGFilter.cpp b/WebCore/svg/graphics/filters/SVGFilter.cpp
index 947dbed..d72dc3d 100644
--- a/WebCore/svg/graphics/filters/SVGFilter.cpp
+++ b/WebCore/svg/graphics/filters/SVGFilter.cpp
@@ -24,60 +24,64 @@
namespace WebCore {
-SVGFilter::SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode)
+SVGFilter::SVGFilter(const FloatRect& targetBoundingBox, const FloatRect& filterRect, bool effectBBoxMode)
: Filter()
- , m_itemBox(itemBox)
+ , m_targetBoundingBox(targetBoundingBox)
, m_filterRect(filterRect)
, m_effectBBoxMode(effectBBoxMode)
{
}
-void SVGFilter::calculateEffectSubRegion(FilterEffect* effect)
+void SVGFilter::determineFilterPrimitiveSubregion(FilterEffect* effect, const FloatRect& unionOfPreviousPrimitiveSubregions)
{
FloatRect subRegionBBox = effect->effectBoundaries();
- FloatRect useBBox = effect->unionOfChildEffectSubregions();
FloatRect newSubRegion = subRegionBBox;
if (m_effectBBoxMode) {
- newSubRegion = useBBox;
+ newSubRegion = unionOfPreviousPrimitiveSubregions;
if (effect->hasX())
- newSubRegion.setX(m_itemBox.x() + subRegionBBox.x() * m_itemBox.width());
+ newSubRegion.setX(m_targetBoundingBox.x() + subRegionBBox.x() * m_targetBoundingBox.width());
- if (effect->hasY())
- newSubRegion.setY(m_itemBox.y() + subRegionBBox.y() * m_itemBox.height());
+ if (effect->hasY())
+ newSubRegion.setY(m_targetBoundingBox.y() + subRegionBBox.y() * m_targetBoundingBox.height());
if (effect->hasWidth())
- newSubRegion.setWidth(subRegionBBox.width() * m_itemBox.width());
+ newSubRegion.setWidth(subRegionBBox.width() * m_targetBoundingBox.width());
if (effect->hasHeight())
- newSubRegion.setHeight(subRegionBBox.height() * m_itemBox.height());
+ newSubRegion.setHeight(subRegionBBox.height() * m_targetBoundingBox.height());
} else {
if (!effect->hasX())
- newSubRegion.setX(useBBox.x());
+ newSubRegion.setX(unionOfPreviousPrimitiveSubregions.x());
if (!effect->hasY())
- newSubRegion.setY(useBBox.y());
+ newSubRegion.setY(unionOfPreviousPrimitiveSubregions.y());
if (!effect->hasWidth())
- newSubRegion.setWidth(useBBox.width());
+ newSubRegion.setWidth(unionOfPreviousPrimitiveSubregions.width());
if (!effect->hasHeight())
- newSubRegion.setHeight(useBBox.height());
+ newSubRegion.setHeight(unionOfPreviousPrimitiveSubregions.height());
}
// clip every filter effect to the filter region
newSubRegion.intersect(m_filterRect);
- effect->setSubRegion(newSubRegion);
+ effect->setFilterPrimitiveSubregion(newSubRegion);
+
+ // TODO: Everything above should be moved to a first phase of layout in RenderSVGResourceFilterPrimitive.
+ // The scaling of the subregion to the repaint rect should be merged with a more intelligent repaint logic
+ // and moved to the second phase of layout in RenderSVGResourceFilterPrimitive.
+ // See bug https://bugs.webkit.org/show_bug.cgi?id=45614.
newSubRegion.scale(filterResolution().width(), filterResolution().height());
- effect->setScaledSubRegion(newSubRegion);
+ effect->setRepaintRectInLocalCoordinates(newSubRegion);
m_maxImageSize = m_maxImageSize.expandedTo(newSubRegion.size());
}
-PassRefPtr<SVGFilter> SVGFilter::create(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode)
+PassRefPtr<SVGFilter> SVGFilter::create(const FloatRect& targetBoundingBox, const FloatRect& filterRect, bool effectBBoxMode)
{
- return adoptRef(new SVGFilter(itemBox, filterRect, effectBBoxMode));
+ return adoptRef(new SVGFilter(targetBoundingBox, filterRect, effectBBoxMode));
}
} // namespace WebCore
diff --git a/WebCore/svg/graphics/filters/SVGFilter.h b/WebCore/svg/graphics/filters/SVGFilter.h
index 1ee5e8a..631f1ee 100644
--- a/WebCore/svg/graphics/filters/SVGFilter.h
+++ b/WebCore/svg/graphics/filters/SVGFilter.h
@@ -39,16 +39,17 @@ namespace WebCore {
virtual bool effectBoundingBoxMode() const { return m_effectBBoxMode; }
virtual FloatRect filterRegion() const { return m_filterRect; }
- virtual FloatRect sourceImageRect() const { return m_itemBox; }
+
+ virtual FloatRect sourceImageRect() const { return m_targetBoundingBox; }
virtual FloatSize maxImageSize() const { return m_maxImageSize; }
- virtual void calculateEffectSubRegion(FilterEffect*);
+ virtual void determineFilterPrimitiveSubregion(FilterEffect*, const FloatRect&);
private:
- SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode);
+ SVGFilter(const FloatRect& targetBoundingBox, const FloatRect& filterRect, bool effectBBoxMode);
FloatSize m_maxImageSize;
- FloatRect m_itemBox;
+ FloatRect m_targetBoundingBox;
FloatRect m_filterRect;
bool m_effectBBoxMode;
};