diff --git a/lib/ace/mouse/default_handlers.js b/lib/ace/mouse/default_handlers.js index b065f20a..2b0d4d4e 100644 --- a/lib/ace/mouse/default_handlers.js +++ b/lib/ace/mouse/default_handlers.js @@ -54,14 +54,25 @@ function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } -var handlers = exports.DefaultHandlers = { - onMouseDown: function(ev) { +function DefaultHandlers(editor) { + this.editor = editor; + + editor.setDefaultHandler("mousedown", this.onMouseDown.bind(this)); + editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(this)); + editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(this)); + editor.setDefaultHandler("quadclick", this.onQuadClick.bind(this)); + editor.setDefaultHandler("scroll", this.onScroll.bind(this)); +} + +(function() { + + this.onMouseDown = function(ev) { var e = ev.DOMEvent; - var editor = ev.editor; var inSelection = ev.inSelection; var pageX = ev.pageX; var pageY = ev.pageY var pos = ev.pos; + var editor = this.editor; var selectionRange = editor.getSelectionRange(); var selectionEmpty = selectionRange.isEmpty(); @@ -238,12 +249,12 @@ var handlers = exports.DefaultHandlers = { var timerId = setInterval(onSelectionInterval, 20); return event.preventDefault(e); - }, + }; - onDoubleClick: function(ev) { + this.onDoubleClick = function(ev) { var e = ev.DOMEvent; - var editor = ev.editor; var pos = ev.pos; + var editor = this.editor; // If the user dclicked on a fold, then expand it. var fold = editor.session.getFoldAt(pos.row, pos.column, 1); @@ -255,41 +266,38 @@ var handlers = exports.DefaultHandlers = { editor.selection.selectWord(); editor.$mouseHandler.$clickSelection = editor.getSelectionRange(); } - }, + }; - onTripleClick: function(ev) { + this.onTripleClick = function(ev) { var e = ev.DOMEvent; - var editor = ev.editor; var pos = ev.pos; + var editor = this.editor; editor.moveCursorToPosition(pos); editor.selection.selectLine(); editor.$mouseHandler.$clickSelection = editor.getSelectionRange(); - }, + }; - onQuadClick: function(ev) { + this.onQuadClick = function(ev) { var e = ev.DOMEvent; - var editor = ev.editor; + var editor = this.editor; editor.selectAll(); editor.$mouseHandler.$clickSelection = editor.getSelectionRange(); - }, + }; - onScroll: function(ev) { + this.onScroll = function(ev) { var e = ev.DOMEvent; - var editor = ev.editor; var speed = ev.speed; + var editor = this.editor; editor.renderer.scrollBy(e.wheelX * speed, e.wheelY * speed); if (editor.renderer.isScrollableBy(e.wheelX, e.wheelY)) return event.preventDefault(e); - } -}; + }; + +}).call(DefaultHandlers.prototype); -EventEmitter.setDefaultHandler("mousedown", handlers.onMouseDown); -EventEmitter.setDefaultHandler("dblclick", handlers.onDoubleClick); -EventEmitter.setDefaultHandler("tripleclick", handlers.onTripleClick); -EventEmitter.setDefaultHandler("quadclick", handlers.onQuadClick); -EventEmitter.setDefaultHandler("scroll", handlers.onScroll); +exports.DefaultHandlers = DefaultHandlers; }); diff --git a/lib/ace/mouse/mouse_handler.js b/lib/ace/mouse/mouse_handler.js index b56d30ec..63760028 100644 --- a/lib/ace/mouse/mouse_handler.js +++ b/lib/ace/mouse/mouse_handler.js @@ -47,6 +47,7 @@ var MouseHandler = function(editor) { this.editor = editor; this.browserFocus = new BrowserFocus(); + this.defaultHandlers = new DefaultHandlers(editor); event.addListener(editor.container, "mousedown", function(e) { editor.focus(); return event.preventDefault(e); @@ -57,6 +58,7 @@ var MouseHandler = function(editor) { var mouseTarget = editor.renderer.getMouseEventTarget(); event.addListener(mouseTarget, "mousedown", this.onMouseDown.bind(this)); + event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this)); event.addMultiMouseDownListener(mouseTarget, 0, 2, 500, this.onMouseDoubleClick.bind(this)); event.addMultiMouseDownListener(mouseTarget, 0, 3, 600, this.onMouseTripleClick.bind(this)); event.addMultiMouseDownListener(mouseTarget, 0, 4, 600, this.onMouseQuadClick.bind(this)); @@ -98,18 +100,28 @@ var MouseHandler = function(editor) { this.editor._dispatchEvent("mousedown", { DOMEvent: e, - editor: editor, pageX: pageX, pageY: pageY, pos: pos, inSelection: inSelection }); }; + + this.onMouseMove = function(e) { + // optimization, because mousemove doesn't have a default handler. + var listeners = this.editor._eventRegistry["mousemove"]; + if (!listeners || !listeners.length) + return; + + this.editor._dispatchEvent("mousemove", { + DOMEvent: e, + pos: this.$getEventPosition(e) + }); + }; this.onMouseDoubleClick = function(e) { this.editor._dispatchEvent("dblclick", { DOMEvent: e, - editor: this.editor, pos: this.$getEventPosition(e) }); }; @@ -117,7 +129,6 @@ var MouseHandler = function(editor) { this.onMouseTripleClick = function(e) { this.editor._dispatchEvent("tripleclick", { DOMEvent: e, - editor: this.editor, pos: this.$getEventPosition(e) }); }; @@ -125,7 +136,6 @@ var MouseHandler = function(editor) { this.onMouseQuadClick = function(e) { this.editor._dispatchEvent("quadclick", { DOMEvent: e, - editor: this.editor, pos: this.$getEventPosition(e) }); }; @@ -135,7 +145,6 @@ var MouseHandler = function(editor) { this.editor._dispatchEvent("scroll", { DOMEvent: e, - editor: this.editor, speed: speed }); };