helper.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. export function createLinearGradient(ctx, obj, rect) {
  2. var x = obj.x == null ? 0 : obj.x;
  3. var x2 = obj.x2 == null ? 1 : obj.x2;
  4. var y = obj.y == null ? 0 : obj.y;
  5. var y2 = obj.y2 == null ? 0 : obj.y2;
  6. if (!obj.global) {
  7. x = x * rect.width + rect.x;
  8. x2 = x2 * rect.width + rect.x;
  9. y = y * rect.height + rect.y;
  10. y2 = y2 * rect.height + rect.y;
  11. }
  12. x = isNaN(x) ? 0 : x;
  13. x2 = isNaN(x2) ? 1 : x2;
  14. y = isNaN(y) ? 0 : y;
  15. y2 = isNaN(y2) ? 0 : y2;
  16. var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);
  17. return canvasGradient;
  18. }
  19. export function createRadialGradient(ctx, obj, rect) {
  20. var width = rect.width;
  21. var height = rect.height;
  22. var min = Math.min(width, height);
  23. var x = obj.x == null ? 0.5 : obj.x;
  24. var y = obj.y == null ? 0.5 : obj.y;
  25. var r = obj.r == null ? 0.5 : obj.r;
  26. if (!obj.global) {
  27. x = x * width + rect.x;
  28. y = y * height + rect.y;
  29. r = r * min;
  30. }
  31. var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);
  32. return canvasGradient;
  33. }
  34. export function getCanvasGradient(ctx, obj, rect) {
  35. var canvasGradient = obj.type === 'radial'
  36. ? createRadialGradient(ctx, obj, rect)
  37. : createLinearGradient(ctx, obj, rect);
  38. var colorStops = obj.colorStops;
  39. for (var i = 0; i < colorStops.length; i++) {
  40. canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color);
  41. }
  42. return canvasGradient;
  43. }
  44. export function isClipPathChanged(clipPaths, prevClipPaths) {
  45. if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {
  46. return false;
  47. }
  48. if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {
  49. return true;
  50. }
  51. for (var i = 0; i < clipPaths.length; i++) {
  52. if (clipPaths[i] !== prevClipPaths[i]) {
  53. return true;
  54. }
  55. }
  56. return false;
  57. }