From b423c61d7e10153c50624e9a0324fdf0b94449d1 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Thu, 19 Sep 2024 13:31:33 -0400 Subject: [PATCH] refactor!: viewport: remove deprecated HighPerformanceRendering This breaks the API and removes high performance rendering and its related methods from the viewport package. It changes the API and makes the methods return nothing instead of lines to render. --- go.mod | 2 +- go.sum | 2 + viewport/viewport.go | 139 +++++++------------------------------------ 3 files changed, 23 insertions(+), 120 deletions(-) diff --git a/go.mod b/go.mod index d44bd128..223b8dbd 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/MakeNowJust/heredoc v1.0.0 github.com/atotto/clipboard v0.1.4 - github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1 + github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1.0.20240919172237-265996c29bea github.com/charmbracelet/harmonica v0.2.0 github.com/charmbracelet/lipgloss v0.13.0 github.com/charmbracelet/x/ansi v0.3.2 diff --git a/go.sum b/go.sum index 154e4dc1..58df9b88 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1 h1:OZtpLCsuuPplC+1oyUo+/eAN7e9MC2UyZWKlKrVlUnw= github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1/go.mod h1:j0gn4ft5CE7NDYNZjAA3hBM8t2OPjI8urxuAD0oR4w8= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1.0.20240919172237-265996c29bea h1:i32Z8pIQujNjR2BffDviAnai2L9oLMW7jMd7aCD8Jqg= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.1.0.20240919172237-265996c29bea/go.mod h1:j0gn4ft5CE7NDYNZjAA3hBM8t2OPjI8urxuAD0oR4w8= github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ= github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw= diff --git a/viewport/viewport.go b/viewport/viewport.go index 54faa608..81596a2d 100644 --- a/viewport/viewport.go +++ b/viewport/viewport.go @@ -42,18 +42,6 @@ type Model struct { // useful for setting borders, margins and padding. Style lipgloss.Style - // HighPerformanceRendering bypasses the normal Bubble Tea renderer to - // provide higher performance rendering. Most of the time the normal Bubble - // Tea rendering methods will suffice, but if you're passing content with - // a lot of ANSI escape codes you may see improved rendering in certain - // terminals with this enabled. - // - // This should only be used in program occupying the entire terminal, - // which is usually via the alternate screen buffer. - // - // Deprecated: high performance rendering is now deprecated in Bubble Tea. - HighPerformanceRendering bool - initialized bool lines []string } @@ -145,12 +133,12 @@ func (m *Model) SetYOffset(n int) { // ViewDown moves the view down by the number of lines in the viewport. // Basically, "page down". -func (m *Model) ViewDown() []string { +func (m *Model) ViewDown() { if m.AtBottom() { - return nil + return } - return m.LineDown(m.Height) + m.LineDown(m.Height) } // ViewUp moves the view up by one height of the viewport. Basically, "page up". @@ -163,40 +151,33 @@ func (m *Model) ViewUp() []string { } // HalfViewDown moves the view down by half the height of the viewport. -func (m *Model) HalfViewDown() (lines []string) { +func (m *Model) HalfViewDown() { if m.AtBottom() { - return nil + return } - return m.LineDown(m.Height / 2) + m.LineDown(m.Height / 2) } // HalfViewUp moves the view up by half the height of the viewport. -func (m *Model) HalfViewUp() (lines []string) { +func (m *Model) HalfViewUp() { if m.AtTop() { - return nil + return } - return m.LineUp(m.Height / 2) + m.LineUp(m.Height / 2) } // LineDown moves the view down by the given number of lines. -func (m *Model) LineDown(n int) (lines []string) { +func (m *Model) LineDown(n int) { if m.AtBottom() || n == 0 || len(m.lines) == 0 { - return nil + return } // Make sure the number of lines by which we're going to scroll isn't // greater than the number of lines we actually have left before we reach // the bottom. m.SetYOffset(m.YOffset + n) - - // Gather lines to send off for performance scrolling. - // - // XXX: high performance rendering is deprecated in Bubble Tea. - bottom := clamp(m.YOffset+m.Height, 0, len(m.lines)) - top := clamp(m.YOffset+m.Height-n, 0, bottom) - return m.lines[top:bottom] } // LineUp moves the view down by the given number of lines. Returns the new @@ -244,52 +225,6 @@ func (m *Model) GotoBottom() (lines []string) { return m.visibleLines() } -// Sync tells the renderer where the viewport will be located and requests -// a render of the current state of the viewport. It should be called for the -// first render and after a window resize. -// -// For high performance rendering only. -// -// Deprecated: high performance rendering is deprecated in Bubble Tea. -func Sync(m Model) tea.Cmd { - if len(m.lines) == 0 { - return nil - } - top, bottom := m.scrollArea() - return tea.SyncScrollArea(m.visibleLines(), top, bottom) -} - -// ViewDown is a high performance command that moves the viewport up by a given -// number of lines. Use Model.ViewDown to get the lines that should be rendered. -// For example: -// -// lines := model.ViewDown(1) -// cmd := ViewDown(m, lines) -func ViewDown(m Model, lines []string) tea.Cmd { - if len(lines) == 0 { - return nil - } - top, bottom := m.scrollArea() - - // XXX: high performance rendering is deprecated in Bubble Tea. In a v2 we - // won't need to return a command here. - return tea.ScrollDown(lines, top, bottom) -} - -// ViewUp is a high performance command the moves the viewport down by a given -// number of lines height. Use Model.ViewUp to get the lines that should be -// rendered. -func ViewUp(m Model, lines []string) tea.Cmd { - if len(lines) == 0 { - return nil - } - top, bottom := m.scrollArea() - - // XXX: high performance rendering is deprecated in Bubble Tea. In a v2 we - // won't need to return a command here. - return tea.ScrollUp(lines, top, bottom) -} - // Update handles standard message-based viewport updates. func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { var cmd tea.Cmd @@ -304,46 +239,26 @@ func (m Model) updateAsModel(msg tea.Msg) (Model, tea.Cmd) { m.setInitialValues() } - var cmd tea.Cmd - switch msg := msg.(type) { case tea.KeyPressMsg: switch { case key.Matches(msg, m.KeyMap.PageDown): - lines := m.ViewDown() - if m.HighPerformanceRendering { - cmd = ViewDown(m, lines) - } + m.ViewDown() case key.Matches(msg, m.KeyMap.PageUp): - lines := m.ViewUp() - if m.HighPerformanceRendering { - cmd = ViewUp(m, lines) - } + m.ViewUp() case key.Matches(msg, m.KeyMap.HalfPageDown): - lines := m.HalfViewDown() - if m.HighPerformanceRendering { - cmd = ViewDown(m, lines) - } + m.HalfViewDown() case key.Matches(msg, m.KeyMap.HalfPageUp): - lines := m.HalfViewUp() - if m.HighPerformanceRendering { - cmd = ViewUp(m, lines) - } + m.HalfViewUp() case key.Matches(msg, m.KeyMap.Down): - lines := m.LineDown(1) - if m.HighPerformanceRendering { - cmd = ViewDown(m, lines) - } + m.LineDown(1) case key.Matches(msg, m.KeyMap.Up): - lines := m.LineUp(1) - if m.HighPerformanceRendering { - cmd = ViewUp(m, lines) - } + m.LineUp(1) } case tea.MouseWheelMsg: @@ -353,32 +268,18 @@ func (m Model) updateAsModel(msg tea.Msg) (Model, tea.Cmd) { switch msg.Button { case tea.MouseWheelDown: - lines := m.LineDown(m.MouseWheelDelta) - if m.HighPerformanceRendering { - cmd = ViewDown(m, lines) - } + m.LineDown(m.MouseWheelDelta) case tea.MouseWheelUp: - lines := m.LineUp(m.MouseWheelDelta) - if m.HighPerformanceRendering { - cmd = ViewUp(m, lines) - } + m.LineUp(m.MouseWheelDelta) } } - return m, cmd + return m, nil } // View renders the viewport into a string. func (m Model) View() string { - if m.HighPerformanceRendering { - // Just send newlines since we're going to be rendering the actual - // content separately. We still need to send something that equals the - // height of this view so that the Bubble Tea standard renderer can - // position anything below this view properly. - return strings.Repeat("\n", max(0, m.Height-1)) - } - w, h := m.Width, m.Height if sw := m.Style.GetWidth(); sw != 0 { w = min(w, sw)