diff --git a/lib/ace/lib/event.js b/lib/ace/lib/event.js index e5888bc2..42ed97ff 100644 --- a/lib/ace/lib/event.js +++ b/lib/ace/lib/event.js @@ -87,22 +87,6 @@ exports.preventDefault = function(e) { e.returnValue = false; }; -exports.getDocumentX = function(e) { - if (e.clientX) { - return e.clientX + dom.getPageScrollLeft(); - } else { - return e.pageX; - } -}; - -exports.getDocumentY = function(e) { - if (e.clientY) { - return e.clientY + dom.getPageScrollTop(); - } else { - return e.pageY; - } -}; - /* * @return {Number} 0 for left button, 1 for middle button, 2 for right button */ diff --git a/lib/ace/mouse/mouse_event.js b/lib/ace/mouse/mouse_event.js index 35a67313..2c813cde 100644 --- a/lib/ace/mouse/mouse_event.js +++ b/lib/ace/mouse/mouse_event.js @@ -48,11 +48,8 @@ var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.domEvent = domEvent; this.editor = editor; - this.pageX = event.getDocumentX(domEvent); - this.pageY = event.getDocumentY(domEvent); - - this.clientX = domEvent.clientX; - this.clientY = domEvent.clientY; + this.x = this.clientX = domEvent.clientX; + this.y = this.clientY = domEvent.clientY; this.$pos = null; this.$inSelection = null; @@ -86,10 +83,8 @@ var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.getDocumentPosition = function() { if (this.$pos) return this.$pos; - - var pageX = event.getDocumentX(this.domEvent); - var pageY = event.getDocumentY(this.domEvent); - this.$pos = this.editor.renderer.screenToTextCoordinates(pageX, pageY); + + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); return this.$pos; }; diff --git a/lib/ace/mouse/multi_select_handler.js b/lib/ace/mouse/multi_select_handler.js index 3019e397..880bc13c 100644 --- a/lib/ace/mouse/multi_select_handler.js +++ b/lib/ace/mouse/multi_select_handler.js @@ -76,10 +76,10 @@ function onMouseDown(e) { var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); - var mouseX = e.pageX, mouseY = e.pageY; + var mouseX = e.x, mouseY = e.y; var onMouseSelection = function(e) { - mouseX = event.getDocumentX(e); - mouseY = event.getDocumentY(e); + mouseX = e.clientX; + mouseY = e.clientY; }; var blockSelect = function() { diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 69909c6a..8c1ebaaa 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -1103,14 +1103,24 @@ var VirtualRenderer = function(container, theme) { // todo: handle horizontal scrolling }; - this.screenToTextCoordinates = function(pageX, pageY) { + this.pixelToScreenCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = Math.round(offset); + + return {row: row, column: col, side: offset - col}; + }; + + this.screenToTextCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.round( - (pageX + this.scrollLeft - canvasPos.left - this.$padding - dom.getPageScrollLeft()) / this.characterWidth + (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = Math.floor( - (pageY + this.scrollTop - canvasPos.top - dom.getPageScrollTop()) / this.lineHeight + (y + this.scrollTop - canvasPos.top) / this.lineHeight ); return this.session.screenToDocumentPosition(row, Math.max(col, 0));