-
Notifications
You must be signed in to change notification settings - Fork 188
/
group.js
57 lines (51 loc) · 1.38 KB
/
group.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
define([
'./display_object',
'./display_list',
'../tools'
], function(DisplayObject, displayList, tools) {
'use strict';
var DisplayList = displayList.DisplayList;
/**
* Creates an empty Group instance
*
* @classdesc A group is a DisplayObject that can contain other DisplayObjects.
* @constructor
* @name Group
* @extends DisplayObject
* @mixes displayList.methods
*/
function Group(displayList) {
if (!displayList) {
displayList = new DisplayList();
}
displayList.owner = this;
this.displayList = displayList;
DisplayObject.call(this);
}
/** @lends Group.prototype */
var proto = Group.prototype = Object.create(DisplayObject.prototype);
tools.mixin(proto, displayList.methods);
proto.type = 'Group';
/**
* Returns a clone of the group.
*
* Will recursively add all children to the clone that have a clone()
* method. Will skip those that do not.
*
* @param {Object} [cloneOptions]
* @param {boolean} [cloneOptions.attributes] Whether to clone attributes
*
* @returns {Group} The clone
*/
proto.clone = function(cloneOptions) {
var clone = new Group();
if (cloneOptions.attributes) {
clone.attr(this.attr());
}
this.children().forEach(function(child) {
child.clone && clone.addChild(child.clone(cloneOptions));
}, this);
return clone;
};
return Group;
});