diff options
author | bptato <nincsnevem662@gmail.com> | 2024-09-25 14:59:52 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-09-25 14:59:52 +0200 |
commit | 2426863e1853f1d97762f3e48f0858730bc0405a (patch) | |
tree | 93143bed08f24edc2c19639112d44ad8dbf2043e | |
parent | 1c9277343140effcc9eee8845757afd1eed4f4bd (diff) | |
download | chawan-2426863e1853f1d97762f3e48f0858730bc0405a.tar.gz |
pager: make image ordering deterministic
ensure that images are shown in the order buffer sent them
-rw-r--r-- | src/local/pager.nim | 3 | ||||
-rw-r--r-- | src/local/term.nim | 7 | ||||
-rw-r--r-- | todo | 2 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/local/pager.nim b/src/local/pager.nim index e8034af7..62ac610c 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -640,6 +640,7 @@ proc loadCachedImage(pager: Pager; container: Container; image: PosBitmap; proc initImages(pager: Pager; container: Container) = var newImages: seq[CanvasImage] = @[] + var redrawNext = false # redraw images if a new one was loaded before for image in container.images: var erry = 0 var offx = 0 @@ -664,7 +665,7 @@ proc initImages(pager: Pager; container: Container) = let canvasImage = pager.term.loadImage(cached.data, container.process, imageId, image.x - container.fromx, image.y - container.fromy, image.width, image.height, image.x, image.y, pager.bufWidth, - pager.bufHeight, erry, offx, dispw, cached.transparent) + pager.bufHeight, erry, offx, dispw, cached.transparent, redrawNext) if canvasImage != nil: newImages.add(canvasImage) pager.term.clearImages(pager.bufHeight) diff --git a/src/local/term.nim b/src/local/term.nim index 3f38193b..d8ab5f53 100644 --- a/src/local/term.nim +++ b/src/local/term.nim @@ -758,12 +758,12 @@ proc checkImageDamage*(term: Terminal; maxh: int) = term.lineDamage[y] = mx proc loadImage*(term: Terminal; data: Blob; pid, imageId, x, y, width, height, - rx, ry, maxw, maxh, erry, offx, dispw: int; transparent: bool): - CanvasImage = + rx, ry, maxw, maxh, erry, offx, dispw: int; transparent: bool; + redrawNext: var bool): CanvasImage = if (let image = term.findImage(pid, imageId, rx, ry, width, height, erry, offx, dispw); image != nil): # reuse image on screen - if image.x != x or image.y != y: + if image.x != x or image.y != y or redrawNext: # only clear sixels; with kitty we just move the existing image if term.imageMode == imSixel: term.clearImage(image, maxh) @@ -788,6 +788,7 @@ proc loadImage*(term: Terminal; data: Blob; pid, imageId, x, y, width, height, transparent: transparent ) if term.positionImage(image, x, y, maxw, maxh): + redrawNext = true return image # no longer on screen return nil diff --git a/todo b/todo index 21e78282..aaadd53a 100644 --- a/todo +++ b/todo @@ -67,9 +67,9 @@ layout engine: - overflow - partial layout, layout caching - iframe +- z order - writing-mode, grid, ruby, ... (i.e. cool new stuff) images: -- z order - animation man: - add a DOM -> man page converter so that we do not depend on pandoc |