Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFilterFastColorOverlay.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include "kis_paint_device.h"
11#include "KoCompositeOp.h"
12#include <KoColorSpace.h>
14#include <KoColor.h>
15
18
20
25
26void KisFilterFastColorOverlay::processImpl(KisPaintDeviceSP device, const QRect &rect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const
27{
28 Q_UNUSED(progressUpdater);
29
30 const KoColorSpace *colorSpace = device->colorSpace();
31
32 KoColor overlayColor = config->getColor("color", KoColor(defaultColor(), KoColorSpaceRegistry::instance()->rgb8()));
33 overlayColor.convertTo(colorSpace);
34
36 paramInfo.opacity = config->getPropertyLazy("opacity", defaultOpacity()) / 100.0f;
37 paramInfo.flow = 1.0;
38 paramInfo.channelFlags = colorSpace->channelFlags(true, false);
39
40 const KoCompositeOp *compositeOp =
41 colorSpace->compositeOp(config->getPropertyLazy("compositeop", defaultCompositeOp()));
42
44
45 qint32 dstY_ = rect.y();
46 qint32 rowsRemaining = rect.height();
47
48 while (rowsRemaining > 0) {
49 qint32 dstX_ = rect.x();
50 qint32 columnsRemaining = rect.width();
51 qint32 numContiguousDstRows = dstIt->numContiguousRows(dstY_);
52
53 qint32 rows = qMin(numContiguousDstRows, rowsRemaining);
54
55 while (columnsRemaining > 0) {
56
57 qint32 numContiguousDstColumns = dstIt->numContiguousColumns(dstX_);
58 qint32 columns = qMin(numContiguousDstColumns, columnsRemaining);
59
60 qint32 dstRowStride = dstIt->rowStride(dstX_, dstY_);
61 dstIt->moveTo(dstX_, dstY_);
62
63 paramInfo.dstRowStart = dstIt->rawData();
64 paramInfo.dstRowStride = dstRowStride;
65 paramInfo.srcRowStart = overlayColor.data();
66 paramInfo.srcRowStride = 0;
67 paramInfo.maskRowStart = 0;
68 paramInfo.maskRowStride = 0;
69 paramInfo.rows = rows;
70 paramInfo.cols = columns;
72
73 dstX_ += columns;
74 columnsRemaining -= columns;
75 }
76
77 dstY_ += rows;
78 rowsRemaining -= rows;
79 }
80}
81
83{
84 Q_UNUSED(dev);
85 Q_UNUSED(useForMasks);
86 return new KisWdgFilterFastColorOverlay(parent);
87}
88
90{
91 KisFilterConfigurationSP config = factoryConfiguration(resourcesInterface);
92 config->setProperty("color", defaultColor());
93 config->setProperty("opacity", defaultOpacity());
94 config->setProperty("compositeop", defaultCompositeOp());
95 return config;
96}
97
99{
100 return QColor(62, 140, 236);
101}
102
104{
105 return 100;
106}
107
109{
110 // Use the normal blending mode (OVER is "normal").
111 // This offers the best performance, but will change the color of all opaque pixels,
112 // which may be unexpected in some situations (for example, coloring a scanned sketch on a white background).
113 return COMPOSITE_OVER;
114}
const QString COMPOSITE_OVER
virtual quint8 * rawData()=0
KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
void processImpl(KisPaintDeviceSP device, const QRect &rect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
const KoColorSpace * colorSpace() const
KisRandomAccessorSP createRandomAccessorNG()
virtual qint32 rowStride(qint32 x, qint32 y) const =0
virtual qint32 numContiguousRows(qint32 y) const =0
virtual void moveTo(qint32 x, qint32 y)=0
virtual qint32 numContiguousColumns(qint32 x) const =0
QBitArray channelFlags(bool color=true, bool alpha=false) const
virtual void bitBlt(const KoColorSpace *srcSpace, const KoCompositeOp::ParameterInfo &params, const KoCompositeOp *op, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
const KoCompositeOp * compositeOp(const QString &id, const KoColorSpace *srcSpace=nullptr) const
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
quint8 * data()
Definition KoColor.h:144
const KoColorSpace * colorSpace() const
return the current colorSpace
Definition KoColor.h:82
const KoID FiltersCategoryColorId("color_filters", ki18nc("The category of color transfer filters, like color to alpha. Noun.", "Colors"))
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
static KoColorSpaceRegistry * instance()