From 2ed9c5d599a4dea74e8ef60f599e27c3ece1dff6 Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 20 Jul 2011 12:08:45 +0200 Subject: [PATCH 1/3] Fixing bug in selection rendering which was misplaced since padding was not used. --- lib/ace/layer/marker.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js index d0f4fd3a..efaebc02 100644 --- a/lib/ace/layer/marker.js +++ b/lib/ace/layer/marker.js @@ -55,7 +55,6 @@ var Marker = function(parentEl) { this.setPadding = function(padding) { this.$padding = padding; }; - this.setSession = function(session) { this.session = session; }; @@ -131,7 +130,8 @@ var Marker = function(parentEl) { var height = layerConfig.lineHeight; var width = Math.round(layerConfig.width - (range.start.column * layerConfig.characterWidth)); var top = this.$getTop(range.start.row, layerConfig); - var left = Math.round(range.start.column * layerConfig.characterWidth); + var left = Math.round(this.$padding + + range.start.column * layerConfig.characterWidth); stringBuilder.push( "
" + "left:", left, "px;'>" ); // all the complete lines - var height = (range.end.row - range.start.row - 1) * layerConfig.lineHeight; + height = (range.end.row - range.start.row - 1) * layerConfig.lineHeight; if (height < 0) return; - var top = this.$getTop(range.start.row + 1, layerConfig); + top = this.$getTop(range.start.row + 1, layerConfig); + width = layerConfig.width; stringBuilder.push( "
" + "width:", width, "px;", + "top:", top, "px;", + "left:", left, "px;'>" ); }; From 8f0486415751041ea9016649dbfcb64b1f03fb6c Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 20 Jul 2011 17:58:57 +0200 Subject: [PATCH 2/3] Fixing issue with multiline selection where selection does not start from the begining of line. --- lib/ace/layer/marker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js index efaebc02..ab50b46c 100644 --- a/lib/ace/layer/marker.js +++ b/lib/ace/layer/marker.js @@ -150,7 +150,7 @@ var Marker = function(parentEl) { "height:", height, "px;", "width:", width, "px;", "top:", top, "px;", - "left:", left, "px;'>" + "left:", this.$padding, "px;'>" ); // all the complete lines @@ -165,7 +165,7 @@ var Marker = function(parentEl) { "height:", height, "px;", "width:", width, "px;", "top:", top, "px;", - "left:", left, "px;'>" + "left:", this.$padding, "px;'>" ); }; From b34d97f240fca5c7ef19e594b77670a6148a79da Mon Sep 17 00:00:00 2001 From: Irakli Gozalishvili Date: Wed, 20 Jul 2011 18:22:24 +0200 Subject: [PATCH 3/3] Adding marker type background that ignores padding. --- lib/ace/editor.js | 2 +- lib/ace/layer/marker.js | 39 +++++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 57c34dd9..abff9204 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -339,7 +339,7 @@ var Editor =function(renderer, session) { } else { range = new Range(cursor.row, 0, cursor.row+1, 0); } - session.$highlightLineMarker = session.addMarker(range, "ace_active_line", "line"); + session.$highlightLineMarker = session.addMarker(range, "ace_active_line", "background"); } }; diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js index ab50b46c..6466072d 100644 --- a/lib/ace/layer/marker.js +++ b/lib/ace/layer/marker.js @@ -70,6 +70,7 @@ var Marker = function(parentEl) { this.config = config; + var html = []; for ( var key in this.markers) { var marker = this.markers[key]; @@ -78,7 +79,6 @@ var Marker = function(parentEl) { if (range.isEmpty()) continue; range = range.toScreenRange(this.session); - if (marker.renderer) { var top = this.$getTop(range.start.row, config); var left = Math.round(this.$padding + @@ -90,11 +90,17 @@ var Marker = function(parentEl) { if (marker.type == "text") { this.drawTextMarker(html, range, marker.clazz, config); } else { - this.drawMultiLineMarker(html, range, marker.clazz, config); + this.drawMultiLineMarker( + html, range, marker.clazz, config, + marker.type === "background" + ); } } else { - this.drawSingleLineMarker(html, range, marker.clazz, config); + this.drawSingleLineMarker( + html, range, marker.clazz, config, + null, marker.type === "background" + ); } } this.element = dom.setInnerHtml(this.element, html.join("")); @@ -113,11 +119,11 @@ var Marker = function(parentEl) { this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1); // selection end - var row = range.end.row; - var lineRange = new Range(row, 0, row, range.end.column); + row = range.end.row; + lineRange = new Range(row, 0, row, range.end.column); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig); - for (var row = range.start.row + 1; row < range.end.row; row++) { + for (row = range.start.row + 1; row < range.end.row; row++) { lineRange.start.row = row; lineRange.end.row = row; lineRange.end.column = this.session.getScreenLastRowColumn(row); @@ -125,13 +131,16 @@ var Marker = function(parentEl) { } }; - this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig) { + this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, ignorePadding) { // from selection start to the end of the line + var padding = ignorePadding ? 0 : this.$padding; var height = layerConfig.lineHeight; var width = Math.round(layerConfig.width - (range.start.column * layerConfig.characterWidth)); var top = this.$getTop(range.start.row, layerConfig); - var left = Math.round(this.$padding + - range.start.column * layerConfig.characterWidth); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); + stringBuilder.push( "
" + "left:", padding, "px;'>" ); // all the complete lines @@ -165,16 +174,18 @@ var Marker = function(parentEl) { "height:", height, "px;", "width:", width, "px;", "top:", top, "px;", - "left:", this.$padding, "px;'>" + "left:", padding, "px;'>" ); }; - this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength) { + this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) { + var padding = ignorePadding ? 0 : this.$padding; var height = layerConfig.lineHeight; var width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth); var top = this.$getTop(range.start.row, layerConfig); - var left = Math.round(this.$padding + - range.start.column * layerConfig.characterWidth); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); stringBuilder.push( "