1package hitori23import "github.com/FelineStateMachine/puzzletea/game"45func (m *Model) screenToGrid(screenX, screenY int) (col, row int, ok bool) {6 ox, oy := m.cachedGridOrigin()7 return game.DynamicGridScreenToCell(8 game.DynamicGridMetrics{9 Width: m.size,10 Height: m.size,11 CellWidth: cellWidth,12 },13 ox,14 oy,15 screenX,16 screenY,17 false,18 )19}2021func (m *Model) cachedGridOrigin() (x, y int) {22 if m.originValid {23 return m.originX, m.originY24 }2526 x, y = m.gridOrigin()27 m.originX, m.originY = x, y28 m.originValid = true29 return x, y30}3132func (m *Model) gridOrigin() (x, y int) {33 title := game.TitleBarView("Hitori", m.modeTitle, m.solved)34 grid := gridView(m.numbers, m.marks, m.cursor, m.solved, m.conflicts)35 return game.DynamicGridOrigin(m.termWidth, m.termHeight, m.View(), title, grid)36}