module TextViewport.Render.RenderItem where import TextViewport.Buffer.Item (Item(..)) import TextViewport.Render.CachedRender import TextViewport.Render.RenderedItem import TextViewport.Render.Segmentation (applyStrategy) renderItem :: Int -> Int -> Item -> Maybe CachedRender -> CachedRender renderItem width itemIx (Item txt strategy) mOld = case mOld of Just old | crWidth old == width , crText old == txt -> old _ -> let linesV = applyStrategy strategy width itemIx txt rendered = RenderedItem linesV in CachedRender { crWidth = width , crStrategy = strategy , crText = txt , crRendered = rendered }