summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h')
-rw-r--r--WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h111
1 files changed, 67 insertions, 44 deletions
diff --git a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
index 8e3a9bd..7b8da0b 100644
--- a/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
+++ b/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h
@@ -2,6 +2,7 @@
Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
2004, 2005 Rob Buis <buis@kde.org>
2005 Eric Seidel <eric@webkit.org>
+ 2010 Zoltan Herczeg <zherczeg@webkit.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -27,68 +28,90 @@
#include "FloatPoint.h"
#include "FloatSize.h"
#include "Filter.h"
+#include <wtf/AlwaysInline.h>
#include <wtf/Vector.h>
namespace WebCore {
- enum EdgeModeType {
- EDGEMODE_UNKNOWN = 0,
- EDGEMODE_DUPLICATE = 1,
- EDGEMODE_WRAP = 2,
- EDGEMODE_NONE = 3
- };
+enum EdgeModeType {
+ EDGEMODE_UNKNOWN = 0,
+ EDGEMODE_DUPLICATE = 1,
+ EDGEMODE_WRAP = 2,
+ EDGEMODE_NONE = 3
+};
+
+class CanvasPixelArray;
- class FEConvolveMatrix : public FilterEffect {
- public:
- static PassRefPtr<FEConvolveMatrix> create(FilterEffect*, FilterEffect*, const FloatSize&,
- const float&, const float&, const FloatSize&, EdgeModeType, const FloatPoint&,
- bool, const Vector<float>&);
+class FEConvolveMatrix : public FilterEffect {
+public:
+ static PassRefPtr<FEConvolveMatrix> create(FilterEffect*, const IntSize&,
+ float, float, const IntPoint&, EdgeModeType, const FloatPoint&,
+ bool, const Vector<float>&);
- FloatSize kernelSize() const;
- void setKernelSize(FloatSize);
+ IntSize kernelSize() const;
+ void setKernelSize(IntSize);
- const Vector<float>& kernel() const;
- void setKernel(const Vector<float>&);
+ const Vector<float>& kernel() const;
+ void setKernel(const Vector<float>&);
- float divisor() const;
- void setDivisor(float);
+ float divisor() const;
+ void setDivisor(float);
- float bias() const;
- void setBias(float);
+ float bias() const;
+ void setBias(float);
- FloatSize targetOffset() const;
- void setTargetOffset(FloatSize);
+ IntPoint targetOffset() const;
+ void setTargetOffset(IntPoint);
- EdgeModeType edgeMode() const;
- void setEdgeMode(EdgeModeType);
+ EdgeModeType edgeMode() const;
+ void setEdgeMode(EdgeModeType);
- FloatPoint kernelUnitLength() const;
- void setKernelUnitLength(FloatPoint);
+ FloatPoint kernelUnitLength() const;
+ void setKernelUnitLength(FloatPoint);
- bool preserveAlpha() const;
- void setPreserveAlpha(bool);
+ bool preserveAlpha() const;
+ void setPreserveAlpha(bool);
- 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;
+ 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*, FilterEffect*, const FloatSize&, const float&, const float&,
- const FloatSize&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&);
+private:
+ FEConvolveMatrix(FilterEffect*, const IntSize&, float, float,
+ const IntPoint&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&);
- RefPtr<FilterEffect> m_in;
- RefPtr<FilterEffect> m_in2;
- FloatSize m_kernelSize;
- float m_divisor;
- float m_bias;
- FloatSize m_targetOffset;
- EdgeModeType m_edgeMode;
- FloatPoint m_kernelUnitLength;
- bool m_preserveAlpha;
- Vector<float> m_kernelMatrix;
+ struct PaintingData {
+ CanvasPixelArray* srcPixelArray;
+ CanvasPixelArray* dstPixelArray;
+ int width;
+ int height;
+ float bias;
};
+ template<bool preserveAlphaValues>
+ ALWAYS_INLINE void fastSetInteriorPixels(PaintingData&, int clipRight, int clipBottom);
+
+ ALWAYS_INLINE int getPixelValue(PaintingData&, int x, int y);
+
+ template<bool preserveAlphaValues>
+ void fastSetOuterPixels(PaintingData&, int x1, int y1, int x2, int y2);
+
+ // Wrapper functions
+ 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;
+ IntPoint m_targetOffset;
+ EdgeModeType m_edgeMode;
+ FloatPoint m_kernelUnitLength;
+ bool m_preserveAlpha;
+ Vector<float> m_kernelMatrix;
+};
+
} // namespace WebCore
#endif // ENABLE(SVG) && ENABLE(FILTERS)