module TextViewport.Render.RenderItem where import Data.Hashable (Hashable) import Data.Sequences (Index, Textual) import TextViewport.Buffer.Item (Item(..)) import TextViewport.Render.CachedRender import TextViewport.Render.RenderedItem import TextViewport.Render.Segmentation (Segmenter(applySeg)) renderItem :: (Segmenter seg a, Hashable a, Textual a, Index a ~ Int) => Int -> Int -> Item a seg -> Maybe (CachedRender a seg) -> CachedRender a seg renderItem width itemIx (Item txt strategy) mOld = case mOld of Just old | crWidth old == width , crText old == txt -> old _ -> let linesV = applySeg strategy width itemIx txt rendered = RenderedItem linesV in CachedRender { crWidth = width , crStrategy = strategy , crText = txt , crRendered = rendered }