fix(runtime): Invalidate stroke effects on ForegroundLayoutDrawable (#10733) 2f7bed5eb1
Co-authored-by: Philip Chung <philterdesign@gmail.com>
diff --git a/.rive_head b/.rive_head
index 9c83d97..450c98e 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-f4b36c2d03f14884451fccd8947c6751e58b6683
+2f7bed5eb1a391aaebb992f8414082813188f299
diff --git a/src/foreground_layout_drawable.cpp b/src/foreground_layout_drawable.cpp
index da86802..a7fd62a 100644
--- a/src/foreground_layout_drawable.cpp
+++ b/src/foreground_layout_drawable.cpp
@@ -32,6 +32,10 @@
{
propagateOpacity(parentLayout->childOpacity());
}
+ if (hasDirt(value, ComponentDirt::Path | ComponentDirt::WorldTransform))
+ {
+ invalidateStrokeEffects();
+ }
}
}
diff --git a/tests/unit_tests/assets/layout/layout_paint.riv b/tests/unit_tests/assets/layout/layout_paint.riv
new file mode 100644
index 0000000..eae700c
--- /dev/null
+++ b/tests/unit_tests/assets/layout/layout_paint.riv
Binary files differ
diff --git a/tests/unit_tests/runtime/layout_test.cpp b/tests/unit_tests/runtime/layout_test.cpp
index 4ff5bf3..3b15239 100644
--- a/tests/unit_tests/runtime/layout_test.cpp
+++ b/tests/unit_tests/runtime/layout_test.cpp
@@ -489,4 +489,32 @@
}
CHECK(silver.matches("layout_display"));
+}
+
+TEST_CASE("Layout background & foreground shape paints.", "[silver]")
+{
+ rive::SerializingFactory silver;
+ auto file = ReadRiveFile("assets/layout/layout_paint.riv", &silver);
+
+ auto artboard = file->artboardDefault();
+
+ silver.frameSize(artboard->width(), artboard->height());
+
+ REQUIRE(artboard != nullptr);
+ auto stateMachine = artboard->stateMachineAt(0);
+
+ stateMachine->advanceAndApply(0.1f);
+
+ auto renderer = silver.makeRenderer();
+ artboard->draw(renderer.get());
+
+ int frames = (int)(2.0f / 0.016f);
+ for (int i = 0; i < frames; i++)
+ {
+ silver.addFrame();
+ stateMachine->advanceAndApply(0.016f);
+ artboard->draw(renderer.get());
+ }
+
+ CHECK(silver.matches("layout_paint"));
}
\ No newline at end of file
diff --git a/tests/unit_tests/silvers/layout_paint.sriv b/tests/unit_tests/silvers/layout_paint.sriv
new file mode 100644
index 0000000..bcdfb4a
--- /dev/null
+++ b/tests/unit_tests/silvers/layout_paint.sriv
Binary files differ