Files
Dylan M. Taylor 80e26e674d fix(redact): remove a stroked path by the box its stroke paints (#5876)
* fix(redact): remove a stroked path by the box its stroke paints

Path redaction tested a path's construction box against the marks. A
horizontal or vertical stroke has a zero-area box, which overlaps
nothing, so its drawing commands stayed beneath the overlay; a wide
stroke whose points lie beside a mark but whose ink reaches into it
stayed too.

The interpreter now tracks the line width, miter limit and join style
(`w`, `M`, `j`, and `LW`, `ML`, `LJ` through `gs`) and, for a stroking
operator, grows the box by half the width (at least one unit), times
the miter limit when the path has mitred joins, scaled by the CTM's
largest stretch, before the hit test. The bound is conservative: a
stroke near a mark may now go where before it stayed.

* address review: pad hairlines by half a unit, rectangles for their corners, square caps by sqrt 2

* review: test a kept clip against the path as constructed

* address review: a line state set between a path and its stroke no longer lets the stroke skip the redaction test

* address review: line-state operators read the operand before the operator
2026-11-11 18:16:48 -05:00
..
…