mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-08 05:42:07 -05:00
Define Group#transformContent as a boolean to control #applyMatrix() behavior.
And use it for SVG Import.
This commit is contained in:
parent
f758fb306b
commit
177229f99f
2 changed files with 28 additions and 7 deletions
|
@ -124,6 +124,24 @@ var Group = Item.extend(/** @lends Group# */{
|
||||||
return this._clipItem = null;
|
return this._clipItem = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether the group applies transformations directly to its
|
||||||
|
* children, or wether they are to be stored in its {@link Item#matrix}
|
||||||
|
*
|
||||||
|
* @type Boolean
|
||||||
|
* @default true
|
||||||
|
* @bean
|
||||||
|
*/
|
||||||
|
getTransformContent: function() {
|
||||||
|
return this._transformContent;
|
||||||
|
},
|
||||||
|
|
||||||
|
setTransformContent: function(transform) {
|
||||||
|
this._transformContent = transform;
|
||||||
|
if (transform)
|
||||||
|
this.applyMatrix();
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies whether the group item is to be clipped.
|
* Specifies whether the group item is to be clipped.
|
||||||
* When setting to {@code true}, the first child in the group is
|
* When setting to {@code true}, the first child in the group is
|
||||||
|
|
|
@ -71,19 +71,22 @@ new function() {
|
||||||
function importGroup(node, type) {
|
function importGroup(node, type) {
|
||||||
var nodes = node.childNodes,
|
var nodes = node.childNodes,
|
||||||
clip = type === 'clippath',
|
clip = type === 'clippath',
|
||||||
item = clip ? new CompoundPath() : new Clip(),
|
item = clip ? new CompoundPath() : new Group(),
|
||||||
project = item._project,
|
project = item._project,
|
||||||
currentStyle = project._currentStyle,
|
currentStyle = project._currentStyle,
|
||||||
children = [];
|
children = [];
|
||||||
// Style on items needs to be handled differently than all other items:
|
|
||||||
// We first apply the style to the item, then use it as the project's
|
|
||||||
// currentStyle, so it is used as a default for the creation of all
|
|
||||||
// nested items. importSVG then needs to check for items and avoid
|
|
||||||
// calling applyAttributes() again.
|
|
||||||
// Set the default color to black, since that's how SVG handles fills.
|
// Set the default color to black, since that's how SVG handles fills.
|
||||||
item.setFillColor('black');
|
item.setFillColor('black');
|
||||||
if (!clip) {
|
if (!clip) {
|
||||||
|
// Have the group not pass on all transformations to its children,
|
||||||
|
// as this is how SVG works too.
|
||||||
|
item._transformContent = false;
|
||||||
item = applyAttributes(item, node);
|
item = applyAttributes(item, node);
|
||||||
|
// Style on items needs to be handled differently than all other
|
||||||
|
// items: We first apply the style to the item, then use it as the
|
||||||
|
// project's currentStyle, so it is used as a default for the
|
||||||
|
// creation of all nested items. importSVG then needs to check for
|
||||||
|
// items and avoid calling applyAttributes() again.
|
||||||
project._currentStyle = item._style.clone();
|
project._currentStyle = item._style.clone();
|
||||||
}
|
}
|
||||||
// Collect the children in an array and apply them all at once.
|
// Collect the children in an array and apply them all at once.
|
||||||
|
@ -93,7 +96,7 @@ new function() {
|
||||||
if (childNode.nodeType == 1 && (child = importSVG(childNode))) {
|
if (childNode.nodeType == 1 && (child = importSVG(childNode))) {
|
||||||
// If adding CompoundPaths to other CompoundPaths,
|
// If adding CompoundPaths to other CompoundPaths,
|
||||||
// we need to "unbox" them first:
|
// we need to "unbox" them first:
|
||||||
if (clip && child._type === 'compound-path') {
|
if (clip && child instanceof CompoundPath) {
|
||||||
children.push.apply(children, child.removeChildren());
|
children.push.apply(children, child.removeChildren());
|
||||||
child.remove();
|
child.remove();
|
||||||
} else if (!(child instanceof Symbol)) {
|
} else if (!(child instanceof Symbol)) {
|
||||||
|
|
Loading…
Reference in a new issue