Remove ctx.currentPath caching again, since it has the current affine transformation factored in and is thus useless to us.

This commit is contained in:
Jürg Lehni 2013-11-06 12:53:10 +01:00
parent 8d7fc43de2
commit 1049214126
2 changed files with 11 additions and 33 deletions

View file

@ -57,13 +57,6 @@ var CompoundPath = PathItem.extend(/** @lends CompoundPath# */{
this.addChildren(Array.isArray(arg) ? arg : arguments);
},
_changed: function _changed(flags) {
_changed.base.call(this, flags);
// Delete cached native Path
if (flags & (/*#=*/ ChangeFlag.HIERARCHY | /*#=*/ ChangeFlag.GEOMETRY))
delete this._currentPath;
},
insertChildren: function insertChildren(index, items, _preserve) {
// Pass on 'path' for _type, to make sure that only paths are added as
// children.
@ -226,15 +219,10 @@ var CompoundPath = PathItem.extend(/** @lends CompoundPath# */{
if (children.length === 0)
return;
if (this._currentPath) {
ctx.currentPath = this._currentPath;
} else {
ctx.beginPath();
param = param.extend({ compound: true });
for (var i = 0, l = children.length; i < l; i++)
children[i].draw(ctx, param);
this._currentPath = ctx.currentPath;
}
ctx.beginPath();
param = param.extend({ compound: true });
for (var i = 0, l = children.length; i < l; i++)
children[i].draw(ctx, param);
if (!param.clip) {
this._setStyles(ctx);

View file

@ -115,8 +115,6 @@ var Path = PathItem.extend(/** @lends Path# */{
_changed: function _changed(flags) {
_changed.base.call(this, flags);
if (flags & /*#=*/ ChangeFlag.GEOMETRY) {
// Delete cached native Path
delete (this._compound ? this._parent : this)._currentPath;
delete this._length;
// Clockwise state becomes undefined as soon as geometry changes.
delete this._clockwise;
@ -1998,8 +1996,7 @@ var Path = PathItem.extend(/** @lends Path# */{
return {
_draw: function(ctx, param) {
var clip = param.clip,
// Also mark this Path as _compound so _changed() knows about it
compound = this._compound = param.compound;
compound = param.compound;
if (!compound)
ctx.beginPath();
@ -2017,19 +2014,12 @@ var Path = PathItem.extend(/** @lends Path# */{
return dashArray[((i % dashLength) + dashLength) % dashLength];
}
// CompoundPath collects its own _currentPath
if (!compound && this._currentPath) {
ctx.currentPath = this._currentPath;
} else {
// Prepare the canvas path if we have any situation that
// requires it to be defined.
if (hasFill || hasStroke && !dashLength || compound || clip)
drawSegments(ctx, this);
if (this._closed)
ctx.closePath();
if (!compound)
this._currentPath = ctx.currentPath;
}
// Prepare the canvas path if we have any situation that
// requires it to be defined.
if (hasFill || hasStroke && !dashLength || compound || clip)
drawSegments(ctx, this);
if (this._closed)
ctx.closePath();
if (!clip && !compound && (hasFill || hasStroke)) {
// If the path is part of a compound path or doesn't have a fill