Skip to content

Implement exclude and WebKit xor mask compositing #506

Closed

Description

@wieslawsoltes

Merged — 19 September 2026

WebScene PR #514 merged as 7c80af65d5986c43651bf8458667a4e64300e05a and closed this issue. AppScene PR #179 merged as b56f9a91a93610876c1ca9a5314df01bcc74b4c2 and closed AppScene #178.

The retained v3 ABI preserves authored standard exclude/WebKit xor CSSOM text, normalizes both to an explicit per-layer exclude identity, paints bottom-to-top with source-over/xor, and applies the completed bounded mask once in Avalonia, Flutter, and packaged Skia/Graphite.

Only git diff --check ran locally. All executable alias, pixel, mutation, lifecycle, performance, memory, package, and zero-browser gates remain deferred under #256 and the release epics.

Problem

Unchanged Code OSS uses mask-composite: exclude and -webkit-mask-composite: xor for chat, voice, and session-banner rings. The current single-layer implementation only accepts add, so these reachable surfaces fail closed.

Focused implementation

  • Canonicalize browser/WebKit composite values to an explicit per-layer operation without changing CSSOM serialization.
  • Implement bounded add/source-over and exclude/xor alpha composition in the retained mask surface for Skia/Avalonia/Uno and Flutter.
  • Preserve authored layer order, clipping, opacity, and final destination-in application.
  • Reject subtract/intersect/source-in/out variants until separately implemented rather than approximating them.
  • Track composite changes in scene equality and localized damage.

Gates

Code OSS chat/voice/session-banner fixtures, transparent-edge and premultiplied-alpha pixels against Chromium, standard/WebKit alias contracts, mutation/reorder tests, and bounded temporary-surface/allocation benchmarks.

Parent: #256. Stack after the multiple-layer provider.

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