mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
Another approach to preventing selected shapes from shifting (#2735)
* Revert "Fix selected shapes shifting to canvas origin"
This reverts commit d81b96fed0
.
This introduced a regression where the selection of objects was cleared
when it should not have been. For example, if multiple objects were
selected and the mouse was released while moving them around, the
selection would be cleared.
* Another approach to preventing selected shapes from shifting
Prevent fabric objects from shifting to the wrong position when the
active selection contains multiple objects by calculating their
coordinates relative to the canvas, as in the case of the fabric.Group.
This commit is contained in:
parent
bd55149846
commit
bea4307d78
1 changed files with 11 additions and 4 deletions
|
@ -36,18 +36,25 @@ export function exportShapesToClozeDeletions(occludeInactive: boolean): {
|
|||
*/
|
||||
function baseShapesFromFabric(occludeInactive: boolean): ShapeOrShapes[] {
|
||||
const canvas = globalThis.canvas as Canvas;
|
||||
|
||||
// Prevents multiple shapes in 'activeSelection' from shifting to the canvas origin
|
||||
canvas.discardActiveObject();
|
||||
|
||||
makeMaskTransparent(canvas, false);
|
||||
const activeObject = canvas.getActiveObject();
|
||||
const selectionContainingMultipleObjects = activeObject instanceof fabric.ActiveSelection
|
||||
&& (activeObject.size() > 1)
|
||||
? activeObject
|
||||
: null;
|
||||
const objects = canvas.getObjects() as FabricObject[];
|
||||
return objects
|
||||
.map((object) => {
|
||||
// If the object is in the active selection containing multiple objects,
|
||||
// we need to calculate its x and y coordinates relative to the canvas.
|
||||
const parent = selectionContainingMultipleObjects?.contains(object)
|
||||
? selectionContainingMultipleObjects
|
||||
: undefined;
|
||||
return fabricObjectToBaseShapeOrShapes(
|
||||
canvas,
|
||||
object,
|
||||
occludeInactive,
|
||||
parent,
|
||||
);
|
||||
})
|
||||
.filter((o): o is ShapeOrShapes => o !== null);
|
||||
|
|
Loading…
Reference in a new issue