container.js 2.8 KB

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