diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index d741d47..2312ed2 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -30,6 +30,7 @@ import ThemeSettingsModal from './components/ThemeSettingsModal.svelte'; import BackgroundSettingsModal from './components/BackgroundSettingsModal.svelte'; import New from './sections/New.svelte'; + import PreviewSettingsModal from './components/PreviewSettingsModal.svelte'; let theme: 'white'|'g10'|'g80'|'g90'|'g100' = 'g90' @@ -88,6 +89,7 @@ let importCanvas: Canvas = null let showPreview: boolean = false + let showPreviewSettings: boolean = false let showGridSettings: boolean = false let showCheckerboardSettings: boolean = false let showThemeSettings: boolean = false @@ -104,6 +106,11 @@ let checkerboardSize: number = 8 let checkerboardColor1: string = '#888888' let checkerboardColor2: string = '#444444' + + let previewShowBaseSizeOutline: boolean = true + let previewBaseSizeOutlineColor: string = '#00FFFF77' + let previewShowSizeOutline: boolean = true + let previewSizeOutlineColor: string = '#FFFF0077' let backgroundColor: string = '#111111' @@ -257,6 +264,7 @@
Windows
showPreview = true}/> + showPreviewSettings = true}/>
@@ -370,9 +378,24 @@ noPadding bind:open={showPreview} > - + {/if} + {#if showPreviewSettings} + + {/if} {#if showGridSettings} {/if} diff --git a/frontend/src/components/PreviewSettingsModal.svelte b/frontend/src/components/PreviewSettingsModal.svelte new file mode 100644 index 0000000..29cb2bd --- /dev/null +++ b/frontend/src/components/PreviewSettingsModal.svelte @@ -0,0 +1,67 @@ + + + + open = false} + on:click:button--secondary={() => open = false} + on:submit={() => { + showBaseSizeOutline = pendingShowBaseSizeOutline + baseSizeOutlineColor = pendingBaseSizeOutlineColor + showSizeOutline = pendingShowSizeOutline + sizeOutlineColor = pendingSizeOutlineColor + open = false + }} + primaryButtonDisabled={!changed} +> + + + + Show Base Size Outline + + + + + + Show Size Outline + + + + + + + \ No newline at end of file diff --git a/frontend/src/sections/StackPreview.svelte b/frontend/src/sections/StackPreview.svelte index bb56ef4..fcd46ca 100644 --- a/frontend/src/sections/StackPreview.svelte +++ b/frontend/src/sections/StackPreview.svelte @@ -15,6 +15,11 @@ let zoom: number = 1 let layerDistance: number = 1 + export let baseSizeOutlineColor: string = '#00FFFF77' + export let showBaseSizeOutline: boolean = true + export let sizeOutlineColor: string = '#FFFF0077' + export let showSizeOutline: boolean = true + let canvas: HTMLCanvasElement function draw() { if (!canvas) return @@ -42,7 +47,29 @@ for (let [groupName, group] of Object.entries(file.data.groups)) { for (let [animationName, animation] of Object.entries(group.animations)) { for (let frame of animation.frames) { - for (let layer of frame.layers) { + for (let layerIndex = 0; layerIndex < frame.layers.length; layerIndex++) { + let layer = frame.layers[layerIndex] + if (layerIndex === 0) { + if (showBaseSizeOutline) { + ctx.save() + ctx.translate(x, y) + ctx.scale(zoom, zoom) + ctx.strokeStyle = baseSizeOutlineColor + ctx.lineWidth = 1 + ctx.strokeRect(-file.data.width/2, -file.data.height/2, file.data.width, file.data.height) + ctx.restore() + } + if (showSizeOutline) { + ctx.save() + ctx.translate(x, y) + ctx.scale(zoom, zoom) + ctx.rotate(rotation * Math.PI / 180) + ctx.strokeStyle = sizeOutlineColor + ctx.lineWidth = 1 + ctx.strokeRect(-file.data.width/2, -file.data.height/2, file.data.width, file.data.height) + ctx.restore() + } + } ctx.save() ctx.translate(x, y) ctx.scale(zoom, zoom)