Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFilterOp Class Reference

#include <kis_filterop.h>

+ Inheritance diagram for KisFilterOp:

Public Member Functions

 KisFilterOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
 
 ~KisFilterOp () override
 
- Public Member Functions inherited from KisBrushBasedPaintOp
bool canPaint () const override
 Reimplemented, false if brush is 0.
 
bool checkSizeTooSmall (qreal scale)
 
KisSpacingInformation effectiveSpacing (qreal scale) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisAirbrushOptionData *airbrushOption, const KisSpacingOption *spacingOption, const KisPaintInformation &pi) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisPaintInformation &pi) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisSpacingOption &spacingOption, const KisPaintInformation &pi) const
 
 KisBrushBasedPaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisBrushTextureFlags textureFlags=None)
 
 ~KisBrushBasedPaintOp () override
 
- Public Member Functions inherited from KisPaintOp
virtual std::pair< int, bool > doAsynchronousUpdate (QVector< KisRunnableStrokeJobData * > &jobs)
 
 KisPaintOp (KisPainter *painter)
 
void paintAt (const KisPaintInformation &info, KisDistanceInformation *currentDistance)
 
virtual void paintBezierCurve (const KisPaintInformation &pi1, const QPointF &control1, const QPointF &control2, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)
 
virtual void paintLine (const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)
 
 Private (KisPaintOp *_q)
 
void updateSpacing (const KisPaintInformation &info, KisDistanceInformation &currentDistance) const
 
void updateTiming (const KisPaintInformation &info, KisDistanceInformation &currentDistance) const
 
virtual ~KisPaintOp ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Static Public Member Functions

static QList< KoResourceLoadResultprepareEmbeddedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
static QList< KoResourceLoadResultprepareLinkedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
- Static Public Member Functions inherited from KisBrushBasedPaintOp
static QList< KoResourceLoadResultprepareEmbeddedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
static QList< KoResourceLoadResultprepareLinkedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
- Static Public Member Functions inherited from KisPaintOp
static void splitCoordinate (qreal coordinate, qint32 *whole, qreal *fraction)
 

Protected Member Functions

KisSpacingInformation paintAt (const KisPaintInformation &info) override
 
KisSpacingInformation updateSpacingImpl (const KisPaintInformation &info) const override
 
- Protected Member Functions inherited from KisPaintOp
KisFixedPaintDeviceSP cachedDab ()
 
KisFixedPaintDeviceSP cachedDab (const KoColorSpace *cs)
 
KisPainterpainter () const
 
KisPaintDeviceSP source () const
 
virtual KisTimingInformation updateTimingImpl (const KisPaintInformation &info) const
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Private Attributes

KisFilterSP m_filter
 
KisFilterConfigurationSP m_filterConfiguration
 
KisRotationOption m_rotationOption
 
KisSizeOption m_sizeOption
 
bool m_smudgeMode
 
KisPaintDeviceSP m_tmpDevice
 

Additional Inherited Members

- Public Attributes inherited from KisPaintOp
KisFixedPaintDeviceSP dab
 
bool fanCornersEnabled {false}
 
qreal fanCornersStep {1.0}
 
KisPainterpainter {nullptr}
 
KisPaintOpq {nullptr}
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 
- Protected Attributes inherited from KisBrushBasedPaintOp
KisBrushSP m_brush
 
KisDabCachem_dabCache
 
KisMirrorOption m_mirrorOption
 
KisPrecisionOption m_precisionOption
 

Detailed Description

Definition at line 23 of file kis_filterop.h.

Constructor & Destructor Documentation

◆ KisFilterOp()

KisFilterOp::KisFilterOp ( const KisPaintOpSettingsSP settings,
KisPainter * painter,
KisNodeSP node,
KisImageSP image )

Definition at line 40 of file kis_filterop.cpp.

41 : KisBrushBasedPaintOp(settings, painter)
42 , m_sizeOption(settings.data())
43 , m_rotationOption(settings.data())
45{
46 Q_UNUSED(node);
47 Q_UNUSED(image);
48 Q_ASSERT(settings);
49 Q_ASSERT(painter);
50
52
54 data.read(settings.data());
55
57 if (m_filter) {
58 m_filterConfiguration = m_filter->factoryConfiguration(settings->resourcesInterface());
60 }
62
64}
KisBrushBasedPaintOp(const KisPaintOpSettingsSP settings, KisPainter *painter, KisBrushTextureFlags textureFlags=None)
bool m_smudgeMode
KisFilterSP m_filter
KisSizeOption m_sizeOption
KisFilterConfigurationSP m_filterConfiguration
KisPaintDeviceSP m_tmpDevice
KisRotationOption m_rotationOption
static KisFilterRegistry * instance()
KisPaintDeviceSP createCompositionSourceDevice() const
void applyFanCornersInfo(KisPaintOp *op)
T get(const QString &id) const
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisPaintDeviceSP source() const

References KisRotationOption::applyFanCornersInfo(), KisPaintDevice::createCompositionSourceDevice(), KisSharedPtr< T >::data(), KisBaseProcessor::factoryConfiguration(), KisFilterOptionData::filterConfig, KisFilterOptionData::filterId, KoGenericRegistry< T >::get(), KisFilterRegistry::instance(), m_filter, m_filterConfiguration, m_rotationOption, m_smudgeMode, m_tmpDevice, KisPaintOp::painter, KisFilterOptionData::read(), KisFilterOptionData::smudgeMode, and KisPaintOp::source().

◆ ~KisFilterOp()

KisFilterOp::~KisFilterOp ( )
override

Definition at line 66 of file kis_filterop.cpp.

67{
68}

Member Function Documentation

◆ paintAt()

KisSpacingInformation KisFilterOp::paintAt ( const KisPaintInformation & info)
overrideprotectedvirtual

The implementation of painting of a dab and updating spacing. This does NOT need to update the timing information.

Implements KisPaintOp.

Definition at line 70 of file kis_filterop.cpp.

71{
72 if (!painter()) {
73 return KisSpacingInformation(1.0);
74 }
75
76 if (!m_filter) {
77 return KisSpacingInformation(1.0);
78 }
79
80 if (!source()) {
81 return KisSpacingInformation(1.0);
82 }
83
84 KisBrushSP brush = m_brush;
85 if (!brush) return KisSpacingInformation(1.0);
86
87 if (! brush->canPaintFor(info))
88 return KisSpacingInformation(1.0);
89
90 qreal scale = m_sizeOption.apply(info);
92 if (checkSizeTooSmall(scale)) return KisSpacingInformation();
93 qreal rotation = m_rotationOption.apply(info);
94 KisDabShape shape(scale, 1.0, rotation);
95
97 static KoColor color(Qt::black, cs);
98
99 QRect dstRect;
100 KisFixedPaintDeviceSP dab = m_dabCache->fetchDab(cs, color, info.pos(),
101 shape,
102 info, 1.0,
103 &dstRect);
104
105 if (dstRect.isEmpty()) return KisSpacingInformation(1.0);
106
107 QRect dabRect = dab->bounds();
108
109 // sanity check
110 Q_ASSERT(dstRect.size() == dabRect.size());
111
112
113 // Filter the paint device
114 QRect neededRect = m_filter->neededRect(dstRect, m_filterConfiguration, painter()->device()->defaultBounds()->currentLevelOfDetail());
115
117 if (!m_smudgeMode) {
118 p.setCompositeOpId(COMPOSITE_COPY);
119 }
120 p.bitBltOldData(neededRect.topLeft(), source(), neededRect);
121
122 KisTransaction transaction(m_tmpDevice);
124 transaction.end();
125
126 painter()->bitBltWithFixedSelection(dstRect.x(), dstRect.y(),
128 0, 0,
129 dstRect.x(), dstRect.y(),
130 dabRect.width(), dabRect.height());
131
132 painter()->renderMirrorMaskSafe(dstRect, m_tmpDevice, 0, 0, dab,
134
135 return effectiveSpacing(scale, rotation, info);
136}
const Params2D p
const QString COMPOSITE_COPY
KisSpacingInformation effectiveSpacing(qreal scale) const
bool needSeparateOriginal() const
KisFixedPaintDeviceSP fetchDab(const KoColorSpace *cs, KisColorSource *colorSource, const QPointF &cursorPoint, KisDabShape const &, const KisPaintInformation &info, qreal softnessFactor, QRect *dstDabRect, qreal lightnessStrength=1.0)
void process(const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
Definition kis_filter.cc:41
virtual QRect neededRect(const QRect &rect, const KisFilterConfigurationSP config, int lod) const
Definition kis_filter.cc:91
static qreal lodToScale(int levelOfDetail)
const QPointF & pos() const
void renderMirrorMaskSafe(QRect rc, KisFixedPaintDeviceSP dab, bool preserveDab)
void bitBltWithFixedSelection(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, const KisFixedPaintDeviceSP selection, qint32 selX, qint32 selY, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
qreal apply(const KisPaintInformation &info) const
qreal apply(const KisPaintInformation &info) const
KisFixedPaintDeviceSP dab
static KoColorSpaceRegistry * instance()
const KoColorSpace * alpha8()

References KoColorSpaceRegistry::alpha8(), KisRotationOption::apply(), KisStandardOption< Data >::apply(), KisPainter::bitBltWithFixedSelection(), KisFixedPaintDevice::bounds(), KisBrushBasedPaintOp::checkSizeTooSmall(), COMPOSITE_COPY, KisPaintOp::dab, KisBrushBasedPaintOp::effectiveSpacing(), KisTransaction::end(), KisDabCache::fetchDab(), KoColorSpaceRegistry::instance(), KisLodTransformBase::lodToScale(), KisBrushBasedPaintOp::m_brush, KisBrushBasedPaintOp::m_dabCache, m_filter, m_filterConfiguration, m_rotationOption, m_sizeOption, m_smudgeMode, m_tmpDevice, KisFilter::neededRect(), KisDabCache::needSeparateOriginal(), p, KisPaintOp::painter, KisPaintInformation::pos(), KisFilter::process(), KisPainter::renderMirrorMaskSafe(), and KisPaintOp::source().

◆ prepareEmbeddedResources()

QList< KoResourceLoadResult > KisFilterOp::prepareEmbeddedResources ( const KisPaintOpSettingsSP settings,
KisResourcesInterfaceSP resourcesInterface )
static

Definition at line 162 of file kis_filterop.cpp.

163{
164 QList<KoResourceLoadResult> resources = KisBrushBasedPaintOp::prepareEmbeddedResources(settings, resourcesInterface);
165
167 data.read(settings.data());
168
170 if (filter) {
171 KisFilterConfigurationSP config = filter->factoryConfiguration(settings->resourcesInterface());
172 config->fromXML(data.filterConfig);
173 resources << config->embeddedResources(resourcesInterface);
174 }
175
176 return resources;
177}
static QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)

References KisSharedPtr< T >::data(), KisBaseProcessor::factoryConfiguration(), KisFilterOptionData::filterConfig, KisFilterOptionData::filterId, KoGenericRegistry< T >::get(), KisFilterRegistry::instance(), KisBrushBasedPaintOp::prepareEmbeddedResources(), and KisFilterOptionData::read().

◆ prepareLinkedResources()

QList< KoResourceLoadResult > KisFilterOp::prepareLinkedResources ( const KisPaintOpSettingsSP settings,
KisResourcesInterfaceSP resourcesInterface )
static

Definition at line 145 of file kis_filterop.cpp.

146{
147 QList<KoResourceLoadResult> resources = KisBrushBasedPaintOp::prepareLinkedResources(settings, resourcesInterface);
148
150 data.read(settings.data());
151
153 if (filter) {
154 KisFilterConfigurationSP config = filter->factoryConfiguration(settings->resourcesInterface());
155 config->fromXML(data.filterConfig);
156 resources << config->linkedResources(resourcesInterface);
157 }
158
159 return resources;
160}
static QList< KoResourceLoadResult > prepareLinkedResources(const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)

References KisSharedPtr< T >::data(), KisBaseProcessor::factoryConfiguration(), KisFilterOptionData::filterConfig, KisFilterOptionData::filterId, KoGenericRegistry< T >::get(), KisFilterRegistry::instance(), KisBrushBasedPaintOp::prepareLinkedResources(), and KisFilterOptionData::read().

◆ updateSpacingImpl()

KisSpacingInformation KisFilterOp::updateSpacingImpl ( const KisPaintInformation & info) const
overrideprotectedvirtual

Implementation of a spacing update

Implements KisPaintOp.

Definition at line 138 of file kis_filterop.cpp.

139{
140 const qreal scale = m_sizeOption.apply(info) * KisLodTransform::lodToScale(painter()->device());
141 const qreal rotation = m_rotationOption.apply(info);
142 return effectiveSpacing(scale, rotation, info);
143}

References KisRotationOption::apply(), KisStandardOption< Data >::apply(), KisBrushBasedPaintOp::effectiveSpacing(), KisLodTransformBase::lodToScale(), m_rotationOption, m_sizeOption, and KisPaintOp::painter.

Member Data Documentation

◆ m_filter

KisFilterSP KisFilterOp::m_filter
private

Definition at line 45 of file kis_filterop.h.

◆ m_filterConfiguration

KisFilterConfigurationSP KisFilterOp::m_filterConfiguration
private

Definition at line 46 of file kis_filterop.h.

◆ m_rotationOption

KisRotationOption KisFilterOp::m_rotationOption
private

Definition at line 44 of file kis_filterop.h.

◆ m_sizeOption

KisSizeOption KisFilterOp::m_sizeOption
private

Definition at line 43 of file kis_filterop.h.

◆ m_smudgeMode

bool KisFilterOp::m_smudgeMode
private

Definition at line 47 of file kis_filterop.h.

◆ m_tmpDevice

KisPaintDeviceSP KisFilterOp::m_tmpDevice
private

Definition at line 42 of file kis_filterop.h.


The documentation for this class was generated from the following files: