Skip to content

Fix y-axis offset in feSpotLight transform_light_source#1052

Open
SAY-5 wants to merge 1 commit into
linebender:mainfrom
SAY-5:fix-spotlight-region-y
Open

Fix y-axis offset in feSpotLight transform_light_source#1052
SAY-5 wants to merge 1 commit into
linebender:mainfrom
SAY-5:fix-spotlight-region-y

Conversation

@SAY-5
Copy link
Copy Markdown
Contributor

@SAY-5 SAY-5 commented May 21, 2026

transform_light_source was subtracting region.x() from the y-component of both light.y and light.points_at_y in the SpotLight branch (crates/resvg/src/filter/mod.rs:1079, 1085). Whenever the filter region origin has x != y, the spotlight is offset on the y axis by region.x() - region.y() pixels, producing mis-rendered specular/diffuse lighting.

The adjacent PointLight branch already uses region.y() for the y subtraction (line 1070), so the SpotLight branch is a copy-paste bug. This change brings SpotLight in line with PointLight and the SVG filter spec.

Existing filter tests (all 249) still pass; they happen to use filter regions anchored at the origin so the bug was not surfaced in the snapshot suite.

`transform_light_source` was subtracting `region.x()` from the y-component
of both the light source position and its `points_at` target in the
`SpotLight` branch. The result is that whenever the filter region origin
has `x != y`, the spotlight is offset by `region.x() - region.y()` pixels
on the y axis, producing mis-rendered lighting. The adjacent `PointLight`
branch uses `region.y()` correctly, so this is a copy-paste bug introduced
when the SpotLight branch was derived from PointLight.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant