1package fillomino23import "github.com/FelineStateMachine/puzzletea/game"45// screenToGrid converts terminal coordinates to fillomino grid coordinates.6// Returns false when the click lands on a border row/column or outside the grid.7func (m *Model) screenToGrid(screenX, screenY int) (col, row int, ok bool) {8 ox, oy := m.cachedGridOrigin()9 return game.DynamicGridScreenToCell(10 game.DynamicGridMetrics{Width: m.width, Height: m.height, CellWidth: cellWidth},11 ox,12 oy,13 screenX,14 screenY,15 false,16 )17}1819func (m *Model) cachedGridOrigin() (x, y int) {20 if m.originValid {21 return m.originX, m.originY22 }23 x, y = m.gridOrigin()24 m.originX, m.originY = x, y25 m.originValid = true26 return x, y27}2829func (m *Model) gridOrigin() (x, y int) {30 title := game.TitleBarView("Fillomino", m.modeTitle, m.solved)31 grid := gridView(*m)32 return game.DynamicGridOrigin(m.termWidth, m.termHeight, m.View(), title, grid)33}