blob: a1122a45111df5a6881448163eeffd5fc545ead4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
module TextViewport.Render.RenderBuffer where
import Data.Sequence qualified as Seq
import TextViewport.Buffer.Buffer (Buffer(..))
import TextViewport.Render.CachedRender
import TextViewport.Render.RenderCache
import TextViewport.Render.RenderItem (renderItem)
import TextViewport.Render.RenderedBuffer
renderBuffer :: Int -> Buffer -> RenderCache -> (RenderCache, RenderedBuffer)
renderBuffer width (Buffer items) (RenderCache cache) =
let n = Seq.length items
go i (cAcc, rAcc)
| i >= n = (RenderCache cAcc, RenderedBuffer rAcc)
| otherwise =
let item = Seq.index items i
mOld = Seq.index cache i
newEntry = renderItem width i item mOld
cAcc' = Seq.update i (Just newEntry) cAcc
rAcc' = rAcc Seq.|> crRendered newEntry
in go (i + 1) (cAcc', rAcc')
in go 0 (cache, Seq.empty)
updateRenderedItem :: Int -> Int -> Buffer -> RenderCache -> RenderedBuffer -> (RenderCache, RenderedBuffer)
updateRenderedItem width itemIx (Buffer items) (RenderCache cache) (RenderedBuffer rb) =
let item = Seq.index items itemIx
mOld = Seq.index cache itemIx
newEntry = renderItem width itemIx item mOld
newCache = Seq.update itemIx (Just newEntry) cache
newRB = Seq.update itemIx (crRendered newEntry) rb
in (RenderCache newCache, RenderedBuffer newRB)
|