Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFilter Class Referenceabstract

#include <kis_filter.h>

+ Inheritance diagram for KisFilter:

Public Member Functions

virtual QRect changedRect (const QRect &rect, const KisFilterConfigurationSP config, int lod) const
 
virtual bool configurationAllowedForMask (KisFilterConfigurationSP config) const
 
virtual void fixLoadedFilterConfigurationForMasks (KisFilterConfigurationSP config) const
 
 KisFilter (const KoID &id, const KoID &category, const QString &entry)
 
virtual QRect neededRect (const QRect &rect, const KisFilterConfigurationSP config, int lod) const
 
virtual bool needsTransparentPixels (const KisFilterConfigurationSP config, const KoColorSpace *cs) const
 
void process (const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
 
void process (KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
 
virtual void processImpl (KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const =0
 
virtual bool supportsLevelOfDetail (const KisFilterConfigurationSP config, int lod) const
 
 ~KisFilter () override
 
- Public Member Functions inherited from KisBaseProcessor
KisBookmarkedConfigurationManagerbookmarkManager ()
 
const KisBookmarkedConfigurationManagerbookmarkManager () const
 
ColorSpaceIndependence colorSpaceIndependence () const
 
virtual KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const
 
virtual KisFilterConfigurationSP defaultConfiguration (KisResourcesInterfaceSP resourcesInterface) const
 
virtual KisFilterConfigurationSP factoryConfiguration (KisResourcesInterfaceSP resourcesInterface) const
 
QString id () const
 
 KisBaseProcessor (const KoID &id, const KoID &category, const QString &entry)
 
KoID menuCategory () const
 
QString menuEntry () const
 
QString name () const
 
 Private ()
 
QKeySequence shortcut () const
 
bool showConfigurationWidget ()
 If true, the filter wants to show a configuration widget.
 
bool supportsAdjustmentLayers () const
 This filter can be used in adjustment layers.
 
bool supportsPainting () const
 
bool supportsThreading () const
 
virtual ~KisBaseProcessor ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Protected Member Functions

QString configEntryGroup () const
 
void setSupportsLevelOfDetail (bool value)
 
- Protected Member Functions inherited from KisBaseProcessor
void init (const QString &configEntryGroup)
 
void setColorSpaceIndependence (ColorSpaceIndependence v)
 
void setShortcut (const QKeySequence &shortcut)
 
void setShowConfigurationWidget (bool v)
 
void setSupportsAdjustmentLayers (bool v)
 
void setSupportsPainting (bool v)
 
void setSupportsThreading (bool v)
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Private Attributes

bool m_supportsLevelOfDetail
 

Additional Inherited Members

- Public Attributes inherited from KisBaseProcessor
KisBookmarkedConfigurationManagerbookmarkManager
 
KoID category
 
ColorSpaceIndependence colorSpaceIndependence
 
QString entry
 
KoID id
 
QKeySequence shortcut
 
bool showConfigurationWidget
 
bool supportsAdjustmentLayers
 
bool supportsPainting
 
bool supportsThreading
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

Basic interface of a Krita filter.

Definition at line 26 of file kis_filter.h.

Constructor & Destructor Documentation

◆ KisFilter()

KisFilter::KisFilter ( const KoID & id,
const KoID & category,
const QString & entry )

Construct a Krita filter

Definition at line 22 of file kis_filter.cc.

25{
26 init(id() + "_filter_bookmarks");
27}
bool m_supportsLevelOfDetail
Definition kis_filter.h:113
void init(const QString &configEntryGroup)
KisBaseProcessor(const KoID &id, const KoID &category, const QString &entry)

References KisBaseProcessor::init().

◆ ~KisFilter()

KisFilter::~KisFilter ( )
override

Definition at line 29 of file kis_filter.cc.

30{
31}

Member Function Documentation

◆ changedRect()

QRect KisFilter::changedRect ( const QRect & rect,
const KisFilterConfigurationSP config,
int lod ) const
virtual

Similar to neededRect : some filters will alter a lot of pixels that are near to each other at the same time. So when you changed a single rectangle in a device, the actual rectangle that will feel the influence of this change might be bigger. Use this function to determine that rect.

Reimplemented in KisBlurFilter, KisGaussianBlurFilter, KisLensBlurFilter, KisMotionBlurFilter, KisConvertHeightToNormalMapFilter, KisConvolutionFilter, KisEdgeDetectionFilter, KisGaussianHighPassFilter, KisSimpleNoiseReducer, KisOilPaintFilter, KisUnsharpFilter, KisFilterPhongBumpmap, KisPixelizeFilter, KisPropagateColorsFilter, KisFilterRandomPick, and KisFilterWave.

Definition at line 98 of file kis_filter.cc.

99{
100 Q_UNUSED(c);
101 Q_UNUSED(lod);
102 return rect;
103}

◆ configEntryGroup()

QString KisFilter::configEntryGroup ( ) const
protected

◆ configurationAllowedForMask()

bool KisFilter::configurationAllowedForMask ( KisFilterConfigurationSP config) const
virtual

Reimplemented in KisGaussianBlurFilter.

Definition at line 125 of file kis_filter.cc.

126{
127 Q_UNUSED(config);
129}

References KisBaseProcessor::supportsAdjustmentLayers.

◆ fixLoadedFilterConfigurationForMasks()

void KisFilter::fixLoadedFilterConfigurationForMasks ( KisFilterConfigurationSP config) const
virtual

Reimplemented in KisGaussianBlurFilter.

Definition at line 131 of file kis_filter.cc.

132{
133 Q_UNUSED(config);
134}

◆ neededRect()

QRect KisFilter::neededRect ( const QRect & rect,
const KisFilterConfigurationSP config,
int lod ) const
virtual

Some filters need pixels outside the current processing rect to compute the new value (for instance, convolution filters)

Reimplemented in KisBlurFilter, KisGaussianBlurFilter, KisLensBlurFilter, KisMotionBlurFilter, KisConvertHeightToNormalMapFilter, KisConvolutionFilter, KisEdgeDetectionFilter, KisGaussianHighPassFilter, KisSimpleNoiseReducer, KisOilPaintFilter, KisUnsharpFilter, KisFilterPhongBumpmap, KisPixelizeFilter, KisPropagateColorsFilter, KisFilterRandomPick, and KisFilterWave.

Definition at line 91 of file kis_filter.cc.

92{
93 Q_UNUSED(c);
94 Q_UNUSED(lod);
95 return rect;
96}

◆ needsTransparentPixels()

bool KisFilter::needsTransparentPixels ( const KisFilterConfigurationSP config,
const KoColorSpace * cs ) const
virtual

Reimplemented in KisFilterASCCDL, KisMultiChannelFilter, KisFilterInvert, KisPropagateColorsFilter, and KisResetTransparentFilter.

Definition at line 117 of file kis_filter.cc.

118{
119 Q_UNUSED(config);
120 Q_UNUSED(cs);
121
122 return false;
123}

◆ process() [1/2]

void KisFilter::process ( const KisPaintDeviceSP src,
KisPaintDeviceSP dst,
KisSelectionSP selection,
const QRect & applyRect,
const KisFilterConfigurationSP config,
KoUpdater * progressUpdater = 0 ) const

Filter src device and write the result into dst device. If dst is an alpha color space device, it will get special treatment.

Parameters
srcthe source paint device
dstthe destination paint device
selectionthe selection
applyRectthe rectangle where the filter is applied
configthe parameters of the filter
progressUpdaterto pass on the progress the filter is making

Definition at line 41 of file kis_filter.cc.

47{
48 KIS_SAFE_ASSERT_RECOVER_NOOP(config->hasLocalResourcesSnapshot());
49
50 if (applyRect.isEmpty()) return;
51 QRect needRect = neededRect(applyRect, config, src->defaultBounds()->currentLevelOfDetail());
52
53 KisPaintDeviceSP temporary;
54 KisTransaction *transaction = 0;
55
56 bool weirdDstColorSpace =
57 dst->colorSpace() != dst->compositionSourceColorSpace() &&
58 *dst->colorSpace() != *dst->compositionSourceColorSpace();
59
60 if(src == dst && !selection && !weirdDstColorSpace) {
61 temporary = src;
62 }
63 else {
64 temporary = dst->createCompositionSourceDevice(src, needRect);
65 transaction = new KisTransaction(temporary);
66 }
67
68 try {
69 QScopedPointer<KoDummyUpdaterHolder> updaterHolder;
70
71 if (!progressUpdater) {
72 // TODO: remove dependency on KoUpdater, depend on KoProgressProxy,
73 // it is more lightweight
74 updaterHolder.reset(new KoDummyUpdaterHolder());
75 progressUpdater = updaterHolder->updater();
76 }
77
78 processImpl(temporary, applyRect, config, progressUpdater);
79 }
80 catch (const std::bad_alloc&) {
81 warnKrita << "Filter" << name() << "failed to allocate enough memory to run.";
82 }
83
84
85 if(transaction) {
86 delete transaction;
87 KisPainter::copyAreaOptimized(applyRect.topLeft(), temporary, dst, applyRect, selection);
88 }
89}
virtual void processImpl(KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const =0
virtual QRect neededRect(const QRect &rect, const KisFilterConfigurationSP config, int lod) const
Definition kis_filter.cc:91
KisPaintDeviceSP createCompositionSourceDevice() const
virtual const KoColorSpace * compositionSourceColorSpace() const
const KoColorSpace * colorSpace() const
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
A holder for an updater that does nothing.
Definition KoUpdater.h:116
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
#define warnKrita
Definition kis_debug.h:87

References KisPaintDevice::colorSpace(), KisPaintDevice::compositionSourceColorSpace(), KisPainter::copyAreaOptimized(), KisPaintDevice::createCompositionSourceDevice(), KIS_SAFE_ASSERT_RECOVER_NOOP, KisBaseProcessor::name(), neededRect(), processImpl(), and warnKrita.

◆ process() [2/2]

void KisFilter::process ( KisPaintDeviceSP device,
const QRect & applyRect,
const KisFilterConfigurationSP config,
KoUpdater * progressUpdater = 0 ) const

A convenience method for a two-device process() function

Definition at line 33 of file kis_filter.cc.

37{
38 process(device, device, KisSelectionSP(), applyRect, config, progressUpdater);
39}
void process(const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
Definition kis_filter.cc:41
KisSharedPtr< KisSelection > KisSelectionSP
Definition kis_types.h:149

References process().

◆ processImpl()

virtual void KisFilter::processImpl ( KisPaintDeviceSP device,
const QRect & applyRect,
const KisFilterConfigurationSP config,
KoUpdater * progressUpdater = 0 ) const
pure virtual

Override this function with the implementation of your filter.

This is a low level function that expects all the conditions for the

Parameters
devicebe met. Use usual process() methods instead.
devicethe paint device to filter
applyRectthe rectangle where the filter is applied
configthe parameters of the filter
progressUpdaterto pass on the progress the filter is making

Implemented in KisGaussianHighPassFilter, KisColorTransformationFilter, KisAutoContrast, KisConvolutionFilter, KisEmbossFilter, KisFilterFastColorTransfer, KisGradientMapFilter, KisHalftoneFilter, KisSimpleNoiseReducer, KisWaveletNoiseReduction, KisFilterNoise, KisOilPaintFilter, KisFilterPalettize, KisFilterPhongBumpmap, KisPixelizeFilter, KisPropagateColorsFilter, KisRainDropsFilter, KisFilterRandomPick, KisRoundCornersFilter, KisSmallTilesFilter, KisFilterThreshold, KisUnsharpFilter, KisFilterWave, KisResetTransparentFilter, KisGaussianBlurFilter, KisFilterColorToAlpha, KisFilterMin, KisFilterFastColorOverlay, KisConvertHeightToNormalMapFilter, KisEdgeDetectionFilter, KisBlurFilter, KisLensBlurFilter, KisMotionBlurFilter, and KisFilterMax.

◆ setSupportsLevelOfDetail()

void KisFilter::setSupportsLevelOfDetail ( bool value)
protected

Definition at line 112 of file kis_filter.cc.

113{
115}
float value(const T *src, size_t ch)

References m_supportsLevelOfDetail, and value().

◆ supportsLevelOfDetail()

bool KisFilter::supportsLevelOfDetail ( const KisFilterConfigurationSP config,
int lod ) const
virtual

Returns true if the filter is capable of handling LoD scaled planes when generating preview.

Definition at line 105 of file kis_filter.cc.

106{
107 Q_UNUSED(config);
108 Q_UNUSED(lod);
110}

References m_supportsLevelOfDetail.

Member Data Documentation

◆ m_supportsLevelOfDetail

bool KisFilter::m_supportsLevelOfDetail
private

Definition at line 113 of file kis_filter.h.


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