mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-01 02:38:43 -05:00
Merge remote branch 'origin/master'
This commit is contained in:
commit
ba6139cd48
16 changed files with 71 additions and 45 deletions
|
@ -98,7 +98,7 @@ var Document = this.Document = Base.extend({
|
|||
},
|
||||
|
||||
setCurrentStyle: function(style) {
|
||||
this._currentStyle = PathStyle.create(this, style);
|
||||
this._currentStyle = PathStyle.create(null, style);
|
||||
},
|
||||
|
||||
activate: function() {
|
||||
|
|
21
src/item/ChangeFlags.js
Normal file
21
src/item/ChangeFlags.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Paper.js
|
||||
*
|
||||
* This file is part of Paper.js, a JavaScript Vector Graphics Library,
|
||||
* based on Scriptographer.org and designed to be largely API compatible.
|
||||
* http://paperjs.org/
|
||||
* http://scriptographer.org/
|
||||
*
|
||||
* Distributed under the MIT license. See LICENSE file for details.
|
||||
*
|
||||
* Copyright (c) 2011, Juerg Lehni & Jonathan Puckey
|
||||
* http://lehni.org/ & http://jonathanpuckey.com/
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
var ChangeFlags = {
|
||||
PATH: 1, // Path geometry
|
||||
STROKE: 2, // Stroke geometry
|
||||
STYLE: 4 // Fille style or stroke color / dash
|
||||
};
|
|
@ -22,6 +22,12 @@ var Item = this.Item = Base.extend({
|
|||
this.setStyle(this._document.getCurrentStyle());
|
||||
},
|
||||
|
||||
_changed: function(flags) {
|
||||
if (flags & ChangeFlags.PATH) {
|
||||
delete this._position;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* When passed a document, copies the item to the document,
|
||||
* or duplicates it within the same document. When passed an item,
|
||||
|
@ -542,14 +548,16 @@ var Item = this.Item = Base.extend({
|
|||
* </code>
|
||||
*/
|
||||
getPosition: function() {
|
||||
return this.getBounds().getCenter();
|
||||
// Cache position value
|
||||
if (!this._position)
|
||||
this._position = this.getBounds().getCenter();
|
||||
return this._position.clone();
|
||||
},
|
||||
|
||||
setPosition: function(point) {
|
||||
point = Point.read(arguments);
|
||||
if (point) {
|
||||
if (point)
|
||||
this.translate(point.subtract(this.getPosition()));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -563,6 +571,9 @@ var Item = this.Item = Base.extend({
|
|||
// TODO: Call transform on chidren only if 'children' flag is provided
|
||||
if (this._transform)
|
||||
this._transform(matrix, flags);
|
||||
// Transform position as well
|
||||
if (this._position)
|
||||
this._position = matrix._transformPoint(this._position);
|
||||
if (this.children) {
|
||||
for (var i = 0, l = this.children.length; i < l; i++) {
|
||||
var child = this.children[i];
|
||||
|
@ -602,8 +613,7 @@ var Item = this.Item = Base.extend({
|
|||
*/
|
||||
translate: function(delta) {
|
||||
var mx = new Matrix();
|
||||
mx.translate.apply(mx, arguments);
|
||||
return this.transform(mx);
|
||||
return this.transform(mx.translate.apply(mx, arguments));
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,7 +17,13 @@
|
|||
var PathStyle = this.PathStyle = Base.extend(new function() {
|
||||
var keys = ['windingRule', 'resolution', 'strokeColor', 'strokeWidth',
|
||||
'strokeCap', 'strokeJoin', 'dashOffset','dashArray', 'miterLimit',
|
||||
'strokeOverprint', 'fillColor', 'fillOverprint'];
|
||||
'strokeOverprint', 'fillColor', 'fillOverprint'],
|
||||
strokeFlags = {
|
||||
strokeWidth: true,
|
||||
strokeCap: true,
|
||||
strokeJoin: true,
|
||||
miterLimit: true
|
||||
};
|
||||
|
||||
var fields = {
|
||||
beans: true,
|
||||
|
@ -63,10 +69,10 @@ var PathStyle = this.PathStyle = Base.extend(new function() {
|
|||
var old = this['_' + key];
|
||||
if (old != value && !(old && old.equals && old.equals(value))) {
|
||||
this['_' + key] = value;
|
||||
// TODO: Tell _item what exactly has changed. Maybe introduce
|
||||
// ChangeFlags, e.g. STROKE, COLOR, FILL, GEOMETRY, etc?
|
||||
if (this._item && this._item._changed)
|
||||
this._item._changed();
|
||||
if (this._item) {
|
||||
this._item._changed(ChangeFlags.STYLE
|
||||
| (strokeFlags[key] ? ChangeFlags.STROKE : 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
|
|
|
@ -19,22 +19,12 @@ var PlacedSymbol = this.PlacedSymbol = Item.extend({
|
|||
|
||||
initialize: function(symbol, matrixOrOffset) {
|
||||
this.base();
|
||||
if (symbol instanceof Symbol) {
|
||||
this.symbol = symbol;
|
||||
} else {
|
||||
this.symbol = new Symbol(symbol);
|
||||
}
|
||||
this._position = this.symbol._definition.getPosition();
|
||||
if (matrixOrOffset !== undefined) {
|
||||
if (matrixOrOffset instanceof Matrix) {
|
||||
this.matrix = matrixOrOffset;
|
||||
} else {
|
||||
this.matrix = new Matrix().translate(Point.read(arguments, 1));
|
||||
}
|
||||
this._position = this.matrix._transformPoint(this._position);
|
||||
} else {
|
||||
this.matrix = new Matrix();
|
||||
}
|
||||
this.symbol = symbol instanceof Symbol ? symbol : new Symbol(symbol);
|
||||
this.matrix = matrixOrOffset !== undefined
|
||||
? matrixOrOffset instanceof Matrix
|
||||
? matrixOrOffset
|
||||
: new Matrix().translate(Point.read(arguments, 1))
|
||||
: new Matrix();
|
||||
},
|
||||
|
||||
_transform: function(matrix, flags) {
|
||||
|
@ -42,12 +32,6 @@ var PlacedSymbol = this.PlacedSymbol = Item.extend({
|
|||
// raster, simply preconcatenate the internal matrix with the provided
|
||||
// one.
|
||||
this.matrix.preConcatenate(matrix);
|
||||
// Transform position as well
|
||||
this._position = matrix._transformPoint(this._position);
|
||||
},
|
||||
|
||||
getPosition: function() {
|
||||
return this._position.clone();
|
||||
},
|
||||
|
||||
getBounds: function() {
|
||||
|
|
|
@ -36,6 +36,7 @@ var sources = [
|
|||
'src/document/Document.js',
|
||||
'src/document/Symbol.js',
|
||||
|
||||
'src/item/ChangeFlags.js',
|
||||
'src/item/Item.js',
|
||||
'src/item/Group.js',
|
||||
'src/item/Layer.js',
|
||||
|
|
|
@ -100,6 +100,7 @@ Base.inject({
|
|||
//#include "document/Document.js"
|
||||
//#include "document/Symbol.js"
|
||||
|
||||
//#include "item/ChangeFlags.js"
|
||||
//#include "item/Item.js"
|
||||
//#include "item/Group.js"
|
||||
//#include "item/Layer.js"
|
||||
|
|
|
@ -28,11 +28,15 @@ var Path = this.Path = PathItem.extend({
|
|||
|| typeof segments[0] !== 'object' ? arguments : segments);
|
||||
},
|
||||
|
||||
_changed: function() {
|
||||
// Clear cached values.
|
||||
delete this._length;
|
||||
delete this._bounds;
|
||||
delete this._strokeBounds;
|
||||
_changed: function(flags) {
|
||||
if (flags & ChangeFlags.PATH) {
|
||||
delete this._length;
|
||||
delete this._bounds;
|
||||
delete this._position;
|
||||
delete this._strokeBounds;
|
||||
} else if (flags & ChangeFlags.STROKE) {
|
||||
delete this._strokeBounds;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -112,7 +116,7 @@ var Path = this.Path = PathItem.extend({
|
|||
this._curves[i = length - 1] = Curve.create(this,
|
||||
this._segments[i], this._segments[0]);
|
||||
}
|
||||
this._changed();
|
||||
this._changed(ChangeFlags.PATH);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -127,7 +131,7 @@ var Path = this.Path = PathItem.extend({
|
|||
this._segments[i]._transformCoordinates(matrix, coords, true);
|
||||
}
|
||||
}
|
||||
this._changed();
|
||||
this._changed(ChangeFlags.PATH);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -175,7 +179,7 @@ var Path = this.Path = PathItem.extend({
|
|||
if (curve)
|
||||
curve._segment1 = segments[index + amount];
|
||||
}
|
||||
this._changed();
|
||||
this._changed(ChangeFlags.PATH);
|
||||
return segs;
|
||||
},
|
||||
|
||||
|
@ -259,7 +263,7 @@ var Path = this.Path = PathItem.extend({
|
|||
if (last && this._closed && (curve = curves[curves.length - 1]))
|
||||
curve._segment2 = segments[0];
|
||||
}
|
||||
this._changed();
|
||||
this._changed(ChangeFlags.PATH);
|
||||
return removed;
|
||||
},
|
||||
|
||||
|
@ -304,7 +308,6 @@ var Path = this.Path = PathItem.extend({
|
|||
segment._handleIn = segment._handleOut;
|
||||
segment._handleOut = handleIn;
|
||||
}
|
||||
this._changed();
|
||||
},
|
||||
|
||||
join: function(path) {
|
||||
|
@ -339,7 +342,7 @@ var Path = this.Path = PathItem.extend({
|
|||
last1.remove();
|
||||
this.setClosed(true);
|
||||
}
|
||||
this._changed();
|
||||
this._changed(ChangeFlags.PATH);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -69,7 +69,7 @@ var Segment = this.Segment = Base.extend({
|
|||
}
|
||||
}
|
||||
}
|
||||
this._path._changed();
|
||||
this._path._changed(ChangeFlags.PATH);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
Loading…
Reference in a new issue