CatPtain's picture
Upload 339 files
89ce340 verified
raw
history blame
1.3 kB
import { computed, type Ref } from 'vue'
import { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip'
import type { PPTImageElement } from '@/types/slides'
export default (element: Ref<PPTImageElement>) => {
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,
}
}