mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-08 05:42:07 -05:00
Clean up Path#setSegments and begin moving of logic to keep Path#curves in sync away from Path#getCurves() to Path#setClosed(). Requires more work, e.g. Path#_add().
This commit is contained in:
parent
6cca355e20
commit
6bbfd55240
1 changed files with 31 additions and 19 deletions
|
@ -36,14 +36,16 @@ var Path = this.Path = PathItem.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
setSegments: function(segments) {
|
setSegments: function(segments) {
|
||||||
var length = segments.length;
|
|
||||||
if (!this._segments) {
|
if (!this._segments) {
|
||||||
this._segments = [];
|
this._segments = [];
|
||||||
} else {
|
} else {
|
||||||
this.setSelected(false);
|
this.setSelected(false);
|
||||||
this._segments.length = 0;
|
this._segments.length = 0;
|
||||||
|
// Make sure new curves are calculated next time we call getCurves()
|
||||||
|
if (this._curves)
|
||||||
|
this._curves = null;
|
||||||
}
|
}
|
||||||
for(var i = 0; i < length; i++)
|
for(var i = 0, l = segments.length; i < l; i++)
|
||||||
this._add(Segment.read(segments, i, 1));
|
this._add(Segment.read(segments, i, 1));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -51,22 +53,16 @@ var Path = this.Path = PathItem.extend({
|
||||||
* The curves contained within the path.
|
* The curves contained within the path.
|
||||||
*/
|
*/
|
||||||
getCurves: function() {
|
getCurves: function() {
|
||||||
var length = this._segments.length;
|
if (!this._curves) {
|
||||||
// Reduce length by one if it's an open path:
|
var length = this._segments.length;
|
||||||
if (!this._closed && length > 0)
|
// Reduce length by one if it's an open path:
|
||||||
length--;
|
if (!this._closed && length > 0)
|
||||||
var curves = this._curves = this._curves || new Array(length);
|
length--;
|
||||||
curves.length = length;
|
this._curves = new Array(length);
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++)
|
||||||
var curve = curves[i];
|
this._curves[i] = Curve.create(this, i);
|
||||||
if (!curve) {
|
|
||||||
curve = curves[i] = Curve.create(this, i);
|
|
||||||
} else {
|
|
||||||
// Make sure index is kept up to date.
|
|
||||||
curve._setIndex(i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return curves;
|
return this._curves;
|
||||||
},
|
},
|
||||||
|
|
||||||
getClosed: function() {
|
getClosed: function() {
|
||||||
|
@ -74,8 +70,22 @@ var Path = this.Path = PathItem.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
setClosed: function(closed) {
|
setClosed: function(closed) {
|
||||||
this._closed = closed;
|
// On-the-fly conversion to boolean:
|
||||||
|
if (this._closed != (closed = !!closed)) {
|
||||||
|
this._closed = closed;
|
||||||
|
// Update _curves length
|
||||||
|
if (this._curves) {
|
||||||
|
var length = this._segments.length,
|
||||||
|
i;
|
||||||
|
// Reduce length by one if it's an open path:
|
||||||
|
if (!closed && length > 0)
|
||||||
|
length--;
|
||||||
|
this._curves.length = length;
|
||||||
|
// If we were closing this path, we need to add a new curve now
|
||||||
|
if (closed)
|
||||||
|
this._curves[i = length - 1] = Curve.create(this, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
getFirstSegment: function() {
|
getFirstSegment: function() {
|
||||||
|
@ -126,11 +136,13 @@ var Path = this.Path = PathItem.extend({
|
||||||
return segment;
|
return segment;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// TODO: Support multiple segments?
|
||||||
add: function(segment) {
|
add: function(segment) {
|
||||||
segment = Segment.read(arguments);
|
segment = Segment.read(arguments);
|
||||||
return segment ? this._add(segment) : null;
|
return segment ? this._add(segment) : null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// TODO: Support multiple segments?
|
||||||
insert: function(index, segment) {
|
insert: function(index, segment) {
|
||||||
segment = Segment.read(arguments, 1);
|
segment = Segment.read(arguments, 1);
|
||||||
return segment ? this._add(segment, index) : null;
|
return segment ? this._add(segment, index) : null;
|
||||||
|
|
Loading…
Reference in a new issue