container.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. var Util = require('../util/common');
  2. var Shape = require('./shape');
  3. var SHAPE_MAP = {};
  4. var INDEX = '_INDEX';
  5. function getComparer(compare) {
  6. return function (left, right) {
  7. var result = compare(left, right);
  8. return result === 0 ? left[INDEX] - right[INDEX] : result;
  9. };
  10. }
  11. module.exports = {
  12. getGroupClass: function getGroupClass() {},
  13. getChildren: function getChildren() {
  14. return this.get('children');
  15. },
  16. addShape: function addShape(type, cfg) {
  17. if (cfg === void 0) {
  18. cfg = {};
  19. }
  20. var canvas = this.get('canvas');
  21. var shapeType = SHAPE_MAP[type];
  22. if (!shapeType) {
  23. shapeType = Util.upperFirst(type);
  24. SHAPE_MAP[type] = shapeType;
  25. }
  26. cfg.canvas = canvas;
  27. if (shapeType === 'Text' && canvas && canvas.get('fontFamily')) {
  28. cfg.attrs.fontFamily = cfg.attrs.fontFamily || canvas.get('fontFamily');
  29. }
  30. var shape = new Shape[shapeType](cfg);
  31. this.add(shape);
  32. return shape;
  33. },
  34. addGroup: function addGroup(cfg) {
  35. var canvas = this.get('canvas');
  36. var groupClass = this.getGroupClass();
  37. cfg = Util.mix({}, cfg);
  38. cfg.canvas = canvas;
  39. cfg.parent = this;
  40. var rst = new groupClass(cfg);
  41. this.add(rst);
  42. return rst;
  43. },
  44. contain: function contain(item) {
  45. var children = this.get('children');
  46. return children.indexOf(item) > -1;
  47. },
  48. sort: function sort() {
  49. var children = this.get('children');
  50. for (var i = 0, len = children.length; i < len; i++) {
  51. var child = children[i];
  52. child[INDEX] = i;
  53. }
  54. children.sort(getComparer(function (obj1, obj2) {
  55. return obj1.get('zIndex') - obj2.get('zIndex');
  56. }));
  57. return this;
  58. },
  59. clear: function clear() {
  60. var children = this.get('children');
  61. while (children.length !== 0) {
  62. children[children.length - 1].remove(true);
  63. }
  64. return this;
  65. },
  66. add: function add(items) {
  67. var self = this;
  68. var children = self.get('children');
  69. if (!Util.isArray(items)) {
  70. items = [items];
  71. }
  72. for (var i = 0, len = items.length; i < len; i++) {
  73. var item = items[i];
  74. var parent = item.get('parent');
  75. if (parent) {
  76. var descendants = parent.get('children');
  77. Util.Array.remove(descendants, item);
  78. }
  79. self._setEvn(item);
  80. children.push(item);
  81. }
  82. return self;
  83. },
  84. _setEvn: function _setEvn(item) {
  85. var self = this;
  86. item._attrs.parent = self;
  87. item._attrs.context = self._attrs.context;
  88. item._attrs.canvas = self._attrs.canvas;
  89. var clip = item._attrs.attrs.clip;
  90. if (clip) {
  91. clip.set('parent', self);
  92. clip.set('context', self.get('context'));
  93. }
  94. if (item._attrs.isGroup) {
  95. var children = item._attrs.children;
  96. for (var i = 0, len = children.length; i < len; i++) {
  97. item._setEvn(children[i]);
  98. }
  99. }
  100. }
  101. };