@visactor/vrender-components 0.22.4 → 0.22.5-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -29566,7 +29566,7 @@ var IOperateType;
29566
29566
  const DEFAULT_BRUSH_ATTRIBUTES = {
29567
29567
  trigger: 'pointerdown',
29568
29568
  updateTrigger: 'pointermove',
29569
- endTrigger: 'pointerup',
29569
+ endTrigger: ['pointerup', 'pointerleave'],
29570
29570
  resetTrigger: 'pointerupoutside',
29571
29571
  hasMask: true,
29572
29572
  brushMode: 'single',
@@ -29620,6 +29620,7 @@ class Brush extends AbstractComponent {
29620
29620
  this._isDownBeforeUpOutside = true;
29621
29621
  return;
29622
29622
  }
29623
+ this._isDownBeforeUpOutside = false;
29623
29624
  e.stopPropagation();
29624
29625
  const brushMoved = (_a = this.attribute.brushMoved) !== null && _a !== void 0 ? _a : true;
29625
29626
  this._activeMoveState = brushMoved && this._isPosInBrushMask(e);
@@ -29642,6 +29643,14 @@ class Brush extends AbstractComponent {
29642
29643
  : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);
29643
29644
  this._onBrushEnd = (e) => {
29644
29645
  var _a;
29646
+ if (this._isDownBeforeUpOutside) {
29647
+ if (!isEmpty(this._brushMaskAABBBoundsDict)) {
29648
+ this._clearMask();
29649
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29650
+ }
29651
+ this._isDownBeforeUpOutside = false;
29652
+ return;
29653
+ }
29645
29654
  if (!this._activeDrawState && !this._activeMoveState) {
29646
29655
  return;
29647
29656
  }
@@ -29649,29 +29658,29 @@ class Brush extends AbstractComponent {
29649
29658
  const { removeOnClick = true } = this.attribute;
29650
29659
  if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {
29651
29660
  if ((_a = this._operatingMask) === null || _a === void 0 ? void 0 : _a._AABBBounds.empty()) {
29652
- this._dispatchEvent(IOperateType.brushClear, {
29653
- operateMask: this._operatingMask,
29654
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29655
- event: e
29656
- });
29661
+ if (!isEmpty(this._brushMaskAABBBoundsDict)) {
29662
+ this._clearMask();
29663
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29664
+ }
29665
+ }
29666
+ else {
29667
+ delete this._brushMaskAABBBoundsDict[this._operatingMask.name];
29668
+ this._container.setAttributes({});
29669
+ this._container.removeChild(this._operatingMask);
29670
+ if (isEmpty(this._brushMaskAABBBoundsDict)) {
29671
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29672
+ }
29673
+ else {
29674
+ this._dispatchBrushEvent(IOperateType.drawEnd, e);
29675
+ }
29657
29676
  }
29658
- this._container.incrementalClearChild();
29659
- this._brushMaskAABBBoundsDict = {};
29660
29677
  }
29661
29678
  else {
29662
29679
  if (this._activeDrawState) {
29663
- this._dispatchEvent(IOperateType.drawEnd, {
29664
- operateMask: this._operatingMask,
29665
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29666
- event: e
29667
- });
29680
+ this._dispatchBrushEvent(IOperateType.drawEnd, e);
29668
29681
  }
29669
29682
  if (this._activeMoveState) {
29670
- this._dispatchEvent(IOperateType.moveEnd, {
29671
- operateMask: this._operatingMask,
29672
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29673
- event: e
29674
- });
29683
+ this._dispatchBrushEvent(IOperateType.moveEnd, e);
29675
29684
  }
29676
29685
  }
29677
29686
  this._activeDrawState = false;
@@ -29683,23 +29692,14 @@ class Brush extends AbstractComponent {
29683
29692
  };
29684
29693
  this._onBrushClear = (e) => {
29685
29694
  e.preventDefault();
29686
- const { removeOnClick = true } = this.attribute;
29687
- if (this._isDownBeforeUpOutside && removeOnClick) {
29688
- this._dispatchEvent(IOperateType.brushClear, {
29689
- operateMask: this._operatingMask,
29690
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29691
- event: e
29692
- });
29693
- this._container.incrementalClearChild();
29694
- this._brushMaskAABBBoundsDict = {};
29695
+ if (!isEmpty(this._brushMaskAABBBoundsDict)) {
29696
+ this._clearMask();
29697
+ this._dispatchBrushEvent(IOperateType.brushClear, e);
29695
29698
  }
29696
29699
  this._activeDrawState = false;
29697
29700
  this._activeMoveState = false;
29698
29701
  this._isDrawedBeforeEnd = false;
29699
29702
  this._isDownBeforeUpOutside = false;
29700
- if (this._operatingMask) {
29701
- this._operatingMask.setAttribute('pickable', false);
29702
- }
29703
29703
  };
29704
29704
  }
29705
29705
  _bindBrushEvents() {
@@ -29707,44 +29707,19 @@ class Brush extends AbstractComponent {
29707
29707
  return;
29708
29708
  }
29709
29709
  const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29710
- array(trigger).forEach(t => vglobal.addEventListener(t, this._onBrushStart));
29710
+ array(trigger).forEach(t => this.stage.addEventListener(t, this._onBrushStart));
29711
29711
  array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay));
29712
29712
  array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd));
29713
29713
  array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear));
29714
29714
  }
29715
- _isPosInBrushMask(e) {
29716
- const pos = this.eventPosToStagePos(e);
29717
- const brushMasks = this._container.getChildren();
29718
- for (let i = 0; i < brushMasks.length; i++) {
29719
- const { points = [], dx = 0, dy = 0 } = brushMasks[i].attribute;
29720
- const pointsConsiderOffset = points.map((point) => {
29721
- return {
29722
- x: point.x + dx,
29723
- y: point.y + dy
29724
- };
29725
- });
29726
- if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {
29727
- this._operatingMask = brushMasks[i];
29728
- return true;
29729
- }
29730
- }
29731
- return false;
29732
- }
29733
29715
  _initDraw(e) {
29734
29716
  const { brushMode } = this.attribute;
29735
29717
  const pos = this.eventPosToStagePos(e);
29736
29718
  this._cacheDrawPoints = [pos];
29737
29719
  this._isDrawedBeforeEnd = false;
29738
- if (brushMode === 'single') {
29739
- this._brushMaskAABBBoundsDict = {};
29740
- this._container.incrementalClearChild();
29741
- }
29720
+ brushMode === 'single' && this._clearMask();
29742
29721
  this._addBrushMask();
29743
- this._dispatchEvent(IOperateType.drawStart, {
29744
- operateMask: this._operatingMask,
29745
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29746
- event: e
29747
- });
29722
+ this._dispatchBrushEvent(IOperateType.drawStart, e);
29748
29723
  }
29749
29724
  _initMove(e) {
29750
29725
  var _a, _b;
@@ -29761,11 +29736,7 @@ class Brush extends AbstractComponent {
29761
29736
  this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];
29762
29737
  this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];
29763
29738
  this._operatingMask.setAttribute('pickable', true);
29764
- this._dispatchEvent(IOperateType.moveStart, {
29765
- operateMask: this._operatingMask,
29766
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29767
- event: e
29768
- });
29739
+ this._dispatchBrushEvent(IOperateType.moveStart, e);
29769
29740
  }
29770
29741
  _drawing(e) {
29771
29742
  var _a, _b;
@@ -29792,12 +29763,8 @@ class Brush extends AbstractComponent {
29792
29763
  !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);
29793
29764
  if (this._isDrawedBeforeEnd) {
29794
29765
  this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;
29795
- this._dispatchEvent(IOperateType.drawing, {
29796
- operateMask: this._operatingMask,
29797
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29798
- event: e
29799
- });
29800
29766
  }
29767
+ this._dispatchBrushEvent(IOperateType.drawing, e);
29801
29768
  }
29802
29769
  _moving(e) {
29803
29770
  const startPos = this._cacheMovePoint;
@@ -29816,11 +29783,20 @@ class Brush extends AbstractComponent {
29816
29783
  dy: moveY
29817
29784
  });
29818
29785
  this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;
29819
- this._dispatchEvent(IOperateType.moving, {
29820
- operateMask: this._operatingMask,
29821
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29822
- event: e
29823
- });
29786
+ this._dispatchBrushEvent(IOperateType.moving, e);
29787
+ }
29788
+ render() {
29789
+ this.releaseBrushEvents();
29790
+ this._bindBrushEvents();
29791
+ const group = this.createOrUpdateChild('brush-container', {}, 'group');
29792
+ this._container = group;
29793
+ }
29794
+ releaseBrushEvents() {
29795
+ const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29796
+ array(trigger).forEach(t => this.stage.removeEventListener(t, this._onBrushStart));
29797
+ array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay));
29798
+ array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd));
29799
+ array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear));
29824
29800
  }
29825
29801
  _computeMaskPoints() {
29826
29802
  const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute;
@@ -29889,12 +29865,30 @@ class Brush extends AbstractComponent {
29889
29865
  _addBrushMask() {
29890
29866
  var _a;
29891
29867
  const { brushStyle, hasMask } = this.attribute;
29892
- const brushMask = graphicCreator.polygon(Object.assign(Object.assign({ points: cloneDeep(this._cacheDrawPoints), cursor: 'move', pickable: false }, brushStyle), { opacity: hasMask ? (_a = brushStyle.opacity) !== null && _a !== void 0 ? _a : 1 : 0 }));
29868
+ const brushMask = graphicCreator.polygon(Object.assign(Object.assign({ points: cloneDeep(this._cacheDrawPoints), cursor: 'move', pickable: false }, brushStyle), { opacity: hasMask ? ((_a = brushStyle.opacity) !== null && _a !== void 0 ? _a : 1) : 0 }));
29893
29869
  brushMask.name = `brush-${Date.now()}`;
29894
29870
  this._operatingMask = brushMask;
29895
29871
  this._container.add(brushMask);
29896
29872
  this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;
29897
29873
  }
29874
+ _isPosInBrushMask(e) {
29875
+ const pos = this.eventPosToStagePos(e);
29876
+ const brushMasks = this._container.getChildren();
29877
+ for (let i = 0; i < brushMasks.length; i++) {
29878
+ const { points = [], dx = 0, dy = 0 } = brushMasks[i].attribute;
29879
+ const pointsConsiderOffset = points.map((point) => {
29880
+ return {
29881
+ x: point.x + dx,
29882
+ y: point.y + dy
29883
+ };
29884
+ });
29885
+ if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {
29886
+ this._operatingMask = brushMasks[i];
29887
+ return true;
29888
+ }
29889
+ }
29890
+ return false;
29891
+ }
29898
29892
  _outOfInteractiveRange(e) {
29899
29893
  const { interactiveRange } = this.attribute;
29900
29894
  const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;
@@ -29907,17 +29901,17 @@ class Brush extends AbstractComponent {
29907
29901
  eventPosToStagePos(e) {
29908
29902
  return this.stage.eventPointTransform(e);
29909
29903
  }
29910
- render() {
29911
- this._bindBrushEvents();
29912
- const group = this.createOrUpdateChild('brush-container', {}, 'group');
29913
- this._container = group;
29904
+ _dispatchBrushEvent(operateType, e) {
29905
+ this._dispatchEvent(operateType, {
29906
+ operateMask: this._operatingMask,
29907
+ operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
29908
+ event: e
29909
+ });
29914
29910
  }
29915
- releaseBrushEvents() {
29916
- const { delayType = 'throttle', delayTime = 0, trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this.attribute;
29917
- array(trigger).forEach(t => vglobal.removeEventListener(t, this._onBrushStart));
29918
- array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay));
29919
- array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd));
29920
- array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear));
29911
+ _clearMask() {
29912
+ this._brushMaskAABBBoundsDict = {};
29913
+ this._container.incrementalClearChild();
29914
+ this._operatingMask = null;
29921
29915
  }
29922
29916
  }
29923
29917
  Brush.defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;
@@ -31460,6 +31454,6 @@ StoryLabelItem.defaultAttributes = {
31460
31454
  theme: 'default'
31461
31455
  };
31462
31456
 
31463
- const version = "0.22.4";
31457
+ const version = "0.22.5-alpha.2";
31464
31458
 
31465
31459
  export { AXIS_ELEMENT_NAME, AbstractComponent, ArcInfo, ArcLabel, ArcSegment, AxisStateValue, BasePlayer, Brush, CheckBox, CircleAxis, CircleAxisGrid, CircleCrosshair, ColorContinuousLegend, ContinuousPlayer, DEFAULT_ITEM_SPACE_COL, DEFAULT_ITEM_SPACE_ROW, DEFAULT_LABEL_SPACE, DEFAULT_PAGER_SPACE, DEFAULT_SHAPE_SIZE, DEFAULT_SHAPE_SPACE, DEFAULT_STATES$1 as DEFAULT_STATES, DEFAULT_TITLE_SPACE, DEFAULT_VALUE_SPACE, DataLabel, DataZoom, DataZoomActiveTag, DirectionEnum, DiscreteLegend, DiscretePlayer, EmptyTip, GroupTransition, IMarkAreaLabelPosition, IMarkCommonArcLabelPosition, IMarkLineLabelPosition, IMarkPointItemPosition, IOperateType, Indicator, LEGEND_ELEMENT_NAME, LabelBase, LegendEvent, LegendStateValue, LineAxis, LineAxisGrid, LineCrosshair, LineLabel, LinkPath, MarkArcArea, MarkArcLine, MarkArea, MarkLine, MarkPoint, Pager, PlayerEventEnum, PolygonCrosshair, PolygonSectorCrosshair, PopTip, Radio, RectCrosshair, RectLabel, SLIDER_ELEMENT_NAME, ScrollBar, SectorCrosshair, Segment, SizeContinuousLegend, Slider, StoryLabelItem, Switch, SymbolLabel, Tag, Timeline, Title, Tooltip, TopZIndex, VTag, WeatherBox, alignTextInLine, angle, angleLabelOrientAttribute, angleTo, cartesianTicks, clampRadian, computeOffsetForlimit, continuousTicks, contrastAccessibilityChecker, convertDomainToTickData, createTextGraphicByType, deltaXYToAngle, fuzzyEqualNumber, getAxisBreakSymbolAttrs, getCircleLabelPosition, getCirclePoints, getCircleVerticalVector, getElMap, getHorizontalPath, getMarksByName, getNoneGroupMarksByName, getPolarAngleLabelPosition, getPolygonPath, getSizeHandlerPath, getTextAlignAttrOfVerticalDir, getTextType, getVerticalCoord, getVerticalPath, hasOverlap, htmlAttributeTransform, initTextMeasure, isInRange, isPostiveXAxis, isRichText, isVisible, labelSmartInvert, length, limitShapeInBounds, linearDiscreteTicks, loadPoptip, loadScrollbar, measureTextSize, normalize, polarAngleAxisDiscreteTicks, polarTicks, reactAttributeTransform, registerArcDataLabel, registerLineDataLabel, registerMarkArcAreaAnimate, registerMarkArcLineAnimate, registerMarkAreaAnimate, registerMarkLineAnimate, registerMarkPointAnimate, registerRectDataLabel, registerSymbolDataLabel, removeRepeatPoint, richTextAttributeTransform, scale, scrollbarModule, setPoptipTheme, smartInvertStrategy, tan2AngleToAngle, textIntersect, ticks, traverseGroup, version };
@@ -7,7 +7,7 @@ export declare class Brush extends AbstractComponent<Required<BrushAttributes>>
7
7
  static defaultAttributes: {
8
8
  trigger: string;
9
9
  updateTrigger: string;
10
- endTrigger: string;
10
+ endTrigger: string[];
11
11
  resetTrigger: string;
12
12
  hasMask: boolean;
13
13
  brushMode: string;
@@ -44,7 +44,6 @@ export declare class Brush extends AbstractComponent<Required<BrushAttributes>>
44
44
  private _brushMaskAABBBoundsDict;
45
45
  constructor(attributes: BrushAttributes, options?: ComponentOptions);
46
46
  private _bindBrushEvents;
47
- private _isPosInBrushMask;
48
47
  private _onBrushStart;
49
48
  private _onBrushing;
50
49
  private _onBrushingWithDelay;
@@ -54,13 +53,16 @@ export declare class Brush extends AbstractComponent<Required<BrushAttributes>>
54
53
  private _initMove;
55
54
  private _drawing;
56
55
  private _moving;
56
+ protected render(): void;
57
+ releaseBrushEvents(): void;
57
58
  private _computeMaskPoints;
58
59
  private _addBrushMask;
60
+ private _isPosInBrushMask;
59
61
  private _outOfInteractiveRange;
60
62
  protected eventPosToStagePos(e: FederatedPointerEvent): {
61
63
  x: number;
62
64
  y: number;
63
65
  };
64
- protected render(): void;
65
- releaseBrushEvents(): void;
66
+ private _dispatchBrushEvent;
67
+ private _clearMask;
66
68
  }
package/es/brush/brush.js CHANGED
@@ -1,6 +1,6 @@
1
- import { graphicCreator, vglobal } from "@visactor/vrender-core";
1
+ import { graphicCreator } from "@visactor/vrender-core";
2
2
 
3
- import { array, cloneDeep, debounce, merge, polygonContainPoint, throttle } from "@visactor/vutils";
3
+ import { array, cloneDeep, debounce, isEmpty, merge, polygonContainPoint, throttle } from "@visactor/vutils";
4
4
 
5
5
  import { AbstractComponent } from "../core/base";
6
6
 
@@ -27,7 +27,7 @@ export class Brush extends AbstractComponent {
27
27
  this._onBrushStart = e => {
28
28
  var _a;
29
29
  if (this._outOfInteractiveRange(e)) return void (this._isDownBeforeUpOutside = !0);
30
- e.stopPropagation();
30
+ this._isDownBeforeUpOutside = !1, e.stopPropagation();
31
31
  const brushMoved = null === (_a = this.attribute.brushMoved) || void 0 === _a || _a;
32
32
  this._activeMoveState = brushMoved && this._isPosInBrushMask(e), this._activeDrawState = !this._activeMoveState,
33
33
  this._activeDrawState && this._initDraw(e), this._activeMoveState && this._initMove(e);
@@ -37,63 +37,35 @@ export class Brush extends AbstractComponent {
37
37
  }, this._onBrushingWithDelay = 0 === this.attribute.delayTime ? this._onBrushing : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime),
38
38
  this._onBrushEnd = e => {
39
39
  var _a;
40
+ if (this._isDownBeforeUpOutside) return isEmpty(this._brushMaskAABBBoundsDict) || (this._clearMask(),
41
+ this._dispatchBrushEvent(IOperateType.brushClear, e)), void (this._isDownBeforeUpOutside = !1);
40
42
  if (!this._activeDrawState && !this._activeMoveState) return;
41
43
  e.preventDefault();
42
44
  const {removeOnClick: removeOnClick = !0} = this.attribute;
43
- this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick ? ((null === (_a = this._operatingMask) || void 0 === _a ? void 0 : _a._AABBBounds.empty()) && this._dispatchEvent(IOperateType.brushClear, {
44
- operateMask: this._operatingMask,
45
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
46
- event: e
47
- }), this._container.incrementalClearChild(), this._brushMaskAABBBoundsDict = {}) : (this._activeDrawState && this._dispatchEvent(IOperateType.drawEnd, {
48
- operateMask: this._operatingMask,
49
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
50
- event: e
51
- }), this._activeMoveState && this._dispatchEvent(IOperateType.moveEnd, {
52
- operateMask: this._operatingMask,
53
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
54
- event: e
55
- })), this._activeDrawState = !1, this._activeMoveState = !1, this._isDrawedBeforeEnd = !1,
56
- this._operatingMask && this._operatingMask.setAttribute("pickable", !1);
45
+ this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick ? (null === (_a = this._operatingMask) || void 0 === _a ? void 0 : _a._AABBBounds.empty()) ? isEmpty(this._brushMaskAABBBoundsDict) || (this._clearMask(),
46
+ this._dispatchBrushEvent(IOperateType.brushClear, e)) : (delete this._brushMaskAABBBoundsDict[this._operatingMask.name],
47
+ this._container.setAttributes({}), this._container.removeChild(this._operatingMask),
48
+ isEmpty(this._brushMaskAABBBoundsDict) ? this._dispatchBrushEvent(IOperateType.brushClear, e) : this._dispatchBrushEvent(IOperateType.drawEnd, e)) : (this._activeDrawState && this._dispatchBrushEvent(IOperateType.drawEnd, e),
49
+ this._activeMoveState && this._dispatchBrushEvent(IOperateType.moveEnd, e)), this._activeDrawState = !1,
50
+ this._activeMoveState = !1, this._isDrawedBeforeEnd = !1, this._operatingMask && this._operatingMask.setAttribute("pickable", !1);
57
51
  }, this._onBrushClear = e => {
58
- e.preventDefault();
59
- const {removeOnClick: removeOnClick = !0} = this.attribute;
60
- this._isDownBeforeUpOutside && removeOnClick && (this._dispatchEvent(IOperateType.brushClear, {
61
- operateMask: this._operatingMask,
62
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
63
- event: e
64
- }), this._container.incrementalClearChild(), this._brushMaskAABBBoundsDict = {}),
65
- this._activeDrawState = !1, this._activeMoveState = !1, this._isDrawedBeforeEnd = !1,
66
- this._isDownBeforeUpOutside = !1, this._operatingMask && this._operatingMask.setAttribute("pickable", !1);
52
+ e.preventDefault(), isEmpty(this._brushMaskAABBBoundsDict) || (this._clearMask(),
53
+ this._dispatchBrushEvent(IOperateType.brushClear, e)), this._activeDrawState = !1,
54
+ this._activeMoveState = !1, this._isDrawedBeforeEnd = !1, this._isDownBeforeUpOutside = !1;
67
55
  };
68
56
  }
69
57
  _bindBrushEvents() {
70
58
  if (this.attribute.disableTriggerEvent) return;
71
59
  const {trigger: trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger: updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger: resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger} = this.attribute;
72
- array(trigger).forEach((t => vglobal.addEventListener(t, this._onBrushStart))),
60
+ array(trigger).forEach((t => this.stage.addEventListener(t, this._onBrushStart))),
73
61
  array(updateTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushingWithDelay))),
74
62
  array(endTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushEnd))),
75
63
  array(resetTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushClear)));
76
64
  }
77
- _isPosInBrushMask(e) {
78
- const pos = this.eventPosToStagePos(e), brushMasks = this._container.getChildren();
79
- for (let i = 0; i < brushMasks.length; i++) {
80
- const {points: points = [], dx: dx = 0, dy: dy = 0} = brushMasks[i].attribute, pointsConsiderOffset = points.map((point => ({
81
- x: point.x + dx,
82
- y: point.y + dy
83
- })));
84
- if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) return this._operatingMask = brushMasks[i],
85
- !0;
86
- }
87
- return !1;
88
- }
89
65
  _initDraw(e) {
90
66
  const {brushMode: brushMode} = this.attribute, pos = this.eventPosToStagePos(e);
91
- this._cacheDrawPoints = [ pos ], this._isDrawedBeforeEnd = !1, "single" === brushMode && (this._brushMaskAABBBoundsDict = {},
92
- this._container.incrementalClearChild()), this._addBrushMask(), this._dispatchEvent(IOperateType.drawStart, {
93
- operateMask: this._operatingMask,
94
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
95
- event: e
96
- });
67
+ this._cacheDrawPoints = [ pos ], this._isDrawedBeforeEnd = !1, "single" === brushMode && this._clearMask(),
68
+ this._addBrushMask(), this._dispatchBrushEvent(IOperateType.drawStart, e);
97
69
  }
98
70
  _initMove(e) {
99
71
  var _a, _b;
@@ -101,11 +73,7 @@ export class Brush extends AbstractComponent {
101
73
  this._operatingMaskMoveDy = null !== (_b = this._operatingMask.attribute.dy) && void 0 !== _b ? _b : 0;
102
74
  const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, {x1: x1, x2: x2, y1: y1, y2: y2} = this._operatingMask.globalAABBBounds, minMoveStepX = minX - x1, maxMoveStepX = maxX - x2, minMoveStepY = minY - y1, maxMoveStepY = maxY - y2;
103
75
  this._operatingMaskMoveRangeX = [ minMoveStepX, maxMoveStepX ], this._operatingMaskMoveRangeY = [ minMoveStepY, maxMoveStepY ],
104
- this._operatingMask.setAttribute("pickable", !0), this._dispatchEvent(IOperateType.moveStart, {
105
- operateMask: this._operatingMask,
106
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
107
- event: e
108
- });
76
+ this._operatingMask.setAttribute("pickable", !0), this._dispatchBrushEvent(IOperateType.moveStart, e);
109
77
  }
110
78
  _drawing(e) {
111
79
  var _a, _b;
@@ -119,12 +87,8 @@ export class Brush extends AbstractComponent {
119
87
  this._operatingMask.setAttribute("points", maskPoints);
120
88
  const {x1: x1 = 0, x2: x2 = 0, y1: y1 = 0, y2: y2 = 0} = null === (_b = this._operatingMask) || void 0 === _b ? void 0 : _b._AABBBounds;
121
89
  this._isDrawedBeforeEnd = !this._operatingMask._AABBBounds.empty() && !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold),
122
- this._isDrawedBeforeEnd && (this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds,
123
- this._dispatchEvent(IOperateType.drawing, {
124
- operateMask: this._operatingMask,
125
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
126
- event: e
127
- }));
90
+ this._isDrawedBeforeEnd && (this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds),
91
+ this._dispatchBrushEvent(IOperateType.drawing, e);
128
92
  }
129
93
  _moving(e) {
130
94
  const startPos = this._cacheMovePoint, pos = this.eventPosToStagePos(e);
@@ -134,11 +98,19 @@ export class Brush extends AbstractComponent {
134
98
  dx: moveX,
135
99
  dy: moveY
136
100
  }), this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds,
137
- this._dispatchEvent(IOperateType.moving, {
138
- operateMask: this._operatingMask,
139
- operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
140
- event: e
141
- });
101
+ this._dispatchBrushEvent(IOperateType.moving, e);
102
+ }
103
+ render() {
104
+ this.releaseBrushEvents(), this._bindBrushEvents();
105
+ const group = this.createOrUpdateChild("brush-container", {}, "group");
106
+ this._container = group;
107
+ }
108
+ releaseBrushEvents() {
109
+ const {trigger: trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger: updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger: resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger} = this.attribute;
110
+ array(trigger).forEach((t => this.stage.removeEventListener(t, this._onBrushStart))),
111
+ array(updateTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushingWithDelay))),
112
+ array(endTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushEnd))),
113
+ array(resetTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushClear)));
142
114
  }
143
115
  _computeMaskPoints() {
144
116
  const {brushType: brushType, xRange: xRange = [ 0, 0 ], yRange: yRange = [ 0, 0 ]} = this.attribute;
@@ -188,6 +160,18 @@ export class Brush extends AbstractComponent {
188
160
  brushMask.name = `brush-${Date.now()}`, this._operatingMask = brushMask, this._container.add(brushMask),
189
161
  this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;
190
162
  }
163
+ _isPosInBrushMask(e) {
164
+ const pos = this.eventPosToStagePos(e), brushMasks = this._container.getChildren();
165
+ for (let i = 0; i < brushMasks.length; i++) {
166
+ const {points: points = [], dx: dx = 0, dy: dy = 0} = brushMasks[i].attribute, pointsConsiderOffset = points.map((point => ({
167
+ x: point.x + dx,
168
+ y: point.y + dy
169
+ })));
170
+ if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) return this._operatingMask = brushMasks[i],
171
+ !0;
172
+ }
173
+ return !1;
174
+ }
191
175
  _outOfInteractiveRange(e) {
192
176
  const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, pos = this.eventPosToStagePos(e);
193
177
  return pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY;
@@ -195,18 +179,17 @@ export class Brush extends AbstractComponent {
195
179
  eventPosToStagePos(e) {
196
180
  return this.stage.eventPointTransform(e);
197
181
  }
198
- render() {
199
- this._bindBrushEvents();
200
- const group = this.createOrUpdateChild("brush-container", {}, "group");
201
- this._container = group;
182
+ _dispatchBrushEvent(operateType, e) {
183
+ this._dispatchEvent(operateType, {
184
+ operateMask: this._operatingMask,
185
+ operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
186
+ event: e
187
+ });
202
188
  }
203
- releaseBrushEvents() {
204
- const {delayType: delayType = "throttle", delayTime: delayTime = 0, trigger: trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, updateTrigger: updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger, resetTrigger: resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger} = this.attribute;
205
- array(trigger).forEach((t => vglobal.removeEventListener(t, this._onBrushStart))),
206
- array(updateTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushingWithDelay))),
207
- array(endTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushEnd))),
208
- array(resetTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushClear)));
189
+ _clearMask() {
190
+ this._brushMaskAABBBoundsDict = {}, this._container.incrementalClearChild(), this._operatingMask = null;
209
191
  }
210
192
  }
211
193
 
212
- Brush.defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;
194
+ Brush.defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;
195
+ //# sourceMappingURL=brush.js.map