From 36a7b987662f871afc14dc8611355b1528d2d29d Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Mon, 17 May 2010 12:44:00 +0200 Subject: [PATCH] The column should be rounded to the next character edge if clicked in the editor --- src/ace/VirtualRenderer.js | 2 +- src/test/ace/VirtualRendererTest.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/ace/VirtualRenderer.js b/src/ace/VirtualRenderer.js index 7996ae37..81c08548 100644 --- a/src/ace/VirtualRenderer.js +++ b/src/ace/VirtualRenderer.js @@ -362,7 +362,7 @@ ace.VirtualRenderer = function(container) { this.screenToTextCoordinates = function(pageX, pageY) { var canvasPos = this.scroller.getBoundingClientRect(); - var col = Math.floor((pageX + this.scroller.scrollLeft - canvasPos.left) + var col = Math.round((pageX + this.scroller.scrollLeft - canvasPos.left) / this.characterWidth); var row = Math.floor((pageY + this.scrollTop - canvasPos.top) / this.lineHeight); diff --git a/src/test/ace/VirtualRendererTest.js b/src/test/ace/VirtualRendererTest.js index f77ed742..506fdabc 100644 --- a/src/test/ace/VirtualRendererTest.js +++ b/src/test/ace/VirtualRendererTest.js @@ -55,6 +55,34 @@ var VirtualRendererTest = new TestCase("VirtualRendererTest", { assertEquals(6, renderer.$screenToDocumentColumn(0, 9)); assertEquals(12, renderer.$screenToDocumentColumn(0, 15)); assertEquals(13, renderer.$screenToDocumentColumn(0, 19)); + }, + + "test: screen2text the column should be rounded to the next character edge" : function() { + var el = document.createElement("div"); + el.style.left = "0px"; + el.style.top = "0px"; + el.style.width = "100px"; + el.style.height = "100px"; + document.body.style.margin = "0px"; + document.body.style.padding = "0px"; + document.body.appendChild(el); + + var renderer = new ace.VirtualRenderer(el); + renderer.setDocument(new ace.Document("1234")); + + renderer.characterWidth = 10; + renderer.lineHeight = 15; + + assertPosition(0, 0, renderer.screenToTextCoordinates(0, 0)); + assertPosition(0, 0, renderer.screenToTextCoordinates(4, 0)); + assertPosition(0, 1, renderer.screenToTextCoordinates(5, 0)); + assertPosition(0, 1, renderer.screenToTextCoordinates(9, 0)); + assertPosition(0, 1, renderer.screenToTextCoordinates(10, 0)); + assertPosition(0, 1, renderer.screenToTextCoordinates(14, 0)); + assertPosition(0, 2, renderer.screenToTextCoordinates(15, 0)); + document.body.removeChild(el); } + + // change tab size after setDocument (for text layer) }); \ No newline at end of file