square.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { deepAssign } from '../../utils';
  2. import { drawBackground, getPixelRatio, getSymbolsPosition, getUnitPatternSize, initCanvas, transformMatrix, } from './util';
  3. /**
  4. * squarePattern 的 默认配置
  5. */
  6. export var defaultSquarePatternCfg = {
  7. size: 6,
  8. padding: 1,
  9. isStagger: true,
  10. backgroundColor: 'transparent',
  11. opacity: 1,
  12. rotation: 0,
  13. fill: '#fff',
  14. fillOpacity: 0.5,
  15. stroke: 'transparent',
  16. lineWidth: 0,
  17. };
  18. /**
  19. * 绘制square
  20. *
  21. * @param context canvasContext
  22. * @param cfg squarePattern 的配置
  23. * @param x和y square的中心位置
  24. */
  25. export function drawSquare(context, cfg, x, y) {
  26. var stroke = cfg.stroke, size = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, fillOpacity = cfg.fillOpacity;
  27. context.globalAlpha = fillOpacity;
  28. context.strokeStyle = stroke;
  29. context.lineWidth = lineWidth;
  30. context.fillStyle = fill;
  31. // 因为正方形绘制从左上角开始,所以x,y做个偏移
  32. context.strokeRect(x - size / 2, y - size / 2, size, size);
  33. context.fillRect(x - size / 2, y - size / 2, size, size);
  34. }
  35. /**
  36. * 创建 squarePattern
  37. */
  38. export function createSquarePattern(cfg) {
  39. var squareCfg = deepAssign({}, defaultSquarePatternCfg, cfg);
  40. var size = squareCfg.size, padding = squareCfg.padding, isStagger = squareCfg.isStagger, rotation = squareCfg.rotation;
  41. // 计算 画布大小,squares的位置
  42. var unitSize = getUnitPatternSize(size, padding, isStagger);
  43. var squares = getSymbolsPosition(unitSize, isStagger); // 计算方法与 dots 一样
  44. // 初始化 patternCanvas
  45. var canvas = initCanvas(unitSize, unitSize);
  46. var ctx = canvas.getContext('2d');
  47. // 绘制 background,squares
  48. drawBackground(ctx, squareCfg, unitSize);
  49. for (var _i = 0, squares_1 = squares; _i < squares_1.length; _i++) {
  50. var _a = squares_1[_i], x = _a[0], y = _a[1];
  51. drawSquare(ctx, squareCfg, x, y);
  52. }
  53. var pattern = ctx.createPattern(canvas, 'repeat');
  54. if (pattern) {
  55. var dpr = getPixelRatio();
  56. var matrix = transformMatrix(dpr, rotation);
  57. pattern.setTransform(matrix);
  58. }
  59. return pattern;
  60. }
  61. //# sourceMappingURL=square.js.map