gctGenerator/site/.vuepress/components/codes/TextConfig.vue
sup39 898ea733ac Rewrote drawText and related codes
- Reduced parameters to struct pointer + format string + varargs
- Rewrote QFT, Pattern Selector, Customized Display with the new drawText function
- Added PAL font (TODO: NTSC-U)
- Merged P/A/S Display and Speed Display to Customized Display
- Provided background options to Pattern Selector and Customized Display
2023-01-29 04:39:18 +09:00

108 lines
3.1 KiB
Vue

<template>
<div>
<div>
<span>{{l.location}}(</span><input type="number" min="0" max="600" v-model.number="x"><span>, </span><input type="number" min="16" max="464" v-model.number="y"><span>)</span>
</div>
<div>
<span>{{l.fontSize}}</span><input type="number" min="0" v-model.number="fontSize">
</div>
<div>
<span>{{fgRGB2==null ? l.fgColor : l.fgColor1}}</span><input type="color" :value="rgbI2S(fgRGB)" @change="fgRGB = rgbS2I($event.target.value)">
<span>{{l.alpha}}</span><input type="number" min="0" max="255" v-model.number="fgA"><span>/255={{(fgA/2.55).toFixed(1)}}%</span>
<input type="checkbox" :checked="fgRGB2!=null" @change="toggleGradient"><span>{{l.fgColorGrad}}</span>
</div>
<div v-if="fgRGB2 != null">
<span>{{l.fgColor2}}</span><input type="color" :value="rgbI2S(fgRGB2)" @change="fgRGB2 = rgbS2I($event.target.value)">
<span>{{l.alpha}}</span><input type="number" min="0" max="255" v-model.number="fgA2"><span>/255={{(fgA2/2.55).toFixed(1)}}%</span>
</div>
<div>
<div>
<span>{{ l.bgColor }}</span
><input type="color" :value="rgbI2S(bgRGB)" @change="bgRGB = rgbS2I($event.target.value)" />
<span>{{ l.alpha }}</span
><input type="number" min="0" max="254" v-model.number="bgA" /><span
>/255={{ (bgA / 2.55).toFixed(1) }}%</span
>
</div>
<div>
<span>{{ l.bgOffset }}</span>
<span>{{ l.left }}</span><input type="number" v-model.number="bgLeft" />
<span>{{ l.right }}</span><input type="number" v-model.number="bgRight" />
<span>{{ l.top }}</span><input type="number" v-model.number="bgTop" />
<span>{{ l.bottom }}</span><input type="number" v-model.number="bgBot" />
</div>
</div>
</div>
</template>
<script>
import labels from './labels.json';
import {rgbI2S, rgbS2I, rgbaI2S} from './utils';
const makeField = key => ({
get() {
return this.$props.value[key];
},
set(value) {
this.update({[key]: value});
},
});
export default {
props: {
value: {type: Object},
},
computed: {
l() {
return labels[this.$lang] ?? labels['en-US'];
},
...Object.fromEntries([
'x', 'y', 'fontSize', 'fgRGB', 'fgA', 'fgRGB2', 'fgA2',
'bgRGB', 'bgA', 'bgLeft', 'bgRight', 'bgTop', 'bgBot',
].map(k => [k, makeField(k)])),
},
methods: {
update(o) {
this.$emit('input', {...this.value, ...o});
},
toggleGradient($event) {
if ($event.target.checked) {
this.update({
fgRGB2: this.fgRGB,
fgA2: this.fgA,
});
} else {
this.update({
fgRGB2: null,
fgA2: null,
});
}
},
rgbI2S,
rgbS2I,
rgbaI2S,
},
}
</script>
<style scoped>
input[type=number], td.right {
text-align: right;
}
input[type="number"] {
width: 2em;
margin: 0 2px;
}
.appearance > div {
padding: 0 0 4px;
}
input[type=number] {
-moz-appearance: textfield;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
</style>