@visactor/vrender-core 1.0.46-alpha.0 → 1.0.46-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/cjs/canvas/constants.js +2 -1
  2. package/cjs/color-string/index.js +1 -2
  3. package/cjs/core/layer.d.ts +1 -1
  4. package/cjs/core/layer.js.map +1 -1
  5. package/cjs/core/stage.d.ts +5 -3
  6. package/cjs/core/stage.js +16 -4
  7. package/cjs/core/stage.js.map +1 -1
  8. package/cjs/graphic/config.js +10 -2
  9. package/cjs/graphic/config.js.map +1 -1
  10. package/cjs/graphic/graphic.js +5 -2
  11. package/cjs/graphic/graphic.js.map +1 -1
  12. package/cjs/graphic/image.d.ts +1 -0
  13. package/cjs/graphic/image.js +2 -1
  14. package/cjs/graphic/image.js.map +1 -1
  15. package/cjs/interface/graphic/image.d.ts +7 -1
  16. package/cjs/interface/graphic/image.js.map +1 -1
  17. package/cjs/interface/graphic.d.ts +31 -3
  18. package/cjs/interface/graphic.js.map +1 -1
  19. package/cjs/interface/layer.d.ts +3 -2
  20. package/cjs/interface/layer.js.map +1 -1
  21. package/cjs/interface/render.d.ts +1 -1
  22. package/cjs/interface/render.js.map +1 -1
  23. package/cjs/interface/stage.d.ts +3 -2
  24. package/cjs/interface/stage.js.map +1 -1
  25. package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +27 -9
  26. package/cjs/render/contributions/render/contributions/base-contribution-render.js +147 -34
  27. package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  28. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.d.ts +2 -2
  29. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js +47 -9
  30. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  31. package/cjs/render/contributions/render/contributions/group-contribution-render.js +8 -6
  32. package/cjs/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  33. package/cjs/render/contributions/render/contributions/text-contribution-render.js +20 -17
  34. package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  35. package/cjs/render/contributions/render/draw-contribution.js +16 -5
  36. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  37. package/cjs/render/contributions/render/image-render.d.ts +14 -1
  38. package/cjs/render/contributions/render/image-render.js +99 -20
  39. package/cjs/render/contributions/render/image-render.js.map +1 -1
  40. package/dist/index.es.js +484 -121
  41. package/es/canvas/constants.js +2 -1
  42. package/es/color-string/index.js +1 -2
  43. package/es/core/layer.d.ts +1 -1
  44. package/es/core/layer.js.map +1 -1
  45. package/es/core/stage.d.ts +5 -3
  46. package/es/core/stage.js +16 -5
  47. package/es/core/stage.js.map +1 -1
  48. package/es/graphic/config.js +10 -2
  49. package/es/graphic/config.js.map +1 -1
  50. package/es/graphic/graphic.js +4 -2
  51. package/es/graphic/graphic.js.map +1 -1
  52. package/es/graphic/image.d.ts +1 -0
  53. package/es/graphic/image.js +2 -1
  54. package/es/graphic/image.js.map +1 -1
  55. package/es/interface/graphic/image.d.ts +7 -1
  56. package/es/interface/graphic/image.js.map +1 -1
  57. package/es/interface/graphic.d.ts +31 -3
  58. package/es/interface/graphic.js.map +1 -1
  59. package/es/interface/layer.d.ts +3 -2
  60. package/es/interface/layer.js.map +1 -1
  61. package/es/interface/render.d.ts +1 -1
  62. package/es/interface/render.js.map +1 -1
  63. package/es/interface/stage.d.ts +3 -2
  64. package/es/interface/stage.js.map +1 -1
  65. package/es/render/contributions/render/contributions/base-contribution-render.d.ts +27 -9
  66. package/es/render/contributions/render/contributions/base-contribution-render.js +140 -33
  67. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  68. package/es/render/contributions/render/contributions/base-texture-contribution-render.d.ts +2 -2
  69. package/es/render/contributions/render/contributions/base-texture-contribution-render.js +47 -9
  70. package/es/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  71. package/es/render/contributions/render/contributions/group-contribution-render.js +9 -7
  72. package/es/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  73. package/es/render/contributions/render/contributions/text-contribution-render.js +20 -16
  74. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  75. package/es/render/contributions/render/draw-contribution.js +17 -4
  76. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  77. package/es/render/contributions/render/image-render.d.ts +14 -1
  78. package/es/render/contributions/render/image-render.js +93 -18
  79. package/es/render/contributions/render/image-render.js.map +1 -1
  80. package/package.json +4 -4
@@ -28,10 +28,10 @@ export class DefaultBaseBackgroundRenderContribution {
28
28
  }
29
29
  drawShape(graphic, context, x, y, doFill, doStroke, fVisible, sVisible, graphicAttribute, drawContext, fillCb, strokeCb, options) {
30
30
  var _a;
31
- const {background: background, backgroundOpacity: backgroundOpacity = (null !== (_a = graphic.attribute.fillOpacity) && void 0 !== _a ? _a : graphicAttribute.backgroundOpacity), opacity: opacity = graphicAttribute.opacity, backgroundMode: backgroundMode = graphicAttribute.backgroundMode, backgroundFit: backgroundFit = graphicAttribute.backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio = graphicAttribute.backgroundKeepAspectRatio, backgroundScale: backgroundScale = graphicAttribute.backgroundScale, backgroundOffsetX: backgroundOffsetX = graphicAttribute.backgroundOffsetX, backgroundOffsetY: backgroundOffsetY = graphicAttribute.backgroundOffsetY, backgroundClip: backgroundClip = graphicAttribute.backgroundClip} = graphic.attribute;
31
+ const {background: background, backgroundOpacity: backgroundOpacity = (null !== (_a = graphic.attribute.fillOpacity) && void 0 !== _a ? _a : graphicAttribute.backgroundOpacity), opacity: opacity = graphicAttribute.opacity, backgroundMode: backgroundMode = graphicAttribute.backgroundMode, backgroundFit: backgroundFit = graphicAttribute.backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio = graphicAttribute.backgroundKeepAspectRatio, backgroundScale: backgroundScale = graphicAttribute.backgroundScale, backgroundOffsetX: backgroundOffsetX = graphicAttribute.backgroundOffsetX, backgroundOffsetY: backgroundOffsetY = graphicAttribute.backgroundOffsetY, backgroundClip: backgroundClip = graphicAttribute.backgroundClip, backgroundPosition: backgroundPosition = graphicAttribute.backgroundPosition} = graphic.attribute;
32
32
  if (background) if (graphic.backgroundImg && graphic.resources) {
33
- const res = graphic.resources.get(background);
34
- if ("success" !== res.state || !res.data) return;
33
+ const res = graphic.resources.get(getBackgroundImage(background));
34
+ if (!res || "success" !== res.state || !res.data) return;
35
35
  if (context.save(), graphic.parent && !graphic.transMatrix.onlyTranslate()) {
36
36
  const groupAttribute = getTheme(graphic.parent).group, {scrollX: scrollX = groupAttribute.scrollX, scrollY: scrollY = groupAttribute.scrollY} = graphic.parent.attribute;
37
37
  context.setTransformFromMatrix(graphic.parent.globalTransMatrix, !0), context.translate(scrollX, scrollY);
@@ -45,47 +45,154 @@ export class DefaultBaseBackgroundRenderContribution {
45
45
  backgroundKeepAspectRatio: backgroundKeepAspectRatio,
46
46
  backgroundScale: backgroundScale,
47
47
  backgroundOffsetX: backgroundOffsetX,
48
- backgroundOffsetY: backgroundOffsetY
48
+ backgroundOffsetY: backgroundOffsetY,
49
+ backgroundPosition: backgroundPosition
49
50
  }), context.restore(), graphic.transMatrix.onlyTranslate() || context.setTransformForCurrent();
50
51
  } else context.highPerformanceSave(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute),
51
52
  context.globalAlpha = backgroundOpacity * opacity, context.fillStyle = background,
52
53
  context.fill(), context.highPerformanceRestore();
53
54
  }
54
55
  doDrawImage(context, data, b, params) {
55
- const {backgroundMode: backgroundMode, backgroundFit: backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio, backgroundScale: backgroundScale = 1, backgroundOffsetX: backgroundOffsetX = 0, backgroundOffsetY: backgroundOffsetY = 0} = params, targetW = b.width(), targetH = b.height();
56
- let w = targetW, h = targetH;
57
- if ("no-repeat" === backgroundMode) if (backgroundFit) if (backgroundKeepAspectRatio) {
58
- const maxScale = Math.max(targetW / data.width, targetH / data.height);
59
- context.drawImage(data, b.x1 + backgroundOffsetX, b.y1 + backgroundOffsetY, data.width * maxScale * backgroundScale, data.height * maxScale * backgroundScale);
60
- } else context.drawImage(data, b.x1, b.y1, b.width(), b.height()); else {
61
- const resW = data.width * backgroundScale, resH = data.height * backgroundScale;
62
- context.drawImage(data, b.x1 + backgroundOffsetX, b.y1 + backgroundOffsetY, resW, resH);
63
- } else {
64
- if (backgroundFit && "repeat" !== backgroundMode && (data.width || data.height)) {
65
- const resW = data.width, resH = data.height;
66
- if ("repeat-x" === backgroundMode) {
67
- w = resW * (targetH / resH), h = targetH;
68
- } else if ("repeat-y" === backgroundMode) {
69
- h = resH * (targetW / resW), w = targetW;
70
- }
71
- const dpr = context.dpr, canvas = canvasAllocate.allocate({
72
- width: w,
73
- height: h,
74
- dpr: dpr
75
- }), ctx = canvas.getContext("2d");
76
- ctx && (ctx.inuse = !0, ctx.clearMatrix(), ctx.setTransformForCurrent(!0), ctx.clearRect(0, 0, w, h),
77
- ctx.drawImage(data, 0, 0, w, h), data = canvas.nativeCanvas), canvasAllocate.free(canvas);
78
- }
79
- const dpr = context.dpr, pattern = context.createPattern(data, backgroundMode);
80
- pattern.setTransform && pattern.setTransform(new DOMMatrix([ 1 / dpr, 0, 0, 1 / dpr, 0, 0 ])),
81
- context.fillStyle = pattern, context.translate(b.x1, b.y1), context.fillRect(0, 0, targetW, targetH),
82
- context.translate(-b.x1, -b.y1);
83
- }
56
+ drawBackgroundImage(context, data, b, params);
84
57
  }
85
58
  }
86
59
 
87
60
  export const defaultBaseBackgroundRenderContribution = new DefaultBaseBackgroundRenderContribution;
88
61
 
62
+ const verticalPositionKeywords = new Set([ "top", "center", "bottom" ]);
63
+
64
+ export function getBackgroundImage(background) {
65
+ var _a;
66
+ return null !== (_a = null == background ? void 0 : background.background) && void 0 !== _a ? _a : background;
67
+ }
68
+
69
+ export function resolveBackgroundSizing({backgroundFit: backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio}) {
70
+ return backgroundFit ? backgroundKeepAspectRatio ? "cover" : "fill" : "auto";
71
+ }
72
+
73
+ export function isNoRepeatSizingMode(mode) {
74
+ return "string" == typeof mode && mode.startsWith("no-repeat-");
75
+ }
76
+
77
+ const NO_REPEAT_SIZING_MAP = {
78
+ "no-repeat-cover": "cover",
79
+ "no-repeat-contain": "contain",
80
+ "no-repeat-fill": "fill",
81
+ "no-repeat-auto": "auto"
82
+ };
83
+
84
+ export function resolveBackgroundDrawMode({backgroundMode: backgroundMode, backgroundFit: backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio}) {
85
+ const sizing = NO_REPEAT_SIZING_MAP[backgroundMode];
86
+ return sizing ? {
87
+ backgroundRepeatMode: "no-repeat",
88
+ backgroundSizing: sizing
89
+ } : {
90
+ backgroundRepeatMode: backgroundMode,
91
+ backgroundSizing: resolveBackgroundSizing({
92
+ backgroundFit: backgroundFit,
93
+ backgroundKeepAspectRatio: backgroundKeepAspectRatio
94
+ })
95
+ };
96
+ }
97
+
98
+ function isPercentageValue(value) {
99
+ return /^-?\d+(\.\d+)?%$/.test(value);
100
+ }
101
+
102
+ function parsePositionToken(value, remainSpace, startKeyword, centerKeyword, endKeyword) {
103
+ if ("number" == typeof value && Number.isFinite(value)) return value;
104
+ const normalizedValue = `${null != value ? value : ""}`.trim().toLowerCase();
105
+ if (!normalizedValue || normalizedValue === startKeyword) return 0;
106
+ if (normalizedValue === centerKeyword) return remainSpace / 2;
107
+ if (normalizedValue === endKeyword) return remainSpace;
108
+ if (isPercentageValue(normalizedValue)) return remainSpace * parseFloat(normalizedValue) / 100;
109
+ const parsedValue = Number(normalizedValue);
110
+ return Number.isFinite(parsedValue) ? parsedValue : 0;
111
+ }
112
+
113
+ function normalizeBackgroundPosition(position) {
114
+ var _a, _b;
115
+ if (Array.isArray(position)) return [ null !== (_a = position[0]) && void 0 !== _a ? _a : "left", null !== (_b = position[1]) && void 0 !== _b ? _b : "top" ];
116
+ const tokens = `${null != position ? position : "top-left"}`.trim().toLowerCase().replace(/-/g, " ").split(/\s+/).filter(Boolean);
117
+ if (0 === tokens.length) return [ "left", "top" ];
118
+ if (1 === tokens.length) {
119
+ const token = tokens[0];
120
+ return "center" === token ? [ "center", "center" ] : verticalPositionKeywords.has(token) ? [ "center", token ] : [ token, "center" ];
121
+ }
122
+ let horizontal, vertical;
123
+ const genericTokens = [];
124
+ for (let i = 0; i < 2; i++) {
125
+ const token = tokens[i];
126
+ "left" !== token && "right" !== token ? "top" !== token && "bottom" !== token ? genericTokens.push(token) : vertical = token : horizontal = token;
127
+ }
128
+ return null == horizontal && genericTokens.length && (horizontal = genericTokens.shift()),
129
+ null == vertical && genericTokens.length && (vertical = genericTokens.shift()),
130
+ [ null != horizontal ? horizontal : "left", null != vertical ? vertical : "top" ];
131
+ }
132
+
133
+ export function resolveBackgroundPosition(position, remainWidth, remainHeight) {
134
+ const [horizontalPosition, verticalPosition] = normalizeBackgroundPosition(position);
135
+ return {
136
+ x: parsePositionToken(horizontalPosition, remainWidth, "left", "center", "right"),
137
+ y: parsePositionToken(verticalPosition, remainHeight, "top", "center", "bottom")
138
+ };
139
+ }
140
+
141
+ function pickRenderableDimension(...values) {
142
+ for (const value of values) if ("number" == typeof value && Number.isFinite(value) && value > 0) return value;
143
+ return null;
144
+ }
145
+
146
+ export function resolveRenderableImageSize(data) {
147
+ if (!data) return null;
148
+ const width = pickRenderableDimension(data.naturalWidth, data.videoWidth, data.width), height = pickRenderableDimension(data.naturalHeight, data.videoHeight, data.height);
149
+ return null == width || null == height ? null : {
150
+ width: width,
151
+ height: height
152
+ };
153
+ }
154
+
155
+ export function drawBackgroundImage(context, data, b, params) {
156
+ var _a, _b;
157
+ const {backgroundMode: backgroundMode, backgroundFit: backgroundFit, backgroundKeepAspectRatio: backgroundKeepAspectRatio, backgroundScale: backgroundScale = 1, backgroundOffsetX: backgroundOffsetX = 0, backgroundOffsetY: backgroundOffsetY = 0, backgroundPosition: backgroundPosition = "top-left"} = params, targetW = b.width(), targetH = b.height(), sourceSize = resolveRenderableImageSize(data), {backgroundRepeatMode: backgroundRepeatMode, backgroundSizing: resolvedBackgroundSizing} = resolveBackgroundDrawMode({
158
+ backgroundMode: backgroundMode,
159
+ backgroundFit: backgroundFit,
160
+ backgroundKeepAspectRatio: backgroundKeepAspectRatio
161
+ });
162
+ let w = targetW, h = targetH;
163
+ if (targetW <= 0 || targetH <= 0) return;
164
+ if ("no-repeat" === backgroundRepeatMode) {
165
+ let drawWidth = null !== (_a = null == sourceSize ? void 0 : sourceSize.width) && void 0 !== _a ? _a : targetW, drawHeight = null !== (_b = null == sourceSize ? void 0 : sourceSize.height) && void 0 !== _b ? _b : targetH;
166
+ if ("cover" !== resolvedBackgroundSizing && "contain" !== resolvedBackgroundSizing || !sourceSize) "fill" === resolvedBackgroundSizing && (drawWidth = targetW,
167
+ drawHeight = targetH); else {
168
+ const scale = "cover" === resolvedBackgroundSizing ? Math.max(targetW / sourceSize.width, targetH / sourceSize.height) : Math.min(targetW / sourceSize.width, targetH / sourceSize.height);
169
+ drawWidth = sourceSize.width * scale, drawHeight = sourceSize.height * scale;
170
+ }
171
+ drawWidth *= backgroundScale, drawHeight *= backgroundScale;
172
+ const {x: x, y: y} = resolveBackgroundPosition(backgroundPosition, targetW - drawWidth, targetH - drawHeight);
173
+ return void context.drawImage(data, b.x1 + x + backgroundOffsetX, b.y1 + y + backgroundOffsetY, drawWidth, drawHeight);
174
+ }
175
+ if (backgroundFit && "repeat" !== backgroundRepeatMode && sourceSize) {
176
+ const resW = sourceSize.width, resH = sourceSize.height;
177
+ if ("repeat-x" === backgroundRepeatMode) {
178
+ w = resW * (targetH / resH), h = targetH;
179
+ } else if ("repeat-y" === backgroundRepeatMode) {
180
+ h = resH * (targetW / resW), w = targetW;
181
+ }
182
+ const dpr = context.dpr, canvas = canvasAllocate.allocate({
183
+ width: w,
184
+ height: h,
185
+ dpr: dpr
186
+ }), ctx = canvas.getContext("2d");
187
+ ctx && (ctx.inuse = !0, ctx.clearMatrix(), ctx.setTransformForCurrent(!0), ctx.clearRect(0, 0, w, h),
188
+ ctx.drawImage(data, 0, 0, w, h), data = canvas.nativeCanvas), canvasAllocate.free(canvas);
189
+ }
190
+ const dpr = context.dpr, pattern = context.createPattern(data, backgroundRepeatMode);
191
+ pattern.setTransform && pattern.setTransform(new DOMMatrix([ 1 / dpr, 0, 0, 1 / dpr, 0, 0 ])),
192
+ context.fillStyle = pattern, context.translate(b.x1, b.y1), context.fillRect(0, 0, targetW, targetH),
193
+ context.translate(-b.x1, -b.y1);
194
+ }
195
+
89
196
  let DefaultBaseInteractiveRenderContribution = class {
90
197
  constructor(subRenderContribitions) {
91
198
  this.subRenderContribitions = subRenderContribitions, this.time = BaseRenderContributionTime.afterFillStroke,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/contributions/base-contribution-render.ts"],"names":[],"mappings":"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","file":"base-contribution-render.js","sourcesContent":["import type {\n IGraphicAttribute,\n IContext2d,\n IGraphic,\n IThemeAttribute,\n IBaseRenderContribution,\n IContributionProvider,\n IDrawContext,\n ISymbol,\n IPath,\n ISymbolGraphicAttribute\n} from '../../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../../common/inversify-lite';\nimport { getTheme } from '../../../../graphic/theme';\nimport { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { ContributionProvider } from '../../../../common/contribution-provider';\nimport { InteractiveSubRenderContribution } from './constants';\n\nexport class DefaultBaseBackgroundRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const {\n background,\n backgroundOpacity = graphic.attribute.fillOpacity ?? graphicAttribute.backgroundOpacity,\n opacity = graphicAttribute.opacity,\n backgroundMode = graphicAttribute.backgroundMode,\n backgroundFit = graphicAttribute.backgroundFit,\n backgroundKeepAspectRatio = graphicAttribute.backgroundKeepAspectRatio,\n backgroundScale = graphicAttribute.backgroundScale,\n backgroundOffsetX = graphicAttribute.backgroundOffsetX,\n backgroundOffsetY = graphicAttribute.backgroundOffsetY,\n backgroundClip = graphicAttribute.backgroundClip\n } = graphic.attribute;\n if (!background) {\n return;\n }\n\n if (graphic.backgroundImg && graphic.resources) {\n const res = graphic.resources.get(background as any);\n if (res.state !== 'success' || !res.data) {\n return;\n }\n\n context.save();\n\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const groupAttribute = getTheme(graphic.parent).group;\n const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = graphic.parent.attribute;\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n context.translate(scrollX, scrollY);\n }\n backgroundClip && context.clip();\n const b = graphic.AABBBounds;\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.globalAlpha = backgroundOpacity * opacity;\n this.doDrawImage(context, res.data, b, {\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio,\n backgroundScale,\n backgroundOffsetX,\n backgroundOffsetY\n });\n context.restore();\n if (!graphic.transMatrix.onlyTranslate()) {\n context.setTransformForCurrent();\n }\n } else {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.globalAlpha = backgroundOpacity * opacity;\n context.fillStyle = background as string;\n context.fill();\n context.highPerformanceRestore();\n }\n }\n\n protected doDrawImage(\n context: IContext2d,\n data: any,\n b: IBounds,\n params: {\n backgroundMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';\n backgroundFit: boolean;\n backgroundKeepAspectRatio: boolean;\n backgroundScale?: number;\n backgroundOffsetX?: number;\n backgroundOffsetY?: number;\n }\n ): void {\n const {\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio,\n backgroundScale = 1,\n backgroundOffsetX = 0,\n backgroundOffsetY = 0\n } = params;\n const targetW = b.width();\n const targetH = b.height();\n let w = targetW;\n let h = targetH;\n if (backgroundMode === 'no-repeat') {\n if (backgroundFit) {\n if (!backgroundKeepAspectRatio) {\n context.drawImage(data, b.x1, b.y1, b.width(), b.height());\n } else {\n const maxScale = Math.max(targetW / data.width, targetH / data.height);\n context.drawImage(\n data,\n b.x1 + backgroundOffsetX,\n b.y1 + backgroundOffsetY,\n data.width * maxScale * backgroundScale,\n data.height * maxScale * backgroundScale\n );\n }\n } else {\n const resW = data.width * backgroundScale;\n const resH = data.height * backgroundScale;\n context.drawImage(data, b.x1 + backgroundOffsetX, b.y1 + backgroundOffsetY, resW, resH);\n }\n } else {\n // debugger;\n // TODO 考虑缓存\n if (backgroundFit && backgroundMode !== 'repeat' && (data.width || data.height)) {\n const resW = data.width;\n const resH = data.height;\n\n if (backgroundMode === 'repeat-x') {\n // 高度适应\n const ratio = targetH / resH;\n w = resW * ratio;\n h = targetH;\n } else if (backgroundMode === 'repeat-y') {\n // 宽度适应\n const ratio = targetW / resW;\n h = resH * ratio;\n w = targetW;\n }\n\n const dpr = context.dpr;\n const canvas = canvasAllocate.allocate({ width: w, height: h, dpr });\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, w, h);\n ctx.drawImage(data, 0, 0, w, h);\n data = canvas.nativeCanvas;\n }\n canvasAllocate.free(canvas);\n }\n const dpr = context.dpr;\n const pattern = context.createPattern(data, backgroundMode);\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n context.fillStyle = pattern;\n context.translate(b.x1, b.y1);\n context.fillRect(0, 0, targetW, targetH);\n context.translate(-b.x1, -b.y1);\n }\n }\n}\n\nexport const defaultBaseBackgroundRenderContribution = new DefaultBaseBackgroundRenderContribution();\n\nexport interface IInteractiveSubRenderContribution {\n render: (\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) => void;\n}\n\n@injectable()\nexport class DefaultBaseInteractiveRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n\n _subRenderContribitions?: IInteractiveSubRenderContribution[];\n constructor(\n @inject(ContributionProvider)\n @named(InteractiveSubRenderContribution)\n protected readonly subRenderContribitions: IContributionProvider<IInteractiveSubRenderContribution>\n ) {}\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this._subRenderContribitions) {\n this._subRenderContribitions = this.subRenderContribitions.getContributions();\n }\n this._subRenderContribitions.forEach(c => {\n c.render(\n graphic,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n graphicAttribute,\n drawContext,\n fillCb,\n strokeCb,\n options\n );\n });\n }\n}\n\nexport class DefaultBaseClipRenderBeforeContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IGraphicAttribute>,\n themeAttribute: IThemeAttribute,\n final?: boolean\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IGraphicAttribute>,\n themeAttribute: IThemeAttribute,\n final?: boolean\n ) => boolean,\n options?: any\n ) {\n const { clipConfig } = graphic.attribute;\n if (!clipConfig) {\n return;\n }\n const clipPath = graphic.getClipPath();\n if (!clipPath) {\n return;\n }\n const draw = !(fillCb || strokeCb);\n const b = graphic.AABBBounds;\n const width = (graphic.attribute as any).width ?? b.width();\n const height = (graphic.attribute as any).height ?? b.height();\n if (draw) {\n context.save();\n }\n context.beginPath();\n if (clipPath.draw(context, [width, height], x + width / 2, y + height / 2, 0) === false) {\n context.closePath();\n }\n if (fillCb) {\n fillCb(context, graphic.attribute, graphicAttribute, true);\n }\n\n if (draw) {\n context.clip();\n }\n }\n}\n\nexport const defaultBaseClipRenderBeforeContribution = new DefaultBaseClipRenderBeforeContribution();\nexport class DefaultBaseClipRenderAfterContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const { clipConfig } = graphic.attribute;\n if (!clipConfig) {\n return;\n }\n const clipPath = graphic.getClipPath();\n if (!clipPath) {\n return;\n }\n if (!(fillCb || strokeCb)) {\n context.restore();\n }\n }\n}\n\nexport const defaultBaseClipRenderAfterContribution = new DefaultBaseClipRenderAfterContribution();\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/contributions/base-contribution-render.ts"],"names":[],"mappings":"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","file":"base-contribution-render.js","sourcesContent":["import type {\n IGraphicAttribute,\n BackgroundSizing,\n IContext2d,\n IGraphic,\n IThemeAttribute,\n IBaseRenderContribution,\n IContributionProvider,\n IDrawContext,\n ISymbol,\n IPath,\n ISymbolGraphicAttribute\n} from '../../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../../common/inversify-lite';\nimport { getTheme } from '../../../../graphic/theme';\nimport { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { ContributionProvider } from '../../../../common/contribution-provider';\nimport { InteractiveSubRenderContribution } from './constants';\n\nexport class DefaultBaseBackgroundRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const {\n background,\n backgroundOpacity = graphic.attribute.fillOpacity ?? graphicAttribute.backgroundOpacity,\n opacity = graphicAttribute.opacity,\n backgroundMode = graphicAttribute.backgroundMode,\n backgroundFit = graphicAttribute.backgroundFit,\n backgroundKeepAspectRatio = graphicAttribute.backgroundKeepAspectRatio,\n backgroundScale = graphicAttribute.backgroundScale,\n backgroundOffsetX = graphicAttribute.backgroundOffsetX,\n backgroundOffsetY = graphicAttribute.backgroundOffsetY,\n backgroundClip = graphicAttribute.backgroundClip,\n backgroundPosition = graphicAttribute.backgroundPosition\n } = graphic.attribute;\n if (!background) {\n return;\n }\n\n if (graphic.backgroundImg && graphic.resources) {\n const res = graphic.resources.get(getBackgroundImage(background) as any);\n if (!res || res.state !== 'success' || !res.data) {\n return;\n }\n\n context.save();\n\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const groupAttribute = getTheme(graphic.parent).group;\n const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = graphic.parent.attribute;\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n context.translate(scrollX, scrollY);\n }\n backgroundClip && context.clip();\n const b = graphic.AABBBounds;\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.globalAlpha = backgroundOpacity * opacity;\n this.doDrawImage(context, res.data, b, {\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio,\n backgroundScale,\n backgroundOffsetX,\n backgroundOffsetY,\n backgroundPosition\n });\n context.restore();\n if (!graphic.transMatrix.onlyTranslate()) {\n context.setTransformForCurrent();\n }\n } else {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.globalAlpha = backgroundOpacity * opacity;\n context.fillStyle = background as string;\n context.fill();\n context.highPerformanceRestore();\n }\n }\n\n protected doDrawImage(context: IContext2d, data: any, b: IBounds, params: IBackgroundImageDrawParams): void {\n drawBackgroundImage(context, data, b, params);\n }\n}\n\nexport const defaultBaseBackgroundRenderContribution = new DefaultBaseBackgroundRenderContribution();\n\nexport type IBackgroundImageDrawParams = {\n backgroundMode: IGraphicAttribute['backgroundMode'];\n backgroundFit: boolean;\n backgroundKeepAspectRatio: boolean;\n backgroundScale?: number;\n backgroundOffsetX?: number;\n backgroundOffsetY?: number;\n backgroundPosition?: IGraphicAttribute['backgroundPosition'];\n};\n\ntype BackgroundPositionValue = number | string;\n\nconst verticalPositionKeywords = new Set(['top', 'center', 'bottom']);\n\nexport function getBackgroundImage(background: any) {\n return background?.background ?? background;\n}\n\nexport function resolveBackgroundSizing({\n backgroundFit,\n backgroundKeepAspectRatio\n}: Pick<IBackgroundImageDrawParams, 'backgroundFit' | 'backgroundKeepAspectRatio'>): NonNullable<BackgroundSizing> {\n if (backgroundFit) {\n return backgroundKeepAspectRatio ? 'cover' : 'fill';\n }\n return 'auto';\n}\n\nexport function isNoRepeatSizingMode(\n mode: IGraphicAttribute['backgroundMode']\n): mode is Extract<IGraphicAttribute['backgroundMode'], `no-repeat-${string}`> {\n return typeof mode === 'string' && mode.startsWith('no-repeat-');\n}\n\nconst NO_REPEAT_SIZING_MAP: Record<string, BackgroundSizing> = {\n 'no-repeat-cover': 'cover',\n 'no-repeat-contain': 'contain',\n 'no-repeat-fill': 'fill',\n 'no-repeat-auto': 'auto'\n};\n\nexport function resolveBackgroundDrawMode({\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio\n}: Pick<IBackgroundImageDrawParams, 'backgroundMode' | 'backgroundFit' | 'backgroundKeepAspectRatio'>): {\n backgroundRepeatMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';\n backgroundSizing: BackgroundSizing;\n} {\n const sizing = NO_REPEAT_SIZING_MAP[backgroundMode];\n if (sizing) {\n return {\n backgroundRepeatMode: 'no-repeat',\n backgroundSizing: sizing\n };\n }\n\n return {\n backgroundRepeatMode: backgroundMode as 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat',\n backgroundSizing: resolveBackgroundSizing({\n backgroundFit,\n backgroundKeepAspectRatio\n })\n };\n}\n\nfunction isPercentageValue(value: string): boolean {\n return /^-?\\d+(\\.\\d+)?%$/.test(value);\n}\n\nfunction parsePositionToken(\n value: BackgroundPositionValue,\n remainSpace: number,\n startKeyword: 'left' | 'top',\n centerKeyword: 'center',\n endKeyword: 'right' | 'bottom'\n): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n const normalizedValue = `${value ?? ''}`.trim().toLowerCase();\n\n if (!normalizedValue || normalizedValue === startKeyword) {\n return 0;\n }\n if (normalizedValue === centerKeyword) {\n return remainSpace / 2;\n }\n if (normalizedValue === endKeyword) {\n return remainSpace;\n }\n if (isPercentageValue(normalizedValue)) {\n return (remainSpace * parseFloat(normalizedValue)) / 100;\n }\n\n const parsedValue = Number(normalizedValue);\n if (Number.isFinite(parsedValue)) {\n return parsedValue;\n }\n\n return 0;\n}\n\nfunction normalizeBackgroundPosition(\n position?: IGraphicAttribute['backgroundPosition']\n): [BackgroundPositionValue, BackgroundPositionValue] {\n if (Array.isArray(position)) {\n return [position[0] ?? 'left', position[1] ?? 'top'];\n }\n\n const normalizedPosition = `${position ?? 'top-left'}`.trim().toLowerCase().replace(/-/g, ' ');\n const tokens = normalizedPosition.split(/\\s+/).filter(Boolean);\n\n if (tokens.length === 0) {\n return ['left', 'top'];\n }\n\n if (tokens.length === 1) {\n const token = tokens[0];\n if (token === 'center') {\n return ['center', 'center'];\n }\n if (verticalPositionKeywords.has(token)) {\n return ['center', token];\n }\n return [token, 'center'];\n }\n\n let horizontal: BackgroundPositionValue | undefined;\n let vertical: BackgroundPositionValue | undefined;\n const genericTokens: BackgroundPositionValue[] = [];\n\n for (let i = 0; i < 2; i++) {\n const token = tokens[i];\n if (token === 'left' || token === 'right') {\n horizontal = token;\n continue;\n }\n if (token === 'top' || token === 'bottom') {\n vertical = token;\n continue;\n }\n genericTokens.push(token);\n }\n\n if (horizontal == null && genericTokens.length) {\n horizontal = genericTokens.shift();\n }\n if (vertical == null && genericTokens.length) {\n vertical = genericTokens.shift();\n }\n\n return [horizontal ?? 'left', vertical ?? 'top'];\n}\n\nexport function resolveBackgroundPosition(\n position: IGraphicAttribute['backgroundPosition'],\n remainWidth: number,\n remainHeight: number\n) {\n const [horizontalPosition, verticalPosition] = normalizeBackgroundPosition(position);\n return {\n x: parsePositionToken(horizontalPosition, remainWidth, 'left', 'center', 'right'),\n y: parsePositionToken(verticalPosition, remainHeight, 'top', 'center', 'bottom')\n };\n}\n\nfunction pickRenderableDimension(...values: any[]): number | null {\n for (const value of values) {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return value;\n }\n }\n return null;\n}\n\nexport function resolveRenderableImageSize(data: any): { width: number; height: number } | null {\n if (!data) {\n return null;\n }\n\n // DOM image-like resources may expose intrinsic size on naturalWidth/videoWidth\n // while width/height stays 0, so prefer intrinsic dimensions when available.\n const width = pickRenderableDimension(data.naturalWidth, data.videoWidth, data.width);\n const height = pickRenderableDimension(data.naturalHeight, data.videoHeight, data.height);\n\n if (width == null || height == null) {\n return null;\n }\n\n return { width, height };\n}\n\nexport function drawBackgroundImage(\n context: IContext2d,\n data: any,\n b: IBounds,\n params: IBackgroundImageDrawParams\n): void {\n const {\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio,\n backgroundScale = 1,\n backgroundOffsetX = 0,\n backgroundOffsetY = 0,\n backgroundPosition = 'top-left'\n } = params;\n const targetW = b.width();\n const targetH = b.height();\n const sourceSize = resolveRenderableImageSize(data);\n const { backgroundRepeatMode, backgroundSizing: resolvedBackgroundSizing } = resolveBackgroundDrawMode({\n backgroundMode,\n backgroundFit,\n backgroundKeepAspectRatio\n });\n let w = targetW;\n let h = targetH;\n\n if (targetW <= 0 || targetH <= 0) {\n return;\n }\n\n if (backgroundRepeatMode === 'no-repeat') {\n let drawWidth = sourceSize?.width ?? targetW;\n let drawHeight = sourceSize?.height ?? targetH;\n\n if ((resolvedBackgroundSizing === 'cover' || resolvedBackgroundSizing === 'contain') && sourceSize) {\n const scale =\n resolvedBackgroundSizing === 'cover'\n ? Math.max(targetW / sourceSize.width, targetH / sourceSize.height)\n : Math.min(targetW / sourceSize.width, targetH / sourceSize.height);\n drawWidth = sourceSize.width * scale;\n drawHeight = sourceSize.height * scale;\n } else if (resolvedBackgroundSizing === 'fill') {\n drawWidth = targetW;\n drawHeight = targetH;\n }\n\n drawWidth *= backgroundScale;\n drawHeight *= backgroundScale;\n\n const { x, y } = resolveBackgroundPosition(backgroundPosition, targetW - drawWidth, targetH - drawHeight);\n context.drawImage(data, b.x1 + x + backgroundOffsetX, b.y1 + y + backgroundOffsetY, drawWidth, drawHeight);\n return;\n }\n\n // TODO 考虑缓存\n if (backgroundFit && backgroundRepeatMode !== 'repeat' && sourceSize) {\n const resW = sourceSize.width;\n const resH = sourceSize.height;\n\n if (backgroundRepeatMode === 'repeat-x') {\n // 高度适应\n const ratio = targetH / resH;\n w = resW * ratio;\n h = targetH;\n } else if (backgroundRepeatMode === 'repeat-y') {\n // 宽度适应\n const ratio = targetW / resW;\n h = resH * ratio;\n w = targetW;\n }\n\n const dpr = context.dpr;\n const canvas = canvasAllocate.allocate({ width: w, height: h, dpr });\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, w, h);\n ctx.drawImage(data, 0, 0, w, h);\n data = canvas.nativeCanvas;\n }\n canvasAllocate.free(canvas);\n }\n const dpr = context.dpr;\n const pattern = context.createPattern(data, backgroundRepeatMode);\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n context.fillStyle = pattern;\n context.translate(b.x1, b.y1);\n context.fillRect(0, 0, targetW, targetH);\n context.translate(-b.x1, -b.y1);\n}\n\nexport interface IInteractiveSubRenderContribution {\n render: (\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) => void;\n}\n\n@injectable()\nexport class DefaultBaseInteractiveRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n\n _subRenderContribitions?: IInteractiveSubRenderContribution[];\n constructor(\n @inject(ContributionProvider)\n @named(InteractiveSubRenderContribution)\n protected readonly subRenderContribitions: IContributionProvider<IInteractiveSubRenderContribution>\n ) {}\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this._subRenderContribitions) {\n this._subRenderContribitions = this.subRenderContribitions.getContributions();\n }\n this._subRenderContribitions.forEach(c => {\n c.render(\n graphic,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n graphicAttribute,\n drawContext,\n fillCb,\n strokeCb,\n options\n );\n });\n }\n}\n\nexport class DefaultBaseClipRenderBeforeContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IGraphicAttribute>,\n themeAttribute: IThemeAttribute,\n final?: boolean\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IGraphicAttribute>,\n themeAttribute: IThemeAttribute,\n final?: boolean\n ) => boolean,\n options?: any\n ) {\n const { clipConfig } = graphic.attribute;\n if (!clipConfig) {\n return;\n }\n const clipPath = graphic.getClipPath();\n if (!clipPath) {\n return;\n }\n const draw = !(fillCb || strokeCb);\n const b = graphic.AABBBounds;\n const width = (graphic.attribute as any).width ?? b.width();\n const height = (graphic.attribute as any).height ?? b.height();\n if (draw) {\n context.save();\n }\n context.beginPath();\n if (clipPath.draw(context, [width, height], x + width / 2, y + height / 2, 0) === false) {\n context.closePath();\n }\n if (fillCb) {\n fillCb(context, graphic.attribute, graphicAttribute, true);\n }\n\n if (draw) {\n context.clip();\n }\n }\n}\n\nexport const defaultBaseClipRenderBeforeContribution = new DefaultBaseClipRenderBeforeContribution();\nexport class DefaultBaseClipRenderAfterContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const { clipConfig } = graphic.attribute;\n if (!clipConfig) {\n return;\n }\n const clipPath = graphic.getClipPath();\n if (!clipPath) {\n return;\n }\n if (!(fillCb || strokeCb)) {\n context.restore();\n }\n }\n}\n\nexport const defaultBaseClipRenderAfterContribution = new DefaultBaseClipRenderAfterContribution();\n"]}
@@ -18,7 +18,7 @@ export declare class DefaultBaseTextureRenderContribution implements IBaseRender
18
18
  initTextureMap(ctx: IContext2d, stage: IStage): void;
19
19
  drawShape(graphic: IGraphic, context: IContext2d, x: number, y: number, doFill: boolean, doStroke: boolean, fVisible: boolean, sVisible: boolean, graphicAttribute: Required<IGraphicAttribute>, drawContext: IDrawContext, fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean, strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean, options?: any): void;
20
20
  protected drawTexture(texture: string | HTMLImageElement | HTMLCanvasElement, graphic: IGraphic, context: IContext2d, x: number, y: number, graphicAttribute: Required<IGraphicAttribute>, textureColor: string, textureSize: number, texturePadding: number): void;
21
- protected getPatternCacheKey(texture: string | HTMLImageElement | HTMLCanvasElement, textureSize: number, texturePadding: number, textureColor: string, dpr: number): string | HTMLImageElement | HTMLCanvasElement;
22
- protected createResourcePattern(texture: string | HTMLImageElement | HTMLCanvasElement, graphic: IGraphic, context: IContext2d): CanvasPattern;
21
+ protected getPatternCacheKey(texture: string | HTMLImageElement | HTMLCanvasElement, textureSize: number, texturePadding: number, textureColor: string, dpr: number, textureRadius: number): string | HTMLImageElement | HTMLCanvasElement;
22
+ protected createResourcePattern(texture: string | HTMLImageElement | HTMLCanvasElement, graphic: IGraphic, context: IContext2d, texturePadding: number, textureRadius: number): CanvasPattern;
23
23
  }
24
24
  export declare const defaultBaseTextureRenderContribution: DefaultBaseTextureRenderContribution;
@@ -104,10 +104,10 @@ export class DefaultBaseTextureRenderContribution {
104
104
  texture && this.drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding);
105
105
  }
106
106
  drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding) {
107
- var _a;
107
+ var _a, _b, _c, _d, _e, _f;
108
108
  const {textureRatio: textureRatio = graphicAttribute.textureRatio, textureOptions: textureOptions = null} = graphic.attribute;
109
109
  let pattern = null;
110
- const patternKey = this.getPatternCacheKey(texture, textureSize, texturePadding, textureColor, context.dpr);
110
+ const textureRadius = null !== (_a = null == textureOptions ? void 0 : textureOptions.radius) && void 0 !== _a ? _a : 0, patternKey = this.getPatternCacheKey(texture, textureSize, texturePadding, textureColor, context.dpr, textureRadius);
111
111
  if (null !== patternKey && (pattern = this.textureMap.get(patternKey)), !pattern) {
112
112
  if ("string" == typeof texture) switch (texture) {
113
113
  case "circle":
@@ -141,7 +141,8 @@ export class DefaultBaseTextureRenderContribution {
141
141
  case "grid":
142
142
  pattern = this.createGridPattern(textureSize, texturePadding, textureColor, context);
143
143
  }
144
- pattern || (pattern = this.createResourcePattern(texture, graphic, context)), pattern && null !== patternKey && this.textureMap.set(patternKey, pattern);
144
+ pattern || (pattern = this.createResourcePattern(texture, graphic, context, texturePadding, textureRadius)),
145
+ pattern && null !== patternKey && this.textureMap.set(patternKey, pattern);
145
146
  }
146
147
  if ("string" == typeof texture && textureOptions && textureOptions.dynamicTexture) {
147
148
  const {gridConfig: gridConfig = {}, useNewCanvas: useNewCanvas} = textureOptions, b = graphic.AABBBounds;
@@ -173,14 +174,26 @@ export class DefaultBaseTextureRenderContribution {
173
174
  const parsedPath = this._tempSymbolGraphic.getParsedPath();
174
175
  for (let i = 0; i < gridRows; i++) for (let j = 0; j < gridColumns; j++) {
175
176
  const _x = x + cellSize / 2 + j * cellSize, _y = y + cellSize / 2 + i * cellSize;
176
- null === (_a = textureOptions.beforeDynamicTexture) || void 0 === _a || _a.call(textureOptions, context, i, j, gridRows, gridColumns, textureRatio, graphic, b.width(), b.height()),
177
+ null === (_b = textureOptions.beforeDynamicTexture) || void 0 === _b || _b.call(textureOptions, context, i, j, gridRows, gridColumns, textureRatio, graphic, b.width(), b.height()),
177
178
  context.beginPath(), !1 === parsedPath.draw(context, Math.min(sizeW - gutterColumn, sizeH - gutterRow), _x, _y, 0) && context.closePath(),
178
179
  context.fillStyle = textureColor, textureOptions.dynamicTexture(context, i, j, gridRows, gridColumns, textureRatio, graphic, b.width(), b.height());
179
180
  }
180
181
  useNewCanvas && (originalContext.globalAlpha = 1, originalContext.drawImage(newCanvas.nativeCanvas, 0, 0, newCanvas.nativeCanvas.width, newCanvas.nativeCanvas.height, b.x1, b.y1, b.width() * originalContext.dpr, b.height() * originalContext.dpr)),
181
182
  originalContext.restore();
182
- } else if (pattern) context.highPerformanceSave(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute),
183
- context.fillStyle = pattern, context.fill(), context.highPerformanceRestore(); else if ("wave" === texture) {
183
+ } else if (pattern) {
184
+ if (pattern.setTransform) {
185
+ const alignToGraphic = !!(null == textureOptions ? void 0 : textureOptions.alignToGraphic), alignOffsetX = null !== (_c = null == textureOptions ? void 0 : textureOptions.alignOffsetX) && void 0 !== _c ? _c : 0, alignOffsetY = null !== (_d = null == textureOptions ? void 0 : textureOptions.alignOffsetY) && void 0 !== _d ? _d : 0;
186
+ let translateX = 0, translateY = 0;
187
+ if (alignToGraphic) {
188
+ const m = context.currentMatrix;
189
+ translateX = (null !== (_e = null == m ? void 0 : m.e) && void 0 !== _e ? _e : 0) + x + alignOffsetX,
190
+ translateY = (null !== (_f = null == m ? void 0 : m.f) && void 0 !== _f ? _f : 0) + y + alignOffsetY;
191
+ } else (alignOffsetX || alignOffsetY) && (translateX = alignOffsetX, translateY = alignOffsetY);
192
+ pattern.setTransform(new DOMMatrix([ 1 / context.dpr, 0, 0, 1 / context.dpr, translateX, translateY ]));
193
+ }
194
+ context.highPerformanceSave(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute),
195
+ context.fillStyle = pattern, context.fill(), context.highPerformanceRestore();
196
+ } else if ("wave" === texture) {
184
197
  context.save(), context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute),
185
198
  context.clip();
186
199
  const b = graphic.AABBBounds;
@@ -189,13 +202,38 @@ export class DefaultBaseTextureRenderContribution {
189
202
  }), x + b.x1 - x, y + b.y1 - y), context.restore();
190
203
  }
191
204
  }
192
- getPatternCacheKey(texture, textureSize, texturePadding, textureColor, dpr) {
193
- return "string" != typeof texture ? texture : "wave" === texture ? null : `${texture}-${textureSize}-${texturePadding}-${textureColor}-${dpr}`;
205
+ getPatternCacheKey(texture, textureSize, texturePadding, textureColor, dpr, textureRadius) {
206
+ return "string" != typeof texture ? texturePadding > 0 || textureRadius > 0 ? null : texture : "wave" === texture ? null : `${texture}-${textureSize}-${texturePadding}-${textureColor}-${dpr}`;
194
207
  }
195
- createResourcePattern(texture, graphic, context) {
208
+ createResourcePattern(texture, graphic, context, texturePadding, textureRadius) {
196
209
  var _a;
197
210
  const resource = null === (_a = graphic.resources) || void 0 === _a ? void 0 : _a.get(texture), data = "success" === (null == resource ? void 0 : resource.state) ? resource.data : "object" == typeof texture ? texture : null;
198
211
  if (!data) return null;
212
+ if (texturePadding > 0 || textureRadius > 0) {
213
+ const w = data.naturalWidth || data.width, h = data.naturalHeight || data.height;
214
+ if (w > 0 && h > 0) {
215
+ const tileW = w + 2 * texturePadding, tileH = h + 2 * texturePadding, canvas = canvasAllocate.allocate({
216
+ width: tileW,
217
+ height: tileH,
218
+ dpr: context.dpr
219
+ }), ctx = canvas.getContext("2d");
220
+ if (ctx) {
221
+ if (ctx.inuse = !0, ctx.clearMatrix(), ctx.setTransformForCurrent(!0), ctx.clearRect(0, 0, tileW, tileH),
222
+ textureRadius > 0) {
223
+ const r = Math.max(0, Math.min(textureRadius, Math.min(w, h) / 2)), x0 = texturePadding, y0 = texturePadding, x1 = x0 + w, y1 = y0 + h;
224
+ ctx.beginPath(), ctx.moveTo(x0 + r, y0), ctx.lineTo(x1 - r, y0), ctx.quadraticCurveTo(x1, y0, x1, y0 + r),
225
+ ctx.lineTo(x1, y1 - r), ctx.quadraticCurveTo(x1, y1, x1 - r, y1), ctx.lineTo(x0 + r, y1),
226
+ ctx.quadraticCurveTo(x0, y1, x0, y1 - r), ctx.lineTo(x0, y0 + r), ctx.quadraticCurveTo(x0, y0, x0 + r, y0),
227
+ ctx.closePath(), ctx.clip();
228
+ }
229
+ ctx.drawImage(data, texturePadding, texturePadding, w, h);
230
+ const pattern = context.createPattern(canvas.nativeCanvas, "repeat");
231
+ return (null == pattern ? void 0 : pattern.setTransform) && pattern.setTransform(new DOMMatrix([ 1 / context.dpr, 0, 0, 1 / context.dpr, 0, 0 ])),
232
+ canvasAllocate.free(canvas), pattern;
233
+ }
234
+ canvasAllocate.free(canvas);
235
+ }
236
+ }
199
237
  const pattern = context.createPattern(data, "repeat");
200
238
  return (null == pattern ? void 0 : pattern.setTransform) && pattern.setTransform(new DOMMatrix([ 1 / context.dpr, 0, 0, 1 / context.dpr, 0, 0 ])),
201
239
  pattern;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/contributions/render/contributions/base-texture-contribution-render.ts"],"names":[],"mappings":"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","file":"base-texture-contribution-render.js","sourcesContent":["import { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { createSymbol } from '../../../../graphic';\nimport type {\n IBaseRenderContribution,\n ICanvas,\n IContext2d,\n IDrawContext,\n IGraphic,\n IGraphicAttribute,\n IStage,\n ISymbol,\n IThemeAttribute\n} from '../../../../interface';\nimport { pi2 } from '@visactor/vutils';\n\nfunction formatRatio(ratio: number) {\n if (ratio <= 0.5) {\n return ratio * 4 - 1;\n }\n return -4 * ratio + 3;\n}\n\nfunction drawWave(\n ctx: IContext2d,\n ratio: number,\n boundsWidth: number,\n boundsHeight: number,\n textureOptions: {\n fill: string;\n percent: number;\n frequency: number;\n amplitude: number;\n opacity?: number;\n phi?: number;\n },\n offsetX: number,\n offsetY: number\n) {\n const { fill = 'orange', percent = 0.6, frequency = 4, opacity, phi = 0 } = textureOptions;\n let { amplitude = 10 } = textureOptions;\n amplitude = amplitude * formatRatio(ratio);\n\n const height = boundsHeight * (1 - percent);\n const width = boundsWidth;\n\n const step = Math.max(Math.round(width / 70), 2);\n ctx.beginPath();\n ctx.moveTo(0 + offsetX, boundsHeight + offsetY);\n ctx.lineTo(0 + offsetX, height + offsetY);\n const delta = (width / frequency) * ratio;\n const c = width / Math.PI / (frequency * 2);\n\n for (let i = 0; i < width; i += step) {\n const y = amplitude * Math.sin((i + delta + phi) / c + phi);\n ctx.lineTo(i + offsetX, height + y + offsetY);\n }\n\n ctx.lineTo(width + offsetX, boundsHeight + offsetY);\n ctx.closePath();\n\n ctx.fillStyle = fill;\n if (isFinite(opacity)) {\n ctx.globalAlpha = opacity;\n }\n ctx.fill();\n}\n\nexport class DefaultBaseTextureRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n textureMap?: Map<string | HTMLImageElement | HTMLCanvasElement, CanvasPattern>;\n order: number = 10;\n _tempSymbolGraphic: ISymbol | null = null;\n\n createCommonPattern(\n size: number,\n padding: number,\n color: string,\n targetContext: IContext2d,\n cb: (r: number, targetContext: IContext2d) => void\n ) {\n const r = (size - padding * 2) / 2;\n const dpr = targetContext.dpr;\n const canvas = canvasAllocate.allocate({ width: size, height: size, dpr });\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, size, size);\n //setup up design for pattern\n cb(r, ctx);\n const pattern = targetContext.createPattern(canvas.nativeCanvas, 'repeat');\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n\n canvasAllocate.free(canvas);\n return pattern;\n }\n\n createCirclePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.fillStyle = color;\n ctx.arc(r, r, r, 0, pi2);\n ctx.fill();\n });\n }\n\n createDiamondPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = size / 2;\n const y = x;\n ctx.fillStyle = color;\n ctx.moveTo(x, y - r);\n ctx.lineTo(r + x, y);\n ctx.lineTo(x, y + r);\n ctx.lineTo(x - r, y);\n ctx.closePath();\n ctx.fill();\n });\n }\n\n createRectPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, r * 2);\n });\n }\n\n createVerticalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = 0;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, size);\n });\n }\n\n createHorizontalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = 0;\n const y = padding;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, size, r * 2);\n });\n }\n\n createBiasLRLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(0, 0);\n ctx.lineTo(size, size);\n const dx = size / 2;\n const dy = -dx;\n ctx.moveTo(dx, dy);\n ctx.lineTo(dx + size, dy + size);\n ctx.moveTo(-dx, -dy);\n ctx.lineTo(-dx + size, -dy + size);\n ctx.stroke();\n });\n }\n\n createBiasRLLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(size, 0);\n ctx.lineTo(0, size);\n const dx = size / 2;\n const dy = dx;\n ctx.moveTo(size + dx, dy);\n ctx.lineTo(dx, dy + size);\n ctx.moveTo(size - dx, -dy);\n ctx.lineTo(-dx, -dy + size);\n ctx.stroke();\n });\n }\n\n createGridPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r, r);\n ctx.fillRect(x + r, y + r, r, r);\n });\n }\n\n initTextureMap(ctx: IContext2d, stage: IStage) {\n this.textureMap = new Map();\n // ResourceLoader.GetImage(rect1, {\n // imageLoadFail: () => {\n // return;\n // },\n // imageLoadSuccess: (url, img) => {\n // const pattern = ctx.createPattern(img, 'repeat');\n // this.textureMap.set('rect1', pattern);\n // stage && stage.renderNextFrame();\n // }\n // });\n }\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this.textureMap) {\n this.initTextureMap(context, graphic.stage);\n }\n const {\n texture = graphicAttribute.texture,\n textureColor = graphicAttribute.textureColor,\n textureSize = graphicAttribute.textureSize,\n texturePadding = graphicAttribute.texturePadding\n } = graphic.attribute;\n if (!texture) {\n return;\n }\n this.drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding);\n }\n\n protected drawTexture(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n graphicAttribute: Required<IGraphicAttribute>,\n textureColor: string,\n textureSize: number,\n texturePadding: number\n ) {\n const { textureRatio = graphicAttribute.textureRatio, textureOptions = null } = graphic.attribute;\n let pattern: CanvasPattern = null;\n const patternKey = this.getPatternCacheKey(texture, textureSize, texturePadding, textureColor, context.dpr);\n if (patternKey !== null) {\n pattern = this.textureMap.get(patternKey);\n }\n\n if (!pattern) {\n if (typeof texture === 'string') {\n switch (texture) {\n case 'circle':\n pattern = this.createCirclePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'diamond':\n pattern = this.createDiamondPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'rect':\n pattern = this.createRectPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'vertical-line':\n pattern = this.createVerticalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'horizontal-line':\n pattern = this.createHorizontalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-lr':\n pattern = this.createBiasLRLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-rl':\n pattern = this.createBiasRLLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'grid':\n pattern = this.createGridPattern(textureSize, texturePadding, textureColor, context);\n break;\n }\n }\n if (!pattern) {\n pattern = this.createResourcePattern(texture, graphic, context);\n }\n if (pattern && patternKey !== null) {\n this.textureMap.set(patternKey, pattern);\n }\n }\n\n if (typeof texture === 'string' && textureOptions && textureOptions.dynamicTexture) {\n // 动态纹理\n const { gridConfig = {}, useNewCanvas } = textureOptions;\n const b = graphic.AABBBounds;\n x = b.x1;\n y = b.y1;\n const originalContext = context;\n\n let newCanvas: ICanvas;\n if (useNewCanvas) {\n newCanvas = canvasAllocate.allocate({ width: b.width(), height: b.height(), dpr: context.dpr });\n const ctx = newCanvas.getContext('2d');\n ctx.clearRect(0, 0, b.width(), b.height());\n x = 0;\n y = 0;\n context = ctx;\n }\n originalContext.save();\n // 避免本级已经transform过了,再用Bounds就重复了\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;\n originalContext.setTransformFromMatrix(graphic.parent.globalTransMatrix);\n originalContext.translate(scrollX, scrollY, true);\n }\n originalContext.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n originalContext.clip();\n\n const width = b.width();\n const height = b.height();\n const padding = texturePadding;\n const cellSize = textureSize;\n const gridColumns = gridConfig.columns ? gridConfig.columns : Math.ceil(width / cellSize);\n const gridRows = gridConfig.rows ? gridConfig.rows : Math.ceil(height / cellSize);\n const gutterColumn = gridConfig.gutterColumn ? gridConfig.gutterColumn : padding * 2;\n const gutterRow = gridConfig.gutterRow ? gridConfig.gutterRow : padding * 2;\n if (!this._tempSymbolGraphic) {\n this._tempSymbolGraphic = createSymbol({});\n }\n const sizeW = gridConfig.columns ? width / gridConfig.columns : cellSize;\n const sizeH = gridConfig.rows ? height / gridConfig.rows : cellSize;\n this._tempSymbolGraphic.setAttributes({\n size: [sizeW - gutterColumn, sizeH - gutterRow],\n symbolType: texture\n });\n const parsedPath = this._tempSymbolGraphic.getParsedPath();\n for (let i = 0; i < gridRows; i++) {\n for (let j = 0; j < gridColumns; j++) {\n const _x = x + cellSize / 2 + j * cellSize;\n const _y = y + cellSize / 2 + i * cellSize;\n textureOptions.beforeDynamicTexture?.(\n context,\n i,\n j,\n gridRows,\n gridColumns,\n textureRatio,\n graphic,\n b.width(),\n b.height()\n );\n context.beginPath();\n if (parsedPath.draw(context, Math.min(sizeW - gutterColumn, sizeH - gutterRow), _x, _y, 0) === false) {\n context.closePath();\n }\n context.fillStyle = textureColor;\n textureOptions.dynamicTexture(\n context,\n i,\n j,\n gridRows,\n gridColumns,\n textureRatio,\n graphic,\n b.width(),\n b.height()\n );\n }\n }\n if (useNewCanvas) {\n // 不使用外部的opacity,动态纹理的opacity自己设置\n originalContext.globalAlpha = 1;\n originalContext.drawImage(\n newCanvas.nativeCanvas,\n 0,\n 0,\n newCanvas.nativeCanvas.width,\n newCanvas.nativeCanvas.height,\n b.x1,\n b.y1,\n b.width() * originalContext.dpr,\n b.height() * originalContext.dpr\n );\n }\n\n originalContext.restore();\n } else if (pattern) {\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = pattern;\n context.fill();\n context.highPerformanceRestore();\n } else if (texture === 'wave') {\n context.save();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.clip();\n const b = graphic.AABBBounds;\n drawWave(\n context,\n textureRatio,\n b.width(),\n b.height(),\n { ...(textureOptions || {}), fill: textureColor },\n x + b.x1 - x,\n y + b.y1 - y\n );\n context.restore();\n }\n }\n\n protected getPatternCacheKey(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n textureSize: number,\n texturePadding: number,\n textureColor: string,\n dpr: number\n ) {\n if (typeof texture !== 'string') {\n return texture;\n }\n if (texture === 'wave') {\n return null;\n }\n return `${texture}-${textureSize}-${texturePadding}-${textureColor}-${dpr}`;\n }\n\n protected createResourcePattern(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n graphic: IGraphic,\n context: IContext2d\n ) {\n const resource = graphic.resources?.get(texture as any);\n const data = resource?.state === 'success' ? resource.data : typeof texture === 'object' ? texture : null;\n if (!data) {\n return null;\n }\n const pattern = context.createPattern(data, 'repeat');\n pattern?.setTransform && pattern.setTransform(new DOMMatrix([1 / context.dpr, 0, 0, 1 / context.dpr, 0, 0]));\n return pattern;\n }\n}\n\nexport const defaultBaseTextureRenderContribution = new DefaultBaseTextureRenderContribution();\n"]}
1
+ {"version":3,"sources":["../src/render/contributions/render/contributions/base-texture-contribution-render.ts"],"names":[],"mappings":"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","file":"base-texture-contribution-render.js","sourcesContent":["import { canvasAllocate } from '../../../../allocator/canvas-allocate';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { createSymbol } from '../../../../graphic';\nimport type {\n IBaseRenderContribution,\n ICanvas,\n IContext2d,\n IDrawContext,\n IGraphic,\n IGraphicAttribute,\n IStage,\n ISymbol,\n IThemeAttribute\n} from '../../../../interface';\nimport { pi2 } from '@visactor/vutils';\n\nfunction formatRatio(ratio: number) {\n if (ratio <= 0.5) {\n return ratio * 4 - 1;\n }\n return -4 * ratio + 3;\n}\n\nfunction drawWave(\n ctx: IContext2d,\n ratio: number,\n boundsWidth: number,\n boundsHeight: number,\n textureOptions: {\n fill?: string;\n percent?: number;\n frequency?: number;\n amplitude?: number;\n opacity?: number;\n phi?: number;\n },\n offsetX: number,\n offsetY: number\n) {\n const { fill = 'orange', percent = 0.6, frequency = 4, opacity, phi = 0 } = textureOptions;\n let { amplitude = 10 } = textureOptions;\n amplitude = amplitude * formatRatio(ratio);\n\n const height = boundsHeight * (1 - percent);\n const width = boundsWidth;\n\n const step = Math.max(Math.round(width / 70), 2);\n ctx.beginPath();\n ctx.moveTo(0 + offsetX, boundsHeight + offsetY);\n ctx.lineTo(0 + offsetX, height + offsetY);\n const delta = (width / frequency) * ratio;\n const c = width / Math.PI / (frequency * 2);\n\n for (let i = 0; i < width; i += step) {\n const y = amplitude * Math.sin((i + delta + phi) / c + phi);\n ctx.lineTo(i + offsetX, height + y + offsetY);\n }\n\n ctx.lineTo(width + offsetX, boundsHeight + offsetY);\n ctx.closePath();\n\n ctx.fillStyle = fill;\n if (isFinite(opacity)) {\n ctx.globalAlpha = opacity;\n }\n ctx.fill();\n}\n\nexport class DefaultBaseTextureRenderContribution implements IBaseRenderContribution<IGraphic, IGraphicAttribute> {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n textureMap?: Map<string | HTMLImageElement | HTMLCanvasElement, CanvasPattern>;\n order: number = 10;\n _tempSymbolGraphic: ISymbol | null = null;\n\n createCommonPattern(\n size: number,\n padding: number,\n color: string,\n targetContext: IContext2d,\n cb: (r: number, targetContext: IContext2d) => void\n ) {\n const r = (size - padding * 2) / 2;\n const dpr = targetContext.dpr;\n const canvas = canvasAllocate.allocate({ width: size, height: size, dpr });\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, size, size);\n //setup up design for pattern\n cb(r, ctx);\n const pattern = targetContext.createPattern(canvas.nativeCanvas, 'repeat');\n pattern.setTransform && pattern.setTransform(new DOMMatrix([1 / dpr, 0, 0, 1 / dpr, 0, 0]));\n\n canvasAllocate.free(canvas);\n return pattern;\n }\n\n createCirclePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.fillStyle = color;\n ctx.arc(r, r, r, 0, pi2);\n ctx.fill();\n });\n }\n\n createDiamondPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = size / 2;\n const y = x;\n ctx.fillStyle = color;\n ctx.moveTo(x, y - r);\n ctx.lineTo(r + x, y);\n ctx.lineTo(x, y + r);\n ctx.lineTo(x - r, y);\n ctx.closePath();\n ctx.fill();\n });\n }\n\n createRectPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, r * 2);\n });\n }\n\n createVerticalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = 0;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r * 2, size);\n });\n }\n\n createHorizontalLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = 0;\n const y = padding;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, size, r * 2);\n });\n }\n\n createBiasLRLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(0, 0);\n ctx.lineTo(size, size);\n const dx = size / 2;\n const dy = -dx;\n ctx.moveTo(dx, dy);\n ctx.lineTo(dx + size, dy + size);\n ctx.moveTo(-dx, -dy);\n ctx.lineTo(-dx + size, -dy + size);\n ctx.stroke();\n });\n }\n\n createBiasRLLinePattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n ctx.strokeStyle = color;\n ctx.lineWidth = r;\n ctx.moveTo(size, 0);\n ctx.lineTo(0, size);\n const dx = size / 2;\n const dy = dx;\n ctx.moveTo(size + dx, dy);\n ctx.lineTo(dx, dy + size);\n ctx.moveTo(size - dx, -dy);\n ctx.lineTo(-dx, -dy + size);\n ctx.stroke();\n });\n }\n\n createGridPattern(size: number, padding: number, color: string, targetContext: IContext2d) {\n return this.createCommonPattern(size, padding, color, targetContext, (r, ctx) => {\n const x = padding;\n const y = x;\n ctx.fillStyle = color;\n ctx.fillRect(x, y, r, r);\n ctx.fillRect(x + r, y + r, r, r);\n });\n }\n\n initTextureMap(ctx: IContext2d, stage: IStage) {\n this.textureMap = new Map();\n // ResourceLoader.GetImage(rect1, {\n // imageLoadFail: () => {\n // return;\n // },\n // imageLoadSuccess: (url, img) => {\n // const pattern = ctx.createPattern(img, 'repeat');\n // this.textureMap.set('rect1', pattern);\n // stage && stage.renderNextFrame();\n // }\n // });\n }\n\n drawShape(\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required<IGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial<IGraphicAttribute>, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n if (!this.textureMap) {\n this.initTextureMap(context, graphic.stage);\n }\n const {\n texture = graphicAttribute.texture,\n textureColor = graphicAttribute.textureColor,\n textureSize = graphicAttribute.textureSize,\n texturePadding = graphicAttribute.texturePadding\n } = graphic.attribute;\n if (!texture) {\n return;\n }\n this.drawTexture(texture, graphic, context, x, y, graphicAttribute, textureColor, textureSize, texturePadding);\n }\n\n protected drawTexture(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n graphic: IGraphic,\n context: IContext2d,\n x: number,\n y: number,\n graphicAttribute: Required<IGraphicAttribute>,\n textureColor: string,\n textureSize: number,\n texturePadding: number\n ) {\n const { textureRatio = graphicAttribute.textureRatio, textureOptions = null } = graphic.attribute;\n let pattern: CanvasPattern = null;\n const textureRadius = textureOptions?.radius ?? 0;\n const patternKey = this.getPatternCacheKey(\n texture,\n textureSize,\n texturePadding,\n textureColor,\n context.dpr,\n textureRadius\n );\n if (patternKey !== null) {\n pattern = this.textureMap.get(patternKey);\n }\n\n if (!pattern) {\n if (typeof texture === 'string') {\n switch (texture) {\n case 'circle':\n pattern = this.createCirclePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'diamond':\n pattern = this.createDiamondPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'rect':\n pattern = this.createRectPattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'vertical-line':\n pattern = this.createVerticalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'horizontal-line':\n pattern = this.createHorizontalLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-lr':\n pattern = this.createBiasLRLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'bias-rl':\n pattern = this.createBiasRLLinePattern(textureSize, texturePadding, textureColor, context);\n break;\n case 'grid':\n pattern = this.createGridPattern(textureSize, texturePadding, textureColor, context);\n break;\n }\n }\n if (!pattern) {\n pattern = this.createResourcePattern(texture, graphic, context, texturePadding, textureRadius);\n }\n if (pattern && patternKey !== null) {\n this.textureMap.set(patternKey, pattern);\n }\n }\n\n if (typeof texture === 'string' && textureOptions && textureOptions.dynamicTexture) {\n // 动态纹理\n const { gridConfig = {}, useNewCanvas } = textureOptions;\n const b = graphic.AABBBounds;\n x = b.x1;\n y = b.y1;\n const originalContext = context;\n\n let newCanvas: ICanvas;\n if (useNewCanvas) {\n newCanvas = canvasAllocate.allocate({ width: b.width(), height: b.height(), dpr: context.dpr });\n const ctx = newCanvas.getContext('2d');\n ctx.clearRect(0, 0, b.width(), b.height());\n x = 0;\n y = 0;\n context = ctx;\n }\n originalContext.save();\n // 避免本级已经transform过了,再用Bounds就重复了\n if (graphic.parent && !graphic.transMatrix.onlyTranslate()) {\n const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;\n originalContext.setTransformFromMatrix(graphic.parent.globalTransMatrix);\n originalContext.translate(scrollX, scrollY, true);\n }\n originalContext.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n originalContext.clip();\n\n const width = b.width();\n const height = b.height();\n const padding = texturePadding;\n const cellSize = textureSize;\n const gridColumns = gridConfig.columns ? gridConfig.columns : Math.ceil(width / cellSize);\n const gridRows = gridConfig.rows ? gridConfig.rows : Math.ceil(height / cellSize);\n const gutterColumn = gridConfig.gutterColumn ? gridConfig.gutterColumn : padding * 2;\n const gutterRow = gridConfig.gutterRow ? gridConfig.gutterRow : padding * 2;\n if (!this._tempSymbolGraphic) {\n this._tempSymbolGraphic = createSymbol({});\n }\n const sizeW = gridConfig.columns ? width / gridConfig.columns : cellSize;\n const sizeH = gridConfig.rows ? height / gridConfig.rows : cellSize;\n this._tempSymbolGraphic.setAttributes({\n size: [sizeW - gutterColumn, sizeH - gutterRow],\n symbolType: texture\n });\n const parsedPath = this._tempSymbolGraphic.getParsedPath();\n for (let i = 0; i < gridRows; i++) {\n for (let j = 0; j < gridColumns; j++) {\n const _x = x + cellSize / 2 + j * cellSize;\n const _y = y + cellSize / 2 + i * cellSize;\n textureOptions.beforeDynamicTexture?.(\n context,\n i,\n j,\n gridRows,\n gridColumns,\n textureRatio,\n graphic,\n b.width(),\n b.height()\n );\n context.beginPath();\n if (parsedPath.draw(context, Math.min(sizeW - gutterColumn, sizeH - gutterRow), _x, _y, 0) === false) {\n context.closePath();\n }\n context.fillStyle = textureColor;\n textureOptions.dynamicTexture(\n context,\n i,\n j,\n gridRows,\n gridColumns,\n textureRatio,\n graphic,\n b.width(),\n b.height()\n );\n }\n }\n if (useNewCanvas) {\n // 不使用外部的opacity,动态纹理的opacity自己设置\n originalContext.globalAlpha = 1;\n originalContext.drawImage(\n newCanvas.nativeCanvas,\n 0,\n 0,\n newCanvas.nativeCanvas.width,\n newCanvas.nativeCanvas.height,\n b.x1,\n b.y1,\n b.width() * originalContext.dpr,\n b.height() * originalContext.dpr\n );\n }\n\n originalContext.restore();\n } else if (pattern) {\n if (pattern.setTransform) {\n const alignToGraphic = !!textureOptions?.alignToGraphic;\n const alignOffsetX = textureOptions?.alignOffsetX ?? 0;\n const alignOffsetY = textureOptions?.alignOffsetY ?? 0;\n let translateX = 0;\n let translateY = 0;\n if (alignToGraphic) {\n // 将 pattern 原点对齐到图形的绘制原点(当前 context 坐标系)\n const m = context.currentMatrix;\n const e = m?.e ?? 0;\n const f = m?.f ?? 0;\n // 直接在用户坐标系下对齐(包含 context 的平移)\n const ux = e + x + alignOffsetX;\n const uy = f + y + alignOffsetY;\n translateX = ux;\n translateY = uy;\n } else if (alignOffsetX || alignOffsetY) {\n translateX = alignOffsetX;\n translateY = alignOffsetY;\n }\n // pattern 的 transform 使用用户坐标系单位(不再额外乘 dpr)\n pattern.setTransform(new DOMMatrix([1 / context.dpr, 0, 0, 1 / context.dpr, translateX, translateY]));\n }\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = pattern;\n context.fill();\n context.highPerformanceRestore();\n } else if (texture === 'wave') {\n context.save();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.clip();\n const b = graphic.AABBBounds;\n drawWave(\n context,\n textureRatio,\n b.width(),\n b.height(),\n { ...(textureOptions || {}), fill: textureColor },\n x + b.x1 - x,\n y + b.y1 - y\n );\n context.restore();\n }\n }\n\n protected getPatternCacheKey(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n textureSize: number,\n texturePadding: number,\n textureColor: string,\n dpr: number,\n textureRadius: number\n ) {\n if (typeof texture !== 'string') {\n // 图片纹理在有 padding / 圆角时会生成新的 tile,避免缓存冲突\n return texturePadding > 0 || textureRadius > 0 ? null : texture;\n }\n if (texture === 'wave') {\n return null;\n }\n return `${texture}-${textureSize}-${texturePadding}-${textureColor}-${dpr}`;\n }\n\n protected createResourcePattern(\n texture: string | HTMLImageElement | HTMLCanvasElement,\n graphic: IGraphic,\n context: IContext2d,\n texturePadding: number,\n textureRadius: number\n ) {\n const resource = graphic.resources?.get(texture as any);\n const data = resource?.state === 'success' ? resource.data : typeof texture === 'object' ? texture : null;\n if (!data) {\n return null;\n }\n if (texturePadding > 0 || textureRadius > 0) {\n const w = (data as HTMLImageElement).naturalWidth || (data as HTMLCanvasElement).width;\n const h = (data as HTMLImageElement).naturalHeight || (data as HTMLCanvasElement).height;\n if (w > 0 && h > 0) {\n const tileW = w + texturePadding * 2;\n const tileH = h + texturePadding * 2;\n const canvas = canvasAllocate.allocate({ width: tileW, height: tileH, dpr: context.dpr });\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.inuse = true;\n ctx.clearMatrix();\n ctx.setTransformForCurrent(true);\n ctx.clearRect(0, 0, tileW, tileH);\n if (textureRadius > 0) {\n // 先裁剪出图案本身的圆角矩形(不包含四周 padding)\n const r = Math.max(0, Math.min(textureRadius, Math.min(w, h) / 2));\n const x0 = texturePadding;\n const y0 = texturePadding;\n const x1 = x0 + w;\n const y1 = y0 + h;\n ctx.beginPath();\n ctx.moveTo(x0 + r, y0);\n ctx.lineTo(x1 - r, y0);\n ctx.quadraticCurveTo(x1, y0, x1, y0 + r);\n ctx.lineTo(x1, y1 - r);\n ctx.quadraticCurveTo(x1, y1, x1 - r, y1);\n ctx.lineTo(x0 + r, y1);\n ctx.quadraticCurveTo(x0, y1, x0, y1 - r);\n ctx.lineTo(x0, y0 + r);\n ctx.quadraticCurveTo(x0, y0, x0 + r, y0);\n ctx.closePath();\n ctx.clip();\n }\n // 在四周留出 padding 间隙\n ctx.drawImage(data as any, texturePadding, texturePadding, w, h);\n const pattern = context.createPattern(canvas.nativeCanvas as any, 'repeat');\n pattern?.setTransform && pattern.setTransform(new DOMMatrix([1 / context.dpr, 0, 0, 1 / context.dpr, 0, 0]));\n canvasAllocate.free(canvas);\n return pattern;\n }\n canvasAllocate.free(canvas);\n }\n }\n const pattern = context.createPattern(data as any, 'repeat');\n pattern?.setTransform && pattern.setTransform(new DOMMatrix([1 / context.dpr, 0, 0, 1 / context.dpr, 0, 0]));\n return pattern;\n }\n}\n\nexport const defaultBaseTextureRenderContribution = new DefaultBaseTextureRenderContribution();\n"]}