Fix calculation of EditSession.getScreenLength.

This commit is contained in:
Julian Viereck 2011-05-17 16:16:28 +02:00
commit 55e0f8ceff
2 changed files with 24 additions and 14 deletions

View file

@ -155,6 +155,8 @@ exports.launch = function(env) {
var container = document.getElementById("editor"); var container = document.getElementById("editor");
var cockpitInput = document.getElementById("cockpitInput"); var cockpitInput = document.getElementById("cockpitInput");
env.editor = new Editor(new Renderer(container, theme)); env.editor = new Editor(new Renderer(container, theme));
window.env = env;
window.ace = env.editor;
var modes = { var modes = {
text: new TextMode(), text: new TextMode(),

View file

@ -1596,21 +1596,29 @@ var EditSession = function(text, mode) {
}; };
this.getScreenLength = function() { this.getScreenLength = function() {
var length = this.getLength();
var screenRows = 0; var screenRows = 0;
var lastFoldLine = null;
var foldLine = null;
if (!this.$useWrapMode) { if (!this.$useWrapMode) {
screenRows = length; screenRows = this.getLength();
// Remove the folded lines again.
var foldData = this.$foldData;
for (var i = 0; i < foldData.length; i++) {
foldLine = foldData[i];
screenRows -= foldLine.end.row - foldLine.start.row;
}
} else { } else {
for (var row = 0; row < this.$wrapData.length; row++) { for (var row = 0; row < this.$wrapData.length; row++) {
screenRows += this.$wrapData[row].length + 1; if (foldLine = this.getFoldLine(row, lastFoldLine)) {
row = foldLine.end.row;
screenRows += 1;
} else {
screenRows += this.$wrapData[row].length + 1;
}
} }
} }
var foldData = this.$foldData;
for (var i = 0; i < foldData.length; i++) {
var foldLine = foldData[i];
screenRows -= foldLine.end.row - foldLine.start.row;
}
return screenRows; return screenRows;
} }