From c9b5e66cdb10e040ba9d09e289f596422071e564 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:50:20 +0900 Subject: [PATCH] wip --- .../components/MkImageFrameEditorDialog.vue | 26 +++++++++++++++++++ .../ImageFrameRenderer.ts | 13 ++++++++++ .../utility/image-frame-renderer/frame.glsl | 4 +++ .../src/utility/image-frame-renderer/frame.ts | 18 ++++++++++--- 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/packages/frontend/src/components/MkImageFrameEditorDialog.vue b/packages/frontend/src/components/MkImageFrameEditorDialog.vue index 2a91c85952..fcdf80ce5d 100644 --- a/packages/frontend/src/components/MkImageFrameEditorDialog.vue +++ b/packages/frontend/src/components/MkImageFrameEditorDialog.vue @@ -31,6 +31,8 @@ SPDX-License-Identifier: AGPL-3.0-only
+ {{ i18n.ts.selectFile }} + @@ -175,6 +177,7 @@ import { ensureSignin } from '@/i.js'; import { genId } from '@/utility/id.js'; import { useMkSelect } from '@/composables/use-mkselect.js'; import { prefer } from '@/preferences.js'; +import { selectFile } from '@/utility/drive.js'; const $i = ensureSignin(); @@ -216,6 +219,7 @@ const params = reactive(deepClone(props.params) ?? { bgColor: [1, 1, 1], fgColor: [0, 0, 0], font: 'sans-serif', + imageUrl: null, }); const emit = defineEmits<{ @@ -409,6 +413,28 @@ function getRgb(hex: string | number): [number, number, number] | null { if (m == null) return [0, 0, 0]; return m.map(x => parseInt(x, 16) / 255) as [number, number, number]; } + +function chooseFile(ev: MouseEvent) { + selectFile({ + anchorElement: ev.currentTarget ?? ev.target, + multiple: false, + label: i18n.ts.selectFile, + features: { + watermark: false, + }, + }).then((file) => { + if (!file.type.startsWith('image')) { + os.alert({ + type: 'warning', + title: i18n.ts._watermarkEditor.driveFileTypeWarn, + text: i18n.ts._watermarkEditor.driveFileTypeWarnDescription, + }); + return; + } + + params.imageUrl = file.url; + }); +}