import { defineComponent, onMounted , ref, effect} from "vue"; import { string } from "vue-types"; import { useCompData } from "."; import { useEditor } from "../../../.."; import { DesignComp } from "../../../../objects/DesignTemp/DesignComp"; import { View } from "../View"; import { CompUI } from "../.."; export const Component = defineComponent({ props: { compId: string().isRequired, }, setup(props) { const { helper, controls , store} = useEditor(); const data = useCompData(props.compId); onMounted(()=>{ // draw(); effect(draw); }) const canvasRef = ref(); function draw() { const canvas = canvasRef.value as HTMLCanvasElement; if (!canvas) return; const ctx = canvasRef.value?.getContext("2d") as CanvasRenderingContext2D; const width = data.layout.size[0]; const height = data.layout.size[1]; canvas.width = Math.ceil(Math.max(1, width)); canvas.height = Math.ceil(Math.max(1, height)); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.lineWidth = data.value.lineWidth; ctx.strokeStyle = data.value.lineColor; const padding = Math.max(10, data.value.lineWidth); ctx.beginPath(); ctx.ellipse(width/2.0, height / 2.0, (width-padding)/2.0, (height-padding) / 2.0, 0, Math.PI / 180.0 * data.value.start, Math.PI / 180.0 * data.value.end) if (data.value.isFill) { ctx.closePath(); } ctx.stroke(); if (data.value.isFill) { let bColor = data.value.fillColor; if (!bColor) bColor = data.value.lineColor; ctx.fillStyle = bColor; ctx.fill(); } } return () => ( ); }, });