From dfec24db24ee85acdcb866db6f4cab79d09cdd70 Mon Sep 17 00:00:00 2001 From: daylily Date: Mon, 12 Jan 2026 15:09:12 -0600 Subject: [PATCH] Fix webapp mobile layout --- webapp/src/App.svelte | 2 +- .../lib/layouts/connect/ConnectSection.svelte | 2 +- .../src/lib/layouts/edit/EditSection.svelte | 14 ++--- .../edit/preview/AdaptivePreviewCanvas.svelte | 49 +++++++++++++++++ ...ewCanvas1x.svelte => PreviewCanvas.svelte} | 42 ++++++++------- .../edit/preview/PreviewCanvas2x.svelte | 54 ------------------- .../edit/preview/PreviewSection.svelte | 19 ++++--- .../lib/layouts/edit/preview/common.svelte.ts | 2 +- .../src/lib/layouts/write/WriteButton.svelte | 2 +- .../src/lib/layouts/write/WriteSection.svelte | 19 +++---- webapp/src/lib/utils/media.svelte.ts | 18 ------- 11 files changed, 107 insertions(+), 116 deletions(-) create mode 100644 webapp/src/lib/layouts/edit/preview/AdaptivePreviewCanvas.svelte rename webapp/src/lib/layouts/edit/preview/{PreviewCanvas1x.svelte => PreviewCanvas.svelte} (55%) delete mode 100644 webapp/src/lib/layouts/edit/preview/PreviewCanvas2x.svelte delete mode 100644 webapp/src/lib/utils/media.svelte.ts diff --git a/webapp/src/App.svelte b/webapp/src/App.svelte index 794d113..24cd68a 100644 --- a/webapp/src/App.svelte +++ b/webapp/src/App.svelte @@ -12,7 +12,7 @@ const unsupported = navigator.requestMIDIAccess === undefined -
+
{#if unsupported} {:else} diff --git a/webapp/src/lib/layouts/connect/ConnectSection.svelte b/webapp/src/lib/layouts/connect/ConnectSection.svelte index 05bdb99..035083c 100644 --- a/webapp/src/lib/layouts/connect/ConnectSection.svelte +++ b/webapp/src/lib/layouts/connect/ConnectSection.svelte @@ -35,7 +35,7 @@ $effect(() => {
diff --git a/webapp/src/lib/layouts/edit/EditSection.svelte b/webapp/src/lib/layouts/edit/EditSection.svelte index 4961594..fd7b780 100644 --- a/webapp/src/lib/layouts/edit/EditSection.svelte +++ b/webapp/src/lib/layouts/edit/EditSection.svelte @@ -1,15 +1,15 @@ -
+
diff --git a/webapp/src/lib/layouts/edit/preview/AdaptivePreviewCanvas.svelte b/webapp/src/lib/layouts/edit/preview/AdaptivePreviewCanvas.svelte new file mode 100644 index 0000000..8842183 --- /dev/null +++ b/webapp/src/lib/layouts/edit/preview/AdaptivePreviewCanvas.svelte @@ -0,0 +1,49 @@ + + +
+ +
diff --git a/webapp/src/lib/layouts/edit/preview/PreviewCanvas1x.svelte b/webapp/src/lib/layouts/edit/preview/PreviewCanvas.svelte similarity index 55% rename from webapp/src/lib/layouts/edit/preview/PreviewCanvas1x.svelte rename to webapp/src/lib/layouts/edit/preview/PreviewCanvas.svelte index 790cb7f..c9e0987 100644 --- a/webapp/src/lib/layouts/edit/preview/PreviewCanvas1x.svelte +++ b/webapp/src/lib/layouts/edit/preview/PreviewCanvas.svelte @@ -16,6 +16,12 @@ const renderedCtx = getRenderedContext() const hasRendered = $derived(renderedCtx.rendered !== null) + interface Props { + scale: number + } + + const { scale }: Props = $props() + let canvasEl: HTMLCanvasElement = $state(undefined!) const ctx = $derived(freshContext(canvasEl)) @@ -27,25 +33,25 @@
-
- diff --git a/webapp/src/lib/layouts/edit/preview/PreviewCanvas2x.svelte b/webapp/src/lib/layouts/edit/preview/PreviewCanvas2x.svelte deleted file mode 100644 index b4f47ad..0000000 --- a/webapp/src/lib/layouts/edit/preview/PreviewCanvas2x.svelte +++ /dev/null @@ -1,54 +0,0 @@ - - -
-
- -
- -
diff --git a/webapp/src/lib/layouts/edit/preview/PreviewSection.svelte b/webapp/src/lib/layouts/edit/preview/PreviewSection.svelte index dcea5e8..c344d11 100644 --- a/webapp/src/lib/layouts/edit/preview/PreviewSection.svelte +++ b/webapp/src/lib/layouts/edit/preview/PreviewSection.svelte @@ -1,7 +1,10 @@
@@ -9,8 +12,12 @@ -
- - +
+ {#if mediaSm.current} + + + {:else} + + {/if}
diff --git a/webapp/src/lib/layouts/edit/preview/common.svelte.ts b/webapp/src/lib/layouts/edit/preview/common.svelte.ts index 019a36e..4dc37c2 100644 --- a/webapp/src/lib/layouts/edit/preview/common.svelte.ts +++ b/webapp/src/lib/layouts/edit/preview/common.svelte.ts @@ -18,7 +18,7 @@ export function makeAltText( const file = filesCtx.files[0] - const output = [`${DEVICE_WIDTH}-by-${DEVICE_HEIGHT}-pixels e-paper preview of "${file.name}"`] + const output = [`${DEVICE_WIDTH}-by-${DEVICE_HEIGHT}-pixel e-paper preview of "${file.name}"`] if (!imageIsCorrectRatio(imageCtx.image)) { if (config.scaleMode === 'fit') output.push('letterboxed') diff --git a/webapp/src/lib/layouts/write/WriteButton.svelte b/webapp/src/lib/layouts/write/WriteButton.svelte index f0d2e86..e348912 100644 --- a/webapp/src/lib/layouts/write/WriteButton.svelte +++ b/webapp/src/lib/layouts/write/WriteButton.svelte @@ -59,11 +59,11 @@ async function connectAndWrite() { return } finally { setTimeout(() => { + toast.success('Wrote pattern to device') inProgress = false }, WRITE_TIME) } - toast.success('Wrote pattern to device') } $effect(() => { diff --git a/webapp/src/lib/layouts/write/WriteSection.svelte b/webapp/src/lib/layouts/write/WriteSection.svelte index 14d0a65..025935c 100644 --- a/webapp/src/lib/layouts/write/WriteSection.svelte +++ b/webapp/src/lib/layouts/write/WriteSection.svelte @@ -1,17 +1,17 @@ -
+

Write pattern to device

@@ -19,7 +19,8 @@ {#if imageCtx.image === null} Select an image file in order to write it onto your device. {:else if !inProgress} - Write the pattern onto your device if you have finished editing the image. + Write the pattern onto your device if you have finished + editing the image. {:else} Refresh in progress. Do not disconnect device. {/if} diff --git a/webapp/src/lib/utils/media.svelte.ts b/webapp/src/lib/utils/media.svelte.ts deleted file mode 100644 index 26b92a1..0000000 --- a/webapp/src/lib/utils/media.svelte.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { onDestroy } from 'svelte' - -export interface ReactiveMediaQuery { - readonly matches: boolean -} - -export function createMediaQuery(query: string): ReactiveMediaQuery { - const queryList = matchMedia(query) - - const queryState = $state({ matches: queryList.matches }) - - const updateQueryState = (e: MediaQueryListEvent) => (queryState.matches = e.matches) - - queryList.addEventListener('change', updateQueryState) - onDestroy(() => queryList.removeEventListener('change', updateQueryState)) - - return queryState -}