hack edit session

This commit is contained in:
nightwing 2013-08-26 22:52:40 +04:00
commit 1ac4ea51e2
2 changed files with 33 additions and 0 deletions

View file

@ -1037,8 +1037,20 @@ var EditSession = function(text, mode) {
**/ **/
this.getScreenWidth = function() { this.getScreenWidth = function() {
this.$computeWidth(); this.$computeWidth();
if (this.lineWidgets)
return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);
return this.screenWidth; return this.screenWidth;
}; };
this.getLineWidgetMaxWidth = function() {
if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth
var width = 0;
this.lineWidgets.forEach(function(w) {
if (w && w.screenWidth > width)
width = w.screenWidth;
});
return this.lineWidgetWidth = width;
}
this.$computeWidth = function(force) { this.$computeWidth = function(force) {
if (this.$modified || force) { if (this.$modified || force) {
@ -2043,6 +2055,7 @@ var EditSession = function(text, mode) {
return [screenColumn, column]; return [screenColumn, column];
}; };
this.lineWidgets = null;
/** /**
* Returns number of screenrows in a wrapped line. * Returns number of screenrows in a wrapped line.
* @param {Number} row The row number to check * @param {Number} row The row number to check
@ -2050,6 +2063,17 @@ var EditSession = function(text, mode) {
* @returns {Number} * @returns {Number}
**/ **/
this.getRowLength = function(row) { this.getRowLength = function(row) {
if (this.lineWidgets)
var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;
else
h = 0
if (!this.$useWrapMode || !this.$wrapData[row]) {
return 1 + h;
} else {
return this.$wrapData[row].length + 1 + h;
}
};
this.getRowLineCount = function(row) {
if (!this.$useWrapMode || !this.$wrapData[row]) { if (!this.$useWrapMode || !this.$wrapData[row]) {
return 1; return 1;
} else { } else {
@ -2372,6 +2396,10 @@ var EditSession = function(text, mode) {
} }
} }
// todo
if (this.lineWidgets)
screenRows += this.$getWidgetScreenLength();
return screenRows; return screenRows;
}; };

View file

@ -783,6 +783,11 @@ var Selection = function(session) {
} }
var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);
if (rows != 0 && chars == 0 && docPos.row == screenPos.row && docPos.column == screenPos.column) {
if (this.session.lineWidgets && this.session.lineWidgets[docPos.row])
docPos.row++;
}
// move the cursor and update the desired column // move the cursor and update the desired column
this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);