charmbracelet / bubbletea

A powerful little TUI framework 🏗
MIT License
25.65k stars 744 forks source link

Pager example with high performance rendering loses first line on resize #1039

Open leg100 opened 1 month ago

leg100 commented 1 month ago

Describe the bug I'm running the pager example, albeit with high performance rendering turned on. It works fine until the window is resized, at which point the first line of the viewport is 'lost', i.e. it is re-rendered as an empty line.

Setup

To Reproduce Steps to reproduce the behavior:

  1. go to ./examples/pager
  2. edit main.go to enable high performance renderer:
index 12a71a3..fd677d5 100644
--- a/examples/pager/main.go
+++ b/examples/pager/main.go
@@ -19,7 +19,7 @@ import (
 // Also keep in mind that high performance rendering only works for programs
 // that use the full size of the terminal. We're enabling that below with
 // tea.EnterAltScreen().
-const useHighPerformanceRenderer = false
+const useHighPerformanceRenderer = true
  1. run: go run main.go
  2. resize terminal window

Screenshots Before resize:

image After resize:

image

Further info

The line does reappear if you scroll down and then back up again.

It also re-appears if you full screen the terminal and then un-fullscreen the terminal.

If you scroll down before a window resize, and then resize the window, then the first visible line is missing and stays missing until you scroll it out of view and back into view.

meowgorithm commented 1 month ago

Noted, thank you! This is a regression which we're tracking in https://github.com/charmbracelet/bubbletea/issues/573.

meowgorithm commented 1 month ago

Whoops, that's actually not the correct issue so let's track it here.

We'll look into this, however we're also working on a new renderer, which should obviate (and deprecate) the need for the current high performance rendering API, implicitly fixing this issue.

Anyway, we'll keep this issue updated.

leg100 commented 1 month ago

Thank you @meowgorithm for the fast response.

To be honest I've been hitting this issue in my app. I've attempted for the last few days to incorporate high performance rendering, after seeing some very noticeable lag when rendering not-that-complicated nor very many ansi sequences. Because the app is multi-model, i.e. switching from one viewport to another one occupying the same lines on the terminal, it took some work to re-sync the viewport each time, but I got that working quite nicely. However every now and then the rendering would produce strange artefacts, with this issue being the one that was consistently replicable in the pager example.

With that in mind, I look forward keenly to the new renderer!