From cd9cf91ef0a14ab4fe3dfc14951ce6fe7dba1bcc Mon Sep 17 00:00:00 2001 From: th Date: Fri, 24 Apr 2026 17:50:35 +0200 Subject: [PATCH] 1.0.1: target size for GIF / APNG / APNG preview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Frame-based exports (GIF, APNG, APNG-preview) accept an optional target output size. ExportDialog exposes it as a single width input above the three image-export rows; height is derived live from the scene's aspect ratio so the user can't squash the output. The preview HTML mirrors the target dims so a downsized export previews at its real pixel size. renderFrames takes targetWidth / targetHeight, sizes its canvas accordingly and scales the ctx once; drawSceneFrame's own save/restore preserves the transform across frames, including the top-level-mask offscreen compositing path. Target width on dialog open is inherited from the current scene.canvas — watched via modelValue so resizing the stage and reopening the dialog picks up the new size (instead of the stale value from whenever ExportDialog first instantiated). Co-Authored-By: Claude Opus 4.7 (1M context) --- package.json | 2 +- src/components/ExportDialog.vue | 186 +++++++++++++++++++++++++++++--- src/devtools/tests.ts | 174 ++++++++++++++++++++++++++++++ src/i18n/messages.ts | 3 + src/lib/apngExport.ts | 10 +- src/lib/frameExport.ts | 23 +++- src/version.ts | 2 +- 7 files changed, 374 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index c9b0dee..fef36ce 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ruwio", "private": true, - "version": "1.0.0", + "version": "1.0.1", "type": "module", "scripts": { "dev": "vite", diff --git a/src/components/ExportDialog.vue b/src/components/ExportDialog.vue index 51120f5..990ae00 100644 --- a/src/components/ExportDialog.vue +++ b/src/components/ExportDialog.vue @@ -1,5 +1,5 @@