@@ -6,6 +6,7 @@ import { ImageDisplay } from '../../../dataset/enum/Common'
66import { ControlComponent , ControlType } from '../../../dataset/enum/Control'
77import { ElementType } from '../../../dataset/enum/Element'
88import { IElement } from '../../../interface/Element'
9+ import { IPositionContext } from '../../../interface/Position'
910import { deepClone , getUUID , omitObject } from '../../../utils'
1011import { formatElementContext , formatElementList } from '../../../utils/element'
1112import { CanvasEvent } from '../CanvasEvent'
@@ -26,9 +27,12 @@ function getElementIndexByDragId(dragId: string, elementList: IElement[]) {
2627function moveImgPosition (
2728 element : IElement ,
2829 evt : MouseEvent ,
29- host : CanvasEvent
30+ host : CanvasEvent ,
31+ cachePositionContext : IPositionContext | null | undefined ,
32+ positionContext : IPositionContext
3033) {
3134 const draw = host . getDraw ( )
35+ const position = draw . getPosition ( )
3236 if (
3337 element . imgDisplay === ImageDisplay . SURROUND ||
3438 element . imgDisplay === ImageDisplay . FLOAT_TOP ||
@@ -37,10 +41,41 @@ function moveImgPosition(
3741 const moveX = evt . offsetX - host . mouseDownStartPosition ! . x !
3842 const moveY = evt . offsetY - host . mouseDownStartPosition ! . y !
3943 const imgFloatPosition = element . imgFloatPosition !
44+ const wasInTable = cachePositionContext ?. isTable
45+ const isNowInTable = positionContext . isTable
46+ let x = imgFloatPosition . x + moveX
47+ let y = imgFloatPosition . y + moveY
48+ const pageNo = draw . getPageNo ( )
49+ if ( wasInTable && ! isNowInTable ) {
50+ // 从表格内移动到表格外:相对坐标转为绝对坐标
51+ const cacheIndex = cachePositionContext ?. index
52+ if ( cacheIndex !== undefined ) {
53+ const originalPositionList = position . getOriginalPositionList ( )
54+ const tablePosition = originalPositionList [ cacheIndex ]
55+ if ( tablePosition ) {
56+ const [ tableX , tableY ] = tablePosition . coordinate . leftTop
57+ x = imgFloatPosition . x + tableX + moveX
58+ y = imgFloatPosition . y + tableY + moveY
59+ }
60+ }
61+ } else if ( ! wasInTable && isNowInTable ) {
62+ // 从表格外移动到表格内:绝对坐标转为相对坐标
63+ const nowIndex = positionContext . index
64+ if ( nowIndex !== undefined ) {
65+ const originalPositionList = position . getOriginalPositionList ( )
66+ const tablePosition = originalPositionList [ nowIndex ]
67+ if ( tablePosition ) {
68+ const [ tableX , tableY ] = tablePosition . coordinate . leftTop
69+ x = imgFloatPosition . x + moveX - tableX
70+ y = imgFloatPosition . y + moveY - tableY
71+ }
72+ }
73+ }
4074 element . imgFloatPosition = {
41- x : imgFloatPosition . x + moveX ,
42- y : imgFloatPosition . y + moveY ,
43- pageNo : draw . getPageNo ( )
75+ ...imgFloatPosition ,
76+ x,
77+ y,
78+ pageNo
4479 }
4580 }
4681 draw . getImageParticle ( ) . destroyFloatImage ( )
@@ -88,7 +123,13 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
88123 dragElement . type === ElementType . IMAGE ||
89124 dragElement . type === ElementType . LATEX
90125 ) {
91- moveImgPosition ( dragElement , evt , host )
126+ moveImgPosition (
127+ dragElement ,
128+ evt ,
129+ host ,
130+ host . cachePositionContext ,
131+ positionContext
132+ )
92133 if (
93134 dragElement . imgDisplay === ImageDisplay . SURROUND ||
94135 dragElement . imgDisplay === ImageDisplay . FLOAT_TOP ||
@@ -298,7 +339,13 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
298339 dragElement . type === ElementType . IMAGE ||
299340 dragElement . type === ElementType . LATEX
300341 ) {
301- moveImgPosition ( dragElement , evt , host )
342+ moveImgPosition (
343+ dragElement ,
344+ evt ,
345+ host ,
346+ host . cachePositionContext ,
347+ positionContext
348+ )
302349 imgElement = dragElement
303350 }
304351 }
0 commit comments