1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /** @file 3 * @brief SVG matrix convolution filter effect 4 */ 5 /* 6 * Authors: 7 * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> 8 * Hugo Rodrigues <haa.rodrigues@gmail.com> 9 * 10 * Copyright (C) 2006 Hugo Rodrigues 11 * 12 * Released under GNU GPL v2+, read the file 'COPYING' for more information. 13 */ 14 #ifndef SP_FECONVOLVEMATRIX_H_SEEN 15 #define SP_FECONVOLVEMATRIX_H_SEEN 16 17 #include <vector> 18 #include "sp-filter-primitive.h" 19 #include "number-opt-number.h" 20 #include "display/nr-filter-convolve-matrix.h" 21 22 #define SP_FECONVOLVEMATRIX(obj) (dynamic_cast<SPFeConvolveMatrix*>((SPObject*)obj)) 23 #define SP_IS_FECONVOLVEMATRIX(obj) (dynamic_cast<const SPFeConvolveMatrix*>((SPObject*)obj) != NULL) 24 25 class SPFeConvolveMatrix : public SPFilterPrimitive { 26 public: 27 SPFeConvolveMatrix(); 28 ~SPFeConvolveMatrix() override; 29 30 NumberOptNumber order; 31 std::vector<gdouble> kernelMatrix; 32 double divisor, bias; 33 int targetX, targetY; 34 Inkscape::Filters::FilterConvolveMatrixEdgeMode edgeMode; 35 NumberOptNumber kernelUnitLength; 36 bool preserveAlpha; 37 38 bool targetXIsSet; 39 bool targetYIsSet; 40 bool divisorIsSet; 41 bool kernelMatrixIsSet; 42 43 protected: 44 void build(SPDocument* doc, Inkscape::XML::Node* repr) override; 45 void release() override; 46 47 void set(SPAttr key, const gchar* value) override; 48 49 void update(SPCtx* ctx, unsigned int flags) override; 50 51 Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) override; 52 53 void build_renderer(Inkscape::Filters::Filter* filter) override; 54 }; 55 56 #endif /* !SP_FECONVOLVEMATRIX_H_SEEN */ 57 58 /* 59 Local Variables: 60 mode:c++ 61 c-file-style:"stroustrup" 62 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) 63 indent-tabs-mode:nil 64 fill-column:99 65 End: 66 */ 67 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : 68