adf0d17497
publish / version_or_publish (push) Waiting to run
storybook-build / changes (push) Waiting to run
storybook-build / :storybook-build (push) Blocked by required conditions
Sync Gradio Skills to Hugging Face / sync-skills (push) Waiting to run
functional / changes (push) Waiting to run
functional / build-frontend (push) Blocked by required conditions
functional / functional-test-SSR=false (push) Blocked by required conditions
functional / functional-reload (push) Blocked by required conditions
functional / functional-test-SSR=true (push) Blocked by required conditions
hygiene / hygiene-test (push) Waiting to run
python / changes (push) Waiting to run
python / build (push) Blocked by required conditions
python / test-ubuntu-latest-flaky (push) Blocked by required conditions
python / test-ubuntu-latest-not-flaky (push) Blocked by required conditions
python / test-windows-latest-flaky (push) Blocked by required conditions
python / test-windows-latest-not-flaky (push) Blocked by required conditions
js / changes (push) Waiting to run
js / js-test (push) Blocked by required conditions
docs-build / changes (push) Waiting to run
docs-build / docs-build (push) Blocked by required conditions
docs-build / website-build (push) Blocked by required conditions
28 lines
978 B
TypeScript
28 lines
978 B
TypeScript
export const get_coordinates_of_clicked_image = (
|
|
evt: MouseEvent
|
|
): [number, number] | null => {
|
|
let image;
|
|
if (evt.currentTarget instanceof Element) {
|
|
image = evt.currentTarget.querySelector("img") as HTMLImageElement;
|
|
} else {
|
|
return [NaN, NaN];
|
|
}
|
|
|
|
const imageRect = image.getBoundingClientRect();
|
|
// The image is rendered with `object-fit: scale-down`: centered, never
|
|
// scaled above its natural size, so empty space can appear on both axes.
|
|
const scale = Math.min(
|
|
imageRect.width / image.naturalWidth,
|
|
imageRect.height / image.naturalHeight,
|
|
1
|
|
);
|
|
const x_offset = (imageRect.width - image.naturalWidth * scale) / 2;
|
|
const y_offset = (imageRect.height - image.naturalHeight * scale) / 2;
|
|
const x = Math.round((evt.clientX - imageRect.left - x_offset) / scale);
|
|
const y = Math.round((evt.clientY - imageRect.top - y_offset) / scale);
|
|
if (x < 0 || x >= image.naturalWidth || y < 0 || y >= image.naturalHeight) {
|
|
return null;
|
|
}
|
|
return [x, y];
|
|
};
|