summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-08-09 14:11:19 +0900
committerGitHub <noreply@github.com>2025-08-09 14:11:19 +0900
commit785b85ee462ac6f3af416be1d3ed68f3e478118b (patch)
tree81c738be824246664274cd5aca1955e5e9a27f91 /packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
parentfix: カラムの名前が正しくリスト/チャンネルの名前にな... (diff)
downloadmisskey-785b85ee462ac6f3af416be1d3ed68f3e478118b.tar.gz
misskey-785b85ee462ac6f3af416be1d3ed68f3e478118b.tar.bz2
misskey-785b85ee462ac6f3af416be1d3ed68f3e478118b.zip
enhance(frontend): 画像エフェクトのUI改善 (#16191)
* enhance(frontend): 画像エフェクトの改善 * enhance: i18n colorClampAdvanced * fix: missing translation * enhance: i18n blockNoise * fix lint * fix: narrow down fx defs types * fix * fix: watermark用エフェクトは別で定義し直す * fix lint * ImageEffectorをwatermarkに隠蔽 * watermark関連の定義を完全に分離 * refactor * fix * ぼかし効果 -> スムージング * refactor: remove unnecessary `as const` * Update Changelog
Diffstat (limited to 'packages/frontend/src/components/MkImageEffectorDialog.Layer.vue')
-rw-r--r--packages/frontend/src/components/MkImageEffectorDialog.Layer.vue86
1 files changed, 2 insertions, 84 deletions
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
index d8466fa7ca..f734325039 100644
--- a/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
+++ b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
@@ -14,73 +14,15 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</template>
- <div :class="$style.root" class="_gaps">
- <div v-for="[k, v] in Object.entries(fx.params)" :key="k">
- <MkSwitch
- v-if="v.type === 'boolean'"
- v-model="layer.params[k]"
- >
- <template #label>{{ fx.params[k].label ?? k }}</template>
- </MkSwitch>
- <MkRange
- v-else-if="v.type === 'number'"
- v-model="layer.params[k]"
- continuousUpdate
- :min="v.min"
- :max="v.max"
- :step="v.step"
- :textConverter="fx.params[k].toViewValue"
- @thumbDoubleClicked="() => {
- if (fx.params[k].default != null) {
- layer.params[k] = fx.params[k].default;
- } else {
- layer.params[k] = v.min;
- }
- }"
- >
- <template #label>{{ fx.params[k].label ?? k }}</template>
- </MkRange>
- <MkRadios
- v-else-if="v.type === 'number:enum'"
- v-model="layer.params[k]"
- >
- <template #label>{{ fx.params[k].label ?? k }}</template>
- <option v-for="item in v.enum" :value="item.value">{{ item.label }}</option>
- </MkRadios>
- <div v-else-if="v.type === 'seed'">
- <MkRange
- v-model="layer.params[k]"
- continuousUpdate
- type="number"
- :min="0"
- :max="10000"
- :step="1"
- >
- <template #label>{{ fx.params[k].label ?? k }}</template>
- </MkRange>
- </div>
- <MkInput
- v-else-if="v.type === 'color'"
- :modelValue="getHex(layer.params[k])"
- type="color"
- @update:modelValue="v => { const c = getRgb(v); if (c != null) layer.params[k] = c; }"
- >
- <template #label>{{ fx.params[k].label ?? k }}</template>
- </MkInput>
- </div>
- </div>
+ <MkImageEffectorFxForm v-model="layer.params" :paramDefs="fx.params" />
</MkFolder>
</template>
<script setup lang="ts">
import type { ImageEffectorLayer } from '@/utility/image-effector/ImageEffector.js';
-import { i18n } from '@/i18n.js';
import MkFolder from '@/components/MkFolder.vue';
import MkButton from '@/components/MkButton.vue';
-import MkInput from '@/components/MkInput.vue';
-import MkRadios from '@/components/MkRadios.vue';
-import MkSwitch from '@/components/MkSwitch.vue';
-import MkRange from '@/components/MkRange.vue';
+import MkImageEffectorFxForm from '@/components/MkImageEffectorFxForm.vue';
import { FXS } from '@/utility/image-effector/fxs.js';
const layer = defineModel<ImageEffectorLayer>('layer', { required: true });
@@ -94,28 +36,4 @@ const emit = defineEmits<{
(e: 'swapUp'): void;
(e: 'swapDown'): void;
}>();
-
-function getHex(c: [number, number, number]) {
- return `#${c.map(x => (x * 255).toString(16).padStart(2, '0')).join('')}`;
-}
-
-function getRgb(hex: string | number): [number, number, number] | null {
- if (
- typeof hex === 'number' ||
- typeof hex !== 'string' ||
- !/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex)
- ) {
- return null;
- }
-
- const m = hex.slice(1).match(/[0-9a-fA-F]{2}/g);
- if (m == null) return [0, 0, 0];
- return m.map(x => parseInt(x, 16) / 255) as [number, number, number];
-}
</script>
-
-<style module>
-.root {
-
-}
-</style>