Commit 2ddba7d7 authored by Cyrille Berger's avatar Cyrille Berger

make use of the new filter API

parent 6ee826b9
......@@ -86,11 +86,8 @@ void KisBContrastBenchmark::benchmarkFilter()
kfc->fromXML(s);
}
KisConstProcessingInformation src(m_device, QPoint(0, 0), 0);
KisProcessingInformation dst(m_device, QPoint(0, 0), 0);
QBENCHMARK{
filter->process(src, dst, QSize(GMP_IMAGE_WIDTH,GMP_IMAGE_HEIGHT), kfc);
filter->process(m_device, QRect(0, 0, GMP_IMAGE_WIDTH,GMP_IMAGE_HEIGHT), kfc);
}
}
......
......@@ -81,11 +81,9 @@ void KisBlurBenchmark::benchmarkFilter()
s = in.readAll();
kfc->fromXML(s);
}
KisConstProcessingInformation src(m_device, QPoint(0, 0), 0);
KisProcessingInformation dst(m_device, QPoint(0, 0), 0);
QBENCHMARK{
filter->process(src, dst, QSize(GMP_IMAGE_WIDTH,GMP_IMAGE_HEIGHT), kfc);
filter->process(m_device, QRect(0, 0, GMP_IMAGE_WIDTH,GMP_IMAGE_HEIGHT), kfc);
}
}
......
......@@ -31,6 +31,7 @@
#ifndef NDEBUG
#include <QTime>
#endif
#include <kis_iterator_ng.h>
typedef QPointer<KoUpdater> KoUpdaterPtr;
......@@ -42,50 +43,35 @@ KisColorTransformationFilter::~KisColorTransformationFilter()
{
}
void KisColorTransformationFilter::process(KisConstProcessingInformation srcInfo,
KisProcessingInformation dstInfo,
const QSize& size,
void KisColorTransformationFilter::process(KisPaintDeviceSP device,
const QRect& applyRect,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const
{
const KisPaintDeviceSP src = srcInfo.paintDevice();
KisPaintDeviceSP dst = dstInfo.paintDevice();
QPoint dstTopLeft = dstInfo.topLeft();
QPoint srcTopLeft = srcInfo.topLeft();
Q_UNUSED(config);
Q_ASSERT(!src.isNull());
Q_ASSERT(!dst.isNull());
Q_ASSERT(!device.isNull());
if (progressUpdater) {
progressUpdater->setRange(0, size.height());
progressUpdater->setRange(0, applyRect.height() * applyRect.width());
}
const KoColorSpace * cs = src->colorSpace();
const KoColorSpace * cs = device->colorSpace();
KoColorTransformation* colorTransformation = createTransformation(cs, config);
Q_ASSERT(colorTransformation);
if (!colorTransformation) return;
KisHLineConstIteratorPixel srcIt = src->createHLineConstIterator(srcTopLeft.x(), srcTopLeft.y(), size.width(), 0);
KisHLineIteratorPixel dstIt = dst->createHLineIterator(dstTopLeft.x(), dstTopLeft.y(), size.width(), 0);
KisRectIteratorSP it = device->createRectIteratorNG(applyRect);
int p = 0;
int conseq;
do {
conseq = it->nConseqPixels();
for (int row = 0; row < size.height(); ++row) {
while (! srcIt.isDone()) {
int srcItConseq = srcIt.nConseqHPixels();
int dstItConseq = dstIt.nConseqHPixels();
int conseqPixels = qMin(srcItConseq, dstItConseq);
colorTransformation->transform(it->oldRawData(), it->rawData(), conseq);
colorTransformation->transform(srcIt.oldRawData(), dstIt.rawData(), conseqPixels);
if (progressUpdater) progressUpdater->setValue(p += conseq);
// Update progress
srcIt += conseqPixels;
dstIt += conseqPixels;
}
if (progressUpdater) progressUpdater->setValue(row);
srcIt.nextRow();
dstIt.nextRow();
}
} while(it->nextPixels(conseq));
delete colorTransformation;
}
......@@ -33,9 +33,8 @@ public:
KisColorTransformationFilter(const KoID& id, const KoID & category, const QString & entry);
virtual ~KisColorTransformationFilter();
using KisFilter::process;
virtual void process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
virtual void process(KisPaintDeviceSP device,
const QRect& applyRect,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const;
......
......@@ -26,6 +26,7 @@
#include "kis_paint_device.h"
#include "kis_selection.h"
#include "kis_types.h"
#include <kis_painter.h>
KoID KisFilter::categoryAdjust()
{
......@@ -88,57 +89,48 @@ KisFilter::~KisFilter()
{
}
void KisFilter::process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
const KisFilterConfiguration* config) const
{
process(src, dst, size, config, 0);
}
void KisFilter::process(KisPaintDeviceSP device, const QRect& rect, const KisFilterConfiguration* config,
KoUpdater* progressUpdater) const
{
KisProcessingInformation info(device, rect.topLeft());
process(info, info, rect.size(), config, progressUpdater);
void KisFilter::process(const KisPaintDeviceSP src,
KisPaintDeviceSP dst,
KisSelectionSP sel,
const QRect& applyRect,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater ) const
{
QRect nR = neededRect(applyRect, config);
// Create a temporary device that will be filtered, sharing the source data
KisPaintDeviceSP temporary;
if(src == dst && sel == 0)
{
temporary = src;
} else {
temporary = new KisPaintDevice(src->colorSpace());
temporary->makeCloneFromRough(src, nR);
}
// Filter
process(temporary, applyRect, config, progressUpdater);
// Copy on destination, respecting the selection
if(temporary != src)
{
KisPainter p(dst);
p.setSelection(sel);
p.bitBlt(applyRect.topLeft(), temporary, applyRect);
}
}
void KisFilter::process(KisPaintDeviceSP device, const QRect& rect, const KisFilterConfiguration* config) const
{
KisProcessingInformation info(device, rect.topLeft());
process(info, info, rect.size(), config, 0);
}
bool KisFilter::workWith(const KoColorSpace* cs) const
{
Q_UNUSED(cs); return true;
}
int KisFilter::overlapMarginNeeded(const KisFilterConfiguration*) const
{
return 0;
}
QRect KisFilter::neededRect(const QRect & rect, const KisFilterConfiguration* c) const
{
QRect rc = rect;
int margin = overlapMarginNeeded(c);
rc.setLeft(rect.left() - margin);
rc.setTop(rect.top() - margin);
rc.setRight(rect.right() + margin);
rc.setBottom(rect.bottom() + margin);
return rc;
Q_UNUSED(c);
return rect;
}
QRect KisFilter::changedRect(const QRect & rect, const KisFilterConfiguration* c) const
{
QRect rc = rect;
int margin = overlapMarginNeeded(c);
rc.setLeft(rect.left() - margin);
rc.setTop(rect.top() - margin);
rc.setRight(rect.right() + margin);
rc.setBottom(rect.bottom() + margin);
return rc;
Q_UNUSED(c);
return rect;
}
......@@ -32,9 +32,6 @@
#include "krita_export.h"
class KisConstProcessingInformation;
class KisProcessingInformation;
/**
* Basic interface of a Krita filter.
*/
......@@ -66,54 +63,35 @@ public:
/**
* Override this function with the implementation of your filter.
*
* XXX: May the filter may assume that src and dst have the same
* colorspace? (bsar)
*
* @param src the source paint device
* @param dst the destination paint device
* @param size the size of the area that is filtered
* @param device the paint device to filter
* @param applyRect the rectangle where the filter is applied
* @param config the parameters of the filter
* @param progressUpdater to pass on the progress the filter is making
*/
virtual void process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
virtual void process(KisPaintDeviceSP device,
const QRect& applyRect,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const = 0;
KoUpdater* progressUpdater = 0 ) const = 0;
/**
* Provided for convenience when no progress reporting is needed.
*/
virtual void process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
const KisFilterConfiguration* config
) const;
/**
* Provided for convenience only when source and destination are the same
*/
void process(KisPaintDeviceSP device, const QRect& rect, const KisFilterConfiguration* config,
KoUpdater* progressUpdater) const;
/**
* Provided for convenience only when source and destination are the same and no progress reporting
* is necessary.
* Take the src paint device copy it to a temporary device, filter it,
* copy and apply the selection on the destination.
*
* @param src the source paint device
* @param dst the destination paint device
* @param sel the selection
* @param applyRect the rectangle where the filter is applied
* @param config the parameters of the filter
* @param progressUpdater to pass on the progress the filter is making
*/
void process(KisPaintDeviceSP device, const QRect& rect, const KisFilterConfiguration* config) const;
void process(const KisPaintDeviceSP src,
KisPaintDeviceSP dst,
KisSelectionSP sel,
const QRect& applyRect,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater = 0 ) const;
bool workWith(const KoColorSpace* cs) const;
/**
* Used when threading is used -- the overlap margin is passed to the
* filter to use to compute pixels, but the margin is not pasted into the
* resulting image. Use this for convolution filters, for instance.
*
* This function is deprecated, use \ref neededRect instead
*/
KDE_DEPRECATED virtual int overlapMarginNeeded(const KisFilterConfiguration* = 0) const;
/**
* Some filters need pixels outside the current processing rect to compute the new
......
......@@ -58,11 +58,7 @@ void KisFilterJob::run()
tempDevice = m_selection ?
new KisPaintDevice(m_dev->colorSpace()) : m_dev;
m_filter->process(KisConstProcessingInformation(m_dev, m_rc.topLeft(), 0),
KisProcessingInformation(tempDevice, m_rc.topLeft(), 0),
m_rc.size(),
m_config,
m_updater);
m_filter->process(m_dev, m_dev, m_selection, m_rc, m_config, m_updater);
if(tempDevice != m_dev) {
KisPainter gc(m_dev);
......
......@@ -97,13 +97,6 @@ public:
if(!m_projection) return true;
QRect applyRect = m_updateRect & m_projection->extent();
/**
* FIXME: check whether it's right to leave a selection to
* a projection mechanism, not for the filter
*/
KisConstProcessingInformation srcCfg(m_projection, applyRect.topLeft(), 0);
KisProcessingInformation dstCfg(originalDevice, applyRect.topLeft(), 0);
Q_ASSERT(layer->nodeProgressProxy());
KoProgressUpdater updater(layer->nodeProgressProxy());
......@@ -111,8 +104,7 @@ public:
QPointer<KoUpdater> updaterPtr = updater.startSubtask();
// We do not create a transaction here, as srcDevice != dstDevice
filter->process(srcCfg, dstCfg, applyRect.size(),
filterConfig, updaterPtr);
filter->process(m_projection, originalDevice, 0, applyRect, filterConfig, updaterPtr);
updaterPtr->setProgress(100);
......
......@@ -108,16 +108,12 @@ QRect KisFilterMask::decorateRect(KisPaintDeviceSP &src,
return QRect();
}
KisConstProcessingInformation srcInfo(src, rc.topLeft(), 0);
KisProcessingInformation dstInfo(dst, rc.topLeft(), 0);
KoProgressUpdater updater(nodeProgressProxy());
updater.start(100, filter->name());
QPointer<KoUpdater> updaterPtr = updater.startSubtask();
filter->process(srcInfo, dstInfo, rc.size(),
m_d->filterConfig, updaterPtr);
filter->process(src, dst, 0, rc, m_d->filterConfig, updaterPtr);
updaterPtr->setProgress(100);
......
......@@ -848,7 +848,7 @@ KisRectIteratorSP KisPaintDevice::createRectIteratorNG(qint32 x, qint32 y, qint3
return new KisRectIterator2(m_datamanager.data(), x, y, w, h, m_d->x, m_d->y, true);
}
KisRectIteratorSP KisPaintDevice::createRectIteratorNG(const QRect& r) const
KisRectIteratorSP KisPaintDevice::createRectIteratorNG(const QRect& r)
{
return createRectIteratorNG(r.x(), r.y(), r.width(), r.height());
}
......
......@@ -161,13 +161,11 @@ void KisFilterSelectionsBenchmark::testUsualSelections(int num)
KisTimeCounter timer;
QRect filterRect = m_selection->selectedExactRect();
KisConstProcessingInformation src(m_device, filterRect.topLeft(), m_selection);
KisProcessingInformation dst(projection, filterRect.topLeft(), 0);
timer.restart();
for (int i = 0; i < num; i++) {
KisTransaction transac("", projection, 0);
m_filter->process(src, dst, filterRect.size(), m_configuration, 0);
m_filter->process(m_device, projection, m_selection, filterRect, m_configuration, 0);
}
avTime = double(timer.elapsed()) / num;
......@@ -186,13 +184,11 @@ void KisFilterSelectionsBenchmark::testNoSelections(int num)
KisTimeCounter timer;
QRect filterRect = m_selection->selectedExactRect();
KisConstProcessingInformation src(m_device, filterRect.topLeft(), 0);
KisProcessingInformation dst(projection, filterRect.topLeft(), 0);
timer.restart();
for (int i = 0; i < num; i++) {
KisTransaction transac("", projection, 0);
m_filter->process(src, dst, filterRect.size(), m_configuration, 0);
m_filter->process(m_device, projection, 0, filterRect, m_configuration, 0);
}
avTime = double(timer.elapsed()) / num;
......@@ -246,11 +242,8 @@ void KisFilterSelectionsBenchmark::testBitBltWOSelections(int num)
for (int i = 0; i < num; i++) {
KisPaintDeviceSP cacheDevice = new KisPaintDevice(projection->colorSpace());
KisConstProcessingInformation src(m_device, filterRect.topLeft(), 0);
KisProcessingInformation dst(cacheDevice, filterRect.topLeft(), 0);
KisTransaction transac("", cacheDevice, 0);
m_filter->process(src, dst, filterRect.size(), m_configuration, 0);
m_filter->process(m_device, projection, 0, filterRect, m_configuration, 0);
KisPainter painter(projection);
painter.beginTransaction("");
......@@ -280,11 +273,8 @@ void KisFilterSelectionsBenchmark::testBitBltSelections(int num)
for (int i = 0; i < num; i++) {
KisPaintDeviceSP cacheDevice = new KisPaintDevice(projection->colorSpace());
KisConstProcessingInformation src(m_device, filterRect.topLeft(), 0);
KisProcessingInformation dst(cacheDevice, filterRect.topLeft(), 0);
KisTransaction transac("", cacheDevice, 0);
m_filter->process(src, dst, filterRect.size(), m_configuration, 0);
m_filter->process(m_device, cacheDevice, 0, filterRect, m_configuration, 0);
KisPainter gc(projection);
gc.beginTransaction("");
......
......@@ -41,13 +41,11 @@ public:
using KisFilter::process;
void process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
void process(KisPaintDeviceSP src,
const QRect& size,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater) const {
Q_UNUSED(src);
Q_UNUSED(dst);
Q_UNUSED(size);
Q_UNUSED(config);
Q_UNUSED(progressUpdater);
......@@ -79,10 +77,7 @@ void KisFilterTest::testWithProgressUpdater()
KisFilterConfiguration * kfc = f->defaultConfiguration(0);
Q_ASSERT(kfc);
KisConstProcessingInformation src(dev, QPoint(0, 0), 0);
KisProcessingInformation dst(dev, QPoint(0, 0), 0);
f->process(src, dst, qimage.size(), kfc, updater);
f->process(dev, QRect(QPoint(0,0), qimage.size()), kfc, updater);
QPoint errpoint;
if (!TestUtil::compareQImages(errpoint, inverted, dev->convertToQImage(0, 0, 0, qimage.width(), qimage.height()))) {
......@@ -108,10 +103,7 @@ void KisFilterTest::testSingleThreaded()
KisFilterConfiguration * kfc = f->defaultConfiguration(0);
Q_ASSERT(kfc);
KisConstProcessingInformation src(dev, QPoint(0, 0), 0);
KisProcessingInformation dst(dev, QPoint(0, 0), 0);
f->process(src, dst, qimage.size(), kfc);
f->process(dev, QRect(QPoint(0,0), qimage.size()), kfc);
QPoint errpoint;
if (!TestUtil::compareQImages(errpoint, inverted, dev->convertToQImage(0, 0, 0, qimage.width(), qimage.height()))) {
......@@ -140,10 +132,7 @@ void KisFilterTest::testDifferentSrcAndDst()
KisFilterConfiguration * kfc = f->defaultConfiguration(0);
Q_ASSERT(kfc);
KisConstProcessingInformation srcCfg(src, QPoint(0, 0), sel);
KisProcessingInformation dstCfg(dst, QPoint(0, 0), sel);
f->process(srcCfg, dstCfg, qimage.size(), kfc);
f->process(src, dst, sel, QRect(QPoint(0,0), qimage.size()), kfc);
QPoint errpoint;
if (!TestUtil::compareQImages(errpoint, inverted, dst->convertToQImage(0, 0, 0, qimage.width(), qimage.height()))) {
......@@ -184,17 +173,13 @@ void KisFilterTest::testOldDataApiAfterCopy()
KisFilterConfiguration * kfc = f->defaultConfiguration(0);
Q_ASSERT(kfc);
KisConstProcessingInformation srcCfg(dst, updateRect.topLeft(), 0);
KisProcessingInformation dstCfg(tmp, updateRect.topLeft(), 0);
/**
* This filter reads from oldRawData, so if we have some
* weirdness with transactions it will read from old and non-cleared
* version of the device and we will see a black square instead
* of empty device in tmp
*/
f->process(srcCfg, dstCfg, updateRect.size(), kfc);
f->process(src, dst, 0, updateRect, kfc);
/**
* In theory, both devices: dst and tmp must be empty by now
......@@ -236,13 +221,8 @@ void KisFilterTest::testBlurFilterApplicationRect()
KisFilterConfiguration * kfc = f->defaultConfiguration(0);
Q_ASSERT(kfc);
KisConstProcessingInformation src1Cfg(src1, filterRect.topLeft(), 0);
KisProcessingInformation dst1Cfg(dst1, filterRect.topLeft(), 0);
KisConstProcessingInformation src2Cfg(src2, filterRect.topLeft(), 0);
KisProcessingInformation dst2Cfg(dst2, filterRect.topLeft(), 0);
f->process(src1Cfg, dst1Cfg, filterRect.size(), kfc);
f->process(src2Cfg, dst2Cfg, filterRect.size(), kfc);
f->process(src1, dst1, 0, filterRect, kfc);
f->process(src2, dst2, 0, filterRect, kfc);
KisPaintDeviceSP reference = new KisPaintDevice(cs);
reference->fill(filterRect.left(),filterRect.top(),filterRect.width(),filterRect.height(), whitePixel);
......
......@@ -55,12 +55,12 @@ QString KisScriptFilter::category() const
return d->action->property("category").toString();
}
void KisScriptFilter::process(KisConstProcessingInformation srcInfo, KisProcessingInformation dstInfo, const QSize& size, const KisFilterConfiguration* config, KoUpdater*) const
void KisScriptFilter::process(KisPaintDeviceSP src, const QRect& size, const KisFilterConfiguration* config, KoUpdater*) const
{
Q_UNUSED(config);
d->action->trigger();
emit scriptProcess(new Scripting::ConstPaintDevice(srcInfo.paintDevice(), 0), srcInfo.topLeft(), new Scripting::PaintDevice(dstInfo.paintDevice(), 0), dstInfo.topLeft(), size, 0);
emit scriptProcess(new Scripting::PaintDevice(src), size, 0);
}
#include "kis_script_filter.moc"
......@@ -41,11 +41,11 @@ public:
using KisFilter::process;
virtual void process(KisConstProcessingInformation srcInfo, KisProcessingInformation dstInfo, const QSize& size, const KisFilterConfiguration* config, KoUpdater*) const;
virtual void process(KisPaintDeviceSP src, const QRect& size, const KisFilterConfiguration* config, KoUpdater*) const;
public Q_SLOTS:
QString category() const;
signals:
void scriptProcess(QObject* src, const QPoint& srcTopLeft, QObject* dst, const QPoint& dstTopLeft, const QSize& size, QObject* config) const;
void scriptProcess(QObject* src, const QRect& srcTopLeft, QObject* config) const;
private:
class Private;
Private* const d;
......
......@@ -55,17 +55,14 @@ KisConfigWidget* ShivaFilter::createConfigurationWidget(QWidget* parent, const K
return new ShivaGeneratorConfigWidget(m_source, parent);
}
void ShivaFilter::process(KisConstProcessingInformation srcInfo,
KisProcessingInformation dstInfo,
const QSize& size,
void ShivaFilter::process(KisPaintDeviceSP dev,
const QRect& size,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const
{
Q_UNUSED(progressUpdater);
KisPaintDeviceSP src = srcInfo.paintDevice();
KisPaintDeviceSP dst = dstInfo.paintDevice();
QPoint dstTopLeft = dstInfo.topLeft();
QPoint dstTopLeft = size.topLeft();
UpdaterProgressReport* report = 0;
if (progressUpdater) {
......@@ -73,8 +70,7 @@ void ShivaFilter::process(KisConstProcessingInformation srcInfo,
report = new UpdaterProgressReport(progressUpdater);
}
Q_ASSERT(!src.isNull());
Q_ASSERT(!dst.isNull());
Q_ASSERT(!dev.isNull());
// Q_ASSERT(config);
// TODO support for selection
OpenShiva::Kernel kernel;
......@@ -104,8 +100,8 @@ void ShivaFilter::process(KisConstProcessingInformation srcInfo,
kernel.compile();
}
if (kernel.isCompiled()) {
ConstPaintDeviceImage pdisrc(src);
PaintDeviceImage pdi(dst);
ConstPaintDeviceImage pdisrc(dev);
PaintDeviceImage pdi(dev);
#if OPENSHIVA_12
std::list< GTLCore::AbstractImage* > inputs;
GTLCore::Region region(dstTopLeft.x(), dstTopLeft.y() , size.width(), size.height());
......
......@@ -33,9 +33,8 @@ public:
using KisFilter::process;
virtual void process(KisConstProcessingInformation src,
KisProcessingInformation dst,
const QSize& size,
virtual void process(KisPaintDeviceSP dev,
const QRect& size,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const;
......
add_subdirectory( tests )
add_subdirectory( blur )
add_subdirectory( bumpmap )
add_subdirectory( colors )
add_subdirectory( colorsfilters )
add_subdirectory( convolutionfilters )
add_subdirectory( embossfilter )
add_subdirectory( example )
add_subdirectory( fastcolortransfer )
add_subdirectory( imageenhancement )
add_subdirectory( noisefilter )
add_subdirectory( oilpaintfilter )
add_subdirectory( pixelizefilter )
add_subdirectory( raindropsfilter )
add_subdirectory( randompickfilter )
add_subdirectory( roundcorners )
add_subdirectory( smalltilesfilter )
add_subdirectory( sobelfilter )
add_subdirectory( unsharp )
add_subdirectory( wavefilter )
add_subdirectory( cubismfilter )
add_subdirectory( levelfilter )
add_subdirectory( dodgeburn )
add_subdirectory( phongbumpmap )
# add_subdirectory( blur )
# add_subdirectory( bumpmap )
# add_subdirectory( colors )
# add_subdirectory( colorsfilters )
# add_subdirectory( convolutionfilters )
# add_subdirectory( embossfilter )
# add_subdirectory( example )
# add_subdirectory( fastcolortransfer )
# add_subdirectory( imageenhancement )
# add_subdirectory( noisefilter )
# add_subdirectory( oilpaintfilter )
# add_subdirectory( pixelizefilter )
# add_subdirectory( raindropsfilter )
# add_subdirectory( randompickfilter )
# add_subdirectory( roundcorners )
# add_subdirectory( smalltilesfilter )
# add_subdirectory( sobelfilter )
# add_subdirectory( unsharp )
# add_subdirectory( wavefilter )
# add_subdirectory( cubismfilter )
# add_subdirectory( levelfilter )
# add_subdirectory( dodgeburn )
# add_subdirectory( phongbumpmap )
message(STATUS "Filters that still need to be fixed: bumpmap")
......@@ -87,10 +87,7 @@ bool testFilterSrcNotIsDev(KisFilterSP f)
}
qDebug() << f->id();// << "\n" << kfc->toXML() << "\n";
KisConstProcessingInformation src(dev, QPoint(0, 0), 0);
KisProcessingInformation dst(dstdev, QPoint(0, 0), 0);
f->process(src, dst, qimage.size(), kfc);
f->process(dev, dstdev, 0, QRect(QPoint(0,0), qimage.size()), kfc);
QPoint errpoint;
......@@ -128,10 +125,7 @@ bool testFilterNoTransaction(KisFilterSP f)
}
qDebug() << f->id();// << "\n" << kfc->toXML() << "\n";