Blur and noise adjustment layers, Image Trim, Inner Glow (12.8c)

This commit is contained in:
雷电芽衣 committed 2026-09-28 08:35:59 -04:00
1 parent 7ae263de80
commit 31e2dd3864
60 files changed
+1673 -105

No files matched your search

+14 -13
View File
@@ -27,16 +27,6 @@ bool opened(EditorSession &session, QUuid id)
{
return awaited([&](std::function<void()> done) { session.beginAdjustmentEditing(id, std::move(done)); });
}
// The pixels the open editor reads, premultiplied RGBA.
std::vector<int> input(const EditorSession &session)
{
const QImage image = session.levels().value().original.image().convertToFormat(QImage::Format_RGBA8888_Premultiplied);
std::vector<int> result;
for (int y = 0; y < image.height(); ++y)
result.insert(result.end(), image.constScanLine(y), image.constScanLine(y) + image.width() * 4);
return result;
}
}
class AdjustmentEditorTests : public QObject {
@@ -104,6 +94,9 @@ void AdjustmentEditorTests::sharedEditorsKeepPixelsDynamicAndSupportCancel()
case AdjustmentKind::exposure:
case AdjustmentKind::gradientMap:
case AdjustmentKind::grain:
case AdjustmentKind::addNoise:
case AdjustmentKind::gaussianBlur:
case AdjustmentKind::motionBlur:
case AdjustmentKind::blackWhite:
case AdjustmentKind::colorBalance: {
QVERIFY(session.filterEdit().value().kind == filterKind(kind));
@@ -116,12 +109,15 @@ void AdjustmentEditorTests::sharedEditorsKeepPixelsDynamicAndSupportCancel()
settings.blackWhite.reds = 100;
else if (kind == AdjustmentKind::colorBalance)
settings.colorBalance.midCyanRed = 50;
else if (kind != AdjustmentKind::grain)
(kind == AdjustmentKind::gaussianBlur ? settings.radius : kind == AdjustmentKind::motionBlur ? settings.distance : settings.amount) = 40;
else
settings.grain.amount = 70;
session.updateFilter(settings, true);
const LayerAdjustment live = session.activeLayer().value().adjustment.value();
QVERIFY(live.exposure() == settings.exposure && live.gradientMap() == settings.gradientMap && live.grain() == settings.grain
&& live.blackWhite() == settings.blackWhite && live.colorBalance() == settings.colorBalance);
&& live.blackWhite() == settings.blackWhite && live.colorBalance() == settings.colorBalance && live.gaussianRadius() == settings.radius
&& live.resolvedMotionDistance() == settings.distance && live.resolvedNoiseAmount() == settings.amount);
QVERIFY(awaited([&](std::function<void()> done) { session.commitFilter(std::move(done)); }));
break;
}
@@ -156,11 +152,15 @@ void AdjustmentEditorTests::sharedEditorsKeepPixelsDynamicAndSupportCancel()
case AdjustmentKind::exposure:
case AdjustmentKind::gradientMap:
case AdjustmentKind::grain:
case AdjustmentKind::addNoise:
case AdjustmentKind::gaussianBlur:
case AdjustmentKind::motionBlur:
case AdjustmentKind::blackWhite:
case AdjustmentKind::colorBalance: {
const FilterSettings reopened = session.filterEdit().value().settings;
QVERIFY(reopened.curves == saved.curves && reopened.exposure == saved.exposure() && reopened.gradientMap == saved.gradientMap()
&& reopened.grain == saved.grain() && reopened.blackWhite == saved.blackWhite() && reopened.colorBalance == saved.colorBalance());
&& reopened.grain == saved.grain() && reopened.blackWhite == saved.blackWhite() && reopened.colorBalance == saved.colorBalance()
&& reopened.radius == saved.gaussianRadius() && reopened.distance == saved.resolvedMotionDistance() && reopened.amount == saved.resolvedNoiseAmount());
session.updateFilter(FilterSettings(), true);
session.cancelFilter();
break;
@@ -202,7 +202,8 @@ void AdjustmentEditorTests::theEditorReadsOnlyWhatLiesBeneath()
QCOMPARE(layerWith(session, id).parentID, layerWith(session, green).parentID);
session.setAdjustmentEditingID(id);
QVERIFY(opened(session, id));
QVERIFY((input(session) == std::vector<int>{0, 255, 0, 255, 255, 0, 0, 255}));
const QImage read = session.levels().value().original.image();
QVERIFY(read.size() == QSize(2, 1) && read.pixel(0, 0) == qRgb(0, 255, 0) && read.pixel(1, 0) == qRgb(255, 0, 0));
// The editors preview nothing: the layer's settings are the preview.
LevelsSettings settings;
settings.ranges[0].outputWhite = 100;