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);
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 */