From 6403c8deeec5e85e98259706c3ee9ee38eae5be5 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 26 Mar 2026 12:41:41 +0100 Subject: [PATCH] :bug: Fix inset child clip for frames with inner stroke --- .../get-file-inner-strokes-artifacts.json | 1790 +++++++++-------- .../Check-inner-stroke-artifacts-1.png | Bin 30895 -> 31923 bytes render-wasm/src/render.rs | 19 +- render-wasm/src/render/fills.rs | 12 +- render-wasm/src/shapes.rs | 7 + 5 files changed, 1015 insertions(+), 813 deletions(-) diff --git a/frontend/playwright/data/render-wasm/get-file-inner-strokes-artifacts.json b/frontend/playwright/data/render-wasm/get-file-inner-strokes-artifacts.json index 5987b72225..135642a0b5 100644 --- a/frontend/playwright/data/render-wasm/get-file-inner-strokes-artifacts.json +++ b/frontend/playwright/data/render-wasm/get-file-inner-strokes-artifacts.json @@ -1,814 +1,1002 @@ { - "~:features": { - "~#set": [ - "fdata/path-data", - "plugins/runtime", - "design-tokens/v1", - "variants/v1", - "layout/grid", - "styles/v2", - "fdata/pointer-map", - "fdata/objects-map", - "render-wasm/v1", - "components/v2", - "fdata/shape-data-type" - ] - }, - "~:team-id": "~ueba8fa2e-4140-8084-8005-448635d7a724", - "~:permissions": { - "~:type": "~:membership", - "~:is-owner": true, - "~:is-admin": true, - "~:can-edit": true, - "~:can-read": true, - "~:is-logged": true - }, - "~:has-media-trimmed": false, - "~:comment-thread-seqn": 0, - "~:name": "gaps", - "~:revn": 79, - "~:modified-at": "~m1771855365377", - "~:vern": 0, - "~:id": "~ueffcbebc-b8c8-802f-8007-9a0b2e2c863f", - "~:is-shared": false, - "~:migrations": { - "~#ordered-set": [ - "legacy-2", - "legacy-3", - "legacy-5", - "legacy-6", - "legacy-7", - "legacy-8", - "legacy-9", - "legacy-10", - "legacy-11", - "legacy-12", - "legacy-13", - "legacy-14", - "legacy-16", - "legacy-17", - "legacy-18", - "legacy-19", - "legacy-25", - "legacy-26", - "legacy-27", - "legacy-28", - "legacy-29", - "legacy-31", - "legacy-32", - "legacy-33", - "legacy-34", - "legacy-36", - "legacy-37", - "legacy-38", - "legacy-39", - "legacy-40", - "legacy-41", - "legacy-42", - "legacy-43", - "legacy-44", - "legacy-45", - "legacy-46", - "legacy-47", - "legacy-48", - "legacy-49", - "legacy-50", - "legacy-51", - "legacy-52", - "legacy-53", - "legacy-54", - "legacy-55", - "legacy-56", - "legacy-57", - "legacy-59", - "legacy-62", - "legacy-65", - "legacy-66", - "legacy-67", - "0001-remove-tokens-from-groups", - "0002-normalize-bool-content-v2", - "0002-clean-shape-interactions", - "0003-fix-root-shape", - "0003-convert-path-content-v2", - "0005-deprecate-image-type", - "0006-fix-old-texts-fills", - "0008-fix-library-colors-v4", - "0009-clean-library-colors", - "0009-add-partial-text-touched-flags", - "0010-fix-swap-slots-pointing-non-existent-shapes", - "0011-fix-invalid-text-touched-flags", - "0012-fix-position-data", - "0013-fix-component-path", - "0013-clear-invalid-strokes-and-fills", - "0014-fix-tokens-lib-duplicate-ids", - "0014-clear-components-nil-objects", - "0015-fix-text-attrs-blank-strings", - "0015-clean-shadow-color", - "0016-copy-fills-from-position-data-to-text-node" - ] - }, - "~:version": 67, - "~:project-id": "~ueba8fa2e-4140-8084-8005-448635da32b4", - "~:created-at": "~m1771591980210", - "~:backend": "legacy-db", - "~:data": { - "~:pages": [ - "~ueffcbebc-b8c8-802f-8007-9a0b2e2c8640" - ], - "~:pages-index": { - "~ueffcbebc-b8c8-802f-8007-9a0b2e2c8640": { - "~:objects": { - "~u00000000-0000-0000-0000-000000000000": { - "~#shape": { - "~:y": 0, - "~:hide-fill-on-export": false, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:rotation": 0, - "~:name": "Root Frame", - "~:width": 0.01, - "~:type": "~:frame", - "~:points": [ - { - "~#point": { - "~:x": 0, - "~:y": 0 - } - }, - { - "~#point": { - "~:x": 0.01, - "~:y": 0 - } - }, - { - "~#point": { - "~:x": 0.01, - "~:y": 0.01 - } - }, - { - "~#point": { - "~:x": 0, - "~:y": 0.01 - } - } - ], - "~:r2": 0, - "~:proportion-lock": false, - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:r3": 0, - "~:r1": 0, - "~:id": "~u00000000-0000-0000-0000-000000000000", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [], - "~:x": 0, - "~:proportion": 1, - "~:r4": 0, - "~:selrect": { - "~#rect": { + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "text-editor-wasm/v1", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~ueba8fa2e-4140-8084-8005-448635d7a724", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "New File 11", + "~:revn": 19, + "~:modified-at": "~m1774524674610", + "~:vern": 0, + "~:id": "~u273cd825-9673-81c2-8007-c5b6c5207a98", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content-v2", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content-v2", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0008-fix-library-colors-v4", + "0009-clean-library-colors", + "0009-add-partial-text-touched-flags", + "0010-fix-swap-slots-pointing-non-existent-shapes", + "0011-fix-invalid-text-touched-flags", + "0012-fix-position-data", + "0013-fix-component-path", + "0013-clear-invalid-strokes-and-fills", + "0014-fix-tokens-lib-duplicate-ids", + "0014-clear-components-nil-objects", + "0015-fix-text-attrs-blank-strings", + "0015-clean-shadow-color", + "0016-copy-fills-from-position-data-to-text-node", + "0017-fix-layout-flex-dir" + ] + }, + "~:version": 67, + "~:project-id": "~ueba8fa2e-4140-8084-8005-448635da32b4", + "~:created-at": "~m1774522642561", + "~:backend": "legacy-db", + "~:data": { + "~:pages": [ + "~u273cd825-9673-81c2-8007-c5b6c5207a99" + ], + "~:pages-index": { + "~u273cd825-9673-81c2-8007-c5b6c5207a99": { + "~:objects": { + "~u00000000-0000-0000-0000-000000000000": { + "~#shape": { + "~:y": 0, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:name": "Root Frame", + "~:width": 0.01, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { "~:x": 0, - "~:y": 0, - "~:width": 0.01, - "~:height": 0.01, - "~:x1": 0, - "~:y1": 0, - "~:x2": 0.01, - "~:y2": 0.01 + "~:y": 0 } }, - "~:fills": [ - { - "~:fill-color": "#FFFFFF", - "~:fill-opacity": 1 - } - ], - "~:flip-x": null, - "~:height": 0.01, - "~:flip-y": null, - "~:shapes": [ - "~u36e8a3ad-2b63-8008-8007-9a0b2f24ca4e", - "~ufbc43ead-a2ce-8058-8007-9a0daf843e09", - "~ufbc43ead-a2ce-8058-8007-9a0dbe2f49b8", - "~u5bebb998-d617-801b-8007-9a3fbd5cc804", - "~u80e2fa5a-cd1c-8043-8007-9d8aaca49f40" - ] - } - }, - "~ufbc43ead-a2ce-8058-8007-9a0dbe2f49b8": { - "~#shape": { - "~:y": null, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 + { + "~#point": { + "~:x": 0.01, + "~:y": 0 } }, - "~:rotation": 0, - "~:grow-type": "~:fixed", - "~:content": { - "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD/f5dEM2EsRAIAAAAAAAAAAAAAAAAAAAAAAAAAUhmnRABACkQCAAAAAAAAAAAAAAAAAAAAAAAAAP8/vET//01EAgAAAAAAAAAAAAAAAAAAAAAAAAD/f5dEM2EsRA==" - }, - "~:name": "Path", - "~:width": null, - "~:type": "~:path", - "~:points": [ - { - "~#point": { - "~:x": 1212.00003372852, - "~:y": 553.000012923003 - } - }, - { - "~#point": { - "~:x": 1506.00004755679, - "~:y": 553.000012923003 - } - }, - { - "~#point": { - "~:x": 1506.00004755679, - "~:y": 823.999993849517 - } - }, - { - "~#point": { - "~:x": 1212.00003372852, - "~:y": 823.999993849517 - } - } - ], - "~:r2": 0, - "~:proportion-lock": false, - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 + { + "~#point": { + "~:x": 0.01, + "~:y": 0.01 } }, - "~:r3": 0, - "~:r1": 0, - "~:id": "~ufbc43ead-a2ce-8058-8007-9a0dbe2f49b8", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [ - { - "~:stroke-alignment": "~:inner", - "~:stroke-style": "~:solid", - "~:stroke-color": "#000000", - "~:stroke-opacity": 1, - "~:stroke-width": 10 + { + "~#point": { + "~:x": 0, + "~:y": 0.01 } - ], - "~:x": null, - "~:proportion": 1, - "~:shadow": [], - "~:r4": 0, - "~:selrect": { - "~#rect": { - "~:x": 1212.00003372852, - "~:y": 553.000012923003, - "~:width": 294.000013828278, - "~:height": 270.999980926514, - "~:x1": 1212.00003372852, - "~:y1": 553.000012923003, - "~:x2": 1506.00004755679, - "~:y2": 823.999993849517 - } - }, - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:flip-x": null, - "~:height": null, - "~:flip-y": null - } - }, - "~u36e8a3ad-2b63-8008-8007-9a0b2f24ca4e": { - "~#shape": { - "~:y": 122.000001761754, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:rotation": 0, - "~:hide-in-viewer": false, - "~:name": "Rectangle", - "~:width": 463.999987447937, - "~:type": "~:rect", - "~:points": [ - { - "~#point": { - "~:x": 694.000014750112, - "~:y": 122.000001761754 - } - }, - { - "~#point": { - "~:x": 1158.00000219805, - "~:y": 122.000001761754 - } - }, - { - "~#point": { - "~:x": 1158.00000219805, - "~:y": 499.999980116278 - } - }, - { - "~#point": { - "~:x": 694.000014750112, - "~:y": 499.999980116278 - } - } - ], - "~:r2": 0, - "~:proportion-lock": false, - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:r3": 0, - "~:r1": 0, - "~:id": "~u36e8a3ad-2b63-8008-8007-9a0b2f24ca4e", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [ - { - "~:stroke-alignment": "~:inner", - "~:stroke-style": "~:solid", - "~:stroke-color": "#000000", - "~:stroke-opacity": 1, - "~:stroke-width": 100 - }, - { - "~:stroke-alignment": "~:outer", - "~:stroke-style": "~:solid", - "~:stroke-color": "#000000", - "~:stroke-opacity": 1, - "~:stroke-width": 100 - } - ], - "~:x": 694.000014750113, - "~:proportion": 1, - "~:shadow": [], - "~:r4": 0, - "~:selrect": { - "~#rect": { - "~:x": 694.000014750113, - "~:y": 122.000001761754, - "~:width": 463.999987447937, - "~:height": 377.999978354524, - "~:x1": 694.000014750113, - "~:y1": 122.000001761754, - "~:x2": 1158.00000219805, - "~:y2": 499.999980116278 - } - }, - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:flip-x": null, - "~:height": 377.999978354524, - "~:flip-y": null - } - }, - "~ufbc43ead-a2ce-8058-8007-9a0daf843e09": { - "~#shape": { - "~:y": 262.999997589325, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:rotation": 0, - "~:grow-type": "~:fixed", - "~:hide-in-viewer": false, - "~:name": "Ellipse", - "~:width": 266.000036716461, - "~:type": "~:circle", - "~:points": [ - { - "~#point": { - "~:x": 1271.00000137752, - "~:y": 262.999997589325 - } - }, - { - "~#point": { - "~:x": 1537.00003809398, - "~:y": 262.999997589325 - } - }, - { - "~#point": { - "~:x": 1537.00003809398, - "~:y": 483.000033828949 - } - }, - { - "~#point": { - "~:x": 1271.00000137752, - "~:y": 483.000033828949 - } - } - ], - "~:r2": 0, - "~:proportion-lock": false, - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:r3": 0, - "~:r1": 0, - "~:id": "~ufbc43ead-a2ce-8058-8007-9a0daf843e09", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [ - { - "~:stroke-alignment": "~:inner", - "~:stroke-style": "~:solid", - "~:stroke-color": "#000000", - "~:stroke-opacity": 1, - "~:stroke-width": 10 - } - ], - "~:x": 1271.00000137752, - "~:proportion": 1, - "~:shadow": [ - { - "~:id": "~u9c6321b5-aeab-809f-8007-971f9e232191", - "~:style": "~:drop-shadow", - "~:color": { - "~:color": "#000000", - "~:opacity": 1 - }, - "~:offset-x": 4, - "~:offset-y": 4, - "~:blur": 0, - "~:spread": 0, - "~:hidden": true - } - ], - "~:r4": 0, - "~:selrect": { - "~#rect": { - "~:x": 1271.00000137752, - "~:y": 262.999997589325, - "~:width": 266.000036716461, - "~:height": 220.000036239624, - "~:x1": 1271.00000137752, - "~:y1": 262.999997589325, - "~:x2": 1537.00003809398, - "~:y2": 483.000033828949 - } - }, - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:flip-x": null, - "~:height": 220.000036239624, - "~:flip-y": null - } - }, - "~u80e2fa5a-cd1c-8043-8007-9d8aaca49f40": { - "~#shape": { - "~:y": -286.999972473494, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:rotation": 0, - "~:grow-type": "~:auto-width", - "~:content": { - "~:type": "root", - "~:key": "1srkh8oc2vd", - "~:children": [ - { - "~:type": "paragraph-set", - "~:children": [ - { - "~:line-height": "1.2", - "~:font-style": "normal", - "~:children": [ - { - "~:line-height": "1.2", - "~:font-style": "normal", - "~:typography-ref-id": null, - "~:text-transform": "none", - "~:font-id": "sourcesanspro", - "~:key": "170uyffw5ph", - "~:font-size": "400", - "~:font-weight": "400", - "~:typography-ref-file": null, - "~:font-variant-id": "regular", - "~:text-decoration": "none", - "~:letter-spacing": "0", - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:font-family": "sourcesanspro", - "~:text": "HELLO" - } - ], - "~:typography-ref-id": null, - "~:text-transform": "none", - "~:text-align": "left", - "~:font-id": "sourcesanspro", - "~:key": "psg8ayj675", - "~:font-size": "400", - "~:font-weight": "400", - "~:typography-ref-file": null, - "~:text-direction": "ltr", - "~:type": "paragraph", - "~:font-variant-id": "regular", - "~:text-decoration": "none", - "~:letter-spacing": "0", - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:font-family": "sourcesanspro" - } - ] - } - ], - "~:vertical-align": "top" - }, - "~:hide-in-viewer": false, - "~:name": "HELLO", - "~:width": 1116.00003953244, - "~:type": "~:text", - "~:points": [ - { - "~#point": { - "~:x": 545.000013504691, - "~:y": -286.999972473494 - } - }, - { - "~#point": { - "~:x": 1661.00005303713, - "~:y": -286.999972473494 - } - }, - { - "~#point": { - "~:x": 1661.00005303713, - "~:y": 193.000017549648 - } - }, - { - "~#point": { - "~:x": 545.000013504691, - "~:y": 193.000017549648 - } - } - ], - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:id": "~u80e2fa5a-cd1c-8043-8007-9d8aaca49f40", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:position-data": [ - { - "~:y": 211.980041503906, - "~:line-height": "1.2", - "~:font-style": "normal", - "~:text-transform": "none", - "~:text-align": "left", - "~:font-id": "sourcesanspro", - "~:font-size": "400", - "~:font-weight": "400", - "~:text-direction": "ltr", - "~:width": 1115.22998046875, - "~:font-variant-id": "regular", - "~:text-decoration": "none", - "~:letter-spacing": "0", - "~:x": 545, - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:direction": "ltr", - "~:font-family": "sourcesanspro", - "~:height": 517.960021972656, - "~:text": "HELLO" - } - ], - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [ - { - "~:stroke-style": "~:solid", - "~:stroke-alignment": "~:inner", - "~:stroke-width": 5, - "~:stroke-color": "#000000", - "~:stroke-opacity": 1 - } - ], - "~:x": 545.000013504691, - "~:selrect": { - "~#rect": { - "~:x": 545.000013504691, - "~:y": -286.999972473494, - "~:width": 1116.00003953244, - "~:height": 479.999990023141, - "~:x1": 545.000013504691, - "~:y1": -286.999972473494, - "~:x2": 1661.00005303713, - "~:y2": 193.000017549648 - } - }, - "~:flip-x": null, - "~:height": 479.999990023141, - "~:flip-y": null - } - }, - "~u5bebb998-d617-801b-8007-9a3fbd5cc804": { - "~#shape": { - "~:y": 543.00001095581, - "~:transform": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:rotation": 0, - "~:hide-in-viewer": false, - "~:name": "Rectangle", - "~:width": 463.999987447937, - "~:type": "~:rect", - "~:points": [ - { - "~#point": { - "~:x": 693.999990768432, - "~:y": 543.00001095581 - } - }, - { - "~#point": { - "~:x": 1157.99997821637, - "~:y": 543.00001095581 - } - }, - { - "~#point": { - "~:x": 1157.99997821637, - "~:y": 920.999989310334 - } - }, - { - "~#point": { - "~:x": 693.999990768432, - "~:y": 920.999989310334 - } - } - ], - "~:r2": 0, - "~:proportion-lock": false, - "~:transform-inverse": { - "~#matrix": { - "~:a": 1, - "~:b": 0, - "~:c": 0, - "~:d": 1, - "~:e": 0, - "~:f": 0 - } - }, - "~:r3": 0, - "~:r1": 0, - "~:id": "~u5bebb998-d617-801b-8007-9a3fbd5cc804", - "~:parent-id": "~u00000000-0000-0000-0000-000000000000", - "~:frame-id": "~u00000000-0000-0000-0000-000000000000", - "~:strokes": [ - { - "~:stroke-alignment": "~:inner", - "~:stroke-style": "~:solid", - "~:stroke-color": "#000000", - "~:stroke-opacity": 1, - "~:stroke-width": 100 - } - ], - "~:x": 693.999990768432, - "~:proportion": 1, - "~:shadow": [], - "~:r4": 0, - "~:selrect": { - "~#rect": { - "~:x": 693.999990768432, - "~:y": 543.00001095581, - "~:width": 463.999987447937, - "~:height": 377.999978354524, - "~:x1": 693.999990768432, - "~:y1": 543.00001095581, - "~:x2": 1157.99997821637, - "~:y2": 920.999989310334 - } - }, - "~:fills": [ - { - "~:fill-color": "#ffffff", - "~:fill-opacity": 1 - } - ], - "~:flip-x": null, - "~:height": 377.999978354524, - "~:flip-y": null - } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u00000000-0000-0000-0000-000000000000", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 0, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 0, + "~:y": 0, + "~:width": 0.01, + "~:height": 0.01, + "~:x1": 0, + "~:y1": 0, + "~:x2": 0.01, + "~:y2": 0.01 + } + }, + "~:fills": [ + { + "~:fill-color": "#FFFFFF", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 0.01, + "~:flip-y": null, + "~:shapes": [ + "~u91d336c9-02e5-806a-8007-c5b91b180723", + "~u91d336c9-02e5-806a-8007-c5b91b180724", + "~u91d336c9-02e5-806a-8007-c5b91b180725", + "~u91d336c9-02e5-806a-8007-c5b91b185c8b", + "~u91d336c9-02e5-806a-8007-c5b91b185c8c", + "~u91d336c9-02e5-806a-8007-c5b925214f02" + ] } }, - "~:id": "~ueffcbebc-b8c8-802f-8007-9a0b2e2c8640", - "~:name": "Page 1", - "~:background": "#000000" - } - }, - "~:id": "~ueffcbebc-b8c8-802f-8007-9a0b2e2c863f", - "~:options": { - "~:components-v2": true, - "~:base-font-size": "16px" + "~u91d336c9-02e5-806a-8007-c5b94496a8b5": { + "~#shape": { + "~:y": 837.000020861669, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 384, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 91, + "~:y": 837.000020861669 + } + }, + { + "~#point": { + "~:x": 475, + "~:y": 837.000020861669 + } + }, + { + "~#point": { + "~:x": 475, + "~:y": 1239.99999684096 + } + }, + { + "~#point": { + "~:x": 91, + "~:y": 1239.99999684096 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:constraints-v": "~:top", + "~:constraints-h": "~:left", + "~:r1": 0, + "~:id": "~u91d336c9-02e5-806a-8007-c5b94496a8b5", + "~:parent-id": "~u91d336c9-02e5-806a-8007-c5b925214f02", + "~:frame-id": "~u91d336c9-02e5-806a-8007-c5b925214f02", + "~:strokes": [], + "~:x": 91, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 91, + "~:y": 837.000020861669, + "~:width": 384, + "~:height": 402.999975979287, + "~:x1": 91, + "~:y1": 837.000020861669, + "~:x2": 475, + "~:y2": 1239.99999684096 + } + }, + "~:fills": [ + { + "~:fill-color": "#f7f7f7", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 402.999975979287, + "~:flip-y": null + } + }, + "~u91d336c9-02e5-806a-8007-c5b91b185c8b": { + "~#shape": { + "~:y": 1213.9999834293, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 463.999987447937, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 449.999977263741, + "~:y": 1213.9999834293 + } + }, + { + "~#point": { + "~:x": 913.999964711679, + "~:y": 1213.9999834293 + } + }, + { + "~#point": { + "~:x": 913.999964711679, + "~:y": 1591.99996178383 + } + }, + { + "~#point": { + "~:x": 449.999977263741, + "~:y": 1591.99996178383 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u91d336c9-02e5-806a-8007-c5b91b185c8b", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 100 + } + ], + "~:x": 449.999977263741, + "~:proportion": 1, + "~:shadow": [], + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 449.999977263741, + "~:y": 1213.9999834293, + "~:width": 463.999987447937, + "~:height": 377.999978354524, + "~:x1": 449.999977263741, + "~:y1": 1213.9999834293, + "~:x2": 913.999964711678, + "~:y2": 1591.99996178383 + } + }, + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 377.999978354524, + "~:flip-y": null + } + }, + "~u91d336c9-02e5-806a-8007-c5b91b185c8c": { + "~#shape": { + "~:y": 384, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "1srkh8oc2vd", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "170uyffw5ph", + "~:font-size": "400", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HELLO" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "psg8ayj675", + "~:font-size": "400", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HELLO", + "~:width": 1116.00003953244, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 301, + "~:y": 384 + } + }, + { + "~#point": { + "~:x": 1417.00003953244, + "~:y": 384 + } + }, + { + "~#point": { + "~:x": 1417.00003953244, + "~:y": 863.999990023142 + } + }, + { + "~#point": { + "~:x": 301, + "~:y": 863.999990023142 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~u91d336c9-02e5-806a-8007-c5b91b185c8c", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:position-data": [ + { + "~:y": 882.979949951172, + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:font-size": "400", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:width": 1115.22998046875, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:x": 301, + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:direction": "ltr", + "~:font-family": "sourcesanspro", + "~:height": 517.9599609375, + "~:text": "HELLO" + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": 301, + "~:selrect": { + "~#rect": { + "~:x": 301, + "~:y": 384, + "~:width": 1116.00003953244, + "~:height": 479.999990023141, + "~:x1": 301, + "~:y1": 384, + "~:x2": 1417.00003953244, + "~:y2": 863.999990023141 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 479.999990023141, + "~:flip-y": null + } + }, + "~u91d336c9-02e5-806a-8007-c5b925214f02": { + "~#shape": { + "~:y": 894.000017464198, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Board", + "~:width": 264, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { + "~:x": 169, + "~:y": 894.000017464198 + } + }, + { + "~#point": { + "~:x": 433, + "~:y": 894.000017464198 + } + }, + { + "~#point": { + "~:x": 433, + "~:y": 1212.99999845028 + } + }, + { + "~#point": { + "~:x": 169, + "~:y": 1212.99999845028 + } + } + ], + "~:r2": 20, + "~:show-content": false, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 20, + "~:r1": 20, + "~:id": "~u91d336c9-02e5-806a-8007-c5b925214f02", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 169, + "~:proportion": 1, + "~:r4": 20, + "~:selrect": { + "~#rect": { + "~:x": 169, + "~:y": 894.000017464198, + "~:width": 264, + "~:height": 318.999980986085, + "~:x1": 169, + "~:y1": 894.000017464198, + "~:x2": 433, + "~:y2": 1212.99999845028 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 318.999980986085, + "~:flip-y": null, + "~:shapes": [ + "~u91d336c9-02e5-806a-8007-c5b94496a8b5" + ] + } + }, + "~u91d336c9-02e5-806a-8007-c5b91b180723": { + "~#shape": { + "~:y": 792.999974235248, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 463.999987447937, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 450.000001245421, + "~:y": 792.999974235248 + } + }, + { + "~#point": { + "~:x": 913.999988693359, + "~:y": 792.999974235248 + } + }, + { + "~#point": { + "~:x": 913.999988693359, + "~:y": 1170.99995258977 + } + }, + { + "~#point": { + "~:x": 450.000001245421, + "~:y": 1170.99995258977 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u91d336c9-02e5-806a-8007-c5b91b180723", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 100 + }, + { + "~:stroke-alignment": "~:outer", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 100 + } + ], + "~:x": 450.000001245422, + "~:proportion": 1, + "~:shadow": [], + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 450.000001245422, + "~:y": 792.999974235248, + "~:width": 463.999987447937, + "~:height": 377.999978354524, + "~:x1": 450.000001245422, + "~:y1": 792.999974235248, + "~:x2": 913.999988693359, + "~:y2": 1170.99995258977 + } + }, + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 377.999978354524, + "~:flip-y": null + } + }, + "~u91d336c9-02e5-806a-8007-c5b91b180724": { + "~#shape": { + "~:y": 933.999970062819, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 266.000036716461, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 1026.99998787283, + "~:y": 933.999970062819 + } + }, + { + "~#point": { + "~:x": 1293.00002458929, + "~:y": 933.999970062819 + } + }, + { + "~#point": { + "~:x": 1293.00002458929, + "~:y": 1154.00000630244 + } + }, + { + "~#point": { + "~:x": 1026.99998787283, + "~:y": 1154.00000630244 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u91d336c9-02e5-806a-8007-c5b91b180724", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 1026.99998787283, + "~:proportion": 1, + "~:shadow": [ + { + "~:id": "~u9c6321b5-aeab-809f-8007-971f9e232191", + "~:style": "~:drop-shadow", + "~:color": { + "~:color": "#000000", + "~:opacity": 1 + }, + "~:offset-x": 4, + "~:offset-y": 4, + "~:blur": 0, + "~:spread": 0, + "~:hidden": true + } + ], + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 1026.99998787283, + "~:y": 933.999970062819, + "~:width": 266.000036716461, + "~:height": 220.000036239624, + "~:x1": 1026.99998787283, + "~:y1": 933.999970062819, + "~:x2": 1293.00002458929, + "~:y2": 1154.00000630244 + } + }, + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 220.000036239624, + "~:flip-y": null + } + }, + "~u91d336c9-02e5-806a-8007-c5b91b180725": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD+/3FEmRCqRAIAAAAAAAAAAAAAAAAAAAAAAAAAUpmIRAAAmUQCAAAAAAAAAAAAAAAAAAAAAAAAAP+/nUT/37pEAgAAAAAAAAAAAAAAAAAAAAAAAAD+/3FEmRCqRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 968.000020223829, + "~:y": 1223.9999853965 + } + }, + { + "~#point": { + "~:x": 1262.0000340521, + "~:y": 1223.9999853965 + } + }, + { + "~#point": { + "~:x": 1262.0000340521, + "~:y": 1494.99996632301 + } + }, + { + "~#point": { + "~:x": 968.000020223829, + "~:y": 1494.99996632301 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u91d336c9-02e5-806a-8007-c5b91b180725", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": null, + "~:proportion": 1, + "~:shadow": [], + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 968.000020223829, + "~:y": 1223.9999853965, + "~:width": 294.000013828278, + "~:height": 270.999980926514, + "~:x1": 968.000020223829, + "~:y1": 1223.9999853965, + "~:x2": 1262.00003405211, + "~:y2": 1494.99996632301 + } + }, + "~:fills": [ + { + "~:fill-color": "#ffffff", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + } + }, + "~:id": "~u273cd825-9673-81c2-8007-c5b6c5207a99", + "~:name": "Page 1", + "~:background": "#000000" } + }, + "~:id": "~u273cd825-9673-81c2-8007-c5b6c5207a98", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Check-inner-stroke-artifacts-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Check-inner-stroke-artifacts-1.png index ed80d4675f08f0e32856294a4f1d299992b48756..e74e55f39f8c4dd995dcc5b202ac4873f105d141 100644 GIT binary patch literal 31923 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 Nnm8?fSFG**{{hp?YzzPZ literal 30895 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, + clip_inset: Option, ) -> Option { if self.id.is_nil() || !element.clip() { return self.clip_bounds.clone(); @@ -138,6 +139,10 @@ impl NodeRenderState { _ => None, }; + if let Some(clip_inset) = clip_inset.filter(|&e| e > 0.0) { + bounds.inset((clip_inset, clip_inset)); + } + Self::append_clip(self.clip_bounds.clone(), (bounds, corners, transform)) } @@ -2436,8 +2441,18 @@ impl RenderState { }); if element.is_recursive() { - let children_clip_bounds = - node_render_state.get_children_clip_bounds(element, None); + // Shrink the child clip by ~1 device px when the frame has an inner stroke, same + // epsilon as `fills::render` inset, so clipped overflow does not sit under the + // stroke band drawn later in `render_shape_exit`. + let clip_inset_for_children = (matches!(element.shape_type, Type::Frame(_)) + && element.clip() + && element.has_inner_stroke()) + .then_some(1.0 / scale); + let children_clip_bounds = node_render_state.get_children_clip_bounds( + element, + None, + clip_inset_for_children, + ); let children_ids: Vec<_> = if can_flatten { // Container was flattened: get simplified children (which skip this level) diff --git a/render-wasm/src/render/fills.rs b/render-wasm/src/render/fills.rs index 2a1968a93c..615d8b9532 100644 --- a/render-wasm/src/render/fills.rs +++ b/render-wasm/src/render/fills.rs @@ -3,15 +3,7 @@ use skia_safe::{self as skia, Paint, RRect}; use super::{filters, RenderState, SurfaceId}; use crate::error::Result; use crate::render::get_source_rect; -use crate::shapes::{merge_fills, Fill, Frame, ImageFill, Rect, Shape, StrokeKind, Type}; - -/// True when the shape has at least one visible inner stroke. -fn has_inner_stroke(shape: &Shape) -> bool { - let is_open = shape.is_open(); - shape - .visible_strokes() - .any(|s| s.render_kind(is_open) == StrokeKind::Inner) -} +use crate::shapes::{merge_fills, Fill, Frame, ImageFill, Rect, Shape, Type}; fn draw_image_fill( render_state: &mut RenderState, @@ -113,7 +105,7 @@ pub fn render( } let scale = render_state.get_scale().max(1e-6); - let inset = if has_inner_stroke(shape) { + let inset = if shape.has_inner_stroke() { Some(1.0 / scale) } else { None diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index dc129e8695..4e192b97bc 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -1605,6 +1605,13 @@ impl Shape { .count() } + /// True when the shape has at least one visible inner stroke (open paths render strokes as center). + pub fn has_inner_stroke(&self) -> bool { + let is_open = self.is_open(); + self.visible_strokes() + .any(|s| s.render_kind(is_open) == StrokeKind::Inner) + } + pub fn drop_shadow_paints(&self) -> Vec { let drop_shadows: Vec<&Shadow> = self.drop_shadows_visible().collect();