mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
feat: 双击创建文本框(#218)
This commit is contained in:
parent
dc73edc421
commit
4f9db4781a
@ -4,6 +4,7 @@
|
|||||||
ref="canvasRef"
|
ref="canvasRef"
|
||||||
@wheel="$event => handleMousewheelCanvas($event)"
|
@wheel="$event => handleMousewheelCanvas($event)"
|
||||||
@mousedown="$event => handleClickBlankArea($event)"
|
@mousedown="$event => handleClickBlankArea($event)"
|
||||||
|
@dblclick="$event => handleDblClick($event)"
|
||||||
v-contextmenu="contextmenus"
|
v-contextmenu="contextmenus"
|
||||||
v-click-outside="removeEditorAreaFocus"
|
v-click-outside="removeEditorAreaFocus"
|
||||||
>
|
>
|
||||||
@ -124,6 +125,7 @@ import useSelectAllElement from '@/hooks/useSelectAllElement'
|
|||||||
import useScaleCanvas from '@/hooks/useScaleCanvas'
|
import useScaleCanvas from '@/hooks/useScaleCanvas'
|
||||||
import useScreening from '@/hooks/useScreening'
|
import useScreening from '@/hooks/useScreening'
|
||||||
import useSlideHandler from '@/hooks/useSlideHandler'
|
import useSlideHandler from '@/hooks/useSlideHandler'
|
||||||
|
import useCreateElement from '@/hooks/useCreateElement'
|
||||||
|
|
||||||
import EditableElement from './EditableElement.vue'
|
import EditableElement from './EditableElement.vue'
|
||||||
import MouseSelection from './MouseSelection.vue'
|
import MouseSelection from './MouseSelection.vue'
|
||||||
@ -188,6 +190,7 @@ const { deleteAllElements } = useDeleteElement()
|
|||||||
const { pasteElement } = useCopyAndPasteElement()
|
const { pasteElement } = useCopyAndPasteElement()
|
||||||
const { enterScreeningFromStart } = useScreening()
|
const { enterScreeningFromStart } = useScreening()
|
||||||
const { updateSlideIndex } = useSlideHandler()
|
const { updateSlideIndex } = useSlideHandler()
|
||||||
|
const { createTextElement } = useCreateElement()
|
||||||
|
|
||||||
// 组件渲染时,如果存在元素焦点,需要清除
|
// 组件渲染时,如果存在元素焦点,需要清除
|
||||||
// 这种情况存在于:有焦点元素的情况下进入了放映模式,再退出时,需要清除原先的焦点(因为可能已经切换了页面)
|
// 这种情况存在于:有焦点元素的情况下进入了放映模式,再退出时,需要清除原先的焦点(因为可能已经切换了页面)
|
||||||
@ -209,6 +212,23 @@ const handleClickBlankArea = (e: MouseEvent) => {
|
|||||||
removeAllRanges()
|
removeAllRanges()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 双击插入文本
|
||||||
|
const handleDblClick = (e: MouseEvent) => {
|
||||||
|
if (activeElementIdList.value.length) return
|
||||||
|
if (!viewportRef.value) return
|
||||||
|
|
||||||
|
const viewportRect = viewportRef.value.getBoundingClientRect()
|
||||||
|
const left = (e.pageX - viewportRect.x) / canvasScale.value
|
||||||
|
const top = (e.pageY - viewportRect.y) / canvasScale.value
|
||||||
|
|
||||||
|
createTextElement({
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
width: 200 / canvasScale.value, // 除以 canvasScale 是为了与点击选区创建的形式保持相同的宽度
|
||||||
|
height: 0,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 画布注销时清空格式刷状态
|
// 画布注销时清空格式刷状态
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
if (textFormatPainter.value) mainStore.setTextFormatPainter(null)
|
if (textFormatPainter.value) mainStore.setTextFormatPainter(null)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user