diff --git a/src/ace/Document.js b/src/ace/Document.js index 67b61967..522f5e48 100644 --- a/src/ace/Document.js +++ b/src/ace/Document.js @@ -11,7 +11,7 @@ var Document = function(text, mode) { this.modified = true; this.lines = []; this.selection = new Selection(this); - this.$breakpoints = []; + this.$breakpoints = []; this.listeners = []; if (mode) { diff --git a/src/ace/Editor.js b/src/ace/Editor.js index a144fe24..681d70a6 100644 --- a/src/ace/Editor.js +++ b/src/ace/Editor.js @@ -115,11 +115,13 @@ var Editor = function(renderer, doc) { this.bgTokenizer.setLines(this.doc.lines); this.bgTokenizer.start(0); - this.renderer.draw(); - this.onCursorChange(); - this.onSelectionChange(); - this.onDocumentChangeBreakpoint(); - this.renderer.scrollToRow(doc.getScrollTopRow()); + var _self = this; + this.renderer.draw(false, function() { + _self.onCursorChange(); + _self.onSelectionChange(); + _self.onDocumentChangeBreakpoint(); + _self.renderer.scrollToRow(doc.getScrollTopRow()); + }); }; this.getDocument = function() { diff --git a/src/ace/VirtualRenderer.js b/src/ace/VirtualRenderer.js index 60cfe9cc..07388b1a 100644 --- a/src/ace/VirtualRenderer.js +++ b/src/ace/VirtualRenderer.js @@ -48,6 +48,8 @@ var VirtualRenderer = function(container) { column : 0 }; + this.$drawCallbacks = []; + this.$updatePrintMargin(); this.onResize(); @@ -194,7 +196,31 @@ var VirtualRenderer = function(container) { this.$textLayer.updateLines(layerConfig, firstRow, lastRow); }; - this.draw = function(scrollOnly) { + this.draw = function(scrollOnly, callback) { + if (this.$drawTimer) { + clearInterval(this.$drawTimer); + this.scrollOnly = this.scrollOnly && scrollOnly; + } else { + this.scollOnly = scrollOnly; + } + + if (callback) + this.$drawCallbacks.push(callback); + + var _self = this; + this.$drawTimer = setTimeout(function() { + _self.$draw(_self.scrollOnly); + for (var i=0; i<_self.$drawCallbacks.length; i++) + _self.$drawCallbacks[i](); + + _self.$drawCallbacks = []; + delete _self.$drawTimer; + }, 0); + }; + + this.$draw = function(scrollOnly) { + //var start = new Date(); + var lines = this.lines; var offset = this.scrollTop % this.lineHeight; @@ -235,7 +261,9 @@ var VirtualRenderer = function(container) { this.$gutterLayer.element.style.marginTop = (-offset) + "px"; this.$gutterLayer.update(layerConfig); + //console.log("compute", new Date() - start, "ms") this.$updateScrollBar(); + //console.log("compute+render", new Date() - start, "ms") };