Skip to content

Render URL-backed SVG masks in retained scenes #500

Description

@wieslawsoltes

Completed focused slice — 19 September 2026

PR #502 was rebased onto merged provider #501 and merged as WebScene main commit a17a0db7a3e3bcf474279edc060f1cbe9b69e9b5; this issue is closed. The merged slice covers policy-loaded SVG masks, versioned retained resources, isolated destination-in Skia/Flutter projection, repeat/position/size, uncovered-region clearing, caching, and fail-closed invalid resources. Authored regressions were not executed. Controlled ServiceWorker loading, raster/multiple/radial/luminance/non-add masks, and richer Flutter SVG remain scheduled under #256.

Problem

Unchanged Code OSS uses URL-backed SVG masks for activity, view, file, progress, welcome, extension, MCP, release-note, and theme icons. WebScene can already load and tile the same SVG resources as CSS backgrounds, but retained mask publication only accepts linear gradients. The affected elements therefore paint their foreground color as solid rectangles or lose the intended icon silhouette.

Bounded implementation

  • Reuse the policy-aware CSS image loader and immutable SVG source/cache used by URL-backed backgrounds.
  • Retain a versioned SVG mask resource containing viewBox, repeat, position, size, and markup after successful policy/load checks.
  • Apply the SVG alpha with destination-in inside the existing isolated mask group in Skia/Avalonia/Uno and Flutter.
  • Preserve contain/cover/auto, percentage/pixel size, position, and repeat/no-repeat axes; clear uncovered pixels for partial/no-repeat tiles.
  • Include resource identity in scene equality/damage and release cached resources through existing renderer lifecycle paths.
  • Fail closed for raster masks, unsafe/unresolved resources, multiple layers, luminance mode, and unsupported composites.
  • Add retained-command, backend, mutation/replacement, resource-policy, cache/lifecycle, and Code OSS consumer regression coverage.

Dependency and deferred gates

Stack this consumer on the focused mask-shorthand provider so Code OSS shorthand URLs reach the same longhand pipeline. Browser/native pixels, Skia/Flutter parity, performance, memory, exact-package, and CI gates remain required before release promotion but are deferred under the current throughput directive.

Parent: #256. Coordination: #236/#241/#266.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    vscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions