fabric 4.6.0 → 5.0.0-browser

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.
@@ -106,7 +106,7 @@
106
106
  this._onDragOver = this._onDragOver.bind(this);
107
107
  this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');
108
108
  this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');
109
- this._onDrop = this._simpleEventHandler.bind(this, 'drop');
109
+ this._onDrop = this._onDrop.bind(this);
110
110
  this.eventsBound = true;
111
111
  },
112
112
 
@@ -218,6 +218,18 @@
218
218
  this._fireEnterLeaveEvents(target, e);
219
219
  },
220
220
 
221
+ /**
222
+ * `drop:before` is a an event that allow you to schedule logic
223
+ * before the `drop` event. Prefer `drop` event always, but if you need
224
+ * to run some drop-disabling logic on an event, since there is no way
225
+ * to handle event handlers ordering, use `drop:before`
226
+ * @param {Event} e
227
+ */
228
+ _onDrop: function (e) {
229
+ this._simpleEventHandler('drop:before', e);
230
+ return this._simpleEventHandler('drop', e);
231
+ },
232
+
221
233
  /**
222
234
  * @private
223
235
  * @param {Event} e Event object fired on mousedown
@@ -450,25 +462,34 @@
450
462
  );
451
463
  }
452
464
  }
465
+ var corner, pointer;
453
466
  if (target) {
467
+ corner = target._findTargetCorner(
468
+ this.getPointer(e, true),
469
+ fabric.util.isTouchEvent(e)
470
+ );
454
471
  if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {
455
472
  this.setActiveObject(target, e);
456
473
  shouldRender = true;
457
474
  }
458
475
  else {
459
- var corner = target._findTargetCorner(
460
- this.getPointer(e, true),
461
- fabric.util.isTouchEvent(e)
462
- );
463
476
  var control = target.controls[corner],
464
477
  mouseUpHandler = control && control.getMouseUpHandler(e, target, control);
465
478
  if (mouseUpHandler) {
466
- var pointer = this.getPointer(e);
479
+ pointer = this.getPointer(e);
467
480
  mouseUpHandler(e, transform, pointer.x, pointer.y);
468
481
  }
469
482
  }
470
483
  target.isMoving = false;
471
484
  }
485
+ // if we are ending up a transform on a different control or a new object
486
+ // fire the original mouse up from the corner that started the transform
487
+ if (transform && (transform.target !== target || transform.corner !== corner)) {
488
+ var originalControl = transform.target && transform.target.controls[transform.corner],
489
+ originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);
490
+ pointer = pointer || this.getPointer(e);
491
+ originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);
492
+ }
472
493
  this._setCursorFromEvent(e, target);
473
494
  this._handleEvent(e, 'up', LEFT_CLICK, isClick);
474
495
  this._groupSelector = null;
@@ -550,7 +571,6 @@
550
571
 
551
572
  var transform = this._currentTransform,
552
573
  target = transform.target,
553
- eventName,
554
574
  options = {
555
575
  e: e,
556
576
  target: target,
@@ -565,59 +585,10 @@
565
585
  target.setCoords();
566
586
 
567
587
  if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {
568
- if (transform.actionPerformed) {
569
- // this is not friendly to the new control api.
570
- // is deprecated.
571
- eventName = this._addEventOptions(options, transform);
572
- this._fire(eventName, options);
573
- }
574
588
  this._fire('modified', options);
575
589
  }
576
590
  },
577
591
 
578
- /**
579
- * Mutate option object in order to add by property and give back the event name.
580
- * @private
581
- * @deprecated since 4.2.0
582
- * @param {Object} options to mutate
583
- * @param {Object} transform to inspect action from
584
- */
585
- _addEventOptions: function(options, transform) {
586
- // we can probably add more details at low cost
587
- // scale change, rotation changes, translation changes
588
- var eventName, by;
589
- switch (transform.action) {
590
- case 'scaleX':
591
- eventName = 'scaled';
592
- by = 'x';
593
- break;
594
- case 'scaleY':
595
- eventName = 'scaled';
596
- by = 'y';
597
- break;
598
- case 'skewX':
599
- eventName = 'skewed';
600
- by = 'x';
601
- break;
602
- case 'skewY':
603
- eventName = 'skewed';
604
- by = 'y';
605
- break;
606
- case 'scale':
607
- eventName = 'scaled';
608
- by = 'equally';
609
- break;
610
- case 'rotate':
611
- eventName = 'rotated';
612
- break;
613
- case 'drag':
614
- eventName = 'moved';
615
- break;
616
- }
617
- options.by = by;
618
- return eventName;
619
- },
620
-
621
592
  /**
622
593
  * @private
623
594
  * @param {Event} e Event object fired on mousedown