This commit is contained in:
Fabian Jakobs 2011-07-21 14:29:22 +02:00
commit 5a6eeab67d
5 changed files with 59 additions and 13 deletions

View file

@ -1370,7 +1370,8 @@ var EditSession = function(text, mode) {
} }
this.getScreenLastRowColumn = function(screenRow) { this.getScreenLastRowColumn = function(screenRow) {
return this.screenToDocumentColumn(screenRow, Number.MAX_VALUE / 10) //return this.screenToDocumentColumn(screenRow, Number.MAX_VALUE / 10)
return this.documentToScreenColumn(screenRow, this.doc.getLine(screenRow).length);
}; };
this.getDocumentLastRowColumn = function(docRow, docColumn) { this.getDocumentLastRowColumn = function(docRow, docColumn) {

View file

@ -155,6 +155,18 @@ module.exports = {
assert.equal(session.getValue(), ["1", "1", "2", "3"].join("\n")); assert.equal(session.getValue(), ["1", "1", "2", "3"].join("\n"));
}, },
"test: getScreenLastRowColumn": function() {
var session = new EditSession([
"juhu",
"12\t\t34",
"ぁぁa"
]);
assert.equal(session.getScreenLastRowColumn(0), 4);
assert.equal(session.getScreenLastRowColumn(1), 10);
assert.equal(session.getScreenLastRowColumn(2), 5);
},
"test: convert document to screen coordinates" : function() { "test: convert document to screen coordinates" : function() {
var session = new EditSession("01234\t567890\t1234"); var session = new EditSession("01234\t567890\t1234");
session.setTabSize(4); session.setTabSize(4);
@ -187,9 +199,20 @@ module.exports = {
assert.equal(session.documentToScreenColumn(0, 3), 9); assert.equal(session.documentToScreenColumn(0, 3), 9);
}, },
"test: documentToScreen with soft wrap and multibyte characters": function() { "test: documentToScreen without soft wrap": function() {
var tabSize = 4; var session = new EditSession([
var wrapLimit = 12; "juhu",
"12\t\t34",
"ぁぁa"
]);
assert.position(session.documentToScreenPosition(0, 3), 0, 3);
assert.position(session.documentToScreenPosition(1, 3), 1, 4);
assert.position(session.documentToScreenPosition(1, 4), 1, 8);
assert.position(session.documentToScreenPosition(2, 2), 2, 4);
},
"test: documentToScreen with soft wrap": function() {
var session = new EditSession(["foo bar foo bar"]); var session = new EditSession(["foo bar foo bar"]);
session.setUseWrapMode(true); session.setUseWrapMode(true);
session.setWrapLimitRange(12, 12); session.setWrapLimitRange(12, 12);
@ -197,6 +220,9 @@ module.exports = {
assert.position(session.documentToScreenPosition(0, 11), 0, 11); assert.position(session.documentToScreenPosition(0, 11), 0, 11);
assert.position(session.documentToScreenPosition(0, 12), 1, 0); assert.position(session.documentToScreenPosition(0, 12), 1, 0);
},
"test: documentToScreen with soft wrap and multibyte characters": function() {
session = new EditSession(["ぁぁa"]); session = new EditSession(["ぁぁa"]);
session.setUseWrapMode(true); session.setUseWrapMode(true);

View file

@ -81,9 +81,9 @@ var Marker = function(parentEl) {
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(
range.start.column * this.$padding + range.start.column * config.characterWidth
config.characterWidth); );
marker.renderer(html, range, left, top, config); marker.renderer(html, range, left, top, config);
} }
else if (range.isMultiLine()) { else if (range.isMultiLine()) {
@ -185,15 +185,11 @@ var Marker = function(parentEl) {
); );
}; };
<<<<<<< HEAD
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) {
var padding = ignorePadding ? 0 : this.$padding;
=======
/** /**
* Draws a marker which covers one single full line * Draws a marker which covers one single full line
*/ */
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength) { this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) {
>>>>>>> Update desired column on insert text 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);

View file

@ -290,6 +290,7 @@ var Range = function(startRow, startColumn, endRow, endColumn) {
session.documentToScreenPosition(this.start); session.documentToScreenPosition(this.start);
var screenPosEnd = var screenPosEnd =
session.documentToScreenPosition(this.end); session.documentToScreenPosition(this.end);
return new Range( return new Range(
screenPosStart.row, screenPosStart.column, screenPosStart.row, screenPosStart.column,
screenPosEnd.row, screenPosEnd.column screenPosEnd.row, screenPosEnd.column

View file

@ -42,6 +42,7 @@ if (typeof process !== "undefined") {
define(function(require, exports, module) { define(function(require, exports, module) {
var Range = require("ace/range").Range; var Range = require("ace/range").Range;
var EditSession = require("ace/edit_session").EditSession;
var assert = require("ace/test/assertions"); var assert = require("ace/test/assertions");
module.exports = { module.exports = {
@ -165,6 +166,27 @@ module.exports = {
var range = new Range(2, 0, 2, 0); var range = new Range(2, 0, 2, 0);
assert.range(range.collapseRows(), 2, 0, 2, 0); assert.range(range.collapseRows(), 2, 0, 2, 0);
},
"test: to screen range" : function() {
var session = new EditSession([
"juhu",
"12\t\t34",
"ぁぁa",
"\t\t34",
]);
var range = new Range(0, 0, 0, 3);
assert.range(range.toScreenRange(session), 0, 0, 0, 3);
var range = new Range(1, 1, 1, 3);
assert.range(range.toScreenRange(session), 1, 1, 1, 4);
var range = new Range(2, 1, 2, 2);
assert.range(range.toScreenRange(session), 2, 2, 2, 4);
var range = new Range(3, 0, 3, 4);
assert.range(range.toScreenRange(session), 3, 0, 3, 10);
} }
}; };