CVMaskElement.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import {
  2. createSizedArray,
  3. } from '../../utils/helpers/arrays';
  4. import ShapePropertyFactory from '../../utils/shapes/ShapeProperty';
  5. import MaskElement from '../../mask';
  6. function CVMaskElement(data, element) {
  7. this.data = data;
  8. this.element = element;
  9. this.masksProperties = this.data.masksProperties || [];
  10. this.viewData = createSizedArray(this.masksProperties.length);
  11. var i;
  12. var len = this.masksProperties.length;
  13. var hasMasks = false;
  14. for (i = 0; i < len; i += 1) {
  15. if (this.masksProperties[i].mode !== 'n') {
  16. hasMasks = true;
  17. }
  18. this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);
  19. }
  20. this.hasMasks = hasMasks;
  21. if (hasMasks) {
  22. this.element.addRenderableComponent(this);
  23. }
  24. }
  25. CVMaskElement.prototype.renderFrame = function () {
  26. if (!this.hasMasks) {
  27. return;
  28. }
  29. var transform = this.element.finalTransform.mat;
  30. var ctx = this.element.canvasContext;
  31. var i;
  32. var len = this.masksProperties.length;
  33. var pt;
  34. var pts;
  35. var data;
  36. ctx.beginPath();
  37. for (i = 0; i < len; i += 1) {
  38. if (this.masksProperties[i].mode !== 'n') {
  39. if (this.masksProperties[i].inv) {
  40. ctx.moveTo(0, 0);
  41. ctx.lineTo(this.element.globalData.compSize.w, 0);
  42. ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);
  43. ctx.lineTo(0, this.element.globalData.compSize.h);
  44. ctx.lineTo(0, 0);
  45. }
  46. data = this.viewData[i].v;
  47. pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);
  48. ctx.moveTo(pt[0], pt[1]);
  49. var j;
  50. var jLen = data._length;
  51. for (j = 1; j < jLen; j += 1) {
  52. pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);
  53. ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
  54. }
  55. pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);
  56. ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
  57. }
  58. }
  59. this.element.globalData.renderer.save(true);
  60. ctx.clip();
  61. };
  62. CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;
  63. CVMaskElement.prototype.destroy = function () {
  64. this.element = null;
  65. };
  66. export default CVMaskElement;