mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
fix: size range
This commit is contained in:
parent
17ab32a439
commit
aba93ce0ed
@ -13,7 +13,7 @@ export const ELEMENT_TYPE_ZH: { [key: string]: string } = {
|
|||||||
export const MIN_SIZE: { [key: string]: number } = {
|
export const MIN_SIZE: { [key: string]: number } = {
|
||||||
text: 20,
|
text: 20,
|
||||||
image: 20,
|
image: 20,
|
||||||
shape: 15,
|
shape: 20,
|
||||||
chart: 200,
|
chart: 200,
|
||||||
table: 20,
|
table: 20,
|
||||||
video: 250,
|
video: 250,
|
||||||
|
@ -133,10 +133,6 @@ export default (
|
|||||||
// 元素最小缩放限制
|
// 元素最小缩放限制
|
||||||
const minSize = MIN_SIZE[element.type] || 20
|
const minSize = MIN_SIZE[element.type] || 20
|
||||||
const getSizeWithinRange = (size: number) => size < minSize ? minSize : size
|
const getSizeWithinRange = (size: number) => size < minSize ? minSize : size
|
||||||
const getHeightWithinRange = (height: number) => {
|
|
||||||
const minHeight = minSize / aspectRatio
|
|
||||||
return height < minHeight ? minHeight : height
|
|
||||||
}
|
|
||||||
|
|
||||||
let points: ReturnType<typeof getRotateElementPoints>
|
let points: ReturnType<typeof getRotateElementPoints>
|
||||||
let baseLeft = 0
|
let baseLeft = 0
|
||||||
@ -273,22 +269,22 @@ export default (
|
|||||||
// 但此处计算的大小不需要重新校正,因为前面已经重新计算需要缩放的距离,相当于大小已经经过了校正
|
// 但此处计算的大小不需要重新校正,因为前面已经重新计算需要缩放的距离,相当于大小已经经过了校正
|
||||||
if (command === OperateResizeHandlers.RIGHT_BOTTOM) {
|
if (command === OperateResizeHandlers.RIGHT_BOTTOM) {
|
||||||
width = getSizeWithinRange(elOriginWidth + revisedX)
|
width = getSizeWithinRange(elOriginWidth + revisedX)
|
||||||
height = getHeightWithinRange(elOriginHeight + revisedY)
|
height = getSizeWithinRange(elOriginHeight + revisedY)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.LEFT_BOTTOM) {
|
else if (command === OperateResizeHandlers.LEFT_BOTTOM) {
|
||||||
width = getSizeWithinRange(elOriginWidth - revisedX)
|
width = getSizeWithinRange(elOriginWidth - revisedX)
|
||||||
height = getHeightWithinRange(elOriginHeight + revisedY)
|
height = getSizeWithinRange(elOriginHeight + revisedY)
|
||||||
left = elOriginLeft - (width - elOriginWidth)
|
left = elOriginLeft - (width - elOriginWidth)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.LEFT_TOP) {
|
else if (command === OperateResizeHandlers.LEFT_TOP) {
|
||||||
width = getSizeWithinRange(elOriginWidth - revisedX)
|
width = getSizeWithinRange(elOriginWidth - revisedX)
|
||||||
height = getHeightWithinRange(elOriginHeight - revisedY)
|
height = getSizeWithinRange(elOriginHeight - revisedY)
|
||||||
left = elOriginLeft - (width - elOriginWidth)
|
left = elOriginLeft - (width - elOriginWidth)
|
||||||
top = elOriginTop - (height - elOriginHeight)
|
top = elOriginTop - (height - elOriginHeight)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.RIGHT_TOP) {
|
else if (command === OperateResizeHandlers.RIGHT_TOP) {
|
||||||
width = getSizeWithinRange(elOriginWidth + revisedX)
|
width = getSizeWithinRange(elOriginWidth + revisedX)
|
||||||
height = getHeightWithinRange(elOriginHeight - revisedY)
|
height = getSizeWithinRange(elOriginHeight - revisedY)
|
||||||
top = elOriginTop - (height - elOriginHeight)
|
top = elOriginTop - (height - elOriginHeight)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.TOP) {
|
else if (command === OperateResizeHandlers.TOP) {
|
||||||
@ -340,7 +336,7 @@ export default (
|
|||||||
else moveY = moveX / aspectRatio
|
else moveY = moveX / aspectRatio
|
||||||
}
|
}
|
||||||
width = getSizeWithinRange(elOriginWidth + moveX)
|
width = getSizeWithinRange(elOriginWidth + moveX)
|
||||||
height = getHeightWithinRange(elOriginHeight + moveY)
|
height = getSizeWithinRange(elOriginHeight + moveY)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.LEFT_BOTTOM) {
|
else if (command === OperateResizeHandlers.LEFT_BOTTOM) {
|
||||||
const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + elOriginHeight + moveY)
|
const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + elOriginHeight + moveY)
|
||||||
@ -351,7 +347,7 @@ export default (
|
|||||||
else moveY = -moveX / aspectRatio
|
else moveY = -moveX / aspectRatio
|
||||||
}
|
}
|
||||||
width = getSizeWithinRange(elOriginWidth - moveX)
|
width = getSizeWithinRange(elOriginWidth - moveX)
|
||||||
height = getHeightWithinRange(elOriginHeight + moveY)
|
height = getSizeWithinRange(elOriginHeight + moveY)
|
||||||
left = elOriginLeft - (width - elOriginWidth)
|
left = elOriginLeft - (width - elOriginWidth)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.LEFT_TOP) {
|
else if (command === OperateResizeHandlers.LEFT_TOP) {
|
||||||
@ -363,7 +359,7 @@ export default (
|
|||||||
else moveY = moveX / aspectRatio
|
else moveY = moveX / aspectRatio
|
||||||
}
|
}
|
||||||
width = getSizeWithinRange(elOriginWidth - moveX)
|
width = getSizeWithinRange(elOriginWidth - moveX)
|
||||||
height = getHeightWithinRange(elOriginHeight - moveY)
|
height = getSizeWithinRange(elOriginHeight - moveY)
|
||||||
left = elOriginLeft - (width - elOriginWidth)
|
left = elOriginLeft - (width - elOriginWidth)
|
||||||
top = elOriginTop - (height - elOriginHeight)
|
top = elOriginTop - (height - elOriginHeight)
|
||||||
}
|
}
|
||||||
@ -376,7 +372,7 @@ export default (
|
|||||||
else moveY = -moveX / aspectRatio
|
else moveY = -moveX / aspectRatio
|
||||||
}
|
}
|
||||||
width = getSizeWithinRange(elOriginWidth + moveX)
|
width = getSizeWithinRange(elOriginWidth + moveX)
|
||||||
height = getHeightWithinRange(elOriginHeight - moveY)
|
height = getSizeWithinRange(elOriginHeight - moveY)
|
||||||
top = elOriginTop - (height - elOriginHeight)
|
top = elOriginTop - (height - elOriginHeight)
|
||||||
}
|
}
|
||||||
else if (command === OperateResizeHandlers.LEFT) {
|
else if (command === OperateResizeHandlers.LEFT) {
|
||||||
|
@ -115,6 +115,7 @@ import { computed, ref, watch } from 'vue'
|
|||||||
import { round } from 'lodash'
|
import { round } from 'lodash'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useMainStore, useSlidesStore } from '@/store'
|
||||||
|
import type { PPTElement } from '@/types/slides'
|
||||||
import { ElementAlignCommands, ElementOrderCommands } from '@/types/edit'
|
import { ElementAlignCommands, ElementOrderCommands } from '@/types/edit'
|
||||||
import { MIN_SIZE } from '@/configs/element'
|
import { MIN_SIZE } from '@/configs/element'
|
||||||
import { SHAPE_PATH_FORMULAS } from '@/configs/shapes'
|
import { SHAPE_PATH_FORMULAS } from '@/configs/shapes'
|
||||||
@ -197,30 +198,51 @@ const updateShapePathData = (width: number, height: number) => {
|
|||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateWidth = (value: number) => {
|
const updateWidth = (value: number) => {
|
||||||
const ratio = width.value / height.value
|
let h = height.value
|
||||||
let props = {
|
|
||||||
width: value,
|
if (fixedRatio.value) {
|
||||||
height: fixedRatio.value ? value / ratio : height.value,
|
const ratio = width.value / height.value
|
||||||
|
h = (value / ratio) < minSize.value ? minSize.value : (value / ratio)
|
||||||
|
}
|
||||||
|
let props: Partial<PPTElement> = { width: value, height: h }
|
||||||
|
|
||||||
|
const shapePathData = updateShapePathData(value, h)
|
||||||
|
if (shapePathData) {
|
||||||
|
props = {
|
||||||
|
width: value,
|
||||||
|
height: h,
|
||||||
|
...shapePathData,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const shapePathData = updateShapePathData(value, props.height)
|
|
||||||
if (shapePathData) props = { ...props, ...shapePathData }
|
|
||||||
|
|
||||||
slidesStore.updateElement({ id: handleElementId.value, props })
|
slidesStore.updateElement({ id: handleElementId.value, props })
|
||||||
addHistorySnapshot()
|
addHistorySnapshot()
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateHeight = (value: number) => {
|
const updateHeight = (value: number) => {
|
||||||
const ratio = width.value / height.value
|
let w = width.value
|
||||||
let props = {
|
|
||||||
height: value,
|
if (fixedRatio.value) {
|
||||||
width: fixedRatio.value ? value * ratio : width.value,
|
const ratio = width.value / height.value
|
||||||
|
w = (value * ratio) < minSize.value ? minSize.value : (value * ratio)
|
||||||
|
}
|
||||||
|
let props: Partial<PPTElement> = { width: w, height: value }
|
||||||
|
|
||||||
|
const shapePathData = updateShapePathData(w, value)
|
||||||
|
if (shapePathData) {
|
||||||
|
props = {
|
||||||
|
width: w,
|
||||||
|
height: value,
|
||||||
|
...shapePathData,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const shapePathData = updateShapePathData(props.width, value)
|
|
||||||
if (shapePathData) props = { ...props, ...shapePathData }
|
|
||||||
|
|
||||||
slidesStore.updateElement({ id: handleElementId.value, props })
|
slidesStore.updateElement({ id: handleElementId.value, props })
|
||||||
addHistorySnapshot()
|
addHistorySnapshot()
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateRotate = (value: number) => {
|
const updateRotate = (value: number) => {
|
||||||
const props = { rotate: value }
|
const props = { rotate: value }
|
||||||
slidesStore.updateElement({ id: handleElementId.value, props })
|
slidesStore.updateElement({ id: handleElementId.value, props })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user