summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rsvg_internals/src/filters/context.rs5
-rw-r--r--tests/fixtures/reftests/test-filter-effects-region-ref.pngbin1624 -> 1636 bytes
-rw-r--r--tests/fixtures/reftests/test-filter-effects-region.svg14
3 files changed, 12 insertions, 7 deletions
diff --git a/rsvg_internals/src/filters/context.rs b/rsvg_internals/src/filters/context.rs
index f7335fc1..40edaf6b 100644
--- a/rsvg_internals/src/filters/context.rs
+++ b/rsvg_internals/src/filters/context.rs
@@ -437,9 +437,8 @@ impl FilterContext {
where
for<'a> F: FnOnce(Box<Fn(&RsvgLength) -> f64 + 'a>) -> T,
{
- // TODO: shouldn't the values be from the target node rather than from the filter node
- // itself?
- let cascaded = self.node.get_cascaded_values();
+ // Filters use the properties of the target node.
+ let cascaded = self.node_being_filtered.get_cascaded_values();
let values = cascaded.get();
let filter = self.node.get_impl::<NodeFilter>().unwrap();
diff --git a/tests/fixtures/reftests/test-filter-effects-region-ref.png b/tests/fixtures/reftests/test-filter-effects-region-ref.png
index 9193d442..52ffd374 100644
--- a/tests/fixtures/reftests/test-filter-effects-region-ref.png
+++ b/tests/fixtures/reftests/test-filter-effects-region-ref.png
Binary files differ
diff --git a/tests/fixtures/reftests/test-filter-effects-region.svg b/tests/fixtures/reftests/test-filter-effects-region.svg
index 6e11828e..7cf4eaca 100644
--- a/tests/fixtures/reftests/test-filter-effects-region.svg
+++ b/tests/fixtures/reftests/test-filter-effects-region.svg
@@ -28,27 +28,33 @@
<feFlood flood-color="green"/>
</filter>
+ <!-- Same as above but for the primitive subregion. -->
+ <filter id="cascading-primitive" style="font-size: 30pt">
+ <feFlood x="1em" y="1em" flood-color="green"/>
+ </filter>
+
<g transform="translate(30 20)">
<rect fill="red" x="1" y="1" width="50" height="50"/>
<rect fill="red" x="1" y="1" width="50" height="50" filter="url(#defaults)"/>
- <rect fill="red" x="1" y="100" width="50" height="50"/>
</g>
<g transform="translate(100 20)">
<rect fill="red" x="1" y="1" width="50" height="50"/>
<rect fill="red" x="1" y="1" width="50" height="50" filter="url(#fractions)"/>
- <rect fill="red" x="1" y="100" width="50" height="50"/>
</g>
<g transform="translate(170 20)" style="font-size: 7pt">
<rect fill="red" x="1" y="1" width="50" height="50"/>
<rect fill="red" x="1" y="1" width="50" height="50" filter="url(#cascading)"/>
- <rect fill="red" x="1" y="100" width="50" height="50"/>
+ </g>
+
+ <g transform="translate(170 100)" style="font-size: 7pt">
+ <rect fill="red" x="1" y="1" width="50" height="50"/>
+ <rect fill="red" x="1" y="1" width="50" height="50" filter="url(#cascading-primitive)"/>
</g>
<g transform="translate(300 20)">
<rect fill="red" x="1" y="1" width="50" height="50"/>
<rect fill="red" x="1" y="1" width="50" height="50" filter="url(#usou-defaults)"/>
- <rect fill="red" x="1" y="100" width="50" height="50"/>
</g>
</svg>