double click to start cropping

This commit is contained in:
Ryan Di 2024-09-09 18:34:13 +08:00
parent 51ea184938
commit 3d92a3bf1f
3 changed files with 27 additions and 0 deletions

View File

@ -116,6 +116,8 @@ export const getDefaultAppState = (): Omit<
objectsSnapModeEnabled: false, objectsSnapModeEnabled: false,
userToFollow: null, userToFollow: null,
followedBy: new Set(), followedBy: new Set(),
isCropping: false,
croppingElement: null,
}; };
}; };
@ -236,6 +238,8 @@ const APP_STATE_STORAGE_CONF = (<
objectsSnapModeEnabled: { browser: true, export: false, server: false }, objectsSnapModeEnabled: { browser: true, export: false, server: false },
userToFollow: { browser: false, export: false, server: false }, userToFollow: { browser: false, export: false, server: false },
followedBy: { browser: false, export: false, server: false }, followedBy: { browser: false, export: false, server: false },
isCropping: { browser: false, export: false, server: false },
croppingElement: { browser: false, export: false, server: false },
}); });
const _clearAppStateForStorage = < const _clearAppStateForStorage = <

View File

@ -5073,6 +5073,20 @@ class App extends React.Component<AppProps, AppState> {
} }
}; };
private startImageCropping = (image: ExcalidrawImageElement) => {
this.setState({
croppingElement: image,
isCropping: true,
});
};
private finishImageCropping = () => {
this.setState({
isCropping: false,
croppingElement: null,
});
};
private handleCanvasDoubleClick = ( private handleCanvasDoubleClick = (
event: React.MouseEvent<HTMLCanvasElement>, event: React.MouseEvent<HTMLCanvasElement>,
) => { ) => {
@ -5104,6 +5118,11 @@ class App extends React.Component<AppProps, AppState> {
} }
} }
if (selectedElements.length === 1 && isImageElement(selectedElements[0])) {
this.startImageCropping(selectedElements[0]);
return;
}
resetCursor(this.interactiveCanvas); resetCursor(this.interactiveCanvas);
let { x: sceneX, y: sceneY } = viewportCoordsToSceneCoords( let { x: sceneX, y: sceneY } = viewportCoordsToSceneCoords(

View File

@ -384,6 +384,10 @@ export interface AppState {
userToFollow: UserToFollow | null; userToFollow: UserToFollow | null;
/** the socket ids of the users following the current user */ /** the socket ids of the users following the current user */
followedBy: Set<SocketId>; followedBy: Set<SocketId>;
/** image cropping */
isCropping: boolean;
croppingElement: ExcalidrawImageElement | null;
} }
export type UIAppState = Omit< export type UIAppState = Omit<