@visactor/vrender-core 0.18.0-alpha.3 → 0.18.0-alpha.5
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.
- package/cjs/common/color-utils.js +2 -2
- package/cjs/common/color-utils.js.map +1 -1
- package/cjs/common/custom-path2d.d.ts +1 -0
- package/cjs/common/custom-path2d.js +5 -1
- package/cjs/common/custom-path2d.js.map +1 -1
- package/cjs/common/inversify/interfaces.d.ts +1 -1
- package/cjs/common/inversify/interfaces.js.map +1 -1
- package/cjs/graphic/arc.d.ts +1 -0
- package/cjs/graphic/arc.js +12 -6
- package/cjs/graphic/arc.js.map +1 -1
- package/cjs/graphic/arc3d.d.ts +1 -0
- package/cjs/graphic/area.d.ts +1 -0
- package/cjs/graphic/builtin-symbol/star.js +1 -1
- package/cjs/graphic/builtin-symbol/star.js.map +1 -1
- package/cjs/graphic/builtin-symbol/wye.js +1 -1
- package/cjs/graphic/builtin-symbol/wye.js.map +1 -1
- package/cjs/graphic/circle.d.ts +1 -0
- package/cjs/graphic/config.js +6 -1
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/glyph.d.ts +1 -0
- package/cjs/graphic/graphic-service/graphic-service.js +6 -5
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +1 -0
- package/cjs/graphic/graphic.js +2 -1
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.d.ts +1 -0
- package/cjs/graphic/image.d.ts +1 -0
- package/cjs/graphic/line.d.ts +1 -0
- package/cjs/graphic/path.d.ts +1 -0
- package/cjs/graphic/polygon.d.ts +1 -0
- package/cjs/graphic/pyramid3d.d.ts +1 -0
- package/cjs/graphic/rect.d.ts +1 -0
- package/cjs/graphic/rect3d.d.ts +1 -0
- package/cjs/graphic/richtext.d.ts +45 -1
- package/cjs/graphic/richtext.js +13 -2
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/graphic/symbol.d.ts +1 -0
- package/cjs/graphic/text.d.ts +1 -0
- package/cjs/graphic/text.js +6 -4
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/interface/graphic/arc.d.ts +2 -0
- package/cjs/interface/graphic/arc.js.map +1 -1
- package/cjs/interface/graphic/richText.d.ts +2 -1
- package/cjs/interface/graphic/richText.js.map +1 -1
- package/cjs/interface/graphic/text.d.ts +2 -0
- package/cjs/interface/graphic/text.js.map +1 -1
- package/cjs/interface/graphic.d.ts +1 -0
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/render/contributions/render/arc-render.js +3 -1
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/arc3d-render.js +4 -1
- package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.js +4 -2
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/arc-contribution-render.js +4 -1
- package/cjs/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/text-contribution-render.js +10 -2
- package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +1 -1
- package/cjs/render/contributions/render/draw-contribution.js +8 -3
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/module.js.map +1 -1
- package/cjs/render/contributions/render/text-render.js +8 -7
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/cjs/resource-loader/loader.js +1 -3
- package/cjs/resource-loader/loader.js.map +1 -1
- package/es/common/color-utils.js +2 -2
- package/es/common/color-utils.js.map +1 -1
- package/es/common/custom-path2d.d.ts +1 -0
- package/es/common/custom-path2d.js +5 -1
- package/es/common/custom-path2d.js.map +1 -1
- package/es/common/inversify/interfaces.d.ts +1 -1
- package/es/common/inversify/interfaces.js.map +1 -1
- package/es/graphic/arc.d.ts +1 -0
- package/es/graphic/arc.js +12 -5
- package/es/graphic/arc.js.map +1 -1
- package/es/graphic/arc3d.d.ts +1 -0
- package/es/graphic/area.d.ts +1 -0
- package/es/graphic/builtin-symbol/star.js +1 -1
- package/es/graphic/builtin-symbol/star.js.map +1 -1
- package/es/graphic/builtin-symbol/wye.js +1 -1
- package/es/graphic/builtin-symbol/wye.js.map +1 -1
- package/es/graphic/circle.d.ts +1 -0
- package/es/graphic/config.js +6 -1
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/glyph.d.ts +1 -0
- package/es/graphic/graphic-service/graphic-service.js +6 -5
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +1 -0
- package/es/graphic/graphic.js +2 -1
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.d.ts +1 -0
- package/es/graphic/image.d.ts +1 -0
- package/es/graphic/line.d.ts +1 -0
- package/es/graphic/path.d.ts +1 -0
- package/es/graphic/polygon.d.ts +1 -0
- package/es/graphic/pyramid3d.d.ts +1 -0
- package/es/graphic/rect.d.ts +1 -0
- package/es/graphic/rect3d.d.ts +1 -0
- package/es/graphic/richtext.d.ts +45 -1
- package/es/graphic/richtext.js +13 -2
- package/es/graphic/richtext.js.map +1 -1
- package/es/graphic/symbol.d.ts +1 -0
- package/es/graphic/text.d.ts +1 -0
- package/es/graphic/text.js +6 -4
- package/es/graphic/text.js.map +1 -1
- package/es/interface/graphic/arc.d.ts +2 -0
- package/es/interface/graphic/arc.js.map +1 -1
- package/es/interface/graphic/richText.d.ts +2 -1
- package/es/interface/graphic/richText.js.map +1 -1
- package/es/interface/graphic/text.d.ts +2 -0
- package/es/interface/graphic/text.js.map +1 -1
- package/es/interface/graphic.d.ts +1 -0
- package/es/interface/graphic.js.map +1 -1
- package/es/render/contributions/render/arc-render.js +3 -1
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/arc3d-render.js +4 -1
- package/es/render/contributions/render/arc3d-render.js.map +1 -1
- package/es/render/contributions/render/area-render.js +4 -2
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/contributions/arc-contribution-render.js +4 -1
- package/es/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/text-contribution-render.js +11 -1
- package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +1 -1
- package/es/render/contributions/render/draw-contribution.js +8 -3
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/module.js.map +1 -1
- package/es/render/contributions/render/text-render.js +8 -8
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/es/resource-loader/loader.js +1 -3
- package/es/resource-loader/loader.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/contributions/arc-contribution-render.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uCAAuC,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oCAAoC,EAAE,MAAM,oCAAoC,CAAC;AAE1F,MAAM,OAAO,4BAA4B;IAAzC;QACE,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAY,IAAI,CAAC;QACzB,UAAK,GAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/contributions/arc-contribution-render.ts"],"names":[],"mappings":"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","file":"arc-contribution-render.js","sourcesContent":["import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IArc,\n IArcGraphicAttribute,\n IThemeAttribute,\n IArcRenderContribution,\n IDrawContext\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { drawArcPath } from '../utils';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultArcRenderContribution implements IArcRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n arc: IArc,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n arcAttribute: Required<IArcGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { outerBorder, innerBorder } = arc.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n const {\n innerPadding = arcAttribute.innerPadding,\n outerPadding = arcAttribute.outerPadding,\n startAngle = arcAttribute.startAngle,\n endAngle = arcAttribute.endAngle,\n opacity = arcAttribute.opacity,\n x: originX = arcAttribute.x,\n y: originY = arcAttribute.y,\n scaleX = arcAttribute.scaleX,\n scaleY = arcAttribute.scaleY\n } = arc.attribute;\n let { innerRadius = arcAttribute.innerRadius, outerRadius = arcAttribute.outerRadius } = arc.attribute;\n outerRadius += outerPadding;\n innerRadius -= innerPadding;\n const doStrokeOuter = !!(outerBorder && outerBorder.stroke);\n const doStrokeInner = !!(innerBorder && innerBorder.stroke);\n\n if (doOuterBorder) {\n const { distance = arcAttribute.outerBorder.distance } = outerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const deltaAngle = (distance as number) / outerRadius;\n arc.setAttributes({\n outerRadius: outerRadius + d,\n innerRadius: innerRadius - d,\n startAngle: startAngle - deltaAngle,\n endAngle: endAngle + deltaAngle\n } as any);\n context.beginPath();\n drawArcPath(arc, context, x, y, outerRadius + d, innerRadius - d);\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (strokeCb) {\n strokeCb(context, outerBorder, arcAttribute.outerBorder);\n } else if (doStrokeOuter) {\n // 存在stroke\n const lastOpacity = (arcAttribute.outerBorder as any).opacity;\n (arcAttribute.outerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n arc,\n outerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n arcAttribute.outerBorder as any\n );\n (arcAttribute.outerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n if (doInnerBorder) {\n const { distance = arcAttribute.innerBorder.distance } = innerBorder;\n const d = getScaledStroke(context, distance as number, context.dpr);\n const deltaAngle = (distance as number) / outerRadius;\n arc.setAttributes({\n outerRadius: outerRadius - d,\n innerRadius: innerRadius + d,\n startAngle: startAngle + deltaAngle,\n endAngle: endAngle - deltaAngle\n } as any);\n context.beginPath();\n drawArcPath(arc, context, x, y, outerRadius - d, innerRadius + d);\n // arc.setAttributes({ outerRadius: outerRadius, innerRadius: innerRadius });\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);\n\n if (strokeCb) {\n strokeCb(context, innerBorder, arcAttribute.innerBorder);\n } else if (doStrokeInner) {\n // 存在stroke\n const lastOpacity = (arcAttribute.innerBorder as any).opacity;\n (arcAttribute.innerBorder as any).opacity = opacity;\n context.setStrokeStyle(\n arc,\n innerBorder,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n arcAttribute.innerBorder as any\n );\n (arcAttribute.innerBorder as any).opacity = lastOpacity;\n context.stroke();\n }\n }\n\n arc.setAttributes({ outerRadius: outerRadius, innerRadius: innerRadius, startAngle, endAngle } as any);\n }\n}\n\nexport const defaultArcRenderContribution = new DefaultArcRenderContribution();\nexport const defaultArcTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultArcBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n"]}
|
|
@@ -6,6 +6,8 @@ import { DefaultBaseBackgroundRenderContribution } from "./base-contribution-ren
|
|
|
6
6
|
|
|
7
7
|
import { boundsAllocate } from "../../../../allocator/bounds-allocate";
|
|
8
8
|
|
|
9
|
+
import { getTextBounds } from "../../../../graphic";
|
|
10
|
+
|
|
9
11
|
import { createRectPath } from "../../../../common/shape/rect";
|
|
10
12
|
|
|
11
13
|
export class DefaultTextBackgroundRenderContribution extends DefaultBaseBackgroundRenderContribution {
|
|
@@ -25,7 +27,15 @@ export class DefaultTextBackgroundRenderContribution extends DefaultBaseBackgrou
|
|
|
25
27
|
const w = b.width(), h = b.height();
|
|
26
28
|
b.set((null !== (_h = background.x) && void 0 !== _h ? _h : 0) + (null !== (_j = background.dx) && void 0 !== _j ? _j : 0), (null !== (_k = background.y) && void 0 !== _k ? _k : 0) + (null !== (_l = background.dy) && void 0 !== _l ? _l : 0), w, h);
|
|
27
29
|
}
|
|
28
|
-
} else b = graphic.AABBBounds, onlyTranslate || b.
|
|
30
|
+
} else b = graphic.AABBBounds, onlyTranslate || (b = getTextBounds(Object.assign(Object.assign({}, graphic.attribute), {
|
|
31
|
+
angle: 0,
|
|
32
|
+
scaleX: 1,
|
|
33
|
+
scaleY: 1,
|
|
34
|
+
x: 0,
|
|
35
|
+
y: 0,
|
|
36
|
+
dx: 0,
|
|
37
|
+
dy: 0
|
|
38
|
+
})).clone());
|
|
29
39
|
if (graphic.backgroundImg && graphic.resources) {
|
|
30
40
|
const res = graphic.resources.get(background);
|
|
31
41
|
if ("success" !== res.state || !res.data) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/contributions/text-contribution-render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAStE,OAAO,EAAE,uCAAuC,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/contributions/text-contribution-render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAStE,OAAO,EAAE,uCAAuC,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,OAAO,uCACX,SAAQ,uCAAuC;IADjD;;QAIE,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;IAyFjF,CAAC;IAvFC,SAAS,CACP,OAAc,EACd,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,gBAA6C,EAC7C,WAAyB,EACzB,MAAiH,EACjH,QAAmH;;QAEnH,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC,cAAc,EAAE,aAAa,GAAG,gBAAgB,CAAC,aAAa,EAAE,GACxG,OAAO,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,IAAI,CAAc,CAAC;QACnB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAK,UAAkB,CAAC,UAAU,CAAC;QACjF,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAC1D,IAAI,iBAAiB,EAAE;YACrB,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,CAAC,mCAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,EAAE,mCAAI,CAAC,CAAC,CAAC;YAC3E,MAAM,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,CAAC,mCAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,EAAE,mCAAI,CAAC,CAAC,CAAC;YAC3E,MAAM,CAAC,GAAG,MAAC,UAAkB,CAAC,KAAK,mCAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,MAAC,UAAkB,CAAC,MAAM,mCAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACpD,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,UAAU,GAAI,UAAkB,CAAC,UAAU,CAAC;YAC5C,IAAI,CAAC,aAAa,EAAE;gBAClB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACrB,CAAC,CAAC,GAAG,CACH,CAAC,MAAC,UAAkB,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,EAAE,mCAAI,CAAC,CAAC,EAC5D,CAAC,MAAC,UAAkB,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAC,UAAkB,CAAC,EAAE,mCAAI,CAAC,CAAC,EAC5D,CAAC,EACD,CAAC,CACF,CAAC;aACH;SACF;aAAM;YACL,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE;gBAClB,CAAC,GAAG,aAAa,iCAAM,OAAO,CAAC,SAAS,KAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAG,CAAC,KAAK,EAAE,CAAC;aAC/G;SACF;QAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE;YAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAiB,CAAC,CAAC;YACrD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;gBACxC,OAAO;aACR;YAED,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAE9B,IAAI,CAAC,aAAa,EAAE;aAInB;iBAAM;gBACL,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;aACxE;YAED,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC3E,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;YACtE,OAAO,CAAC,sBAAsB,EAAE,CAAC;YACjC,OAAO,CAAC,sBAAsB,EAAE,CAAC;SAClC;aAAM;YACL,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;YACrD,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC9B,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC3E,OAAO,CAAC,SAAS,GAAG,UAAoB,CAAC;YACzC,IAAI,sBAAsB,EAAE;gBAE1B,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,EAAE,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aACrD;YACD,OAAO,CAAC,sBAAsB,EAAE,CAAC;SAClC;QAED,IAAI,iBAAiB,EAAE;YACrB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,uCAAuC,EAAE,CAAC","file":"text-contribution-render.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport { isObject } from '@visactor/vutils';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IText,\n ITextRenderContribution,\n IThemeAttribute\n} from '../../../../interface';\nimport { DefaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { boundsAllocate } from '../../../../allocator/bounds-allocate';\nimport { getTextBounds } from '../../../../graphic';\nimport { createRectPath } from '../../../../common/shape/rect';\n\nexport class DefaultTextBackgroundRenderContribution\n extends DefaultBaseBackgroundRenderContribution\n implements ITextRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n\n drawShape(\n graphic: IText,\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 ) {\n const { backgroundMode = graphicAttribute.backgroundMode, backgroundFit = graphicAttribute.backgroundFit } =\n graphic.attribute;\n let { background } = graphic.attribute;\n if (!background) {\n return;\n }\n let b: IAABBBounds;\n const shouldReCalBounds = isObject(background) && (background as any).background;\n const onlyTranslate = graphic.transMatrix.onlyTranslate();\n if (shouldReCalBounds) {\n const _b = graphic.AABBBounds;\n const x = ((background as any).x ?? _b.x1) + ((background as any).dx ?? 0);\n const y = ((background as any).y ?? _b.y1) + ((background as any).dy ?? 0);\n const w = (background as any).width ?? _b.width();\n const h = (background as any).height ?? _b.height();\n b = boundsAllocate.allocate(x, y, x + w, y + h);\n background = (background as any).background;\n if (!onlyTranslate) {\n const w = b.width();\n const h = b.height();\n b.set(\n ((background as any).x ?? 0) + ((background as any).dx ?? 0),\n ((background as any).y ?? 0) + ((background as any).dy ?? 0),\n w,\n h\n );\n }\n } else {\n b = graphic.AABBBounds;\n if (!onlyTranslate) {\n b = getTextBounds({ ...graphic.attribute, angle: 0, scaleX: 1, scaleY: 1, x: 0, y: 0, dx: 0, dy: 0 }).clone();\n }\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.highPerformanceSave();\n // 默认应用旋转\n if (!onlyTranslate) {\n // TODO 性能优化\n // const _b = getTextBounds({ ...graphic.attribute, angle: 0, scaleX: 1, scaleY: 1, x: 0, y: 0, dx: 0, dy: 0 });\n // b.copy(_b);\n } else {\n context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n }\n\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n this.doDrawImage(context, res.data, b, backgroundMode, backgroundFit);\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n } else {\n const { backgroundCornerRadius } = graphic.attribute;\n context.highPerformanceSave();\n context.setCommonStyle(graphic, graphic.attribute, x, y, graphicAttribute);\n context.fillStyle = background as string;\n if (backgroundCornerRadius) {\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, b.x1, b.y1, b.width(), b.height(), backgroundCornerRadius);\n context.fill();\n } else {\n context.fillRect(b.x1, b.y1, b.width(), b.height());\n }\n context.highPerformanceRestore();\n }\n\n if (shouldReCalBounds) {\n boundsAllocate.free(b);\n }\n }\n}\n\nexport const defaultTextBackgroundRenderContribution = new DefaultTextBackgroundRenderContribution();\n\n// @injectable()\n// export class DefaultTextPopTipRenderContribution\n// extends DefaultBasePopTipRenderContribution\n// implements ITextRenderContribution\n// {\n// time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n// }\n"]}
|
|
@@ -25,7 +25,7 @@ export declare class DefaultDrawContribution implements IDrawContribution {
|
|
|
25
25
|
getRenderContribution(graphic: IGraphic): IGraphicRender | null;
|
|
26
26
|
renderItem(graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams): void;
|
|
27
27
|
protected selectRenderByType(type?: string): IGraphicRender | null;
|
|
28
|
-
protected selectRenderByNumberType(type
|
|
28
|
+
protected selectRenderByNumberType(type: number, graphic: IGraphic): IGraphicRender | null;
|
|
29
29
|
protected clearScreen(renderService: IRenderService, context: IContext2d, drawContext: IDrawContext): void;
|
|
30
30
|
afterDraw(renderService: IRenderService, drawParams: IDrawContext): void;
|
|
31
31
|
}
|
|
@@ -160,7 +160,7 @@ let DefaultDrawContribution = class {
|
|
|
160
160
|
}
|
|
161
161
|
getRenderContribution(graphic) {
|
|
162
162
|
let renderer;
|
|
163
|
-
return renderer || (renderer = this.selectRenderByNumberType(graphic.numberType)),
|
|
163
|
+
return renderer || (renderer = this.selectRenderByNumberType(graphic.numberType, graphic)),
|
|
164
164
|
renderer || (renderer = this.selectRenderByType(graphic.type)), renderer;
|
|
165
165
|
}
|
|
166
166
|
renderItem(graphic, drawContext, params) {
|
|
@@ -191,8 +191,13 @@ let DefaultDrawContribution = class {
|
|
|
191
191
|
selectRenderByType(type) {
|
|
192
192
|
return Logger.getInstance().warn("未知错误,不应该走到这里"), null;
|
|
193
193
|
}
|
|
194
|
-
selectRenderByNumberType(type) {
|
|
195
|
-
|
|
194
|
+
selectRenderByNumberType(type, graphic) {
|
|
195
|
+
let data;
|
|
196
|
+
if (graphic.attribute.renderStyle) {
|
|
197
|
+
const currentRenderMap = this.styleRenderMap.get(graphic.attribute.renderStyle);
|
|
198
|
+
data = currentRenderMap && currentRenderMap.get(type);
|
|
199
|
+
}
|
|
200
|
+
return data || this.currentRenderMap.get(type) || this.defaultRenderMap.get(type);
|
|
196
201
|
}
|
|
197
202
|
clearScreen(renderService, context, drawContext) {
|
|
198
203
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/draw-contribution.ts"],"names":[],"mappings":"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","file":"draw-contribution.js","sourcesContent":["import { injectable, inject, named, multiInject } from '../../../common/inversify-lite';\nimport type {\n IContext2d,\n MaybePromise,\n IGraphic,\n IGroup,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IDrawItemInterceptorContribution,\n IDrawContribution,\n IRenderSelector,\n IGlobal\n} from '../../../interface';\nimport { findNextGraphic, foreach } from '../../../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultAttribute } from '../../../graphic';\nimport type { IAABBBounds, IBounds, IBoundsLike, IMatrix, IMatrixLike } from '@visactor/vutils';\nimport { Bounds, Logger, getRectIntersect, isRectIntersect, last } from '@visactor/vutils';\nimport { LayerService } from '../../../core/constants';\nimport { container } from '../../../container';\nimport { GraphicRender, IncrementalDrawContribution, RenderSelector } from './symbol';\nimport { DrawItemInterceptor } from './draw-interceptor';\nimport { createColor } from '../../../common/canvas-utils';\nimport type { ILayerService } from '../../../interface/core';\nimport { boundsAllocate } from '../../../allocator/bounds-allocate';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { application } from '../../../application';\n\n/**\n * 默认的渲染contribution,基于树状结构针对图元的渲染\n */\n@injectable()\nexport class DefaultDrawContribution implements IDrawContribution {\n declare currentRenderMap: Map<number, IGraphicRender>;\n declare defaultRenderMap: Map<number, IGraphicRender>;\n declare styleRenderMap: Map<string, Map<number, IGraphicRender>>;\n declare dirtyBounds: IBounds;\n declare backupDirtyBounds: IBounds;\n // 是否使用dirtyBounds\n declare useDirtyBounds: boolean;\n declare currentRenderService: IRenderService;\n declare InterceptorContributions: IDrawItemInterceptorContribution[];\n\n declare global: IGlobal;\n declare layerService: ILayerService;\n\n constructor(\n // @inject(ContributionProvider)\n // @named(GraphicRender)\n // protected readonly contributions: ContributionProvider<IGraphicRender>,\n @multiInject(GraphicRender) protected readonly contributions: IGraphicRender[],\n // @inject(RenderSelector) protected readonly renderSelector: IRenderSelector, // 根据图元类型选择对应的renderItem进行渲染\n // 拦截器\n @inject(ContributionProvider)\n @named(DrawItemInterceptor)\n protected readonly drawItemInterceptorContributions: IContributionProvider<IDrawItemInterceptorContribution>\n ) {\n this.currentRenderMap = new Map();\n this.defaultRenderMap = new Map();\n this.styleRenderMap = new Map();\n this.dirtyBounds = new Bounds();\n this.backupDirtyBounds = new Bounds();\n this.global = application.global;\n this.layerService = application.layerService;\n this.init();\n }\n\n init() {\n this.contributions.forEach(item => {\n if (item.style) {\n const map = this.styleRenderMap.get(item.style) || new Map();\n map.set(item.numberType, item);\n this.styleRenderMap.set(item.style, map);\n } else {\n this.defaultRenderMap.set(item.numberType, item);\n }\n });\n this.InterceptorContributions = this.drawItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n prepareForDraw(renderService: IRenderService, drawContext: IDrawContext) {\n // 有dirtyBounds用dirtyBounds\n if (drawContext.updateBounds) {\n this.useDirtyBounds = true;\n } else {\n // 没有的话,看看是否需要跳过outRange的渲染\n this.useDirtyBounds = !drawContext.stage.params.optimize.disableCheckGraphicWidthOutRange;\n }\n }\n\n draw(renderService: IRenderService, drawContext: IDrawContext): MaybePromise<void> {\n this.prepareForDraw(renderService, drawContext);\n drawContext.drawContribution = this;\n this.currentRenderMap = this.styleRenderMap.get(drawContext.renderStyle) || this.defaultRenderMap;\n // this.startAtId = drawParams.startAtId;\n this.currentRenderService = renderService;\n // this.drawParams = drawParams;\n const { context, stage, x = 0, y = 0, width, height } = drawContext;\n\n if (!context) {\n return;\n }\n // 设置context的transform\n if (drawContext.keepMatrix) {\n if (context.nativeContext && context.nativeContext.getTransform) {\n const t = context.nativeContext.getTransform();\n context.setTransformFromMatrix(t, true, 1);\n }\n } else {\n context.inuse = true;\n // 初始化context\n context.clearMatrix();\n context.setTransformForCurrent(true);\n }\n\n const dirtyBounds: IBounds | undefined = this.dirtyBounds.setValue(0, 0, width, height);\n if (stage.dirtyBounds && !stage.dirtyBounds.empty()) {\n const b = getRectIntersect(dirtyBounds, stage.dirtyBounds, false);\n dirtyBounds.x1 = Math.floor(b.x1);\n dirtyBounds.y1 = Math.floor(b.y1);\n dirtyBounds.x2 = Math.ceil(b.x2);\n dirtyBounds.y2 = Math.ceil(b.y2);\n }\n // 如果dpr不是整数或者.5的小数,需要格式化dirtyBounds\n const d = context.dpr % 1;\n if (d || d !== 0.5) {\n dirtyBounds.x1 = Math.floor(dirtyBounds.x1 * context.dpr) / context.dpr;\n dirtyBounds.y1 = Math.floor(dirtyBounds.y1 * context.dpr) / context.dpr;\n dirtyBounds.x2 = Math.ceil(dirtyBounds.x2 * context.dpr) / context.dpr;\n dirtyBounds.y2 = Math.ceil(dirtyBounds.y2 * context.dpr) / context.dpr;\n }\n this.backupDirtyBounds.copy(dirtyBounds);\n\n const drawInArea =\n dirtyBounds.width() * context.dpr < context.canvas.width ||\n dirtyBounds.height() * context.dpr < context.canvas.height;\n context.save();\n\n // 设置translate\n context.translate(x, y, true);\n if (drawInArea) {\n context.beginPath();\n context.rect(dirtyBounds.x1, dirtyBounds.y1, dirtyBounds.width(), dirtyBounds.height());\n context.clip();\n }\n\n // 如果存在3d视角,那么不使用dirtyBounds\n if (stage.camera) {\n this.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n this.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n }\n\n this.clearScreen(renderService, context, drawContext);\n // // 渲染的时候图元的起始位置就是x,y\n // this.backupDirtyBounds.translate(-x, -y);\n // this.dirtyBounds.translate(-x, -y);\n\n // // 设置translate\n // context.translate(x, y, true);\n\n context.save();\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n group.isContainer\n ? this.renderGroup(group as IGroup, drawContext, matrixAllocate.allocate(1, 0, 0, 1, 0, 0))\n : this.renderItem(group as IGraphic, drawContext);\n });\n\n context.restore();\n context.restore();\n context.draw();\n // this.break = false;\n if (!drawContext.keepMatrix) {\n context.inuse = false;\n }\n }\n\n doRegister() {\n throw new Error('暂不支持');\n }\n\n // 找到下一个graphic\n protected _findNextGraphic(group: IGroup): IGraphic | null {\n let parent = group.parent;\n let id = group._uid;\n while (parent) {\n const g = findNextGraphic(parent, id, DefaultAttribute.zIndex);\n if (g) {\n return g;\n }\n id = parent._uid;\n parent = parent.parent;\n }\n return null;\n }\n\n renderGroup(group: IGroup, drawContext: IDrawContext, parentMatrix: IMatrix, skipSort?: boolean) {\n if (drawContext.break || group.attribute.visibleAll === false) {\n return;\n }\n if (group.incremental && (drawContext.startAtId == null || drawContext.startAtId === group._uid)) {\n drawContext.break = true;\n this._increaseRender(group, drawContext);\n return;\n }\n\n if (this.useDirtyBounds && !isRectIntersect(group.AABBBounds, this.dirtyBounds, false)) {\n return;\n }\n\n let nextM: IMatrix = parentMatrix;\n let tempBounds: IBounds;\n\n if (this.useDirtyBounds) {\n tempBounds = boundsAllocate.allocateByObj(this.dirtyBounds);\n // 变换dirtyBounds\n const gm = group.transMatrix;\n nextM = matrixAllocate.allocateByObj(parentMatrix).multiply(gm.a, gm.b, gm.c, gm.d, gm.e, gm.f);\n // const m = group.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(nextM.getInverse());\n }\n\n this.renderItem(group, drawContext, {\n drawingCb: () => {\n skipSort\n ? group.forEachChildren((item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n })\n : foreach(\n group,\n DefaultAttribute.zIndex,\n (item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n },\n false,\n !!drawContext.context?.camera\n );\n }\n });\n\n if (this.useDirtyBounds) {\n this.dirtyBounds.copy(tempBounds);\n boundsAllocate.free(tempBounds);\n matrixAllocate.free(nextM);\n }\n }\n\n protected _increaseRender(group: IGroup, drawContext: IDrawContext) {\n const { layer, stage } = drawContext;\n const { subLayers } = layer;\n // 获取渐进渲染层\n let incrementalLayer = subLayers.get(group._uid);\n if (!incrementalLayer) {\n incrementalLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size,\n group\n };\n subLayers.set(group._uid, incrementalLayer);\n }\n // 渲染\n const incrementalContext = incrementalLayer.layer.getNativeHandler().getContext();\n const idc = incrementalLayer.drawContribution || container.get(IncrementalDrawContribution);\n idc.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n idc.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n (idc as any).draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: incrementalLayer.layer,\n context: incrementalContext,\n startAtId: group._uid,\n break: false\n });\n incrementalLayer.drawContribution = idc;\n // this.draw(this.currentRenderService, {...this.drawParams, startAtId: group._uid})\n // this.draw(this.currentRenderService, {...this.drawParams, clear: 'transparent', layer: incrementalContext.layer, context: incrementalContext, startAtId: group._uid})\n const nextGraphic = this._findNextGraphic(group);\n if (nextGraphic) {\n // 如果是下一个渐进渲染层,那就再来一次\n if (nextGraphic.isContainer && nextGraphic.incremental) {\n this._increaseRender(nextGraphic as IGroup, drawContext);\n } else {\n // 如果不是渐进渲染层,那就默认图层渲染\n let afterLayer = subLayers.get(nextGraphic._uid);\n if (!afterLayer) {\n afterLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size\n };\n subLayers.set(nextGraphic._uid, afterLayer);\n }\n const afterContext = afterLayer.layer.getNativeHandler().getContext();\n this.draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: afterLayer.layer,\n context: afterContext,\n startAtId: nextGraphic._uid,\n break: false\n });\n }\n }\n }\n\n getRenderContribution(graphic: IGraphic): IGraphicRender | null {\n // let renderer = this.renderSelector.selector(graphic);\n let renderer;\n if (!renderer) {\n renderer = this.selectRenderByNumberType(graphic.numberType);\n }\n if (!renderer) {\n renderer = this.selectRenderByType(graphic.type);\n }\n return renderer;\n }\n\n renderItem(graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (\n drawContribution.beforeDrawItem &&\n drawContribution.beforeDrawItem(graphic, this.currentRenderService, drawContext, this, params)\n ) {\n return;\n }\n }\n }\n\n const renderer = this.getRenderContribution(graphic);\n if (!renderer) {\n return;\n }\n\n let retrans: boolean = false;\n let tempBounds: IAABBBounds;\n\n if (graphic.parent) {\n const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;\n retrans = !!(scrollX || scrollY);\n if (retrans) {\n tempBounds = this.dirtyBounds.clone();\n // 变换dirtyBounds\n const m = graphic.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(m);\n this.dirtyBounds.translate(-scrollX, -scrollY);\n }\n }\n\n if (this.useDirtyBounds && !(graphic.isContainer || isRectIntersect(graphic.AABBBounds, this.dirtyBounds, false))) {\n retrans && this.dirtyBounds.copy(tempBounds);\n return;\n }\n\n const skipDraw = drawContext.startAtId != null && graphic._uid !== drawContext.startAtId;\n if (graphic._uid === drawContext.startAtId) {\n drawContext.startAtId = null;\n }\n params && (params.skipDraw = skipDraw);\n if (skipDraw) {\n graphic.isContainer && renderer.draw(graphic, this.currentRenderService, drawContext, params);\n } else {\n renderer.draw(graphic, this.currentRenderService, drawContext, params);\n }\n\n retrans && this.dirtyBounds.copy(tempBounds);\n\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.afterDrawItem) {\n if (drawContribution.afterDrawItem(graphic, this.currentRenderService, drawContext, this)) {\n return;\n }\n }\n }\n }\n }\n // 根据type选择对应的render\n protected selectRenderByType(type?: string): IGraphicRender | null {\n Logger.getInstance().warn('未知错误,不应该走到这里');\n return null;\n }\n // 根据type选择对应的render\n protected selectRenderByNumberType(type?: number): IGraphicRender | null {\n return this.currentRenderMap.get(type) || this.defaultRenderMap.get(type);\n }\n\n protected clearScreen(renderService: IRenderService, context: IContext2d, drawContext: IDrawContext) {\n const { clear } = drawContext;\n if (clear) {\n const canvas = context.getCanvas();\n const { width = canvas.width, height = canvas.height } = drawContext;\n const x = 0;\n const y = 0;\n context.clearRect(x, y, width, height);\n const stage = renderService.drawParams?.stage;\n stage && (context.globalAlpha = (stage as any).attribute.opacity ?? 1);\n if (stage && (stage as any).backgroundImg && (stage as any).resources) {\n const res = (stage as any).resources.get(clear);\n if (res && res.state === 'success' && res.data) {\n context.drawImage(res.data, x, y, width, height);\n }\n } else {\n context.fillStyle = createColor(\n context,\n clear,\n {\n AABBBounds: { x1: x, y1: y, x2: x + width, y2: y + height }\n },\n 0,\n 0\n );\n context.fillRect(x, y, width, height);\n }\n }\n }\n\n afterDraw(renderService: IRenderService, drawParams: IDrawContext) {\n return;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/draw-contribution.ts"],"names":[],"mappings":"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","file":"draw-contribution.js","sourcesContent":["import { injectable, inject, named, multiInject } from '../../../common/inversify-lite';\nimport type {\n IContext2d,\n MaybePromise,\n IGraphic,\n IGroup,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IDrawItemInterceptorContribution,\n IDrawContribution,\n IRenderSelector,\n IGlobal\n} from '../../../interface';\nimport { findNextGraphic, foreach } from '../../../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultAttribute } from '../../../graphic';\nimport type { IAABBBounds, IBounds, IBoundsLike, IMatrix, IMatrixLike } from '@visactor/vutils';\nimport { Bounds, Logger, getRectIntersect, isRectIntersect, last } from '@visactor/vutils';\nimport { LayerService } from '../../../core/constants';\nimport { container } from '../../../container';\nimport { GraphicRender, IncrementalDrawContribution, RenderSelector } from './symbol';\nimport { DrawItemInterceptor } from './draw-interceptor';\nimport { createColor } from '../../../common/canvas-utils';\nimport type { ILayerService } from '../../../interface/core';\nimport { boundsAllocate } from '../../../allocator/bounds-allocate';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { application } from '../../../application';\n\n/**\n * 默认的渲染contribution,基于树状结构针对图元的渲染\n */\n@injectable()\nexport class DefaultDrawContribution implements IDrawContribution {\n declare currentRenderMap: Map<number, IGraphicRender>;\n declare defaultRenderMap: Map<number, IGraphicRender>;\n declare styleRenderMap: Map<string, Map<number, IGraphicRender>>;\n declare dirtyBounds: IBounds;\n declare backupDirtyBounds: IBounds;\n // 是否使用dirtyBounds\n declare useDirtyBounds: boolean;\n declare currentRenderService: IRenderService;\n declare InterceptorContributions: IDrawItemInterceptorContribution[];\n\n declare global: IGlobal;\n declare layerService: ILayerService;\n\n constructor(\n // @inject(ContributionProvider)\n // @named(GraphicRender)\n // protected readonly contributions: ContributionProvider<IGraphicRender>,\n @multiInject(GraphicRender) protected readonly contributions: IGraphicRender[],\n // @inject(RenderSelector) protected readonly renderSelector: IRenderSelector, // 根据图元类型选择对应的renderItem进行渲染\n // 拦截器\n @inject(ContributionProvider)\n @named(DrawItemInterceptor)\n protected readonly drawItemInterceptorContributions: IContributionProvider<IDrawItemInterceptorContribution>\n ) {\n this.currentRenderMap = new Map();\n this.defaultRenderMap = new Map();\n this.styleRenderMap = new Map();\n this.dirtyBounds = new Bounds();\n this.backupDirtyBounds = new Bounds();\n this.global = application.global;\n this.layerService = application.layerService;\n this.init();\n }\n\n init() {\n this.contributions.forEach(item => {\n if (item.style) {\n const map = this.styleRenderMap.get(item.style) || new Map();\n map.set(item.numberType, item);\n this.styleRenderMap.set(item.style, map);\n } else {\n this.defaultRenderMap.set(item.numberType, item);\n }\n });\n this.InterceptorContributions = this.drawItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n prepareForDraw(renderService: IRenderService, drawContext: IDrawContext) {\n // 有dirtyBounds用dirtyBounds\n if (drawContext.updateBounds) {\n this.useDirtyBounds = true;\n } else {\n // 没有的话,看看是否需要跳过outRange的渲染\n this.useDirtyBounds = !drawContext.stage.params.optimize.disableCheckGraphicWidthOutRange;\n }\n }\n\n draw(renderService: IRenderService, drawContext: IDrawContext): MaybePromise<void> {\n this.prepareForDraw(renderService, drawContext);\n drawContext.drawContribution = this;\n this.currentRenderMap = this.styleRenderMap.get(drawContext.renderStyle) || this.defaultRenderMap;\n // this.startAtId = drawParams.startAtId;\n this.currentRenderService = renderService;\n // this.drawParams = drawParams;\n const { context, stage, x = 0, y = 0, width, height } = drawContext;\n\n if (!context) {\n return;\n }\n // 设置context的transform\n if (drawContext.keepMatrix) {\n if (context.nativeContext && context.nativeContext.getTransform) {\n const t = context.nativeContext.getTransform();\n context.setTransformFromMatrix(t, true, 1);\n }\n } else {\n context.inuse = true;\n // 初始化context\n context.clearMatrix();\n context.setTransformForCurrent(true);\n }\n\n const dirtyBounds: IBounds | undefined = this.dirtyBounds.setValue(0, 0, width, height);\n if (stage.dirtyBounds && !stage.dirtyBounds.empty()) {\n const b = getRectIntersect(dirtyBounds, stage.dirtyBounds, false);\n dirtyBounds.x1 = Math.floor(b.x1);\n dirtyBounds.y1 = Math.floor(b.y1);\n dirtyBounds.x2 = Math.ceil(b.x2);\n dirtyBounds.y2 = Math.ceil(b.y2);\n }\n // 如果dpr不是整数或者.5的小数,需要格式化dirtyBounds\n const d = context.dpr % 1;\n if (d || d !== 0.5) {\n dirtyBounds.x1 = Math.floor(dirtyBounds.x1 * context.dpr) / context.dpr;\n dirtyBounds.y1 = Math.floor(dirtyBounds.y1 * context.dpr) / context.dpr;\n dirtyBounds.x2 = Math.ceil(dirtyBounds.x2 * context.dpr) / context.dpr;\n dirtyBounds.y2 = Math.ceil(dirtyBounds.y2 * context.dpr) / context.dpr;\n }\n this.backupDirtyBounds.copy(dirtyBounds);\n\n const drawInArea =\n dirtyBounds.width() * context.dpr < context.canvas.width ||\n dirtyBounds.height() * context.dpr < context.canvas.height;\n context.save();\n\n // 设置translate\n context.translate(x, y, true);\n if (drawInArea) {\n context.beginPath();\n context.rect(dirtyBounds.x1, dirtyBounds.y1, dirtyBounds.width(), dirtyBounds.height());\n context.clip();\n }\n\n // 如果存在3d视角,那么不使用dirtyBounds\n if (stage.camera) {\n this.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n this.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n }\n\n this.clearScreen(renderService, context, drawContext);\n // // 渲染的时候图元的起始位置就是x,y\n // this.backupDirtyBounds.translate(-x, -y);\n // this.dirtyBounds.translate(-x, -y);\n\n // // 设置translate\n // context.translate(x, y, true);\n\n context.save();\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n group.isContainer\n ? this.renderGroup(group as IGroup, drawContext, matrixAllocate.allocate(1, 0, 0, 1, 0, 0))\n : this.renderItem(group as IGraphic, drawContext);\n });\n\n context.restore();\n context.restore();\n context.draw();\n // this.break = false;\n if (!drawContext.keepMatrix) {\n context.inuse = false;\n }\n }\n\n doRegister() {\n throw new Error('暂不支持');\n }\n\n // 找到下一个graphic\n protected _findNextGraphic(group: IGroup): IGraphic | null {\n let parent = group.parent;\n let id = group._uid;\n while (parent) {\n const g = findNextGraphic(parent, id, DefaultAttribute.zIndex);\n if (g) {\n return g;\n }\n id = parent._uid;\n parent = parent.parent;\n }\n return null;\n }\n\n renderGroup(group: IGroup, drawContext: IDrawContext, parentMatrix: IMatrix, skipSort?: boolean) {\n if (drawContext.break || group.attribute.visibleAll === false) {\n return;\n }\n if (group.incremental && (drawContext.startAtId == null || drawContext.startAtId === group._uid)) {\n drawContext.break = true;\n this._increaseRender(group, drawContext);\n return;\n }\n\n if (this.useDirtyBounds && !isRectIntersect(group.AABBBounds, this.dirtyBounds, false)) {\n return;\n }\n\n let nextM: IMatrix = parentMatrix;\n let tempBounds: IBounds;\n\n if (this.useDirtyBounds) {\n tempBounds = boundsAllocate.allocateByObj(this.dirtyBounds);\n // 变换dirtyBounds\n const gm = group.transMatrix;\n nextM = matrixAllocate.allocateByObj(parentMatrix).multiply(gm.a, gm.b, gm.c, gm.d, gm.e, gm.f);\n // const m = group.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(nextM.getInverse());\n }\n\n this.renderItem(group, drawContext, {\n drawingCb: () => {\n skipSort\n ? group.forEachChildren((item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n })\n : foreach(\n group,\n DefaultAttribute.zIndex,\n (item: IGraphic) => {\n if (drawContext.break) {\n return;\n }\n if (item.isContainer) {\n this.renderGroup(item as IGroup, drawContext, nextM);\n } else {\n this.renderItem(item, drawContext);\n }\n },\n false,\n !!drawContext.context?.camera\n );\n }\n });\n\n if (this.useDirtyBounds) {\n this.dirtyBounds.copy(tempBounds);\n boundsAllocate.free(tempBounds);\n matrixAllocate.free(nextM);\n }\n }\n\n protected _increaseRender(group: IGroup, drawContext: IDrawContext) {\n const { layer, stage } = drawContext;\n const { subLayers } = layer;\n // 获取渐进渲染层\n let incrementalLayer = subLayers.get(group._uid);\n if (!incrementalLayer) {\n incrementalLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size,\n group\n };\n subLayers.set(group._uid, incrementalLayer);\n }\n // 渲染\n const incrementalContext = incrementalLayer.layer.getNativeHandler().getContext();\n const idc = incrementalLayer.drawContribution || container.get(IncrementalDrawContribution);\n idc.dirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n idc.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n (idc as any).draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: incrementalLayer.layer,\n context: incrementalContext,\n startAtId: group._uid,\n break: false\n });\n incrementalLayer.drawContribution = idc;\n // this.draw(this.currentRenderService, {...this.drawParams, startAtId: group._uid})\n // this.draw(this.currentRenderService, {...this.drawParams, clear: 'transparent', layer: incrementalContext.layer, context: incrementalContext, startAtId: group._uid})\n const nextGraphic = this._findNextGraphic(group);\n if (nextGraphic) {\n // 如果是下一个渐进渲染层,那就再来一次\n if (nextGraphic.isContainer && nextGraphic.incremental) {\n this._increaseRender(nextGraphic as IGroup, drawContext);\n } else {\n // 如果不是渐进渲染层,那就默认图层渲染\n let afterLayer = subLayers.get(nextGraphic._uid);\n if (!afterLayer) {\n afterLayer = {\n layer: this.layerService.createLayer(stage),\n zIndex: subLayers.size\n };\n subLayers.set(nextGraphic._uid, afterLayer);\n }\n const afterContext = afterLayer.layer.getNativeHandler().getContext();\n this.draw(this.currentRenderService, {\n ...drawContext,\n drawContribution: idc,\n clear: 'transparent',\n layer: afterLayer.layer,\n context: afterContext,\n startAtId: nextGraphic._uid,\n break: false\n });\n }\n }\n }\n\n getRenderContribution(graphic: IGraphic): IGraphicRender | null {\n let renderer;\n if (!renderer) {\n renderer = this.selectRenderByNumberType(graphic.numberType, graphic);\n }\n if (!renderer) {\n renderer = this.selectRenderByType(graphic.type);\n }\n return renderer;\n }\n\n renderItem(graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (\n drawContribution.beforeDrawItem &&\n drawContribution.beforeDrawItem(graphic, this.currentRenderService, drawContext, this, params)\n ) {\n return;\n }\n }\n }\n\n const renderer = this.getRenderContribution(graphic);\n if (!renderer) {\n return;\n }\n\n let retrans: boolean = false;\n let tempBounds: IAABBBounds;\n\n if (graphic.parent) {\n const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;\n retrans = !!(scrollX || scrollY);\n if (retrans) {\n tempBounds = this.dirtyBounds.clone();\n // 变换dirtyBounds\n const m = graphic.globalTransMatrix.getInverse();\n this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(m);\n this.dirtyBounds.translate(-scrollX, -scrollY);\n }\n }\n\n if (this.useDirtyBounds && !(graphic.isContainer || isRectIntersect(graphic.AABBBounds, this.dirtyBounds, false))) {\n retrans && this.dirtyBounds.copy(tempBounds);\n return;\n }\n\n const skipDraw = drawContext.startAtId != null && graphic._uid !== drawContext.startAtId;\n if (graphic._uid === drawContext.startAtId) {\n drawContext.startAtId = null;\n }\n params && (params.skipDraw = skipDraw);\n if (skipDraw) {\n graphic.isContainer && renderer.draw(graphic, this.currentRenderService, drawContext, params);\n } else {\n renderer.draw(graphic, this.currentRenderService, drawContext, params);\n }\n\n retrans && this.dirtyBounds.copy(tempBounds);\n\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.afterDrawItem) {\n if (drawContribution.afterDrawItem(graphic, this.currentRenderService, drawContext, this)) {\n return;\n }\n }\n }\n }\n }\n // 根据type选择对应的render\n protected selectRenderByType(type?: string): IGraphicRender | null {\n Logger.getInstance().warn('未知错误,不应该走到这里');\n return null;\n }\n // 根据type选择对应的render\n protected selectRenderByNumberType(type: number, graphic: IGraphic): IGraphicRender | null {\n let data;\n if (graphic.attribute.renderStyle) {\n const currentRenderMap = this.styleRenderMap.get(graphic.attribute.renderStyle);\n data = currentRenderMap && currentRenderMap.get(type);\n }\n return data || this.currentRenderMap.get(type) || this.defaultRenderMap.get(type);\n }\n\n protected clearScreen(renderService: IRenderService, context: IContext2d, drawContext: IDrawContext) {\n const { clear } = drawContext;\n if (clear) {\n const canvas = context.getCanvas();\n const { width = canvas.width, height = canvas.height } = drawContext;\n const x = 0;\n const y = 0;\n context.clearRect(x, y, width, height);\n const stage = renderService.drawParams?.stage;\n stage && (context.globalAlpha = (stage as any).attribute.opacity ?? 1);\n if (stage && (stage as any).backgroundImg && (stage as any).resources) {\n const res = (stage as any).resources.get(clear);\n if (res && res.state === 'success' && res.data) {\n context.drawImage(res.data, x, y, width, height);\n }\n } else {\n context.fillStyle = createColor(\n context,\n clear,\n {\n AABBBounds: { x1: x, y1: y, x2: x + width, y2: y + height }\n },\n 0,\n 0\n );\n context.fillRect(x, y, width, height);\n }\n }\n }\n\n afterDraw(renderService: IRenderService, drawParams: IDrawContext) {\n return;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,2BAA2B,EAAkB,MAAM,UAAU,CAAC;AACrH,OAAO,EAAE,qCAAqC,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,EACL,uCAAuC,EACvC,wCAAwC,EACxC,oCAAoC,EACrC,MAAM,iBAAiB,CAAC;AAEzB,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;IACxC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC1E,IAAI,CAAC,oCAAoC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAEvE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;IACnD,IAAI,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC;IAKzE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAClE,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAG3C,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAGxD,IAAI,CAAC,wCAAwC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC3E,wBAAwB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;IACjE,wBAAwB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAK9C,IAAI,CAAC,qCAAqC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAM3E,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC","file":"module.js","sourcesContent":["import { ContainerModule } from '../../../common/inversify-lite';\nimport { bindContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultDrawContribution } from './draw-contribution';\nimport { DefaultCanvasGroupRender } from './group-render';\nimport { DefaultIncrementalDrawContribution } from './incremental-draw-contribution';\nimport { DrawContribution, GraphicRender, GroupRender, IncrementalDrawContribution, RenderSelector } from './symbol';\nimport { CommonDrawItemInterceptorContribution, DrawItemInterceptor } from './draw-interceptor';\nimport { GroupRenderContribution, InteractiveSubRenderContribution } from './contributions/constants';\nimport {\n DefaultBaseBackgroundRenderContribution,\n DefaultBaseInteractiveRenderContribution,\n DefaultBaseTextureRenderContribution\n} from './contributions';\n\nexport default new ContainerModule(bind => {\n bind(DefaultBaseBackgroundRenderContribution).toSelf().inSingletonScope();\n bind(DefaultBaseTextureRenderContribution).toSelf().inSingletonScope();\n\n bind(DrawContribution).to(DefaultDrawContribution);\n bind(IncrementalDrawContribution).to(DefaultIncrementalDrawContribution);\n\n // bind(RenderSelector).to(DefaultRenderSelector).inSingletonScope();\n\n // group渲染器\n bind(GroupRender).to(DefaultCanvasGroupRender).inSingletonScope();\n bind(GraphicRender).toService(GroupRender);\n\n // group 渲染器注入contributions\n bindContributionProvider(bind, GroupRenderContribution);\n\n // 绑定通用interactive contribution\n bind(DefaultBaseInteractiveRenderContribution).toSelf().inSingletonScope();\n bindContributionProvider(bind, InteractiveSubRenderContribution);\n bindContributionProvider(bind, GraphicRender);\n\n // interceptor\n // bind(ShadowRootDrawItemInterceptorContribution).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(ShadowRootDrawItemInterceptorContribution);\n bind(CommonDrawItemInterceptorContribution).toSelf().inSingletonScope();\n bind(DrawItemInterceptor).toService(CommonDrawItemInterceptorContribution);\n // bind(RenderSelector).toService()\n // bind(Canvas3DDrawItemInterceptor).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(Canvas3DDrawItemInterceptor);\n // bind(InteractiveDrawItemInterceptorContribution).toSelf().inSingletonScope();\n // bind(DrawItemInterceptor).toService(InteractiveDrawItemInterceptorContribution);\n bindContributionProvider(bind, DrawItemInterceptor);\n});\n"]}
|
|
@@ -16,7 +16,7 @@ import { getTheme } from "../../../graphic/theme";
|
|
|
16
16
|
|
|
17
17
|
import { TEXT_NUMBER_TYPE } from "../../../graphic/constants";
|
|
18
18
|
|
|
19
|
-
import { textDrawOffsetX, textLayoutOffsetY } from "../../../common/text";
|
|
19
|
+
import { textDrawOffsetX, textDrawOffsetY, textLayoutOffsetY } from "../../../common/text";
|
|
20
20
|
|
|
21
21
|
import { BaseRender } from "./base-render";
|
|
22
22
|
|
|
@@ -77,7 +77,7 @@ let DefaultCanvasTextRender = class extends BaseRender {
|
|
|
77
77
|
})))), doFill && (fillCb ? fillCb(context, text.attribute, textAttribute) : fVisible && (context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute),
|
|
78
78
|
multilineLayout.lines.forEach((line => {
|
|
79
79
|
context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z),
|
|
80
|
-
this.drawMultiUnderLine(underline, lineThrough, text, (line.leftOffset || 0) + x, (line.topOffset || 0) + yOffset + y, z, line.width, textAttribute, context);
|
|
80
|
+
this.drawMultiUnderLine(underline, lineThrough, text, (line.leftOffset || 0) + x, (line.topOffset || 0) + yOffset + y - textDrawOffsetY("bottom", fontSize) - .05 * fontSize, z, line.width, textAttribute, context);
|
|
81
81
|
}))));
|
|
82
82
|
} else {
|
|
83
83
|
text.tryUpdateAABBBounds();
|
|
@@ -134,7 +134,7 @@ let DefaultCanvasTextRender = class extends BaseRender {
|
|
|
134
134
|
}
|
|
135
135
|
drawUnderLine(underline, lineThrough, text, x, y, z, textAttribute, context) {
|
|
136
136
|
if (lineThrough + underline <= 0) return;
|
|
137
|
-
const {textAlign: textAlign = textAttribute.textAlign, textBaseline: textBaseline = textAttribute.textBaseline, fontSize: fontSize = textAttribute.fontSize, fill: fill = textAttribute.fill, opacity: opacity = textAttribute.opacity, fillOpacity: fillOpacity = textAttribute.fillOpacity} = text.attribute, w = text.clipedWidth, offsetX = textDrawOffsetX(textAlign, w), offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize), attribute = {
|
|
137
|
+
const {textAlign: textAlign = textAttribute.textAlign, textBaseline: textBaseline = textAttribute.textBaseline, fontSize: fontSize = textAttribute.fontSize, fill: fill = textAttribute.fill, opacity: opacity = textAttribute.opacity, underlineOffset: underlineOffset = textAttribute.underlineOffset, underlineDash: underlineDash = textAttribute.underlineDash, fillOpacity: fillOpacity = textAttribute.fillOpacity} = text.attribute, w = text.clipedWidth, offsetX = textDrawOffsetX(textAlign, w), offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize), attribute = {
|
|
138
138
|
lineWidth: 0,
|
|
139
139
|
stroke: fill,
|
|
140
140
|
opacity: opacity,
|
|
@@ -142,8 +142,8 @@ let DefaultCanvasTextRender = class extends BaseRender {
|
|
|
142
142
|
};
|
|
143
143
|
if (underline) {
|
|
144
144
|
attribute.lineWidth = underline, context.setStrokeStyle(text, attribute, x, y, textAttribute),
|
|
145
|
-
context.beginPath();
|
|
146
|
-
const dy = y + offsetY + fontSize;
|
|
145
|
+
context.setLineDash(underlineDash), context.beginPath();
|
|
146
|
+
const dy = y + offsetY + fontSize + underlineOffset;
|
|
147
147
|
context.moveTo(x + offsetX, dy, z), context.lineTo(x + offsetX + w, dy, z), context.stroke();
|
|
148
148
|
}
|
|
149
149
|
if (lineThrough) {
|
|
@@ -155,7 +155,7 @@ let DefaultCanvasTextRender = class extends BaseRender {
|
|
|
155
155
|
}
|
|
156
156
|
drawMultiUnderLine(underline, lineThrough, text, x, y, z, w, textAttribute, context) {
|
|
157
157
|
if (lineThrough + underline <= 0) return;
|
|
158
|
-
const {textAlign: textAlign = textAttribute.textAlign, fontSize: fontSize = textAttribute.fontSize, fill: fill = textAttribute.fill, opacity: opacity = textAttribute.opacity, fillOpacity: fillOpacity = textAttribute.fillOpacity} = text.attribute, offsetX = textDrawOffsetX(textAlign, w), offsetY = textLayoutOffsetY("alphabetic", fontSize, fontSize), attribute = {
|
|
158
|
+
const {textAlign: textAlign = textAttribute.textAlign, fontSize: fontSize = textAttribute.fontSize, fill: fill = textAttribute.fill, opacity: opacity = textAttribute.opacity, underlineOffset: underlineOffset = textAttribute.underlineOffset, underlineDash: underlineDash = textAttribute.underlineDash, fillOpacity: fillOpacity = textAttribute.fillOpacity} = text.attribute, offsetX = textDrawOffsetX(textAlign, w), offsetY = textLayoutOffsetY("alphabetic", fontSize, fontSize), attribute = {
|
|
159
159
|
lineWidth: 0,
|
|
160
160
|
stroke: fill,
|
|
161
161
|
opacity: opacity,
|
|
@@ -164,8 +164,8 @@ let DefaultCanvasTextRender = class extends BaseRender {
|
|
|
164
164
|
let deltaY = -3;
|
|
165
165
|
if (underline) {
|
|
166
166
|
attribute.lineWidth = underline, context.setStrokeStyle(text, attribute, x, y, textAttribute),
|
|
167
|
-
context.beginPath();
|
|
168
|
-
const dy = y + offsetY + fontSize + deltaY;
|
|
167
|
+
context.setLineDash(underlineDash), context.beginPath();
|
|
168
|
+
const dy = y + offsetY + fontSize + deltaY + underlineOffset;
|
|
169
169
|
context.moveTo(x + offsetX, dy, z), context.lineTo(x + offsetX + w, dy, z), context.stroke();
|
|
170
170
|
}
|
|
171
171
|
if (deltaY = -1, lineThrough) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/text-render.ts"],"names":[],"mappings":"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","file":"text-render.js","sourcesContent":["import { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { TEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n ITextRenderContribution,\n IContributionProvider\n} from '../../../interface';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../../../common/text';\nimport type { IText, ITextGraphicAttribute } from '../../../interface/graphic/text';\nimport { BaseRender } from './base-render';\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { TextRenderContribution } from './contributions/constants';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { max } from '@visactor/vutils';\nimport { calculateLineHeight } from '../../../common/utils';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasTextRender extends BaseRender<IText> implements IGraphicRender {\n type: 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextRenderContribution)\n protected readonly textRenderContribitions: IContributionProvider<ITextRenderContribution>\n ) {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init(textRenderContribitions);\n }\n\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const textAttribute = getTheme(text, params?.theme).text;\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n keepDirIn3d = textAttribute.keepDirIn3d,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n let { textAlign = textAttribute.textAlign, textBaseline = textAttribute.textBaseline } = text.attribute;\n if (!verticalMode && direction === 'vertical') {\n const t = textAlign;\n textAlign = text.getBaselineMapAlign()[textBaseline] ?? ('left' as any);\n textBaseline = text.getAlignMapBaseline()[t] ?? ('top' as any);\n }\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n const data = this.valid(text, textAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 文字如果需要变换,那就需要将3dmatrix转成context的2dmatrix\n const transform3dMatrixToContextMatrix = !keepDirIn3d;\n\n const z = this.z || 0;\n\n context.beginPath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(text, text.attribute, textAttribute);\n\n this.beforeRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n transform3dMatrixToContextMatrix && this.transformUseContext2d(text, textAttribute, z, context);\n\n const drawText = (t: string, offsetX: number, offsetY: number, direction: number) => {\n let _x = x + offsetX;\n const _y = y + offsetY;\n if (direction) {\n context.highPerformanceSave();\n _x += fontSize;\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n // matrix.translate(fontSize, 0);\n matrix.rotateByCenter(Math.PI / 2, _x, _y);\n context.transformFromMatrix(matrix, true);\n matrixAllocate.free(matrix);\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(t, _x, _y, z);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(t, _x, _y, z);\n this.drawUnderLine(underline, lineThrough, text, _x, _y, z, textAttribute, context);\n }\n }\n\n if (direction) {\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n }\n };\n if (text.isMultiLine) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n if (direction === 'horizontal') {\n const { multilineLayout } = text;\n if (!multilineLayout) {\n context.highPerformanceRestore();\n return;\n } // 如果不存在的话,需要render层自行布局\n const { xOffset, yOffset } = multilineLayout.bbox;\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.strokeText(\n line.str,\n (line.leftOffset || 0) + xOffset + x,\n (line.topOffset || 0) + yOffset + y,\n z\n );\n });\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n this.drawMultiUnderLine(\n underline,\n lineThrough,\n text,\n (line.leftOffset || 0) + x, // 中下划线都是从文字左侧开始,因此不需要+xOffset\n (line.topOffset || 0) + yOffset + y,\n z,\n line.width,\n textAttribute,\n context\n );\n });\n }\n }\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n const { verticalList } = cache;\n context.textAlign = 'left';\n context.textBaseline = 'top';\n const totalHeight = lineHeight * verticalList.length;\n let totalW = 0;\n verticalList.forEach(verticalData => {\n const _w = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n totalW = max(_w, totalW);\n });\n let offsetY = 0;\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -totalHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -totalHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n verticalList.forEach((verticalData, i) => {\n const currentW = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n const dw = totalW - currentW;\n let currentOffsetY = offsetY;\n if (textAlign === 'center') {\n currentOffsetY += dw / 2;\n } else if (textAlign === 'right') {\n currentOffsetY += dw;\n }\n verticalData.forEach(item => {\n const { text, width, direction } = item;\n drawText(text, totalHeight - (i + 1) * lineHeight + offsetX, currentOffsetY, direction);\n currentOffsetY += width;\n });\n });\n }\n } else {\n if (direction === 'horizontal') {\n context.setTextStyle(text.attribute, textAttribute, z);\n const t = text.clipedText as string;\n let dy = 0;\n if (lineHeight !== fontSize) {\n if (textBaseline === 'top') {\n dy = (lineHeight - fontSize) / 2;\n } else if (textBaseline === 'middle') {\n // middle do nothing\n } else if (textBaseline === 'bottom') {\n dy = -(lineHeight - fontSize) / 2;\n } else {\n // alphabetic do nothing\n // dy = (lineHeight - fontSize) / 2 - fontSize * 0.79;\n }\n }\n drawText(t, 0, dy, 0);\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n if (cache) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n const { verticalList } = cache;\n let offsetY = 0;\n const totalW = verticalList[0].reduce((a, b) => a + (b.width || 0), 0);\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -lineHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -lineHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n context.textAlign = 'left';\n context.textBaseline = 'top';\n verticalList[0].forEach(item => {\n const { text, width, direction } = item;\n drawText(text, offsetX, offsetY, direction);\n offsetY += width;\n });\n }\n }\n }\n transform3dMatrixToContextMatrix && this.restoreTransformUseContext2d(text, textAttribute, z, context);\n\n this.afterRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(text: IText, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const textAttribute = getTheme(text, params?.theme).text;\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n this._draw(text, textAttribute, computed3dMatrix, drawContext, params);\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n textAttribute: Required<ITextGraphicAttribute>,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n const w = text.clipedWidth;\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n\n drawMultiUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n w: number,\n textAttribute: Required<ITextGraphicAttribute>,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY('alphabetic', fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n let deltaY = -3;\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize + deltaY;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n deltaY = -1;\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2 + deltaY;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/text-render.ts"],"names":[],"mappings":"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","file":"text-render.js","sourcesContent":["import { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { TEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n ITextRenderContribution,\n IContributionProvider\n} from '../../../interface';\nimport { textDrawOffsetX, textDrawOffsetY, textLayoutOffsetY } from '../../../common/text';\nimport type { IText, ITextGraphicAttribute } from '../../../interface/graphic/text';\nimport { BaseRender } from './base-render';\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { TextRenderContribution } from './contributions/constants';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { max } from '@visactor/vutils';\nimport { calculateLineHeight } from '../../../common/utils';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasTextRender extends BaseRender<IText> implements IGraphicRender {\n type: 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextRenderContribution)\n protected readonly textRenderContribitions: IContributionProvider<ITextRenderContribution>\n ) {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init(textRenderContribitions);\n }\n\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const textAttribute = getTheme(text, params?.theme).text;\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n keepDirIn3d = textAttribute.keepDirIn3d,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n let { textAlign = textAttribute.textAlign, textBaseline = textAttribute.textBaseline } = text.attribute;\n if (!verticalMode && direction === 'vertical') {\n const t = textAlign;\n textAlign = text.getBaselineMapAlign()[textBaseline] ?? ('left' as any);\n textBaseline = text.getAlignMapBaseline()[t] ?? ('top' as any);\n }\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n const data = this.valid(text, textAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 文字如果需要变换,那就需要将3dmatrix转成context的2dmatrix\n const transform3dMatrixToContextMatrix = !keepDirIn3d;\n\n const z = this.z || 0;\n\n context.beginPath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(text, text.attribute, textAttribute);\n\n this.beforeRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n transform3dMatrixToContextMatrix && this.transformUseContext2d(text, textAttribute, z, context);\n\n const drawText = (t: string, offsetX: number, offsetY: number, direction: number) => {\n let _x = x + offsetX;\n const _y = y + offsetY;\n if (direction) {\n context.highPerformanceSave();\n _x += fontSize;\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n // matrix.translate(fontSize, 0);\n matrix.rotateByCenter(Math.PI / 2, _x, _y);\n context.transformFromMatrix(matrix, true);\n matrixAllocate.free(matrix);\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(t, _x, _y, z);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(t, _x, _y, z);\n this.drawUnderLine(underline, lineThrough, text, _x, _y, z, textAttribute, context);\n }\n }\n\n if (direction) {\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n }\n };\n if (text.isMultiLine) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n if (direction === 'horizontal') {\n const { multilineLayout } = text;\n if (!multilineLayout) {\n context.highPerformanceRestore();\n return;\n } // 如果不存在的话,需要render层自行布局\n const { xOffset, yOffset } = multilineLayout.bbox;\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.strokeText(\n line.str,\n (line.leftOffset || 0) + xOffset + x,\n (line.topOffset || 0) + yOffset + y,\n z\n );\n });\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n this.drawMultiUnderLine(\n underline,\n lineThrough,\n text,\n (line.leftOffset || 0) + x, // 中下划线都是从文字左侧开始,因此不需要+xOffset\n // y是基于alphabetic对齐的,这里-0.05是为了和不换行的文字保持效果一致\n (line.topOffset || 0) + yOffset + y - textDrawOffsetY('bottom', fontSize) - 0.05 * fontSize,\n z,\n line.width,\n textAttribute,\n context\n );\n });\n }\n }\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n const { verticalList } = cache;\n context.textAlign = 'left';\n context.textBaseline = 'top';\n const totalHeight = lineHeight * verticalList.length;\n let totalW = 0;\n verticalList.forEach(verticalData => {\n const _w = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n totalW = max(_w, totalW);\n });\n let offsetY = 0;\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -totalHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -totalHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n verticalList.forEach((verticalData, i) => {\n const currentW = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n const dw = totalW - currentW;\n let currentOffsetY = offsetY;\n if (textAlign === 'center') {\n currentOffsetY += dw / 2;\n } else if (textAlign === 'right') {\n currentOffsetY += dw;\n }\n verticalData.forEach(item => {\n const { text, width, direction } = item;\n drawText(text, totalHeight - (i + 1) * lineHeight + offsetX, currentOffsetY, direction);\n currentOffsetY += width;\n });\n });\n }\n } else {\n if (direction === 'horizontal') {\n context.setTextStyle(text.attribute, textAttribute, z);\n const t = text.clipedText as string;\n let dy = 0;\n if (lineHeight !== fontSize) {\n if (textBaseline === 'top') {\n dy = (lineHeight - fontSize) / 2;\n } else if (textBaseline === 'middle') {\n // middle do nothing\n } else if (textBaseline === 'bottom') {\n dy = -(lineHeight - fontSize) / 2;\n } else {\n // alphabetic do nothing\n // dy = (lineHeight - fontSize) / 2 - fontSize * 0.79;\n }\n }\n drawText(t, 0, dy, 0);\n } else {\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n if (cache) {\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n const { verticalList } = cache;\n let offsetY = 0;\n const totalW = verticalList[0].reduce((a, b) => a + (b.width || 0), 0);\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -lineHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -lineHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n context.textAlign = 'left';\n context.textBaseline = 'top';\n verticalList[0].forEach(item => {\n const { text, width, direction } = item;\n drawText(text, offsetX, offsetY, direction);\n offsetY += width;\n });\n }\n }\n }\n transform3dMatrixToContextMatrix && this.restoreTransformUseContext2d(text, textAttribute, z, context);\n\n this.afterRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(text: IText, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const textAttribute = getTheme(text, params?.theme).text;\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n this._draw(text, textAttribute, computed3dMatrix, drawContext, params);\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n textAttribute: Required<ITextGraphicAttribute>,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n const w = text.clipedWidth;\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.setLineDash(underlineDash);\n context.beginPath();\n const dy = y + offsetY + fontSize + underlineOffset;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n\n drawMultiUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n w: number,\n textAttribute: Required<ITextGraphicAttribute>,\n context: IContext2d\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY('alphabetic', fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n let deltaY = -3;\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.setLineDash(underlineDash);\n context.beginPath();\n const dy = y + offsetY + fontSize + deltaY + underlineOffset;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n deltaY = -1;\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2 + deltaY;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n"]}
|
|
@@ -15,9 +15,7 @@ export class ResourceLoader {
|
|
|
15
15
|
let data = ResourceLoader.cache.get(svgStr);
|
|
16
16
|
data ? "fail" === data.loadState ? application.global.getRequestAnimationFrame()((() => {
|
|
17
17
|
mark.imageLoadFail(svgStr);
|
|
18
|
-
})) : "init" === data.loadState || "loading" === data.loadState ? null === (_a = data.waitingMark) || void 0 === _a || _a.push(mark) : mark &&
|
|
19
|
-
mark.imageLoadSuccess(svgStr, data.data);
|
|
20
|
-
})) : (data = {
|
|
18
|
+
})) : "init" === data.loadState || "loading" === data.loadState ? null === (_a = data.waitingMark) || void 0 === _a || _a.push(mark) : mark && mark.imageLoadSuccess(svgStr, data.data) : (data = {
|
|
21
19
|
type: "image",
|
|
22
20
|
loadState: "init"
|
|
23
21
|
}, ResourceLoader.cache.set(svgStr, data), data.dataPromise = application.global.loadSvg(svgStr),
|