From b098daf7bcb6e4a493723026f5644bd81164c641 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 6 Mar 2026 20:45:39 +0100 Subject: modularize --- src/TextViewport/Viewport/Position.hs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/TextViewport/Viewport/Position.hs (limited to 'src/TextViewport/Viewport/Position.hs') diff --git a/src/TextViewport/Viewport/Position.hs b/src/TextViewport/Viewport/Position.hs new file mode 100644 index 0000000..149fc9e --- /dev/null +++ b/src/TextViewport/Viewport/Position.hs @@ -0,0 +1,23 @@ +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 + -- cgit v1.2.3