Spaces:
Running
Running
| /** Convertit un clic sur l'image affichée en coordonnées viewport Playwright. */ | |
| export function mapImageClickToViewport(img, clientX, clientY, viewportW, viewportH) { | |
| if (!img || !viewportW || !viewportH) return null; | |
| const rect = img.getBoundingClientRect(); | |
| const naturalW = img.naturalWidth || viewportW; | |
| const naturalH = img.naturalHeight || viewportH; | |
| const scale = Math.min(rect.width / naturalW, rect.height / naturalH); | |
| const renderedW = naturalW * scale; | |
| const renderedH = naturalH * scale; | |
| const offsetX = (rect.width - renderedW) / 2; | |
| const offsetY = (rect.height - renderedH) / 2; | |
| const localX = clientX - rect.left - offsetX; | |
| const localY = clientY - rect.top - offsetY; | |
| if (localX < 0 || localY < 0 || localX > renderedW || localY > renderedH) return null; | |
| return { | |
| x: Math.round((localX / renderedW) * viewportW), | |
| y: Math.round((localY / renderedH) * viewportH), | |
| }; | |
| } | |