Follow-up to #823. The containment clip in render has four registry opt-outs ("clip": 0) for widgets whose render legitimately leaves the widget rect. Two of them are the real remaining debt:
1. dropdown / combobox draw their open lists in-tree. The open list renders below the widget rect during the tree walk, so (a) it cannot be clipped without erasing it — hence the opt-out — and (b) it is painted over by any later sibling, the same z-order class #565 fixed for menu_bar pull-downs by moving them to the _render_popups overlay pass. Moving the open lists there fixes both: the anchor widget becomes clippable like everything else, and an open list sits above whatever it overlaps. Note the current behavior inside a clipped ancestor (scroll_panel, dock region): the open list crops at the ancestor edge; the overlay pass frees it from that too.
2. grid's row-label gutter draws left of x, outside its own bounds (documented in docs/STDLIB.md). Fold the gutter into the widget rect (shift the cell origin right by row_label_w) and drop grid's opt-out.
menu (a floating popup by design) and dialog (full-screen dim overlay) keep their opt-outs.
Acceptance: opt-outs reduced to menu + dialog; an open dropdown inside a panel renders above later siblings and past the panel edge; stubbed [63] + real-pixel [132] both extended to cover the flipped widgets.
Owner: eigenscript-ui-toolkit-engineer.
Follow-up to #823. The containment clip in
renderhas four registry opt-outs ("clip": 0) for widgets whose render legitimately leaves the widget rect. Two of them are the real remaining debt:1. dropdown / combobox draw their open lists in-tree. The open list renders below the widget rect during the tree walk, so (a) it cannot be clipped without erasing it — hence the opt-out — and (b) it is painted over by any later sibling, the same z-order class #565 fixed for menu_bar pull-downs by moving them to the
_render_popupsoverlay pass. Moving the open lists there fixes both: the anchor widget becomes clippable like everything else, and an open list sits above whatever it overlaps. Note the current behavior inside a clipped ancestor (scroll_panel, dock region): the open list crops at the ancestor edge; the overlay pass frees it from that too.2. grid's row-label gutter draws left of
x, outside its own bounds (documented in docs/STDLIB.md). Fold the gutter into the widget rect (shift the cell origin right byrow_label_w) and drop grid's opt-out.menu(a floating popup by design) anddialog(full-screen dim overlay) keep their opt-outs.Acceptance: opt-outs reduced to menu + dialog; an open dropdown inside a panel renders above later siblings and past the panel edge; stubbed [63] + real-pixel [132] both extended to cover the flipped widgets.
Owner: eigenscript-ui-toolkit-engineer.