refboard: preserve image position when applying crop
This commit is contained in:
@@ -17,6 +17,7 @@ import { MarkdownOverlay } from '../canvas/MarkdownOverlay';
|
|||||||
import { TextSprite } from '../canvas/sprites/TextSprite';
|
import { TextSprite } from '../canvas/sprites/TextSprite';
|
||||||
import { TextSharpnessManager } from '../canvas/textSharpness';
|
import { TextSharpnessManager } from '../canvas/textSharpness';
|
||||||
import { getItemWorldBounds } from '../canvas/SceneManager';
|
import { getItemWorldBounds } from '../canvas/SceneManager';
|
||||||
|
import { applyImageDisplayTransform } from '../canvas/imageTransforms';
|
||||||
// PresenceOverlay removed — remote selection highlighting was too heavy for minimal benefit
|
// PresenceOverlay removed — remote selection highlighting was too heavy for minimal benefit
|
||||||
import { connectSocket, disconnectSocket } from '../socket';
|
import { connectSocket, disconnectSocket } from '../socket';
|
||||||
import api from '../api';
|
import api from '../api';
|
||||||
@@ -478,11 +479,18 @@ export function useCanvasSetup(deps: CanvasSetupDeps) {
|
|||||||
|
|
||||||
cropOverlay.onConfirm = (item, crop) => {
|
cropOverlay.onConfirm = (item, crop) => {
|
||||||
const imgData = item.data as any;
|
const imgData = item.data as any;
|
||||||
|
const before = getItemWorldBounds(item);
|
||||||
const isFullImage = crop.x < 0.001 && crop.y < 0.001 && crop.w > 0.999 && crop.h > 0.999;
|
const isFullImage = crop.x < 0.001 && crop.y < 0.001 && crop.w > 0.999 && crop.h > 0.999;
|
||||||
imgData.crop = isFullImage ? undefined : crop;
|
imgData.crop = isFullImage ? undefined : crop;
|
||||||
if (item.displayObject instanceof ImageSprite) {
|
if (item.displayObject instanceof ImageSprite) {
|
||||||
item.displayObject.applyCrop(imgData.crop);
|
item.displayObject.applyCrop(imgData.crop);
|
||||||
}
|
}
|
||||||
|
const after = getItemWorldBounds(item);
|
||||||
|
imgData.x += before.x - after.x;
|
||||||
|
imgData.y += before.y - after.y;
|
||||||
|
if (item.type === 'image') {
|
||||||
|
applyImageDisplayTransform(item.displayObject, imgData);
|
||||||
|
}
|
||||||
scene.updateSpatialEntry(item);
|
scene.updateSpatialEntry(item);
|
||||||
selection.setEnabled(true);
|
selection.setEnabled(true);
|
||||||
selection.transformBox.update([item]);
|
selection.transformBox.update([item]);
|
||||||
|
|||||||
Reference in New Issue
Block a user