web_ppt
/
frontend
/src
/views
/components
/element
/ImageElement
/ImageOutline
/ImageEllipseOutline.vue
<template> | |
<svg | |
class="image-ellipse-outline" | |
v-if="outline" | |
overflow="visible" | |
:width="width" | |
:height="height" | |
> | |
<ellipse | |
vector-effect="non-scaling-stroke" | |
stroke-linecap="butt" | |
stroke-miterlimit="8" | |
fill="transparent" | |
:cx="width / 2" | |
:cy="height / 2" | |
:rx="width / 2" | |
:ry="height / 2" | |
:stroke="outlineColor" | |
:stroke-width="outlineWidth" | |
:stroke-dasharray="strokeDashArray" | |
></ellipse> | |
</svg> | |
</template> | |
<script lang="ts" setup> | |
import { toRef } from 'vue' | |
import type { PPTElementOutline } from '@/types/slides' | |
import useElementOutline from '@/views/components/element/hooks/useElementOutline' | |
const props = defineProps<{ | |
width: number | |
height: number | |
outline?: PPTElementOutline | |
}>() | |
const { | |
outlineWidth, | |
outlineColor, | |
strokeDashArray, | |
} = useElementOutline(toRef(props, 'outline')) | |
</script> | |
<style lang="scss" scoped> | |
svg { | |
overflow: visible; | |
position: absolute; | |
z-index: 2; | |
top: 0; | |
left: 0; | |
} | |
</style> |