Adding marker type background that ignores padding.

This commit is contained in:
Irakli Gozalishvili 2011-07-20 18:22:24 +02:00
commit b34d97f240
2 changed files with 26 additions and 15 deletions

View file

@ -339,7 +339,7 @@ var Editor =function(renderer, session) {
} else { } else {
range = new Range(cursor.row, 0, cursor.row+1, 0); 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");
} }
}; };

View file

@ -70,6 +70,7 @@ var Marker = function(parentEl) {
this.config = config; this.config = config;
var html = []; var html = [];
for ( var key in this.markers) { for ( var key in this.markers) {
var marker = this.markers[key]; var marker = this.markers[key];
@ -78,7 +79,6 @@ var Marker = function(parentEl) {
if (range.isEmpty()) continue; if (range.isEmpty()) continue;
range = range.toScreenRange(this.session); range = range.toScreenRange(this.session);
if (marker.renderer) { if (marker.renderer) {
var top = this.$getTop(range.start.row, config); var top = this.$getTop(range.start.row, config);
var left = Math.round(this.$padding + var left = Math.round(this.$padding +
@ -90,11 +90,17 @@ var Marker = function(parentEl) {
if (marker.type == "text") { if (marker.type == "text") {
this.drawTextMarker(html, range, marker.clazz, config); this.drawTextMarker(html, range, marker.clazz, config);
} else { } else {
this.drawMultiLineMarker(html, range, marker.clazz, config); this.drawMultiLineMarker(
html, range, marker.clazz, config,
marker.type === "background"
);
} }
} }
else { 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("")); this.element = dom.setInnerHtml(this.element, html.join(""));
@ -113,11 +119,11 @@ var Marker = function(parentEl) {
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1); this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1);
// selection end // selection end
var row = range.end.row; row = range.end.row;
var lineRange = new Range(row, 0, row, range.end.column); lineRange = new Range(row, 0, row, range.end.column);
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig); 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.start.row = row;
lineRange.end.row = row; lineRange.end.row = row;
lineRange.end.column = this.session.getScreenLastRowColumn(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 // from selection start to the end of the line
var padding = ignorePadding ? 0 : this.$padding;
var height = layerConfig.lineHeight; var height = layerConfig.lineHeight;
var width = Math.round(layerConfig.width - (range.start.column * layerConfig.characterWidth)); var width = Math.round(layerConfig.width - (range.start.column * layerConfig.characterWidth));
var top = this.$getTop(range.start.row, layerConfig); var top = this.$getTop(range.start.row, layerConfig);
var left = Math.round(this.$padding + var left = Math.round(
range.start.column * layerConfig.characterWidth); padding + range.start.column * layerConfig.characterWidth
);
stringBuilder.push( stringBuilder.push(
"<div class='", clazz, "' style='", "<div class='", clazz, "' style='",
@ -150,7 +159,7 @@ var Marker = function(parentEl) {
"height:", height, "px;", "height:", height, "px;",
"width:", width, "px;", "width:", width, "px;",
"top:", top, "px;", "top:", top, "px;",
"left:", this.$padding, "px;'></div>" "left:", padding, "px;'></div>"
); );
// all the complete lines // all the complete lines
@ -165,16 +174,18 @@ var Marker = function(parentEl) {
"height:", height, "px;", "height:", height, "px;",
"width:", width, "px;", "width:", width, "px;",
"top:", top, "px;", "top:", top, "px;",
"left:", this.$padding, "px;'></div>" "left:", padding, "px;'></div>"
); );
}; };
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 height = layerConfig.lineHeight;
var width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth); var width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth);
var top = this.$getTop(range.start.row, layerConfig); var top = this.$getTop(range.start.row, layerConfig);
var left = Math.round(this.$padding + var left = Math.round(
range.start.column * layerConfig.characterWidth); padding + range.start.column * layerConfig.characterWidth
);
stringBuilder.push( stringBuilder.push(
"<div class='", clazz, "' style='", "<div class='", clazz, "' style='",