From 54f0e7eaf783d7497ee449aa418774e11811c50b Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:15:18 +0900 Subject: [PATCH] wip --- .../src/components/MkImageEffectorDialog.vue | 70 ++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue index 2c6185fd33..ab4ee024d1 100644 --- a/packages/frontend/src/components/MkImageEffectorDialog.vue +++ b/packages/frontend/src/components/MkImageEffectorDialog.vue @@ -19,9 +19,12 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
{{ i18n.ts.preview }}
+
+ +
@@ -212,6 +215,59 @@ watch(enabled, () => { renderer.render(); } }); + +const fillSquare = ref(false); + +function onImagePointerdown(ev: PointerEvent) { + const PADDING = 20; + + let startX = ev.offsetX; + let startY = ev.offsetY; + + const xRatio = Math.max(imageBitmap!.width / imageBitmap!.height, 1); + const yRatio = Math.max(imageBitmap!.height / imageBitmap!.width, 1); + + startX = (startX - PADDING) / ((canvasEl.value!.clientWidth / yRatio) - (PADDING * 2)); + startY = (startY - PADDING) / ((canvasEl.value!.clientHeight / xRatio) - (PADDING * 2)); + + const id = genId(); + layers.push({ + id, + fxId: 'fillSquare', + params: { + offsetX: 0, + offsetY: 0, + scaleX: 0.1, + scaleY: 0.1, + angle: 0, + opacity: 1, + color: [1, 1, 1], + }, + }); + + canvasEl.value!.onpointermove = (ev) => { + let x = ev.offsetX; + let y = ev.offsetY; + x = (x - PADDING) / ((canvasEl.value!.clientWidth / yRatio) - (PADDING * 2)); + y = (y - PADDING) / ((canvasEl.value!.clientHeight / xRatio) - (PADDING * 2)); + + const scaleX = Math.abs(x - startX); + const scaleY = Math.abs(y - startY); + x = (x + startX) / 2; + y = (y + startY) / 2; + + const layerIndex = layers.findIndex((l) => l.id === id); + const layer = layerIndex !== -1 ? layers[layerIndex] : null; + if (layer != null) { + layer.params.offsetX = (x * 2) - 1; + layer.params.offsetY = (y * 2) - 1; + layer.params.scaleX = scaleX; + layer.params.scaleY = scaleY; + layers[layerIndex] = layer; + } + }; + canvasEl.value!.setPointerCapture(ev.pointerId); +}