Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_convolution_worker.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005, 2008 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2010 Edward Apap <schumifer@hotmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_CONVOLUTION_WORKER_H
9#define KIS_CONVOLUTION_WORKER_H
10
11#include <KoUpdater.h>
12
13#include "kis_iterator_ng.h"
15#include "kis_painter.h"
16#include <QBitArray>
17
23 inline static KisHLineIteratorSP createHLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect&) {
24 return src->createHLineIteratorNG(x, y, w);
25 }
26 inline static KisVLineIteratorSP createVLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect&) {
27 return src->createVLineIteratorNG(x, y, h);
28 }
29 inline static KisHLineConstIteratorSP createHLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect&) {
30 return src->createHLineConstIteratorNG(x, y, w);
31 }
32 inline static KisVLineConstIteratorSP createVLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect&) {
33 return src->createVLineConstIteratorNG(x, y, h);
34 }
35};
36
42 inline static KisHLineIteratorSP createHLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect&) {
43 return src->createHLineIteratorNG(x, y, w);
44 }
45 inline static KisVLineIteratorSP createVLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect&) {
46 return src->createVLineIteratorNG(x, y, h);
47 }
48 inline static HLineConstIterator createHLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect& _dataRect) {
49 return src->createRepeatHLineConstIterator(x, y, w, _dataRect);
50 }
51 inline static VLineConstIterator createVLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect& _dataRect) {
52 return src->createRepeatVLineConstIterator(x, y, h, _dataRect);
53 }
54};
55
56template <class _IteratorFactory_>
58{
59public:
61 {
62 m_painter = painter;
63 m_progress = progress;
64 }
65
67 {
68 }
69
70 virtual void execute(const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, const QRect& dataRect) = 0;
71
72protected:
74 {
75 QBitArray painterChannelFlags = m_painter->channelFlags();
76 if (painterChannelFlags.isEmpty()) {
77 painterChannelFlags = QBitArray(src->colorSpace()->channelCount(), true);
78 }
79 Q_ASSERT(static_cast<quint32>(painterChannelFlags.size()) == src->colorSpace()->channelCount());
80 const QList<KoChannelInfo *> channelInfo = src->colorSpace()->channels();
81 QList<KoChannelInfo *> convChannelList;
82
83 for (qint32 c = 0; c < channelInfo.count(); ++c) {
84 if (painterChannelFlags.testBit(c)) {
85 convChannelList.append(channelInfo[c]);
86 }
87 }
88
89 return convChannelList;
90 }
91
92protected:
95};
96
97
98#endif
KisConvolutionWorker(KisPainter *painter, KoUpdater *progress)
QList< KoChannelInfo * > convolvableChannelList(const KisPaintDeviceSP src)
virtual void execute(const KisConvolutionKernelSP kernel, const KisPaintDeviceSP src, QPoint srcPos, QPoint dstPos, QSize areaSize, const QRect &dataRect)=0
QBitArray channelFlags()
KisVLineIteratorSP VLineIterator
static HLineConstIterator createHLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect &_dataRect)
static KisVLineIteratorSP createVLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect &)
KisRepeatHLineConstIteratorSP HLineConstIterator
static KisHLineIteratorSP createHLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect &)
KisHLineIteratorSP HLineIterator
static VLineConstIterator createVLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect &_dataRect)
KisRepeatVLineConstIteratorSP VLineConstIterator
static KisHLineIteratorSP createHLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect &)
static KisHLineConstIteratorSP createHLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 w, const QRect &)
static KisVLineConstIteratorSP createVLineConstIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect &)
KisVLineConstIteratorSP VLineConstIterator
static KisVLineIteratorSP createVLineIterator(KisPaintDeviceSP src, qint32 x, qint32 y, qint32 h, const QRect &)
KisHLineConstIteratorSP HLineConstIterator