From da0866429a1bb273083f38cb81da49a4ea0112f7 Mon Sep 17 00:00:00 2001 From: Kienz Date: Sun, 12 Jan 2014 15:32:50 +0100 Subject: [PATCH] Initialize fabric.IText canvas handlers only once. Closes #1076 Qunit additions --- src/canvas.class.js | 8 ++++++++ src/mixins/itext_behavior.mixin.js | 21 +++++++-------------- src/shapes/itext.class.js | 6 ++++++ 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/canvas.class.js b/src/canvas.class.js index edc332f4..86a32eec 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -1106,6 +1106,14 @@ fabric.Canvas.prototype._setCursorFromEvent = function() { }; } + /** + * Indicates if canvas handlers are initialized for fabric.IText objects + * @static + * @memberof fabric.Canvas + * @type Boolean + */ + fabric.Canvas._hasITextHandlers = false; + /** * @class fabric.Element * @alias fabric.Canvas diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index 9b9fa98e..c9bfb305 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -25,9 +25,9 @@ _this.selected = true; }, 100); - if (!this._hasCanvasHandlers) { + if (this.canvas && !fabric.Canvas._hasITextHandlers) { this._initCanvasHandlers(); - this._hasCanvasHandlers = true; + fabric.Canvas._hasITextHandlers = true; } }); }, @@ -36,25 +36,18 @@ * @private */ _initCanvasHandlers: function() { - var _this = this; - - this.canvas.on('selection:cleared', function(options) { - - // do not exit editing if event fired - // when clicking on an object again (in editing mode) - if (options.e && _this.canvas.containsPoint(options.e, _this)) return; - - _this.exitEditing(); + this.canvas.on('selection:cleared', function() { + fabric.IText.prototype.exitEditingOnOthers.call(); }); this.canvas.on('mouse:up', function() { - this.getObjects('i-text').forEach(function(obj) { + fabric.IText.instances.forEach(function(obj) { obj.__isMousedown = false; }); }); - this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers.call(_this); + this.canvas.on('object:selected', function(options) { + fabric.IText.prototype.exitEditingOnOthers.call(options.target); }); }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index a624fc99..1c8542f8 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -1042,6 +1042,12 @@ return new fabric.IText(object.text, clone(object)); }; + /** + * Contains all fabric.IText objects that have been created + * @static + * @memberof fabric.IText + * @type Array + */ fabric.IText.instances = [ ]; })();