module TextViewport.Viewport.Position where import TextViewport.Render.RenderedBuffer (RenderedBuffer) import TextViewport.Render.RenderedBuffer qualified as RenderedBuffer import TextViewport.Render.RenderedLine qualified as RenderedLine import TextViewport.Viewport.Viewport (Viewport) import TextViewport.Viewport.Viewport qualified as Viewport lookupPosition :: Int -> Int -> Viewport -> RenderedBuffer -> Maybe (Int, Int) lookupPosition x y vp rb = let allLines = RenderedBuffer.flatten rb idx = Viewport.vpOffset vp + y in case drop idx allLines of (rl:_) -> let charIx = RenderedLine.rlCharStart rl + x in Just (RenderedLine.rlItemIx rl, charIx) [] -> Nothing