diff options
| author | tv <tv@krebsco.de> | 2026-03-06 20:45:39 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-03-06 23:36:06 +0100 |
| commit | b098daf7bcb6e4a493723026f5644bd81164c641 (patch) | |
| tree | 71108cdebf54729830c72b61d725c6f91a3cfdcd /src/TextViewport/Render/RenderBuffer.hs | |
| parent | 7e516fc31601fd07923d7033ba64f530175cac0e (diff) | |
modularize
Diffstat (limited to 'src/TextViewport/Render/RenderBuffer.hs')
| -rw-r--r-- | src/TextViewport/Render/RenderBuffer.hs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/TextViewport/Render/RenderBuffer.hs b/src/TextViewport/Render/RenderBuffer.hs new file mode 100644 index 0000000..a1122a4 --- /dev/null +++ b/src/TextViewport/Render/RenderBuffer.hs @@ -0,0 +1,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) |
