Outer Glow, brush Smoothing and the rest of Compositor 1.2.0

This commit is contained in:
雷电芽衣 committed 2026-09-27 07:00:12 -04:00
1 parent 2cd0d1b86d
commit 374ba8ec73
32 files changed
+624 -47

No files matched your search

+8 -3
View File
@@ -24,6 +24,7 @@ LayerEffects every()
effects.shadow = ShadowEffect{.angle = 45, .distance = 12, .blur = 6, .red = 0.5, .green = 0.6, .blue = 0.7, .opacity = 0.8};
effects.colorOverlay = ColorOverlayEffect{.enabled = true, .red = 0.9, .green = 0.25, .blue = 0.75, .opacity = 0.35};
effects.innerShadow = InnerShadowEffect{.angle = -30, .distance = 3, .blur = 2, .red = 0.05, .green = 0.15, .blue = 0.95, .opacity = 0.65};
effects.outerGlow = OuterGlowEffect{.size = 33, .red = 0.2, .green = 0.4, .blue = 0.6, .opacity = 0.55};
return effects;
}
@@ -79,7 +80,8 @@ private slots:
void LayerEffectsTests::kindsKeepSwiftsNamesAndOrder()
{
const std::pair<LayerEffectKind, const char *> kinds[] = {{LayerEffectKind::stroke, "Stroke"}, {LayerEffectKind::shadow, "Drop Shadow"},
{LayerEffectKind::colorOverlay, "Color Overlay"}, {LayerEffectKind::innerShadow, "Inner Shadow"}};
{LayerEffectKind::colorOverlay, "Color Overlay"}, {LayerEffectKind::innerShadow, "Inner Shadow"},
{LayerEffectKind::outerGlow, "Outer Glow"}};
QCOMPARE(allLayerEffectKinds.size(), std::size(kinds));
for (size_t index = 0; index < std::size(kinds); ++index) {
QVERIFY(allLayerEffectKinds[index] == kinds[index].first);
@@ -88,6 +90,7 @@ void LayerEffectsTests::kindsKeepSwiftsNamesAndOrder()
// Swift's defaults.
QVERIFY((StrokeEffect() == StrokeEffect{std::nullopt, 4, 0, 0, 0, 1, false}));
QVERIFY((ShadowEffect() == ShadowEffect{std::nullopt, 90, 20, 20, 0, 0, 0, 0.5}));
QVERIFY((OuterGlowEffect() == OuterGlowEffect{std::nullopt, 20, 1, 1, 1, 0.75}));
QVERIFY((ColorOverlayEffect() == ColorOverlayEffect{std::nullopt, 0, 0, 0, 1}));
QVERIFY((InnerShadowEffect() == InnerShadowEffect{std::nullopt, 90, 10, 10, 0, 0, 0, 0.5}));
QCOMPARE(StrokeEffect::maxSize, 500.0);
@@ -165,7 +168,7 @@ void LayerEffectsTests::theHelpersReadAndWriteOneKind()
for (const LayerEffectKind kind : allLayerEffectKinds) {
LayerEffects full = every();
full.remove(kind);
QVERIFY(!full.contains(kind) && full.kinds().size() == 3);
QVERIFY(!full.contains(kind) && full.kinds().size() == 4);
full.setColor(PaletteColor{1, 0, 0}, kind);
QVERIFY(!full.color(kind));
}
@@ -190,7 +193,7 @@ void LayerEffectsTests::theHelpersReadAndWriteOneKind()
void LayerEffectsTests::theManifestWritesSwiftsKeys()
{
const QJsonObject encoded = ManifestJson::encoded(every());
QCOMPARE(encoded.keys(), (QStringList{"colorOverlay", "innerShadow", "shadow", "stroke"}));
QCOMPARE(encoded.keys(), (QStringList{"colorOverlay", "innerShadow", "outerGlow", "shadow", "stroke"}));
const QJsonObject stroke = encoded.value("stroke").toObject();
QCOMPARE(stroke.keys(), (QStringList{"blue", "enabled", "green", "inside", "opacity", "red", "size"}));
QVERIFY(stroke.value("enabled") == false && stroke.value("inside") == true && stroke.value("size") == 7);
@@ -198,6 +201,8 @@ void LayerEffectsTests::theManifestWritesSwiftsKeys()
QCOMPARE(encoded.value("shadow").toObject().keys(), (QStringList{"angle", "blue", "blur", "distance", "green", "opacity", "red"}));
QCOMPARE(encoded.value("colorOverlay").toObject().keys(), (QStringList{"blue", "enabled", "green", "opacity", "red"}));
QCOMPARE(encoded.value("innerShadow").toObject().value("angle"), QJsonValue(-30));
QCOMPARE(encoded.value("outerGlow").toObject().keys(), (QStringList{"blue", "green", "opacity", "red", "size"}));
QCOMPARE(encoded.value("outerGlow").toObject().value("size"), QJsonValue(33));
QVERIFY(ManifestJson::effects(encoded) == every());
// Absent effects stay out; null reads as absent.
LayerEffects one;