1
0
mirror of https://github.com/makew0rld/amfora.git synced 2024-12-04 14:46:29 -05:00

Custom impl. of scrollTo & scrollToHighlight for #196

https://github.com/makeworld-the-better-one/amfora/issues/197#issuecomment-869200677
This commit is contained in:
makeworld 2021-06-27 14:21:40 -04:00
parent 4ef4d247d1
commit 6ec7ed1668

View File

@ -94,7 +94,7 @@ func makeNewTab() *tab {
tabs[tab].page.Mode = structs.ModeLinkSelect tabs[tab].page.Mode = structs.ModeLinkSelect
tabs[tab].view.Highlight("0") tabs[tab].view.Highlight("0")
tabs[tab].view.ScrollToHighlight() tabs[tab].scrollToHighlight()
// Display link URL in bottomBar // Display link URL in bottomBar
bottomBar.SetLabel("[::b]Link: [::-]") bottomBar.SetLabel("[::b]Link: [::-]")
bottomBar.SetText(tabs[tab].page.Links[0]) bottomBar.SetText(tabs[tab].page.Links[0])
@ -115,7 +115,7 @@ func makeNewTab() *tab {
return return
} }
tabs[tab].view.Highlight(strconv.Itoa(index)) tabs[tab].view.Highlight(strconv.Itoa(index))
tabs[tab].view.ScrollToHighlight() tabs[tab].scrollToHighlight()
// Display link URL in bottomBar // Display link URL in bottomBar
bottomBar.SetLabel("[::b]Link: [::-]") bottomBar.SetLabel("[::b]Link: [::-]")
bottomBar.SetText(tabs[tab].page.Links[index]) bottomBar.SetText(tabs[tab].page.Links[index])
@ -184,7 +184,7 @@ func makeNewTab() *tab {
return nil return nil
case config.CmdCopyTargetURL: case config.CmdCopyTargetURL:
currentURL := t.page.URL currentURL := t.page.URL
selectedURL := t.HighlightedURL() selectedURL := t.highlightedURL()
if selectedURL == "" { if selectedURL == "" {
return nil return nil
} }
@ -215,6 +215,7 @@ func makeNewTab() *tab {
} }
// Scrolling stuff // Scrolling stuff
// Copied in scrollTo
key := event.Key() key := event.Key()
mod := event.Modifiers() mod := event.Modifiers()
@ -377,6 +378,49 @@ func (t *tab) applyScroll() {
t.applyHorizontalScroll() t.applyHorizontalScroll()
} }
// scrollTo scrolls the current tab to specified position. Like
// cview.TextView.ScrollTo but using the custom scrolling logic required by #196.
func (t *tab) scrollTo(row, col int) {
// Logic copied from scrolling stuff around line 217.
height, width := t.view.GetBufferSize()
_, _, boxW, boxH := t.view.GetInnerRect()
// Make boxW accurate by subtracting one if a scrollbar is covering the last
// column of text
if config.ScrollBar == cview.ScrollBarAlways ||
(config.ScrollBar == cview.ScrollBarAuto && height > boxH) {
boxW--
}
// Keep row and col within limits
if row < 0 {
row = 0
} else if row > height {
row = height
}
if col < 0 {
col = 0
} else if col > width {
col = width
}
t.page.Row = row
t.page.Column = col
t.applyScroll()
App.Draw()
}
// scrollToHighlight scrolls the current tab to specified position. Like
// cview.TextView.ScrollToHighlight but using the custom scrolling logic
// required by #196.
func (t *tab) scrollToHighlight() {
t.view.ScrollToHighlight()
App.Draw()
t.scrollTo(t.view.GetScrollOffset())
}
// saveBottomBar saves the current bottomBar values in the tab. // saveBottomBar saves the current bottomBar values in the tab.
func (t *tab) saveBottomBar() { func (t *tab) saveBottomBar() {
t.barLabel = bottomBar.GetLabel() t.barLabel = bottomBar.GetLabel()
@ -431,8 +475,8 @@ func (t *tab) applyAll() {
} }
} }
// HighlightedURL returns the currently selected URL // highlightedURL returns the currently selected URL
func (t *tab) HighlightedURL() string { func (t *tab) highlightedURL() string {
currentSelection := tabs[curTab].view.GetHighlights() currentSelection := tabs[curTab].view.GetHighlights()
if len(currentSelection) > 0 { if len(currentSelection) > 0 {