Skip to content

Commit

Permalink
feat(panning): implement panning using spacebar and mouse
Browse files Browse the repository at this point in the history
  • Loading branch information
albizures committed Jul 23, 2019
1 parent 4563456 commit c6644aa
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 120 deletions.
25 changes: 14 additions & 11 deletions src/components/Editor.tsx
Expand Up @@ -6,6 +6,7 @@ import * as Artboards from '../contexts/Artboards';
import * as Artboard from '../contexts/Artboard';
import * as Layers from '../contexts/Layers';
import * as Frames from '../contexts/Frames';
import * as Modifiers from '../contexts/Modifiers';

interface EditorProps {
children: React.ReactNode;
Expand All @@ -15,17 +16,19 @@ const Editor: React.FC<EditorProps> = (props) => {
const { children } = props;

return (
<Frames.Provider>
<Layers.Provider>
<Sprites.Provider>
<Sprite.Provider>
<Artboards.Provider>
<Artboard.Provider>{children}</Artboard.Provider>
</Artboards.Provider>
</Sprite.Provider>
</Sprites.Provider>
</Layers.Provider>
</Frames.Provider>
<Modifiers.Provider>
<Frames.Provider>
<Layers.Provider>
<Sprites.Provider>
<Sprite.Provider>
<Artboards.Provider>
<Artboard.Provider>{children}</Artboard.Provider>
</Artboards.Provider>
</Sprite.Provider>
</Sprites.Provider>
</Layers.Provider>
</Frames.Provider>
</Modifiers.Provider>
);
};

Expand Down
55 changes: 50 additions & 5 deletions src/components/Preview.tsx
@@ -1,11 +1,12 @@
import React from 'react';
import CanvasLayer from './CanvasLayer';
import { useCanvas2DContext } from '../hooks/useCanvas';
import { useArtboard } from '../contexts/Artboard';
import { useArtboard, useArtboardActions } from '../contexts/Artboard';
import { paintPreview } from '../utils/paint';
import { clean } from '../utils';
import { useSprite } from '../contexts/Sprite';
import { calculatePosition, validCord } from '../utils/canvas';
import { useModifier, Key } from '../contexts/Modifiers';

const noop = () => {
console.log('noop');
Expand All @@ -16,14 +17,53 @@ interface PropTypes {
style: React.CSSProperties;
}

const useMouseMove = (isMouseDown, canvas, context) => {
interface Vector {
x: number;
y: number;
}

const getDiff = (vec1: Vector, vec2: Vector): Vector => ({
x: vec1.x - vec2.x,
y: vec1.y - vec2.y,
});

const useMouseMove = (
isMouseDown: boolean,
canvas: HTMLCanvasElement,
context: CanvasRenderingContext2D,
lastDragRef: React.MutableRefObject<Vector>,
) => {
const isPanning = useModifier(Key.Spacebar);
const artboard = useArtboard();
const { changePosition } = useArtboardActions();
const sprite = useSprite();

if (!context) {
return noop;
}

if (isPanning && isMouseDown) {
const onMouseMove = (event: React.MouseEvent) => {
event.preventDefault();
const { clientX, clientY } = event;
const currentDrag = { x: clientX, y: clientY };
// const cord = calculatePosition(artboard, clientX, clientY);
clean(canvas);
const dragDiff = lastDragRef.current
? getDiff(currentDrag, lastDragRef.current)
: { x: 0, y: 0 };

changePosition({
x: artboard.x + dragDiff.x,
y: artboard.y + dragDiff.y,
scale: artboard.scale,
});
lastDragRef.current = currentDrag;
};

return onMouseMove;
}

if (isMouseDown) {
const onMouseMove = () => {
console.log('paiting');
Expand All @@ -33,8 +73,8 @@ const useMouseMove = (isMouseDown, canvas, context) => {
}

const onMouseMove = (event: React.MouseEvent) => {
const { clientX, clientY } = event;
event.preventDefault();
const { clientX, clientY } = event;
clean(canvas);
const cord = calculatePosition(artboard, clientX, clientY);

Expand All @@ -51,15 +91,20 @@ const useMouseMove = (isMouseDown, canvas, context) => {
const usePreview = () => {
const { onRef: setRef, context, canvas } = useCanvas2DContext();
const [isMouseDown, setIsMouseDown] = React.useState(false);
const lastDragRef = React.useRef<Vector>();

const onMouseDown = () => {
const onMouseDown = (event: React.MouseEvent) => {
const { clientX, clientY } = event;
const currentDrag = { x: clientX, y: clientY };
setIsMouseDown(true);
lastDragRef.current = currentDrag;
};
const onMouseUp = () => {
setIsMouseDown(false);
lastDragRef.current = null;
};

const onMouseMove = useMouseMove(isMouseDown, canvas, context);
const onMouseMove = useMouseMove(isMouseDown, canvas, context, lastDragRef);

return {
setRef,
Expand Down
104 changes: 0 additions & 104 deletions src/hooks/usePaintPreview.ts

This file was deleted.

0 comments on commit c6644aa

Please sign in to comment.