From 024f779cabce4c4d8ef820182413835f0d0e7148 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 10 Mar 2026 09:13:26 +0100 Subject: [PATCH] :bug: Fix text stroke opacity causing different colors on overlapping glyphs --- ...strokes-and-not-100-percent-opacities.json | 737 ++++++++++++++++++ .../ui/render-wasm-specs/texts.spec.js | 20 + ...p-with-strokes-and-not-100-opacities-1.png | Bin 0 -> 80725 bytes render-wasm/src/render.rs | 28 +- render-wasm/src/render/shadows.rs | 2 + render-wasm/src/render/text.rs | 89 ++- render-wasm/src/shapes/fills.rs | 32 + 7 files changed, 885 insertions(+), 23 deletions(-) create mode 100644 frontend/playwright/data/render-wasm/get-file-strokes-and-not-100-percent-opacities.json create mode 100644 frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-group-with-strokes-and-not-100-opacities-1.png diff --git a/frontend/playwright/data/render-wasm/get-file-strokes-and-not-100-percent-opacities.json b/frontend/playwright/data/render-wasm/get-file-strokes-and-not-100-percent-opacities.json new file mode 100644 index 0000000000..d5e9e7a363 --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-strokes-and-not-100-percent-opacities.json @@ -0,0 +1,737 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "fdata/pointer-map", + "fdata/objects-map", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~u0b5bcbca-32ab-81eb-8005-a15fc4484678", + "~: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": "holadios", + "~:revn": 54, + "~:modified-at": "~m1773136426990", + "~:vern": 0, + "~:id": "~ueffcbebc-b8c8-802f-8007-b0ebecd7ebf4", + "~: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", + "0004-clean-shadow-color", + "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", + "0016-copy-fills-from-position-data-to-text-node", + "0015-clean-shadow-color" + ] + }, + "~:version": 67, + "~:project-id": "~u0b5bcbca-32ab-81eb-8005-a15fc448f334", + "~:created-at": "~m1773127290716", + "~:backend": "legacy-db", + "~:data": { + "~:pages": [ + "~u3e9e17c3-fc57-80ce-8007-101743996fe9" + ], + "~:pages-index": { + "~u3e9e17c3-fc57-80ce-8007-101743996fe9": { + "~:id": "~u3e9e17c3-fc57-80ce-8007-101743996fe9", + "~:name": "Page 1", + "~: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 + } + }, + "~:page-id": "~u3e9e17c3-fc57-80ce-8007-101743996fe9", + "~: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": [ + "~u7d004cdb-8305-806a-8007-b0f01ee65230", + "~u2ae0abdc-99ff-8009-8007-b0f7f123b5ea", + "~u2ae0abdc-99ff-8009-8007-b0f7f45177dc" + ] + } + }, + "~u7d004cdb-8305-806a-8007-b0f01ee65230": { + "~#shape": { + "~:y": -161.000001410182, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "6hv3a5x8wb", + "~: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": "219sqyfv11", + "~:font-size": "250", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HELLO WORLD" + } + ], + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "21rct71nkal", + "~:font-size": "250", + "~: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": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HELLO WORLD", + "~:width": 1529.00000393592, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 109.999998223851, + "~:y": -161.000001410182 + } + }, + { + "~#point": { + "~:x": 1639.00000215977, + "~:y": -161.000001410182 + } + }, + { + "~#point": { + "~:x": 1639.00000215977, + "~:y": 138.999988970841 + } + }, + { + "~#point": { + "~:x": 109.999998223851, + "~:y": 138.999988970841 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~u7d004cdb-8305-806a-8007-b0f01ee65230", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:position-data": [ + { + "~:y": 150.869995117188, + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:font-size": "250", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:width": 1528.56005859375, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:x": 110, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:direction": "ltr", + "~:font-family": "sourcesanspro", + "~:height": 323.739990234375, + "~:text": "HELLO WORLD" + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 50, + "~:stroke-color": "#43e50b", + "~:stroke-opacity": 0.6 + } + ], + "~:x": 109.999998223851, + "~:selrect": { + "~#rect": { + "~:x": 109.999998223851, + "~:y": -161.000001410182, + "~:width": 1529.00000393592, + "~:height": 299.999990381022, + "~:x1": 109.999998223851, + "~:y1": -161.000001410182, + "~:x2": 1639.00000215977, + "~:y2": 138.999988970841 + } + }, + "~:flip-x": null, + "~:height": 299.999990381022, + "~:flip-y": null + } + }, + "~u2ae0abdc-99ff-8009-8007-b0f7f123b5ea": { + "~#shape": { + "~:y": -462.000004970439, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "6hv3a5x8wb", + "~: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": "219sqyfv11", + "~:font-size": "250", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HELLO WORLD" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "21rct71nkal", + "~:font-size": "250", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HELLO WORLD", + "~:width": 1529.00000393592, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 92.9999982852505, + "~:y": -462.000004970439 + } + }, + { + "~#point": { + "~:x": 1622.00000222117, + "~:y": -462.000004970439 + } + }, + { + "~#point": { + "~:x": 1622.00000222117, + "~:y": -162.000040815452 + } + }, + { + "~#point": { + "~:x": 92.9999982852505, + "~:y": -162.000040815452 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~u2ae0abdc-99ff-8009-8007-b0f7f123b5ea", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:position-data": [ + { + "~:y": -150.130004882813, + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:font-size": "250", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:width": 1528.56005859375, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:x": 93, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:direction": "ltr", + "~:font-family": "sourcesanspro", + "~:height": 323.739990234375, + "~:text": "HELLO WORLD" + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 50, + "~:stroke-color": "#43e50b", + "~:stroke-opacity": 0.6 + } + ], + "~:x": 92.9999982852505, + "~:selrect": { + "~#rect": { + "~:x": 92.9999982852505, + "~:y": -462.000004970439, + "~:width": 1529.00000393592, + "~:height": 299.999964154987, + "~:x1": 92.9999982852505, + "~:y1": -462.000004970439, + "~:x2": 1622.00000222117, + "~:y2": -162.000040815452 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 299.999964154987, + "~:flip-y": null + } + }, + "~u2ae0abdc-99ff-8009-8007-b0f7f45177dc": { + "~#shape": { + "~:y": 169.999996321908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "6hv3a5x8wb", + "~: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": "219sqyfv11", + "~:font-size": "250", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HELLO WORLD" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "21rct71nkal", + "~:font-size": "250", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HELLO WORLD", + "~:width": 1529.00000393592, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 92.9999984013972, + "~:y": 169.999996321908 + } + }, + { + "~#point": { + "~:x": 1622.00000233732, + "~:y": 169.999996321908 + } + }, + { + "~#point": { + "~:x": 1622.00000233732, + "~:y": 470.000003392238 + } + }, + { + "~#point": { + "~:x": 92.9999984013972, + "~:y": 470.000003392238 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~u2ae0abdc-99ff-8009-8007-b0f7f45177dc", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:position-data": [ + { + "~:y": 481.869995117188, + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:font-size": "250", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:width": 1528.56005859375, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:x": 93, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:direction": "ltr", + "~:font-family": "sourcesanspro", + "~:height": 323.739990234375, + "~:text": "HELLO WORLD" + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 50, + "~:stroke-color": "#43e50b", + "~:stroke-opacity": 0.6 + } + ], + "~:x": 92.9999984013973, + "~:selrect": { + "~#rect": { + "~:x": 92.9999984013973, + "~:y": 169.999996321908, + "~:width": 1529.00000393592, + "~:height": 300.00000707033, + "~:x1": 92.9999984013973, + "~:y1": 169.999996321908, + "~:x2": 1622.00000233732, + "~:y2": 470.000003392238 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 300.00000707033, + "~:flip-y": null + } + } + } + } + }, + "~:id": "~ueffcbebc-b8c8-802f-8007-b0ebecd7ebf4", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js b/frontend/playwright/ui/render-wasm-specs/texts.spec.js index d837a64834..23a4701bbd 100644 --- a/frontend/playwright/ui/render-wasm-specs/texts.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/texts.spec.js @@ -587,3 +587,23 @@ test.skip("Updates text alignment edition - part 3", async ({ page }) => { await expect(workspace.canvas).toHaveScreenshot({ timeout: 10000 }); }); + + +test("Renders a file with group with strokes and not 100% opacities", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("render-wasm/get-file-strokes-and-not-100-percent-opacities.json"); + + await workspace.goToWorkspace({ + id: "effcbebc-b8c8-802f-8007-b0ebecd7ebf4", + pageId: "3e9e17c3-fc57-80ce-8007-101743996fe9", + }); + + await workspace.waitForFirstRenderWithoutUI(); + await expect(workspace.canvas).toHaveScreenshot({ + maxDiffPixelRatio: 0, + threshold: 0.01, + }); +}); \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-group-with-strokes-and-not-100-opacities-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-group-with-strokes-and-not-100-opacities-1.png new file mode 100644 index 0000000000000000000000000000000000000000..989559cc021e6376ce6ea68dc3d5e4347aab987e GIT binary patch literal 80725 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

3$QmQX<;^x) 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

  • X7W7-bdTTqv;xksSVoArBel|qDP)%XuFX}oQHPO)% zvXp1I)O$JzO%Q<9Jnyf((868oIGq!8r2?CxZPpQQDXiLKQ@wDGAwWQ@jd7rgdL#)RhTU@+0^fr{@FI zxm$d{Gn*|rzAQ4HPgy5xkhOy)u=}We>GthPtsRfk-P&lv-o<@(WV75LIUl^?sRV!8%&S&SaUx!z5*}prOT)cS7N0J?nK>CoCcwf>Bx4Qah z@w(ZeV#YylcUz433v%}oPd-G58M0E_XSj0Y9da&&~8 z@A+N9G7bIyklQ>9U)StpG&=bPkBI=OQNQIE{R;mO95wcV`y<%CyiK;`$j&1)=9EcI!q0!I4B^6Y(^b`+X z(A-ufo3uJ!RtKcLO?|Y=GJECxiw~}Gw5_+gfBaI_{A+LVqSvXNG^7cV;O014Bg@Gr z&D=Q7ShF&)To6vXk*;Jnwsl-CU)T}QYj_tW(Xl63X^SOSsRtn?)OXE~t;jpuhDoRM z%>KwZN!)d?lSIaE9Ko#Ymm-R$}pPm@=xh%`!;x=L8X_}w-ohRP%Zsj>0>wdsOVbXc3N?9305-Q z=Oi?IiShgLH9S&A5h$q$z=20uYx0%F^DK$&Pg*DCg?egNNQD_I(6b-Vv~2Q=*kf8h z1kY9r!S&kU&&?hxSSR;LTXV{72l^$YcT3x_k1Q@yi4Jz@(;u|H3hXZQH`QC4@OmnQ zhSz+%59`|Q#aVxH`QQOTo^Kf`60rMy&Je_Q_1>M^rW!m_Q6NPE$rUTOC}1HXjF*W6aLb zz;I`GS6Drm_Epe_va@3*77sg~IrR7UznGTRnwn*p7DNtP61{pgn7)$7%*-q&H$bP= zkr31MA1W#;0;nbJ$CA+{WqF>+azIqtJALbTajcBDsQ$nMgR$}T?IOO->F5Ab$_c~6 zU5T#P%_EYJpfI7>zIimqM7m)M$e7O%Z@C&~1kde^M4R!Y)FX4+g#*`C;>ADsycAYJ z=UdMAKYP;;h>7(TLjEu zl)C!Ppiz5!@7ZPA)b+|yN<=4vrW{l&xn*UZTWe#>%gYDh;qN6Z#Ns2#k%b!@#Dc!Q zKEyFMd0S$hA`SCp6M`w8XX@V>0f_u-?>ZbhBwn7zVH>Z(E`#0uK`#mHv>%teB@<+ zVkrn1HC>e>CPvgK-7>#Mln`87GHGc#rE7chDX|5}$3{n{92`Wo`}V2@u6^%2ezuR3 ztl;3H6PL4ee*c~S4JD9+i>va}CpB^lcHyb8<7pC1-x2t#x}gE<=SQh=j#f}rl{4|% z6ioCGOQfz(U>CL){pp-QC^1MoaxySqiJI zrKr@MhU174?~)x=)HDWdFBFUF?&;x=2^=Z3dGKUFg62xyz$`3G_jGqpd4*4mQ3B)Z z55Ir-k@kfAI&|M|dVJi<>ATl$EEbE=YNp`z;1S{cu5MzA&UmkZ%z9o?f|~EaKbv14 z`HK|1lC8ZmFBSf^fb*`l=0)f!daxC$Zb$;UV1R1`) z)Qj@>$24a8XbGucK%EAx(OB*zD9nM~I|a%jU?Pmx0VL(2><{9 literal 0 HcmV?d00001 diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index 12d4fcc2b7..ce5781ca63 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -868,7 +868,7 @@ impl RenderState { let text_stroke_blur_outset = Stroke::max_bounds_width(shape.visible_strokes(), false); let mut paragraph_builders = text_content.paragraph_builder_group_from_text(None); - let mut stroke_paragraphs_list = shape + let (mut stroke_paragraphs_list, stroke_opacities): (Vec<_>, Vec<_>) = shape .visible_strokes() .rev() .map(|stroke| { @@ -880,7 +880,7 @@ impl RenderState { None, ) }) - .collect::>(); + .unzip(); if fast_mode { // Fast path: render fills and strokes only (skip shadows/blur). text::render( @@ -892,9 +892,13 @@ impl RenderState { None, None, text_fill_inset, + None, ); - for stroke_paragraphs in stroke_paragraphs_list.iter_mut() { + for (stroke_paragraphs, layer_opacity) in stroke_paragraphs_list + .iter_mut() + .zip(stroke_opacities.iter()) + { text::render_with_bounds_outset( Some(self), None, @@ -905,6 +909,7 @@ impl RenderState { None, text_stroke_blur_outset, None, + *layer_opacity, ); } } else { @@ -918,7 +923,10 @@ impl RenderState { let blur_filter = shape.image_filter(1.); let mut paragraphs_with_shadows = text_content.paragraph_builder_group_from_text(Some(true)); - let mut stroke_paragraphs_with_shadows_list = shape + let (mut stroke_paragraphs_with_shadows_list, _shadow_opacities): ( + Vec<_>, + Vec<_>, + ) = shape .visible_strokes() .rev() .map(|stroke| { @@ -930,7 +938,7 @@ impl RenderState { Some(true), ) }) - .collect::>(); + .unzip(); if let Some(parent_shadows) = parent_shadows { if !shape.has_visible_strokes() { @@ -944,6 +952,7 @@ impl RenderState { Some(&shadow), blur_filter.as_ref(), None, + None, ); } } else { @@ -970,6 +979,7 @@ impl RenderState { Some(shadow), blur_filter.as_ref(), None, + None, ); } } @@ -984,6 +994,7 @@ impl RenderState { None, blur_filter.as_ref(), text_fill_inset, + None, ); // 3. Stroke drop shadows @@ -998,7 +1009,10 @@ impl RenderState { ); // 4. Stroke fills - for stroke_paragraphs in stroke_paragraphs_list.iter_mut() { + for (stroke_paragraphs, layer_opacity) in stroke_paragraphs_list + .iter_mut() + .zip(stroke_opacities.iter()) + { text::render_with_bounds_outset( Some(self), None, @@ -1009,6 +1023,7 @@ impl RenderState { blur_filter.as_ref(), text_stroke_blur_outset, None, + *layer_opacity, ); } @@ -1035,6 +1050,7 @@ impl RenderState { Some(shadow), blur_filter.as_ref(), None, + None, ); } } diff --git a/render-wasm/src/render/shadows.rs b/render-wasm/src/render/shadows.rs index b5077f0688..ea43322b70 100644 --- a/render-wasm/src/render/shadows.rs +++ b/render-wasm/src/render/shadows.rs @@ -155,6 +155,7 @@ pub fn render_text_shadows( None, blur_filter.as_ref(), None, + None, ); for stroke_paragraphs in stroke_paragraphs_group.iter_mut() { @@ -167,6 +168,7 @@ pub fn render_text_shadows( None, blur_filter.as_ref(), None, + None, ); } diff --git a/render-wasm/src/render/text.rs b/render-wasm/src/render/text.rs index 42c35b450f..832503505d 100644 --- a/render-wasm/src/render/text.rs +++ b/render-wasm/src/render/text.rs @@ -20,11 +20,12 @@ pub fn stroke_paragraph_builder_group_from_text( bounds: &Rect, count_inner_strokes: usize, use_shadow: Option, -) -> Vec { +) -> (Vec, Option) { let fallback_fonts = get_fallback_fonts(); let fonts = get_font_collection(); let mut paragraph_group = Vec::new(); let remove_stroke_alpha = use_shadow.unwrap_or(false) && !stroke.is_transparent(); + let mut group_layer_opacity: Option = None; for paragraph in text_content.paragraphs() { let mut stroke_paragraphs_map: std::collections::HashMap = @@ -32,7 +33,7 @@ pub fn stroke_paragraph_builder_group_from_text( for span in paragraph.children().iter() { let text_paint: skia_safe::Handle<_> = merge_fills(span.fills(), *bounds); - let stroke_paints = get_text_stroke_paints( + let (stroke_paints, stroke_layer_opacity) = get_text_stroke_paints( stroke, bounds, &text_paint, @@ -40,6 +41,10 @@ pub fn stroke_paragraph_builder_group_from_text( remove_stroke_alpha, ); + if group_layer_opacity.is_none() { + group_layer_opacity = stroke_layer_opacity; + } + let text: String = span.apply_text_transform(); for (paint_idx, stroke_paint) in stroke_paints.iter().enumerate() { @@ -67,7 +72,7 @@ pub fn stroke_paragraph_builder_group_from_text( paragraph_group.push(stroke_paragraphs); } - paragraph_group + (paragraph_group, group_layer_opacity) } fn get_text_stroke_paints( @@ -76,8 +81,25 @@ fn get_text_stroke_paints( text_paint: &Paint, count_inner_strokes: usize, remove_stroke_alpha: bool, -) -> Vec { +) -> (Vec, Option) { let mut paints = Vec::new(); + let mut layer_opacity: Option = None; + + let stroke_opacity = stroke.fill.opacity(); + let needs_opacity_layer = stroke_opacity < 1.0 && !remove_stroke_alpha; + + let fill_for_paint = |paint: &mut Paint| { + if needs_opacity_layer { + let opaque_fill = stroke.fill.with_full_opacity(); + set_paint_fill(paint, &opaque_fill, bounds, remove_stroke_alpha); + } else { + set_paint_fill(paint, &stroke.fill, bounds, remove_stroke_alpha); + } + }; + + if needs_opacity_layer { + layer_opacity = Some(stroke_opacity); + } match stroke.kind { StrokeKind::Inner => { @@ -99,7 +121,7 @@ fn get_text_stroke_paints( paint.set_blend_mode(skia::BlendMode::SrcIn); paint.set_anti_alias(true); paint.set_stroke_width(stroke.width * 2.0); - set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha); + fill_for_paint(&mut paint); paints.push(paint); } else { let mut paint = skia::Paint::default(); @@ -108,7 +130,12 @@ fn get_text_stroke_paints( paint.set_alpha(255); } else { paint = text_paint.clone(); - set_paint_fill(&mut paint, &stroke.fill, bounds, false); + if needs_opacity_layer { + let opaque_fill = stroke.fill.with_full_opacity(); + set_paint_fill(&mut paint, &opaque_fill, bounds, false); + } else { + set_paint_fill(&mut paint, &stroke.fill, bounds, false); + } } paint.set_style(skia::PaintStyle::Fill); @@ -132,7 +159,7 @@ fn get_text_stroke_paints( paint.set_style(skia::PaintStyle::Stroke); paint.set_anti_alias(true); paint.set_stroke_width(stroke.width); - set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha); + fill_for_paint(&mut paint); paints.push(paint); } StrokeKind::Outer => { @@ -141,7 +168,7 @@ fn get_text_stroke_paints( paint.set_blend_mode(skia::BlendMode::DstOver); paint.set_anti_alias(true); paint.set_stroke_width(stroke.width * 2.0); - set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha); + fill_for_paint(&mut paint); paints.push(paint); let mut paint = skia::Paint::default(); @@ -153,7 +180,7 @@ fn get_text_stroke_paints( } } - paints + (paints, layer_opacity) } #[allow(clippy::too_many_arguments)] @@ -167,6 +194,7 @@ pub fn render_with_bounds_outset( blur: Option<&ImageFilter>, stroke_bounds_outset: f32, fill_inset: Option, + layer_opacity: Option, ) { if let Some(render_state) = render_state { let target_surface = surface_id.unwrap_or(SurfaceId::Fills); @@ -195,6 +223,7 @@ pub fn render_with_bounds_outset( shadow, Some(&blur_filter_clone), fill_inset, + layer_opacity, ); }, ) { @@ -204,12 +233,28 @@ pub fn render_with_bounds_outset( } let canvas = render_state.surfaces.canvas_and_mark_dirty(target_surface); - render_text_on_canvas(canvas, shape, paragraph_builders, shadow, blur, fill_inset); + render_text_on_canvas( + canvas, + shape, + paragraph_builders, + shadow, + blur, + fill_inset, + layer_opacity, + ); return; } if let Some(canvas) = canvas { - render_text_on_canvas(canvas, shape, paragraph_builders, shadow, blur, fill_inset); + render_text_on_canvas( + canvas, + shape, + paragraph_builders, + shadow, + blur, + fill_inset, + layer_opacity, + ); } } @@ -223,6 +268,7 @@ pub fn render( shadow: Option<&Paint>, blur: Option<&ImageFilter>, fill_inset: Option, + layer_opacity: Option, ) { render_with_bounds_outset( render_state, @@ -234,6 +280,7 @@ pub fn render( blur, 0.0, fill_inset, + layer_opacity, ); } @@ -244,6 +291,7 @@ fn render_text_on_canvas( shadow: Option<&Paint>, blur: Option<&ImageFilter>, fill_inset: Option, + layer_opacity: Option, ) { if let Some(blur_filter) = blur { let mut blur_paint = Paint::default(); @@ -255,7 +303,7 @@ fn render_text_on_canvas( if let Some(shadow_paint) = shadow { let layer_rec = SaveLayerRec::default().paint(shadow_paint); canvas.save_layer(&layer_rec); - draw_text(canvas, shape, paragraph_builders); + draw_text(canvas, shape, paragraph_builders, layer_opacity); canvas.restore(); } else if let Some(eps) = fill_inset.filter(|&e| e > 0.0) { if let Some(erode) = skia_safe::image_filters::erode((eps, eps), None, None) { @@ -263,13 +311,13 @@ fn render_text_on_canvas( layer_paint.set_image_filter(erode); let layer_rec = SaveLayerRec::default().paint(&layer_paint); canvas.save_layer(&layer_rec); - draw_text(canvas, shape, paragraph_builders); + draw_text(canvas, shape, paragraph_builders, layer_opacity); canvas.restore(); } else { - draw_text(canvas, shape, paragraph_builders); + draw_text(canvas, shape, paragraph_builders, layer_opacity); } } else { - draw_text(canvas, shape, paragraph_builders); + draw_text(canvas, shape, paragraph_builders, layer_opacity); } if blur.is_some() { @@ -283,13 +331,20 @@ fn draw_text( canvas: &Canvas, shape: &Shape, paragraph_builder_groups: &mut [Vec], + layer_opacity: Option, ) { let text_content = shape.get_text_content(); let layout_info = calculate_text_layout_data(shape, text_content, paragraph_builder_groups, true); - let layer_rec = SaveLayerRec::default(); - canvas.save_layer(&layer_rec); + if let Some(opacity) = layer_opacity { + let mut opacity_paint = Paint::default(); + opacity_paint.set_alpha_f(opacity); + let layer_rec = SaveLayerRec::default().paint(&opacity_paint); + canvas.save_layer(&layer_rec); + } else { + canvas.save_layer(&SaveLayerRec::default()); + } for para in &layout_info.paragraphs { para.paragraph.paint(canvas, (para.x, para.y)); diff --git a/render-wasm/src/shapes/fills.rs b/render-wasm/src/shapes/fills.rs index cf8a930894..5b61b3ee2a 100644 --- a/render-wasm/src/shapes/fills.rs +++ b/render-wasm/src/shapes/fills.rs @@ -140,6 +140,38 @@ pub enum Fill { } impl Fill { + pub fn opacity(&self) -> f32 { + match self { + Fill::Solid(SolidColor(color)) => color.a() as f32 / 255.0, + Fill::LinearGradient(g) => g.opacity as f32 / 255.0, + Fill::RadialGradient(g) => g.opacity as f32 / 255.0, + Fill::Image(i) => i.opacity as f32 / 255.0, + } + } + + pub fn with_full_opacity(&self) -> Fill { + match self { + Fill::Solid(SolidColor(color)) => Fill::Solid(SolidColor(skia::Color::from_argb( + 255, + color.r(), + color.g(), + color.b(), + ))), + Fill::LinearGradient(g) => Fill::LinearGradient(Gradient { + opacity: 255, + ..g.clone() + }), + Fill::RadialGradient(g) => Fill::RadialGradient(Gradient { + opacity: 255, + ..g.clone() + }), + Fill::Image(i) => Fill::Image(ImageFill { + opacity: 255, + ..i.clone() + }), + } + } + pub fn to_paint(&self, rect: &Rect, anti_alias: bool) -> skia::Paint { match self { Self::Solid(SolidColor(color)) => {