Code

Rename LPE: mirror reflect --> mirror symmetry
[inkscape.git] / src / display / nr-filter-convolve-matrix.h
index e5b72a71fd1eff7c4d1c3a84cc1e66c74ac84035..b13db2f983d3b9180b3c3d177dd87110619b6a24 100644 (file)
 
 #include "display/nr-filter-primitive.h"
 #include "display/nr-filter-slot.h"
+#include "display/nr-filter-units.h"
 #include "libnr/nr-matrix.h"
 #include "libnr/nr-rect-l.h"
 #include <vector>
 
 namespace NR {
 
+enum FilterConvolveMatrixEdgeMode {
+    CONVOLVEMATRIX_EDGEMODE_DUPLICATE,
+    CONVOLVEMATRIX_EDGEMODE_WRAP,
+    CONVOLVEMATRIX_EDGEMODE_NONE,
+    CONVOLVEMATRIX_EDGEMODE_ENDTYPE
+};
+
 class FilterConvolveMatrix : public FilterPrimitive {
 public:
     FilterConvolveMatrix();
     static FilterPrimitive *create();
     virtual ~FilterConvolveMatrix();
 
-    virtual int render(FilterSlot &slot, Matrix const &trans);
+    virtual int render(FilterSlot &slot, FilterUnits const &units);
     virtual void area_enlarge(NRRectL &area, Matrix const &trans);
+    virtual FilterTraits get_input_traits();
 
     void set_targetY(int coord);
     void set_targetX(int coord);
@@ -36,13 +45,17 @@ public:
     void set_kernelMatrix(std::vector<gdouble>& km);
     void set_bias(double b);
     void set_divisor(double d);
+    void set_edgeMode(FilterConvolveMatrixEdgeMode mode);    
+    void set_preserveAlpha(bool pa);
 
 private:
     std::vector<gdouble> kernelMatrix;
     int targetX, targetY;
     int orderX, orderY;
     gdouble divisor, bias;
-    int dx, dy; //kernelUnitLength
+    int dx, dy, kernelUnitLength;
+    FilterConvolveMatrixEdgeMode edgeMode;
+    bool preserveAlpha;
 };
 
 } /* namespace NR */