| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <template>
- <div class="image-element-operate" :class="{ 'cliping': isCliping }">
- <BorderLine
- class="operate-border-line"
- v-for="line in borderLines"
- :key="line.type"
- :type="line.type"
- :style="line.style"
- />
- <template v-if="handlerVisible">
- <ResizeHandler
- class="operate-resize-handler"
- v-for="point in resizeHandlers"
- :key="point.direction"
- :type="point.direction"
- :rotate="elementInfo.rotate"
- :style="point.style"
- @mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)"
- />
- <RotateHandler
- class="operate-rotate-handler"
- :style="{ left: scaleWidth / 2 + 'px' }"
- @mousedown.stop="$event => rotateElement($event, elementInfo)"
- />
- </template>
- </div>
- </template>
- <script lang="ts">
- export default {
- inheritAttrs: false,
- }
- </script>
- <script lang="ts" setup>
- import { computed } from 'vue'
- import { storeToRefs } from 'pinia'
- import { useMainStore } from '@/store'
- import type { PPTImageElement } from '@/types/slides'
- import type { OperateResizeHandlers } from '@/types/edit'
- import useCommonOperate from '../hooks/useCommonOperate'
- import RotateHandler from './RotateHandler.vue'
- import ResizeHandler from './ResizeHandler.vue'
- import BorderLine from './BorderLine.vue'
- const props = defineProps<{
- elementInfo: PPTImageElement
- handlerVisible: boolean
- rotateElement: (e: MouseEvent, element: PPTImageElement) => void
- scaleElement: (e: MouseEvent, element: PPTImageElement, command: OperateResizeHandlers) => void
- }>()
- const { canvasScale, clipingImageElementId } = storeToRefs(useMainStore())
- const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)
- const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)
- const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)
- const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)
- </script>
- <style lang="scss" scoped>
- .image-element-operate.cliping {
- visibility: hidden;
- }
- </style>
|