Files
OmaPhoto/tests/BlurBrushTests.cpp
T

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"