queue render requests

This commit is contained in:
Fabian Jakobs 2010-09-20 19:40:53 +02:00
commit 35694f5e35
3 changed files with 37 additions and 7 deletions

View file

@ -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) {

View file

@ -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() {

View file

@ -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")
};