Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_convolution_filter.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the KDE project
3 *
4 * SPDX-FileCopyrightText: 2004 Cyrille Berger <cberger@cberger.net>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
10#include <klocalizedstring.h>
11#include <kis_debug.h>
12
13#include <KoCompositeOp.h>
14
15#include "kis_painter.h"
19#include <kis_selection.h>
20#include <kis_paint_device.h>
22#include "kis_lod_transform.h"
23
24KisConvolutionFilter::KisConvolutionFilter(const KoID& id, const KoID & category, const QString & entry)
25 : KisFilter(id, category, entry)
26{
29}
30
31
33 const QRect& applyRect,
34 const KisFilterConfigurationSP config,
35 KoUpdater* progressUpdater) const
36{
37 Q_UNUSED(config);
38
39 QPoint srcTopLeft = applyRect.topLeft();
40 Q_ASSERT(device != 0);
41
42 KisConvolutionPainter painter(device);
43
44 QBitArray channelFlags;
45 if (config) {
46 channelFlags = config->channelFlags();
47 }
48 if (channelFlags.isEmpty() || !config) {
49 channelFlags = QBitArray(device->colorSpace()->channelCount(), true);
50 }
51
52 painter.setChannelFlags(channelFlags);
53 painter.setProgress(progressUpdater);
54 painter.applyMatrix(m_matrix, device, srcTopLeft, srcTopLeft, applyRect.size(), BORDER_REPEAT);
55
56}
57
58QRect KisConvolutionFilter::neededRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const
59{
60 Q_UNUSED(_config);
61
63
64 const int windowsize = qMax(m_matrix->width(), m_matrix->height());
65 const int margin = qCeil(t.scale(0.5 * windowsize)) + 1;
66 return kisGrowRect(rect, margin);
67}
68
69QRect KisConvolutionFilter::changedRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const
70{
71 return neededRect(rect, _config, lod);
72}
73
qreal v
@ FULLY_INDEPENDENT
KisConvolutionFilter(const KoID &id, const KoID &category, const QString &entry)
QRect changedRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const override
void processImpl(KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
QRect neededRect(const QRect &rect, const KisFilterConfigurationSP _config, int lod) const override
KisConvolutionKernelSP m_matrix
The KisConvolutionPainter class applies a convolution kernel to a paint device.
void applyMatrix(const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, KisConvolutionBorderOp borderOp=BORDER_REPEAT)
void setSupportsLevelOfDetail(bool value)
qreal scale(qreal value) const
const KoColorSpace * colorSpace() const
void setProgress(KoUpdater *progressUpdater)
void setChannelFlags(QBitArray channelFlags)
virtual quint32 channelCount() const =0
Definition KoID.h:30
T kisGrowRect(const T &rect, U offset)
Definition kis_global.h:186
void setColorSpaceIndependence(ColorSpaceIndependence v)