diff --git a/package-lock.json b/package-lock.json index 8d44f6c3..13c006d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,6 +58,7 @@ "reselect": "^5.1.1", "sass": "^1.96.0", "seedrandom": "^3.0.5", + "skeleton-tracing-js": "^1.0.2", "uuid": "^13.0.0", "victor": "^1.1.0" }, @@ -12978,6 +12979,12 @@ "simple-concat": "^1.0.0" } }, + "node_modules/skeleton-tracing-js": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/skeleton-tracing-js/-/skeleton-tracing-js-1.0.4.tgz", + "integrity": "sha512-fn2LYYTCiTW8fIRQx1GBT24cUR1wTyRTx9CmFLVgahZndgILnxCo+15NlSWAZW6mLo3xX9a8xeWbgUaajofbFg==", + "license": "MIT" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", diff --git a/package.json b/package.json index b97336fd..e8e0f9d6 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "reselect": "^5.1.1", "sass": "^1.96.0", "seedrandom": "^3.0.5", + "skeleton-tracing-js": "^1.0.2", "uuid": "^13.0.0", "victor": "^1.1.0" }, diff --git a/src/features/images/imagesSlice.js b/src/features/images/imagesSlice.js index bc4984f5..04e4ed49 100644 --- a/src/features/images/imagesSlice.js +++ b/src/features/images/imagesSlice.js @@ -60,8 +60,8 @@ export const selectImagesLoaded = (state) => state.images.loaded // returns a sensibly downscaled dimensions for an loaded image (aesthetics and performance) const downscaledDimensions = (image) => { - let cw = 800 - let ch = 600 + let cw = 1600 + let ch = 1200 const w = image.width const h = image.height @@ -71,15 +71,15 @@ const downscaledDimensions = (image) => { if (w > h) { ch = Math.round(cw / aspectRatio) - if (ch > 600) { - ch = 600 + if (ch > 1200) { + ch = 1200 cw = Math.round(ch * aspectRatio) } } else { cw = Math.round(ch * aspectRatio) - if (cw > 800) { - cw = 800 + if (cw > 1600) { + cw = 1600 ch = Math.round(cw / aspectRatio) } } diff --git a/src/features/preview/PreviewManager.js b/src/features/preview/PreviewManager.js index 71a19c46..30944ffc 100644 --- a/src/features/preview/PreviewManager.js +++ b/src/features/preview/PreviewManager.js @@ -4,7 +4,9 @@ import React, { useRef } from "react" import { useSelector, useDispatch } from "react-redux" import Select from "react-select" import Slider from "rc-slider" +import Button from "react-bootstrap/Button" import "rc-slider/assets/index.css" +import { FaPencilAlt } from "react-icons/fa" import { updateEffect, selectCurrentEffect, @@ -12,12 +14,17 @@ import { import { selectPreviewSliderValue, selectPreviewZoom, + selectDrawingMode, } from "@/features/preview/previewSlice" import { updateLayer, selectCurrentLayer } from "@/features/layers/layersSlice" import { getShape } from "@/features/shapes/shapeFactory" import { getEffect } from "@/features/effects/effectFactory" import "./PreviewManager.scss" -import { updatePreview } from "./previewSlice" +import { + updatePreview, + toggleDrawingMode, + exitDrawingMode, +} from "./previewSlice" import PreviewWindow from "./PreviewWindow" const PreviewManager = ({ isActive }) => { @@ -26,6 +33,7 @@ const PreviewManager = ({ isActive }) => { const currentEffectLayer = useSelector(selectCurrentEffect) const sliderValue = useSelector(selectPreviewSliderValue) const zoom = useSelector(selectPreviewZoom) + const drawingMode = useSelector(selectDrawingMode) const wrapperRef = useRef() const currentShape = getShape(currentLayer?.type || "polygon") @@ -48,6 +56,10 @@ const PreviewManager = ({ isActive }) => { dispatch(updatePreview({ zoom: option.value })) } + const handleDrawToggle = () => { + dispatch(toggleDrawingMode()) + } + const arrowKeyChange = (layer, event) => { if (!layer) { return @@ -77,6 +89,11 @@ const PreviewManager = ({ isActive }) => { } const handleKeyDown = (event) => { + if (event.key === "Escape" && drawingMode) { + dispatch(exitDrawingMode()) + return + } + if (currentLayer) { if (currentShape.canMove(currentLayer)) { const attrs = arrowKeyChange(currentLayer, event) @@ -115,6 +132,16 @@ const PreviewManager = ({ isActive }) => {
+ +
+