Integrate high performance viewport, but not without issue

This commit is contained in:
Christian Rocha 2020-06-19 18:34:50 -04:00 committed by Christian Muehlhaeuser
commit b2df0cae8f
2 changed files with 15 additions and 2 deletions

View file

@ -28,6 +28,9 @@ const (
)
var (
// Whether or not to use fast scroll-based rendering for the viewport
highPerformanceRendering = true
pagerHelpHeight = strings.Count(pagerHelpView(0), "\n")
noteHeading = te.String(noteHeadingText).
@ -101,10 +104,15 @@ func newPagerModel(glamourStyle string) pagerModel {
ti.CharLimit = noteCharacterLimit
ti.Focus()
vp := viewport.Model{}
vp.YPosition = 0
vp.HighPerformanceRendering = highPerformanceRendering
return pagerModel{
state: pagerStateBrowse,
glamourStyle: glamourStyle,
textInput: ti,
viewport: vp,
}
}
@ -113,6 +121,8 @@ func (m *pagerModel) setSize(w, h int) {
m.height = h
m.viewport.Width = w
m.viewport.Height = h - statusBarHeight
m.viewport.YPosition = 0
m.viewport.Height = h - statusBarHeight
m.textInput.Width = w - len(noteHeadingText) - len(notePromptText) - 1
if m.showHelp {
@ -135,7 +145,6 @@ func (m *pagerModel) unload() {
}
m.state = pagerStateBrowse
m.viewport.SetContent("")
m.viewport.Y = 0
m.textInput.Reset()
}
@ -190,13 +199,14 @@ func pagerUpdate(msg tea.Msg, m pagerModel) (pagerModel, tea.Cmd) {
return m, textinput.Blink(m.textInput)
case "?":
m.toggleHeight()
cmds = append(cmds, viewport.Sync(m.viewport))
}
}
// Glow has rendered the content
case contentRenderedMsg:
m.setContent(string(msg))
return m, nil
cmds = append(cmds, viewport.Sync(m.viewport))
// We've reveived terminal dimensions, either for the first time or
// after a resize

View file

@ -149,6 +149,9 @@ func update(msg tea.Msg, mdl tea.Model) (tea.Model, tea.Cmd) {
case stateShowDocument:
if m.pager.state == pagerStateBrowse {
m.unloadDocument() // exits pager
if m.pager.viewport.HighPerformanceRendering {
cmd = tea.ClearScrollArea
}
} else {
m.pager, cmd = pagerUpdate(msg, m.pager)
}