This commit is contained in:
syuilo 2025-06-02 20:38:04 +09:00
parent cf96ef461d
commit 1ebd75ac10
3 changed files with 48 additions and 2 deletions

View File

@ -7,7 +7,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkFolder :defaultOpen="true" :canPage="false"> <MkFolder :defaultOpen="true" :canPage="false">
<template #label>{{ fx.name }}</template> <template #label>{{ fx.name }}</template>
<template #footer> <template #footer>
<MkButton @click="emit('del')">{{ i18n.ts.remove }}</MkButton> <div class="_buttons">
<MkButton iconOnly @click="emit('del')"><i class="ti ti-trash"></i></MkButton>
<MkButton iconOnly @click="emit('swapUp')"><i class="ti ti-arrow-up"></i></MkButton>
<MkButton iconOnly @click="emit('swapDown')"><i class="ti ti-arrow-down"></i></MkButton>
</div>
</template> </template>
<div :class="$style.root" class="_gaps"> <div :class="$style.root" class="_gaps">
@ -60,6 +64,8 @@ if (fx == null) {
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'del'): void; (e: 'del'): void;
(e: 'swapUp'): void;
(e: 'swapDown'): void;
}>(); }>();
</script> </script>

View File

@ -35,6 +35,8 @@ SPDX-License-Identifier: AGPL-3.0-only
:key="layer.id" :key="layer.id"
v-model:layer="layers[i]" v-model:layer="layers[i]"
@del="onLayerDelete(layer)" @del="onLayerDelete(layer)"
@swapUp="onLayerSwapUp(layer)"
@swapDown="onLayerSwapDown(layer)"
></XLayer> ></XLayer>
<MkButton rounded primary style="margin: 0 auto;" @click="addEffect"><i class="ti ti-plus"></i> {{ i18n.ts._imageEffector.addEffect }}</MkButton> <MkButton rounded primary style="margin: 0 auto;" @click="addEffect"><i class="ti ti-plus"></i> {{ i18n.ts._imageEffector.addEffect }}</MkButton>
@ -105,6 +107,22 @@ function addEffect(ev: MouseEvent) {
})), ev.currentTarget ?? ev.target); })), ev.currentTarget ?? ev.target);
} }
function onLayerSwapUp(layer: ImageEffectorLayer) {
const index = layers.indexOf(layer);
if (index > 0) {
layers.splice(index, 1);
layers.splice(index - 1, 0, layer);
}
}
function onLayerSwapDown(layer: ImageEffectorLayer) {
const index = layers.indexOf(layer);
if (index < layers.length - 1) {
layers.splice(index, 1);
layers.splice(index + 1, 0, layer);
}
}
function onLayerDelete(layer: ImageEffectorLayer) { function onLayerDelete(layer: ImageEffectorLayer) {
const index = layers.indexOf(layer); const index = layers.indexOf(layer);
if (index !== -1) { if (index !== -1) {

View File

@ -48,7 +48,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="layer.type === 'image'">{{ i18n.ts._watermarkEditor.image }}</div> <div v-if="layer.type === 'image'">{{ i18n.ts._watermarkEditor.image }}</div>
</template> </template>
<template #footer> <template #footer>
<MkButton @click="removeLayer(layer)">{{ i18n.ts.remove }}</MkButton> <div class="_buttons">
<MkButton iconOnly @click="removeLayer(layer)"><i class="ti ti-trash"></i></MkButton>
<MkButton iconOnly @click="swapUpLayer(layer)"><i class="ti ti-arrow-up"></i></MkButton>
<MkButton iconOnly @click="swapDownLayer(layer)"><i class="ti ti-arrow-down"></i></MkButton>
</div>
</template> </template>
<XLayer <XLayer
@ -280,6 +284,24 @@ function addLayer(ev: MouseEvent) {
}], ev.currentTarget ?? ev.target); }], ev.currentTarget ?? ev.target);
} }
function swapUpLayer(layer: WatermarkPreset['layers'][number]) {
const index = preset.layers.findIndex(l => l.id === layer.id);
if (index > 0) {
const tmp = preset.layers[index - 1];
preset.layers[index - 1] = preset.layers[index];
preset.layers[index] = tmp;
}
}
function swapDownLayer(layer: WatermarkPreset['layers'][number]) {
const index = preset.layers.findIndex(l => l.id === layer.id);
if (index < preset.layers.length - 1) {
const tmp = preset.layers[index + 1];
preset.layers[index + 1] = preset.layers[index];
preset.layers[index] = tmp;
}
}
function removeLayer(layer: WatermarkPreset['layers'][number]) { function removeLayer(layer: WatermarkPreset['layers'][number]) {
preset.layers = preset.layers.filter(l => l.id !== layer.id); preset.layers = preset.layers.filter(l => l.id !== layer.id);
} }