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