Bugfix: avoid crash on terminal rezise with tcell.

This commit is contained in:
Jakub Sobon 2020-12-27 02:53:08 -05:00
parent 82e52ead85
commit 9360ffff49
No known key found for this signature in database
GPG Key ID: F2451A77FB05D3B7
2 changed files with 12 additions and 14 deletions

View File

@ -28,6 +28,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
func (*BarChart) Mouse(m *terminalapi.Mouse, meta *widgetapi.EventMeta) error { ... } func (*BarChart) Mouse(m *terminalapi.Mouse, meta *widgetapi.EventMeta) error { ... }
``` ```
### Fixed
- `termdash` no longer crashes when `tcell` is used and the terminal window
downsizes while content is being drawn.
### Added ### Added
#### Infrastructure changes #### Infrastructure changes

View File

@ -195,21 +195,14 @@ func (c *Canvas) copyTo(offset image.Point, dstSetCell setCellFunc) error {
} }
// Apply applies the canvas to the corresponding area of the terminal. // Apply applies the canvas to the corresponding area of the terminal.
// Guarantees to stay within limits of the area the canvas was created with.
func (c *Canvas) Apply(t terminalapi.Terminal) error { func (c *Canvas) Apply(t terminalapi.Terminal) error {
termArea, err := area.FromSize(t.Size()) // Note - the size of the terminal might have changed since we started
if err != nil { // drawing, since terminal windows are inherently racy (the user can resize
return err // them at any time).
} //
// This is ok, since the underlying terminal layer will just ignore cells
bufArea, err := area.FromSize(c.buffer.Size()) // that are out of bounds and termdash will redraw again once it receives
if err != nil { // the resize event. Regression for #281.
return err
}
if !bufArea.In(termArea) {
return fmt.Errorf("the canvas area %+v doesn't fit onto the terminal %+v", bufArea, termArea)
}
// The image.Point{0, 0} of this canvas isn't always exactly at // The image.Point{0, 0} of this canvas isn't always exactly at
// image.Point{0, 0} on the terminal. // image.Point{0, 0} on the terminal.