From 9c497deb3e0973463300f516df613671e869ef48 Mon Sep 17 00:00:00 2001 From: Liam Galvin Date: Wed, 24 Oct 2018 10:07:10 +0100 Subject: [PATCH 1/2] improved vertical resize calcs --- README.md | 10 +++++----- buffer/buffer.go | 22 ++++++++++------------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 9ff9349..39dfbae 100644 --- a/README.md +++ b/README.md @@ -53,18 +53,18 @@ Ensure you have your latest graphics card drivers installed before use. | Feature | Done | Notes | |-----------------------------|------|-------| -| Pty allocation | ✔ | Needs work for OSX + Windows +| Pty allocation | ✔ | | OpenGL rendering | ✔ | | 8-bit (256) colour | ✔ | | 24-bit (true) colour | ✔ | -| Resizing/content reordering | ⏳ | -| ANSI escape codes | ⏳ | Most of these are handled now +| Resizing/content reordering | ✔ | +| ANSI escape codes | ✔ | | UTF-8 input | ✔ | | UTF-8 output | ✔ | Works as long as the font in use supports the relevant characters. | Copy/paste | | Paste working, no mouse interaction for copy | Customisable colour schemes | ✔ | Complete, but the config file has no entry for this yet -| Config file | ⏳ | Minimal options atm -| Scrolling | ⏳ | Infinite buffer implemented, need GUI scrollbar & render updates +| Config file | ✔ | Minimal options atm +| Scrolling | ✔ | | Mouse interaction | | | Sweet render effects | | diff --git a/buffer/buffer.go b/buffer/buffer.go index bbf580f..ca29113 100644 --- a/buffer/buffer.go +++ b/buffer/buffer.go @@ -671,22 +671,20 @@ func (buffer *Buffer) ResizeView(width uint16, height uint16) { } } - // @todo handle vertical resize? - - if buffer.Height() < int(buffer.viewHeight) { - // we might need to move back up if the buffer is now smaller - if int(buffer.cursorY) < buffer.Height()-1 { - buffer.cursorY = uint16(buffer.Height() - 1) - } else { - buffer.cursorY = uint16(buffer.Height() - 1) - } - } else { - buffer.cursorY = buffer.viewHeight - 1 - } + fromBottom := buffer.viewHeight - buffer.cursorY buffer.viewWidth = width buffer.viewHeight = height + if buffer.cursorY >= buffer.viewHeight-1 { + buffer.cursorY = buffer.viewHeight - 1 + } else { + buffer.cursorY = buffer.viewHeight - fromBottom + if int(buffer.cursorY) >= buffer.Height() { + buffer.cursorY = uint16(buffer.Height() - 1) + } + } + // position cursorX line = buffer.getCurrentLine() buffer.cursorX = uint16((len(line.cells) - cXFromEndOfLine) - 1) From 084c3671ce0dfd299937db1f0a0f106ae993ca38 Mon Sep 17 00:00:00 2001 From: Liam Galvin Date: Wed, 24 Oct 2018 10:24:52 +0100 Subject: [PATCH 2/2] fixed failing test for resize --- buffer/buffer.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/buffer/buffer.go b/buffer/buffer.go index ca29113..372dc7c 100644 --- a/buffer/buffer.go +++ b/buffer/buffer.go @@ -610,6 +610,8 @@ func (buffer *Buffer) ResizeView(width uint16, height uint16) { line := buffer.getCurrentLine() cXFromEndOfLine := len(line.cells) - int(buffer.cursorX+1) + cursorYMovement := 0 + if width < buffer.viewWidth { // wrap lines if we're shrinking for i := 0; i < len(buffer.lines); i++ { line := &buffer.lines[i] @@ -629,6 +631,10 @@ func (buffer *Buffer) ResizeView(width uint16, height uint16) { } } + if i+1 <= int(buffer.cursorY) { + cursorYMovement++ + } + newLine := newLine() newLine.setWrapped(true) newLine.cells = sillyCells @@ -657,6 +663,11 @@ func (buffer *Buffer) ResizeView(width uint16, height uint16) { } line.cells = append(line.cells, nextLine.cells[:moveCount]...) if moveCount == len(nextLine.cells) { + + if i+offset <= int(buffer.cursorY) { + cursorYMovement-- + } + // if we unwrapped all cells off the next line, delete it buffer.lines = append(buffer.lines[:i+offset], buffer.lines[i+offset+1:]...) @@ -679,7 +690,7 @@ func (buffer *Buffer) ResizeView(width uint16, height uint16) { if buffer.cursorY >= buffer.viewHeight-1 { buffer.cursorY = buffer.viewHeight - 1 } else { - buffer.cursorY = buffer.viewHeight - fromBottom + buffer.cursorY = (buffer.viewHeight - fromBottom) + uint16(cursorYMovement) if int(buffer.cursorY) >= buffer.Height() { buffer.cursorY = uint16(buffer.Height() - 1) }