Split out of #8, which asked for data widgets and is closed because they exist. This is the one clause of it that nothing implements.
What remains
Every data widget is composed from stacks and grids. Neither native collection view is referenced anywhere in the backends:
macOS NSTableView refs: 0
gtk4 GtkListView / GtkColumnView: 0
vlist virtualizes by rendering a bounded, recycling window of rows over a stack. That is real virtualization (1000 items realize 10 widgets, asserted in tests/vlist_demo/spec_vlist_demo.ae) and it is enough for the scaling problem #8 described. It is not the same thing as a native collection view.
Why it is still worth doing
Native backing brings platform behaviour that a composed implementation has to reimplement one piece at a time:
- row reuse handled by the platform rather than by our window arithmetic
- accessibility integration as a real table rather than roles we set by hand
- keyboard navigation and type-select
- platform-native selection, focus ring and scrolling feel
Two of these have since been implemented by hand on the composed widgets: listbox keyboard navigation (Up/Down/Home/End) and table / columnheader / row accessibility roles across all three backends. That is worth knowing before starting, because it lowers the urgency and it means a native rewrite must preserve behaviour that now has specs asserting it.
Scope
Backing vlist and table with NSTableView on AppKit and GtkListView / GtkColumnView on GTK4, with a composed fallback on win32, while keeping the existing DSL surface and every current spec green. That last constraint is the hard part and the reason this is its own issue rather than a footnote on #8.
Split out of #8, which asked for data widgets and is closed because they exist. This is the one clause of it that nothing implements.
What remains
Every data widget is composed from stacks and grids. Neither native collection view is referenced anywhere in the backends:
vlistvirtualizes by rendering a bounded, recycling window of rows over a stack. That is real virtualization (1000 items realize 10 widgets, asserted intests/vlist_demo/spec_vlist_demo.ae) and it is enough for the scaling problem #8 described. It is not the same thing as a native collection view.Why it is still worth doing
Native backing brings platform behaviour that a composed implementation has to reimplement one piece at a time:
Two of these have since been implemented by hand on the composed widgets: listbox keyboard navigation (Up/Down/Home/End) and
table/columnheader/rowaccessibility roles across all three backends. That is worth knowing before starting, because it lowers the urgency and it means a native rewrite must preserve behaviour that now has specs asserting it.Scope
Backing
vlistandtablewithNSTableViewon AppKit andGtkListView/GtkColumnViewon GTK4, with a composed fallback on win32, while keeping the existing DSL surface and every current spec green. That last constraint is the hard part and the reason this is its own issue rather than a footnote on #8.