56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
#include "BrushFixtures.h"
|
|
#include "Document/EditorSession.h"
|
|
|
|
// Swift's BlurBrushTests: Radius sets the reach, whatever the size.
|
|
namespace {
|
|
// A hard edge blurred along: row 50's gray columns.
|
|
int spread(double radius, double diameter = 60)
|
|
{
|
|
EditorSession session;
|
|
session.createDocument(200, 100);
|
|
QImage image = BrushRaster::context(200, 100, false);
|
|
image.fill(Qt::black);
|
|
QPainter(&image).fillRect(QRect(100, 0, 100, 100), Qt::white);
|
|
session.insert(ImportedImage(image, image, QStringLiteral("Edge")));
|
|
session.selectTool(NavigationTool::blur);
|
|
session.setBlurMode(BlurToolMode::blur);
|
|
BrushSettings settings = session.brushSettings();
|
|
settings.diameter = diameter;
|
|
settings.hardness = 1;
|
|
settings.blurRadius = radius;
|
|
session.setBrushSettings(settings);
|
|
session.beginBrush(QPointF(100, 20));
|
|
session.continueBrush(QPointF(100, 80));
|
|
session.finishBrushImmediately();
|
|
const QImage result = session.activeLayer().value().asset.value().image().convertToFormat(QImage::Format_RGBA8888_Premultiplied);
|
|
int gray = 0;
|
|
for (int x = 0; x < 200; ++x) {
|
|
const int value = result.constScanLine(50)[x * 4];
|
|
gray += value > 10 && value < 245;
|
|
}
|
|
return gray;
|
|
}
|
|
}
|
|
|
|
class BlurBrushTests : public QObject {
|
|
Q_OBJECT
|
|
private slots:
|
|
void radiusSetsHowFarItSoftens();
|
|
};
|
|
|
|
void BlurBrushTests::radiusSetsHowFarItSoftens()
|
|
{
|
|
const int narrow = spread(2), wide = spread(12);
|
|
QVERIFY2(wide > narrow * 2, qPrintable(QString("%1 against %2").arg(narrow).arg(wide)));
|
|
QCOMPARE(narrow, 6);
|
|
QCOMPARE(wide, 42);
|
|
// The brush size leaves the reach alone.
|
|
QCOMPARE(spread(12, 80), wide);
|
|
// Past its ends, Radius holds to 0.5 and 50.
|
|
QCOMPARE(spread(0.1), spread(0.5));
|
|
QCOMPARE(spread(80), spread(50));
|
|
}
|
|
|
|
QTEST_GUILESS_MAIN(BlurBrushTests)
|
|
#include "BlurBrushTests.moc"
|