import { computed, type Ref } from 'vue' import { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip' import type { PPTImageElement } from '@/types/slides' export default (element: Ref) => { const clipShape = computed(() => { let _clipShape = CLIPPATHS.rect if (element.value.clip) { const shape = element.value.clip.shape || ClipPathTypes.RECT _clipShape = CLIPPATHS[shape] } if (_clipShape.radius !== undefined && element.value.radius) { _clipShape = { ..._clipShape, radius: `${element.value.radius}px`, style: `inset(0 round ${element.value.radius}px)`, } } return _clipShape }) const imgPosition = computed(() => { if (!element.value.clip) { return { top: '0', left: '0', width: '100%', height: '100%', } } const [start, end] = element.value.clip.range const widthScale = (end[0] - start[0]) / 100 const heightScale = (end[1] - start[1]) / 100 const left = start[0] / widthScale const top = start[1] / heightScale return { left: -left + '%', top: -top + '%', width: 100 / widthScale + '%', height: 100 / heightScale + '%', } }) return { clipShape, imgPosition, } }