ShapeElement.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import ProcessedElement from './helpers/shapes/ProcessedElement';
  2. function IShapeElement() {
  3. }
  4. IShapeElement.prototype = {
  5. addShapeToModifiers: function (data) {
  6. var i;
  7. var len = this.shapeModifiers.length;
  8. for (i = 0; i < len; i += 1) {
  9. this.shapeModifiers[i].addShape(data);
  10. }
  11. },
  12. isShapeInAnimatedModifiers: function (data) {
  13. var i = 0;
  14. var len = this.shapeModifiers.length;
  15. while (i < len) {
  16. if (this.shapeModifiers[i].isAnimatedWithShape(data)) {
  17. return true;
  18. }
  19. }
  20. return false;
  21. },
  22. renderModifiers: function () {
  23. if (!this.shapeModifiers.length) {
  24. return;
  25. }
  26. var i;
  27. var len = this.shapes.length;
  28. for (i = 0; i < len; i += 1) {
  29. this.shapes[i].sh.reset();
  30. }
  31. len = this.shapeModifiers.length;
  32. var shouldBreakProcess;
  33. for (i = len - 1; i >= 0; i -= 1) {
  34. shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);
  35. // workaround to fix cases where a repeater resets the shape so the following processes get called twice
  36. // TODO: find a better solution for this
  37. if (shouldBreakProcess) {
  38. break;
  39. }
  40. }
  41. },
  42. searchProcessedElement: function (elem) {
  43. var elements = this.processedElements;
  44. var i = 0;
  45. var len = elements.length;
  46. while (i < len) {
  47. if (elements[i].elem === elem) {
  48. return elements[i].pos;
  49. }
  50. i += 1;
  51. }
  52. return 0;
  53. },
  54. addProcessedElement: function (elem, pos) {
  55. var elements = this.processedElements;
  56. var i = elements.length;
  57. while (i) {
  58. i -= 1;
  59. if (elements[i].elem === elem) {
  60. elements[i].pos = pos;
  61. return;
  62. }
  63. }
  64. elements.push(new ProcessedElement(elem, pos));
  65. },
  66. prepareFrame: function (num) {
  67. this.prepareRenderableFrame(num);
  68. this.prepareProperties(num, this.isInRange);
  69. },
  70. };
  71. export default IShapeElement;