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