Krita Source Code Documentation
Loading...
Searching...
No Matches
KoFilterEffect.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2009 Jan Hambrecht <jaham@gmx.net>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8#include "KoFilterEffect.h"
9#include "KoXmlWriter.h"
10
11#include <QImage>
12#include <QString>
13#include <QRectF>
14
15class Q_DECL_HIDDEN KoFilterEffect::Private
16{
17public:
19 : filterRect(0, 0, 1, 1)
20 , requiredInputCount(1), maximalInputCount(1)
21 {
22 // add the default input
23 inputs.append(QString());
24 }
25
26 QString id;
27 QString name;
28 QRectF filterRect;
30 QString output;
33};
34
35KoFilterEffect::KoFilterEffect(const QString &id, const QString &name)
36 : d(new Private)
37{
38 d->id = id;
39 d->name = name;
40}
41
46
47QString KoFilterEffect::name() const
48{
49 return d->name;
50}
51
52QString KoFilterEffect::id() const
53{
54 return d->id;
55}
56
57void KoFilterEffect::setFilterRect(const QRectF &filterRect)
58{
59 d->filterRect = filterRect;
60}
61
62QRectF KoFilterEffect::filterRect() const
63{
64 return d->filterRect;
65}
66
67QRectF KoFilterEffect::filterRectForBoundingRect(const QRectF &boundingRect) const
68{
69 qreal x = boundingRect.x() + d->filterRect.x() * boundingRect.width();
70 qreal y = boundingRect.y() + d->filterRect.y() * boundingRect.height();
71 qreal w = d->filterRect.width() * boundingRect.width();
72 qreal h = d->filterRect.height() * boundingRect.height();
73 return QRectF(x, y, w, h);
74}
75
77{
78 return d->inputs;
79}
80
81void KoFilterEffect::addInput(const QString &input)
82{
83 if (d->inputs.count() < d->maximalInputCount)
84 d->inputs.append(input);
85}
86
87void KoFilterEffect::insertInput(int index, const QString &input)
88{
89 if (d->inputs.count() < d->maximalInputCount)
90 d->inputs.insert(index, input);
91}
92
93void KoFilterEffect::setInput(int index, const QString &input)
94{
95 if (index < d->inputs.count())
96 d->inputs[index] = input;
97}
98
100{
101 if (d->inputs.count() > d->requiredInputCount)
102 d->inputs.removeAt(index);
103}
104
105void KoFilterEffect::setOutput(const QString &output)
106{
107 d->output = output;
108}
109
110QString KoFilterEffect::output() const
111{
112 return d->output;
113}
114
116{
117 return d->requiredInputCount;
118}
119
121{
122 return qMax(d->maximalInputCount, d->requiredInputCount);
123}
124
125QImage KoFilterEffect::processImages(const QList<QImage> &images, const KoFilterEffectRenderContext &/*context*/) const
126{
127 Q_ASSERT(images.count());
128 return images.first();
129}
130
132{
133 d->requiredInputCount = qMax(0, count);
134 for (int i = d->inputs.count(); i < d->requiredInputCount; ++i)
135 d->inputs.append(QString());
136}
137
139{
140 d->maximalInputCount = qMax(0,count);
141 if (d->inputs.count() > maximalInputCount()) {
142 int removeCount = d->inputs.count()-maximalInputCount();
143 for (int i = 0; i < removeCount; ++i)
144 d->inputs.pop_back();
145 }
146}
147
149{
150 writer.addAttribute("result", output());
151 if (requiredInputCount() == 1 && maximalInputCount() == 1 && d->inputs.count() == 1) {
152 writer.addAttribute("in", d->inputs[0]);
153 }
154 writer.addAttribute("x", d->filterRect.x());
155 writer.addAttribute("y", d->filterRect.y());
156 writer.addAttribute("width", d->filterRect.width());
157 writer.addAttribute("height", d->filterRect.height());
158}
This class provides the render context for filter effects.
KoFilterEffect(const QString &id, const QString &name)
void removeInput(int index)
Removes an input from the given position in the input list.
void saveCommonAttributes(KoXmlWriter &writer)
void setOutput(const QString &output)
virtual QImage processImages(const QList< QImage > &images, const KoFilterEffectRenderContext &context) const
QList< QString > inputs
virtual ~KoFilterEffect()
void insertInput(int index, const QString &input)
Inserts an input at the given position in the input list.
void setMaximalInputCount(int count)
Sets the maximal number of input images.
void setFilterRect(const QRectF &filterRect)
Sets the region the filter is applied to in bounding box units.
Private *const d
QRectF filterRectForBoundingRect(const QRectF &boundingRect) const
Returns the region this filter is applied to for the given bounding rect.
void setRequiredInputCount(int count)
Sets the required number of input images.
void addInput(const QString &input)
Adds a new input at the end of the input list.
void setInput(int index, const QString &input)
Sets an existing input to a new value.
void addAttribute(const char *attrName, const QString &value)
Definition KoXmlWriter.h:61