Introduce Project#_drawCount mechanism as a better and more efficient way to filter out selected items that are not currently part of the DOM.

This commit is contained in:
Jürg Lehni 2013-01-20 14:01:27 -08:00
parent e22b3292ed
commit 50ee598bca
3 changed files with 23 additions and 16 deletions
src/project

View file

@ -60,6 +60,8 @@ var Project = this.Project = PaperScopeItem.extend(/** @lends Project# */{
this._currentStyle = new PathStyle();
this._selectedItems = {};
this._selectedItemCount = 0;
// See Item.draw() for an explanation of _drawCount
this._drawCount = 0;
// Change tracking, not in use for now. Activate once required:
// this._changes = [];
// this._changesById = {};
@ -153,9 +155,11 @@ var Project = this.Project = PaperScopeItem.extend(/** @lends Project# */{
// TODO: The order of these items should be that of their
// drawing order.
var items = [];
Base.each(this._selectedItems, function(item) {
items.push(item);
});
for (var id in this._selectedItems) {
var item = this._selectedItems[id];
if (item._drawCount === this._drawCount)
items.push(item);
}
return items;
},
@ -184,7 +188,7 @@ var Project = this.Project = PaperScopeItem.extend(/** @lends Project# */{
*/
deselectAll: function() {
for (var i in this._selectedItems)
this._selectedItems[i].setSelected(false);
this._selectedItems[i].item.setSelected(false);
},
/**
@ -260,6 +264,7 @@ var Project = this.Project = PaperScopeItem.extend(/** @lends Project# */{
*/
draw: function(ctx, matrix) {
this._drawCount++;
ctx.save();
if (!matrix.isIdentity())
matrix.applyToContext(ctx);
@ -303,7 +308,8 @@ var Project = this.Project = PaperScopeItem.extend(/** @lends Project# */{
}
for (var id in this._selectedItems) {
var item = this._selectedItems[id];
item.drawSelected(ctx, getGlobalMatrix(item, matrix.clone()));
if (item._drawCount === this._drawCount)
item.drawSelected(ctx, getGlobalMatrix(item, matrix.clone()));
}
ctx.restore();
}