Skip to content

Feat/taffy layout engine - #5

Merged
mitayan0 merged 2 commits into
mainfrom
feat/taffy-layout-engine
Aug 13, 2026
Merged

mitayan0 merged 2 commits into
mainfrom
feat/taffy-layout-engine

Conversation

@mitayan0

Copy link
Copy Markdown
Contributor

No description provided.

pump_workers: registry is now a strong set — an abandoned worker could be GC'd before its completion callback fired once the thread dropped its bound-method target; join() also discards on collection. Swallow BaseException so a worker raising SystemExit/KeyboardInterrupt can't kill the loop.

TUI loop: clear dirtiness before build_tree() instead of after, so writes made during a view() survive to gate the next rebuild (matching flush()'s defer-to-next-tick semantics) rather than being swallowed.
Hit-testing now runs in Rust (LayoutSnapshot.hit_test) using the same scroll-clipping geometry as render_frame — a shared screen_geometry() helper is the single source of truth, retiring the Python _screen_geometry mirror that duplicated it.

Focus is now explicit: Node gains a focusable flag and _is_focusable requires an enabled button, focusable=True, or an on_focus handler. on_key alone no longer implies focusable, so a root container's app-level 'q' binding stops stealing Tab focus; ScrollView opts in via focusable=True.

TUI loop survives a broken view(): build_tree/layout errors are logged and the last good frame is kept, so a developer can hot-reload a fix instead of the app dying. State docstring documents mutable-value replacement.
@mitayan0
mitayan0 merged commit 7046389 into main Aug 13, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant