summaryrefslogtreecommitdiffstats
path: root/vendor
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-04-12 21:33:23 +1000
committerJesse Duffield <jessedduffield@gmail.com>2021-04-12 21:48:08 +1000
commit76697280c9d0397d75b6af732a5c0b4617ea7809 (patch)
treed545db399b5d6ff4a48443026b0ce75aa61d23a9 /vendor
parent0df6ac61405a1eaec6e7b55174930973dcbecdf0 (diff)
fix rendering issues caused by resizing
Diffstat (limited to 'vendor')
-rw-r--r--vendor/github.com/jesseduffield/gocui/edit.go2
-rw-r--r--vendor/github.com/jesseduffield/gocui/gui.go10
-rw-r--r--vendor/github.com/jesseduffield/gocui/view.go21
-rw-r--r--vendor/modules.txt2
4 files changed, 21 insertions, 14 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/edit.go b/vendor/github.com/jesseduffield/gocui/edit.go
index f30d4bf0d..1e98468c4 100644
--- a/vendor/github.com/jesseduffield/gocui/edit.go
+++ b/vendor/github.com/jesseduffield/gocui/edit.go
@@ -430,7 +430,7 @@ func (v *View) mergeLines(y int) error {
v.writeMutex.Lock()
defer v.writeMutex.Unlock()
- v.tainted = true
+ v.clearViewLines()
_, y, err := v.realPosition(0, y)
if err != nil {
diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go
index f47abf0fc..e5bf8125f 100644
--- a/vendor/github.com/jesseduffield/gocui/gui.go
+++ b/vendor/github.com/jesseduffield/gocui/gui.go
@@ -272,7 +272,7 @@ func (g *Gui) SetView(name string, x0, y0, x1, y1 int, overlaps byte) (*View, er
if v, err := g.View(name); err == nil {
if v.x0 != x0 || v.x1 != x1 || v.y0 != y0 || v.y1 != y1 {
- v.tainted = true
+ v.clearViewLines()
}
v.x0 = x0
@@ -660,11 +660,7 @@ func (g *Gui) handleEvent(ev *GocuiEvent) error {
}
func (g *Gui) onResize() {
- for _, v := range g.views {
- // wonder if we should be calling this in other contexts e.g. whenever the view's dimensions change in general
- v.FlushStaleCells()
- }
- // Not sure if we actually need this
+ // not sure if we actually need this
// g.screen.Sync()
}
@@ -677,7 +673,7 @@ func (g *Gui) flush() error {
// if GUI's size has changed, we need to redraw all views
if maxX != g.maxX || maxY != g.maxY {
for _, v := range g.views {
- v.tainted = true
+ v.clearViewLines()
}
}
g.maxX, g.maxY = maxX, maxY
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index c8f4507c9..f4b13cb2c 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -48,7 +48,12 @@ type View struct {
// tained is true if the viewLines must be updated
tainted bool
- // internal representation of the view's buffer
+ // internal representation of the view's buffer. We will keep viewLines around
+ // from a previous render until we explicitly set them to nil, allowing us to
+ // render the same content twice without flicker. Wherever we want to render
+ // something without any chance of old content appearing (e.g. when actually
+ // rendering new content or if the view is resized) we should set tainted to
+ // true and viewLines to nil
viewLines []viewLine
// writeMutex protects locks the write process
@@ -155,6 +160,14 @@ type View struct {
KeybindOnEdit bool
}
+// call this in the event of a view resize, or if you want to render new content
+// without the chance of old content still appearing, or if you want to remove
+// a line from the existing content
+func (v *View) clearViewLines() {
+ v.tainted = true
+ v.viewLines = nil
+}
+
type searcher struct {
searchString string
searchPositions []cellPos
@@ -651,9 +664,8 @@ func (v *View) Clear() {
defer v.writeMutex.Unlock()
v.rewind()
- v.tainted = true
v.lines = nil
- v.viewLines = nil
+ v.clearViewLines()
v.clearRunes()
}
@@ -683,8 +695,7 @@ func (v *View) FlushStaleCells() {
v.writeMutex.Lock()
defer v.writeMutex.Unlock()
- v.tainted = true
- v.viewLines = nil
+ v.clearViewLines()
}
func (v *View) rewind() {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 0aa9313ae..a458811c9 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -149,7 +149,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
github.com/jesseduffield/go-git/v5/utils/merkletrie/index
github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20210412111008-6ef019af3724
+# github.com/jesseduffield/gocui v0.3.1-0.20210412113212-ee65bd542c08
## explicit
github.com/jesseduffield/gocui
# github.com/jesseduffield/termbox-go v0.0.0-20200823212418-a2289ed6aafe