Commit Graph
5 Commits
Author SHA1 Message Date
Elie Gambache 6ff431f442 feat(spellcheck): add Linux Hunspell spellcheck for Compose text fields
Introduce a :spellcheck module (JNI Hunspell via dlopen) and SpellcheckContextMenu
for red-wave underlines plus Cut/Copy/Paste suggestions. Jewel uses ContextMenuDivider
via ProvideJewelSpellcheckMenu. macOS and Windows remain no-ops until implemented.
2026-08-16 14:45:34 +03:00
Elie G. 06fb6fdbc2 feat(tao): TextureView — external GPU texture composited in the Compose scene (#338)
Windows-first implementation over the ANGLE backend; no-op elsewhere.

- TextureView composable: composites an external D3D11 texture inside
  the Compose scene (true z-order, clipping, transforms). Import opens
  the producer's legacy DXGI shared handle on ANGLE's own device
  (EGL_EXT_device_query) and binds it through an EGL_D3D_TEXTURE_ANGLE
  pbuffer + eglBindTexImage onto a GL texture that Skia adopts.
- TextureViewController.markFrameAvailable() (any thread): draw-only
  invalidation, zero recompositions per producer frame.
- Automatic synchronization: producers with an IDXGIKeyedMutex get a
  tear-free staging copy (AcquireSync 0 -> CopyResource -> ReleaseSync 0
  on ANGLE's device); plain MISC_SHARED textures are sampled zero-copy.
- Shared import registry: N TextureViews on one source share a single
  pbuffer/GL texture/Skia image and one staging copy per frame.
- filterQuality, contentScale + alignment parameters (clipped drawing).
- D3D11TestTextureProducer (own device, HW/WARP, optional keyed mutex,
  animated test pattern) + Texture tab in tao-demo exercising
  contentScale, filterQuality, both sync modes and the recomposition
  counter.
2026-08-05 17:22:00 +03:00
Elie G. 0f1265ae21 feat(tao): unify Windows a11y on AccessKit with enterprise UIA probes
Replace hand-rolled nucleus_tao_a11y COM projector with AccessKit on Windows,
share wire/decode path with Linux, and add golden tree + keyboard/event CI probes.
2026-08-03 00:01:50 +03:00
Elie Gambache 50b00dcced test(tao-a11y): cover the advanced accessibility semantics per OS
Probes now assert the advanced A11yTab sections, not just the basics:
- disabled button: role survives AND the disabled state projects
  (AX: AXButton + AXEnabled=false; UIA: IsEnabled=false; AT-SPI: no
  STATE_ENABLED)
- custom actions: labels ride the a11y channel and are performable
  (AX action names; AT-SPI doAction('Mark as read') round-trip -> counter)
- live region: pressing 'Update status' surfaces the new status text
- toggleable without an explicit role: STATE_CHECKABLE / TogglePattern
- heading role (AT-SPI)
- slider Value interface set/read (AT-SPI)

Also fixes a REAL a11y bug the new assertions caught: A11yButton's disabled
branch used semantics{} without mergeDescendants (unlike the enabled
clickable path), so the label stayed a separate enabled static-text node and
the disabled button projected unlabeled — VoiceOver read 'Cannot press' as
plain active text. Local AX probe: 7/7 PASS.
2026-07-19 15:40:56 +03:00
Elie G. 9a853ab209 refactor(examples): consolidate demos under examples/ + add compose-demo
Move all top-level demo/sample modules into a single examples/ directory with
uniform <topic>-demo naming (example → nucleus-demo, sample-tao → tao-demo,
jewel-sample → jewel-demo, etc.), and update every CI workflow, script, and doc
that referenced the old Gradle paths.

Add examples/compose-demo: a port of bitsycore/compose-desktop-native's demo
running on the Tao backend with Material 3 decorated windows, FileKit file
dialogs, Navigation 3, and GraalVM native-image config. Screens relying on
Material 3 Expressive (Compose 1.12) are omitted to stay on the repo's 1.11.x.
2026-07-12 21:50:45 +03:00