Termina 0.16.0
New Features
-
Roslyn analyzers now ship with the Termina library (#346)
- Termina now includes its Roslyn analyzers in the package.
- The compiler runs the analyzers on your project and reports common layout node mistakes at build time.
- This change also fixes a node that Termina did not dispose when content switched.
-
New analyzer TERMINA003 for layout node child disposal (#343)
- TERMINA003 warns when code disposes a child layout node outside
Dispose(). Dispose()destroys the node, so the node can no longer render or handle input.- The analyzer tells you to call
OnDeactivate()to switch content.
- TERMINA003 warns when code disposes a child layout node outside
-
New analyzer TERMINA004 for stateful node recreation (#337)
- TERMINA004 warns when a dynamic layout factory creates a new stateful node on each run.
- A new node resets state such as the scroll position.
- The analyzer tells you to reuse the node, to invalidate a smaller child, or to use
KeyedDynamicLayoutNode.
Bug Fixes
-
Fixed glyph corruption when word-wrap breaks a long word that contains wide characters (#351)
StyledLine.SliceByColumnsno longer drops or reorders glyphs.- The corruption occurred when a long word contained wide characters (CJK or emoji) across segments.
- Streamed text now keeps the correct content and order.
-
Fixed the style of word-wrap space separators (#349)
- Word-wrap space separators now inherit the whitespace style from the source text.
- A wrapped line keeps the correct foreground and background for the space between words.
-
Guarded dynamic layout nodes against re-entrant Invalidate (#348)
DynamicLayoutNodeandKeyedDynamicLayoutNodeno longer re-enterInvalidate().- The guard prevents a stack overflow and inconsistent layout during a factory run.
-
Fixed GridNode cell subscription tracking on content swap (#347)
GridNodenow tracks cell subscriptions per content node.- The grid deactivates the old subscriptions when it swaps a cell.
- This change prevents stale updates and resource leaks.
Documentation
- Documented the built-in back navigation APIs (#350)
- New documentation explains the back navigation APIs.