Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
fix

f

Update StackedObject.ts

fix
  • Loading branch information
ShaMan123 committed Sep 13, 2023
1 parent bdafc1b commit 6368234
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 20 deletions.
24 changes: 12 additions & 12 deletions src/canvas/Canvas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { Point } from '../Point';
import type { Group } from '../shapes/Group';
import type { IText } from '../shapes/IText/IText';
import type { FabricObject } from '../shapes/Object/FabricObject';
import { removeFromArray } from '../util';
import { isTouchEvent, stopEvent } from '../util/dom_event';
import { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';
import { sendPointToPlane } from '../util/misc/planeChange';
Expand Down Expand Up @@ -406,7 +407,7 @@ export class Canvas extends SelectableCanvas implements CanvasOptions {
);
return {
target,
targets: [...this.targets],
targets: [...removeFromArray(this.targets, target)],
};
}

Expand Down Expand Up @@ -1232,26 +1233,25 @@ export class Canvas extends SelectableCanvas implements CanvasOptions {
* @private
*/
_fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {
const _hoveredTarget = this._hoveredTarget,
_hoveredTargets = this._hoveredTargets,
targets = this.targets,
length = Math.max(_hoveredTargets.length, targets.length);
const prevTarget = this._hoveredTarget,
prevTargets = this._hoveredTargets,
targets = removeFromArray([...this.targets], target) as FabricObject[];

this.fireSyntheticInOutEvents('mouse', {
e,
target,
oldTarget: _hoveredTarget,
oldTarget: prevTarget,
fireCanvas: true,
});
for (let i = 0; i < length; i++) {
for (let i = 0; i < Math.max(prevTargets.length, targets.length); i++) {
this.fireSyntheticInOutEvents('mouse', {
e,
target: targets[i],
oldTarget: _hoveredTargets[i],
oldTarget: prevTargets[i],
});
}
this._hoveredTarget = target;
this._hoveredTargets = this.targets.concat();
this._hoveredTargets = targets;
}

/**
Expand Down Expand Up @@ -1501,7 +1501,7 @@ export class Canvas extends SelectableCanvas implements CanvasOptions {
// `target` is part of active selection => remove it
activeSelection.remove(target);
this._hoveredTarget = target;
this._hoveredTargets = [...this.targets];
this._hoveredTargets = removeFromArray([...this.targets], target);
if (activeSelection.size() === 1) {
// activate last remaining object
this._setActiveObject(activeSelection.item(0) as FabricObject, e);
Expand All @@ -1510,7 +1510,7 @@ export class Canvas extends SelectableCanvas implements CanvasOptions {
// `target` isn't part of active selection => add it
activeSelection.multiSelectAdd(target);
this._hoveredTarget = activeSelection;
this._hoveredTargets = [...this.targets];
this._hoveredTargets = removeFromArray([...this.targets], target);
}
this._fireSelectionEvents(prevActiveObjects, e);
} else {
Expand All @@ -1520,7 +1520,7 @@ export class Canvas extends SelectableCanvas implements CanvasOptions {
this._hoveredTarget = activeSelection;
// ISSUE 4115: should we consider subTargets here?
// this._hoveredTargets = [];
// this._hoveredTargets = this.targets.concat();
// this._hoveredTargets = removeFromArray([...this.targets], target);
this._setActiveObject(activeSelection, e);
this._fireSelectionEvents([activeObject], e);
}
Expand Down
7 changes: 5 additions & 2 deletions src/canvas/SelectableCanvas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
* @param {Array} [objects] objects array to look into
* @param {Object} [pointer] point coordinates to check
* @param {boolean} [param2.searchStrategy] strategy
* @returns {FabricObject[]} path of objects starting from **top most** object on screen.
* @returns {FabricObject[]} path of hits starting from **top most** object on screen.
*/
protected findTargetsTraversal(
objects: FabricObject[],
Expand Down Expand Up @@ -848,7 +848,10 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
searchStrategy: 'first-hit',
});
this.targets.push(...targets);
return targets.find((target) => !target.group || target.group.interactive);
return targets.find((target) => {
const parent = target.getParent(true);
return !parent || parent.interactive;
});
}

/**
Expand Down
11 changes: 6 additions & 5 deletions src/shapes/Object/StackedObject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@ export class StackedObject<
* Returns instance's parent **EXCLUDING** `ActiveSelection`
* @param {boolean} [strict] exclude canvas as well
*/
getParent<T extends boolean>(strict?: T): TAncestor | undefined {
return (
(isActiveSelection(this.group) ? this.__owningGroup : this.group) ||
(strict ? undefined : this.canvas)
);
getParent<
T extends boolean,
R = (T extends true ? Group : TCollection) | undefined
>(strict?: T): R {
return ((isActiveSelection(this.group) ? this.__owningGroup : this.group) ||
(strict ? undefined : this.canvas)) as R;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion test/unit/draggable_text.js
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ function assertDragEventStream(name, a, b) {
e: eventData,
target: iText,
type: 'dragend',
subTargets: [],
subTargets: [iText],
dragSource: iText,
dropTarget: undefined,
didDrop: false
Expand Down

0 comments on commit 6368234

Please sign in to comment.