Fix pattern dragging and vertical scrolling
This commit is contained in:
+26
-3
@@ -611,7 +611,8 @@ export default function Home() {
|
||||
if (event.button !== 0) return;
|
||||
const stage = patternStageRef.current;
|
||||
if (!stage) return;
|
||||
stage.setPointerCapture(event.pointerId);
|
||||
suppressCanvasClickRef.current = false;
|
||||
event.currentTarget.setPointerCapture(event.pointerId);
|
||||
patternDragRef.current = {
|
||||
pointerId: event.pointerId,
|
||||
x: event.clientX,
|
||||
@@ -643,7 +644,23 @@ export default function Home() {
|
||||
suppressCanvasClickRef.current = drag.moved;
|
||||
patternDragRef.current = null;
|
||||
stage?.classList.remove("is-dragging");
|
||||
if (stage?.hasPointerCapture(event.pointerId)) stage.releasePointerCapture(event.pointerId);
|
||||
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
|
||||
};
|
||||
|
||||
const handlePatternPointerCancel = (event: React.PointerEvent<HTMLCanvasElement>) => {
|
||||
const drag = patternDragRef.current;
|
||||
if (drag?.pointerId !== event.pointerId) return;
|
||||
patternDragRef.current = null;
|
||||
suppressCanvasClickRef.current = false;
|
||||
patternStageRef.current?.classList.remove("is-dragging");
|
||||
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
|
||||
};
|
||||
|
||||
const handlePatternLostPointerCapture = (event: React.PointerEvent<HTMLCanvasElement>) => {
|
||||
if (patternDragRef.current?.pointerId !== event.pointerId) return;
|
||||
patternDragRef.current = null;
|
||||
suppressCanvasClickRef.current = false;
|
||||
patternStageRef.current?.classList.remove("is-dragging");
|
||||
};
|
||||
|
||||
const handleCanvasClick = (event: React.MouseEvent<HTMLCanvasElement>) => {
|
||||
@@ -662,6 +679,10 @@ export default function Home() {
|
||||
};
|
||||
|
||||
const handleCanvasMove = (event: React.MouseEvent<HTMLCanvasElement>) => {
|
||||
if (patternDragRef.current?.moved) {
|
||||
setHoveredPixel(null);
|
||||
return;
|
||||
}
|
||||
const canvas = canvasRef.current;
|
||||
if (!canvas) return;
|
||||
const rect = canvas.getBoundingClientRect();
|
||||
@@ -798,7 +819,9 @@ export default function Home() {
|
||||
onPointerDown={handlePatternPointerDown}
|
||||
onPointerMove={handlePatternPointerMove}
|
||||
onPointerUp={handlePatternPointerUp}
|
||||
onPointerCancel={handlePatternPointerUp}
|
||||
onPointerCancel={handlePatternPointerCancel}
|
||||
onLostPointerCapture={handlePatternLostPointerCapture}
|
||||
onContextMenu={(event) => event.preventDefault()}
|
||||
onClick={handleCanvasClick}
|
||||
onMouseMove={handleCanvasMove}
|
||||
onMouseLeave={() => setHoveredPixel(null)}
|
||||
|
||||
Reference in New Issue
Block a user