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( "