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 }) => {
+
+
+