You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Implement exclude and WebKit xor mask compositing #506
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.
Activity