diff --git a/lib/ace/editor.js b/lib/ace/editor.js index e293eadd..b4681bcc 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -79,7 +79,7 @@ var Editor = function(renderer, session) { this.$search = new Search().set({ wrap: true }); - + this.setSession(session || new EditSession("")); }; @@ -351,13 +351,13 @@ var Editor = function(renderer, session) { } } }; - + this.$updateHighlightGutterLine = function(){ if (typeof this.$lastrow == "number") this.renderer.removeGutterDecoration(this.$lastrow, "ace_gutter_active_line"); - + this.$lastrow = null; - + if (this.$highlightGutterLine) this.renderer.addGutterDecoration( this.$lastrow = this.getCursorPosition().row, "ace_gutter_active_line"); @@ -437,7 +437,7 @@ var Editor = function(renderer, session) { this.onCut = function() { this.commands.exec("cut", this); }; - + this.onPaste = function(text) { this._emit("paste", text); this.insert(text); @@ -586,7 +586,7 @@ var Editor = function(renderer, session) { this.$highlightActiveLine = true; this.setHighlightActiveLine = function(shouldHighlight) { - if (this.$highlightActiveLine == shouldHighlight) + if (this.$highlightActiveLine == shouldHighlight) return; this.$highlightActiveLine = shouldHighlight; @@ -596,16 +596,16 @@ var Editor = function(renderer, session) { this.getHighlightActiveLine = function() { return this.$highlightActiveLine; }; - + this.$highlightGutterLine = true; this.setHighlightGutterLine = function(shouldHighlightGutterLine) { - if (this.$highlightGutterLine == shouldHighlightGutterLine) + if (this.$highlightGutterLine == shouldHighlightGutterLine) return; this.$highlightGutterLine = shouldHighlightGutterLine; this.$updateHighlightGutterLine(); }; - + this.getHighlightGutterLine = function() { return this.$highlightGutterLine; }; @@ -979,11 +979,13 @@ var Editor = function(renderer, session) { } this.$blockScrolling--; - this.renderer.animateScrolling(function() { - renderer.scrollBy(0, rows * config.lineHeight); - if (select != null) - renderer.scrollCursorIntoView(null, 0.5); - }, this); + var scrollTop = renderer.scrollTop; + + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + + renderer.animateScrolling(scrollTop); }; this.selectPageDown = function() { @@ -1076,15 +1078,15 @@ var Editor = function(renderer, session) { this.gotoLine = function(lineNumber, column, animate) { this.selection.clearSelection(); this.session.unfold({row: lineNumber - 1, column: column || 0}); - + this.$blockScrolling += 1; this.moveCursorTo(lineNumber - 1, column || 0); this.$blockScrolling -= 1; - if (!this.isRowFullyVisible(lineNumber - 1)) + if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate); }; - + this.navigateTo = function(row, column) { this.clearSelection(); this.moveCursorTo(row, column); @@ -1141,17 +1143,17 @@ var Editor = function(renderer, session) { }; this.navigateFileEnd = function() { - this.renderer.animateScrolling(function() { - this.selection.moveCursorFileEnd(); - this.clearSelection(); - }, this); + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileEnd(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); }; this.navigateFileStart = function() { - this.renderer.animateScrolling(function() { - this.selection.moveCursorFileStart(); - this.clearSelection(); - }, this); + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileStart(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); }; this.navigateWordRight = function() { @@ -1261,9 +1263,9 @@ var Editor = function(renderer, session) { this.selection.setSelectionRange(range); this.$blockScrolling -= 1; - this.renderer.animateScrolling(function() { - this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); - }, this); + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + this.renderer.animateScrolling(scrollTop); } }; diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 15dc8ff2..3b989aa8 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -757,18 +757,13 @@ var VirtualRenderer = function(container, theme) { if (center) offset -= this.$size.scrollerHeight / 2; - if (animate !== false) { - this.animateScrolling(function() { - this.session.setScrollTop(offset); - }, this, callback); - } else { - this.session.setScrollTop(offset); - } + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); }; - this.animateScrolling = function(scrollFunc, self, callback) { - var fromValue = this.scrollTop; - scrollFunc.call(self); + this.animateScrolling = function(fromValue, callback) { var toValue = this.scrollTop; if (this.$animatedScroll && Math.abs(fromValue - toValue) < 100000) { var _self = this;