@visactor/vrender 0.14.0-alpha.0 → 0.14.0-alpha.10
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/canvas/contributions/browser/canvas.d.ts +3 -1
- package/cjs/canvas/contributions/browser/canvas.js +6 -0
- package/cjs/canvas/contributions/browser/canvas.js.map +1 -1
- package/cjs/canvas/contributions/browser/context.d.ts +2 -0
- package/cjs/canvas/contributions/feishu/canvas.d.ts +3 -1
- package/cjs/canvas/contributions/feishu/canvas.js +6 -0
- package/cjs/canvas/contributions/feishu/canvas.js.map +1 -1
- package/cjs/canvas/contributions/lynx/canvas.d.ts +3 -1
- package/cjs/canvas/contributions/lynx/canvas.js +6 -0
- package/cjs/canvas/contributions/lynx/canvas.js.map +1 -1
- package/cjs/canvas/contributions/node/canvas.d.ts +2 -0
- package/cjs/canvas/contributions/node/canvas.js +2 -0
- package/cjs/canvas/contributions/node/canvas.js.map +1 -1
- package/cjs/canvas/contributions/taro/canvas.d.ts +3 -1
- package/cjs/canvas/contributions/taro/canvas.js +6 -0
- package/cjs/canvas/contributions/taro/canvas.js.map +1 -1
- package/cjs/canvas/contributions/tt/canvas.d.ts +3 -1
- package/cjs/canvas/contributions/tt/canvas.js +6 -0
- package/cjs/canvas/contributions/tt/canvas.js.map +1 -1
- package/cjs/canvas/contributions/wx/canvas.d.ts +2 -0
- package/cjs/canvas/contributions/wx/canvas.js +6 -0
- package/cjs/canvas/contributions/wx/canvas.js.map +1 -1
- package/cjs/common/render-area.d.ts +4 -0
- package/cjs/common/render-area.js +76 -16
- package/cjs/common/render-area.js.map +1 -1
- package/cjs/common/render-curve.d.ts +4 -0
- package/cjs/common/render-curve.js +60 -8
- package/cjs/common/render-curve.js.map +1 -1
- package/cjs/common/seg-context.d.ts +10 -8
- package/cjs/common/seg-context.js +23 -20
- package/cjs/common/seg-context.js.map +1 -1
- package/cjs/common/segment/basis.d.ts +5 -3
- package/cjs/common/segment/basis.js +6 -6
- package/cjs/common/segment/basis.js.map +1 -1
- package/cjs/common/segment/curve/cubic-bezier.d.ts +2 -0
- package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
- package/cjs/common/segment/curve/line.d.ts +2 -0
- package/cjs/common/segment/curve/line.js.map +1 -1
- package/cjs/common/segment/curve/quadratic-bezier.d.ts +2 -0
- package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/cjs/common/segment/linear-closed.d.ts +1 -1
- package/cjs/common/segment/linear-closed.js +2 -2
- package/cjs/common/segment/linear-closed.js.map +1 -1
- package/cjs/common/segment/linear.d.ts +2 -2
- package/cjs/common/segment/linear.js +2 -2
- package/cjs/common/segment/linear.js.map +1 -1
- package/cjs/common/segment/monotone.d.ts +4 -2
- package/cjs/common/segment/monotone.js +9 -8
- package/cjs/common/segment/monotone.js.map +1 -1
- package/cjs/common/segment/step.d.ts +2 -1
- package/cjs/common/segment/step.js +7 -7
- package/cjs/common/segment/step.js.map +1 -1
- package/cjs/common/utils.d.ts +14 -2
- package/cjs/common/utils.js +21 -1
- package/cjs/common/utils.js.map +1 -1
- package/cjs/constants.d.ts +1 -1
- package/cjs/constants.js +2 -2
- package/cjs/constants.js.map +1 -1
- package/cjs/core/contributions/env/feishu-contribution.js +3 -3
- package/cjs/core/contributions/env/feishu-contribution.js.map +1 -1
- package/cjs/core/contributions/env/lynx-contribution.js +3 -3
- package/cjs/core/contributions/env/lynx-contribution.js.map +1 -1
- package/cjs/core/contributions/env/node-contribution.js +3 -3
- package/cjs/core/contributions/env/node-contribution.js.map +1 -1
- package/cjs/core/contributions/env/wx-contribution.js +3 -3
- package/cjs/core/contributions/env/wx-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -0
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +9 -3
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/cjs/core/contributions/textMeasure/AtextMeasure.d.ts +26 -2
- package/cjs/core/contributions/textMeasure/AtextMeasure.js +73 -7
- package/cjs/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
- package/cjs/core/contributions/textMeasure/layout.d.ts +2 -2
- package/cjs/core/contributions/textMeasure/layout.js +4 -4
- package/cjs/core/contributions/textMeasure/layout.js.map +1 -1
- package/cjs/core/contributions/window/browser-contribution.js +1 -1
- package/cjs/core/contributions/window/browser-contribution.js.map +1 -1
- package/cjs/core/contributions/window/feishu-contribution.js +1 -1
- package/cjs/core/contributions/window/feishu-contribution.js.map +1 -1
- package/cjs/core/contributions/window/lynx-contribution.js +1 -1
- package/cjs/core/contributions/window/lynx-contribution.js.map +1 -1
- package/cjs/core/contributions/window/native-contribution.js.map +1 -1
- package/cjs/core/contributions/window/node-contribution.js +1 -1
- package/cjs/core/contributions/window/node-contribution.js.map +1 -1
- package/cjs/core/contributions/window/taro-contribution.js +1 -1
- package/cjs/core/contributions/window/taro-contribution.js.map +1 -1
- package/cjs/core/contributions/window/wx-contribution.js +1 -1
- package/cjs/core/contributions/window/wx-contribution.js.map +1 -1
- package/cjs/core/core-modules.js +2 -2
- package/cjs/core/core-modules.js.map +1 -1
- package/cjs/core/global-module.d.ts +5 -1
- package/cjs/core/global-module.js +20 -1
- package/cjs/core/global-module.js.map +1 -1
- package/cjs/core/graphic-utils.js +1 -1
- package/cjs/core/graphic-utils.js.map +1 -1
- package/cjs/core/layer-service.js +1 -1
- package/cjs/core/layer-service.js.map +1 -1
- package/cjs/core/stage.d.ts +5 -1
- package/cjs/core/stage.js +18 -8
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.d.ts +1 -1
- package/cjs/core/window.js +3 -3
- package/cjs/core/window.js.map +1 -1
- package/cjs/graphic/config.d.ts +3 -1
- package/cjs/graphic/config.js +24 -8
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.js +12 -3
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +1 -0
- package/cjs/graphic/graphic.js +3 -0
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/node-tree.d.ts +2 -2
- package/cjs/graphic/node-tree.js +2 -0
- package/cjs/graphic/node-tree.js.map +1 -1
- package/cjs/graphic/text.d.ts +5 -1
- package/cjs/graphic/text.js +99 -7
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/graphic/tools.d.ts +8 -0
- package/cjs/graphic/tools.js +38 -2
- package/cjs/graphic/tools.js.map +1 -1
- package/cjs/graphic/wrap-text.js +5 -1
- package/cjs/graphic/wrap-text.js.map +1 -1
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +16 -2
- package/cjs/index.js.map +1 -1
- package/cjs/interface/curve.d.ts +3 -3
- package/cjs/interface/curve.js.map +1 -1
- package/cjs/interface/graphic/area.d.ts +3 -3
- package/cjs/interface/graphic/area.js.map +1 -1
- package/cjs/interface/graphic/group.d.ts +6 -0
- package/cjs/interface/graphic/group.js.map +1 -1
- package/cjs/interface/graphic/line.d.ts +3 -3
- package/cjs/interface/graphic/line.js.map +1 -1
- package/cjs/interface/graphic/text.d.ts +7 -0
- package/cjs/interface/graphic/text.js.map +1 -1
- package/cjs/interface/graphic.d.ts +19 -0
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/path.d.ts +2 -0
- package/cjs/interface/path.js.map +1 -1
- package/cjs/interface/stage.d.ts +2 -0
- package/cjs/interface/stage.js.map +1 -1
- package/cjs/interface/text.d.ts +26 -2
- package/cjs/interface/text.js.map +1 -1
- package/cjs/modules.d.ts +1 -1
- package/cjs/modules.js +3 -3
- package/cjs/modules.js.map +1 -1
- package/cjs/picker/canvas-picker-service.js +1 -1
- package/cjs/picker/canvas-picker-service.js.map +1 -1
- package/cjs/picker/global-picker-service.js +1 -1
- package/cjs/picker/global-picker-service.js.map +1 -1
- package/cjs/picker/math-picker-service.js +1 -1
- package/cjs/picker/math-picker-service.js.map +1 -1
- package/cjs/picker/picker-service.js +1 -1
- package/cjs/picker/picker-service.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.d.ts +34 -0
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +156 -0
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -0
- package/cjs/render/contributions/render/arc-render.js +4 -4
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/arc3d-render.js +3 -3
- package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.d.ts +1 -0
- package/cjs/render/contributions/render/area-render.js +53 -17
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/circle-render.js +3 -3
- package/cjs/render/contributions/render/circle-render.js.map +1 -1
- package/cjs/render/contributions/render/group-render.js +4 -3
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/image-render.js +1 -1
- package/cjs/render/contributions/render/image-render.js.map +1 -1
- package/cjs/render/contributions/render/incremental-area-render.js +1 -1
- package/cjs/render/contributions/render/incremental-area-render.js.map +1 -1
- package/cjs/render/contributions/render/incremental-draw-contribution.js +1 -1
- package/cjs/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/incremental-line-render.js +1 -1
- package/cjs/render/contributions/render/incremental-line-render.js.map +1 -1
- package/cjs/render/contributions/render/line-render.js +30 -4
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/path-render.js +3 -3
- package/cjs/render/contributions/render/path-render.js.map +1 -1
- package/cjs/render/contributions/render/polygon-render.js +3 -3
- package/cjs/render/contributions/render/polygon-render.js.map +1 -1
- package/cjs/render/contributions/render/pyramid3d-render.js +1 -1
- package/cjs/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/cjs/render/contributions/render/rect-render.js +4 -3
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/rect3d-render.js +2 -1
- package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
- package/cjs/render/contributions/render/richtext-render.js +1 -1
- package/cjs/render/contributions/render/richtext-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol-render.js +3 -3
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/contributions/render/text-render.js +63 -14
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/cjs/render/contributions/render/utils.d.ts +3 -3
- package/cjs/render/contributions/render/utils.js +7 -7
- package/cjs/render/contributions/render/utils.js.map +1 -1
- package/dist/index.js +1615 -457
- package/dist/index.min.js +1 -1
- package/es/canvas/contributions/browser/canvas.d.ts +3 -1
- package/es/canvas/contributions/browser/canvas.js +6 -0
- package/es/canvas/contributions/browser/canvas.js.map +1 -1
- package/es/canvas/contributions/browser/context.d.ts +2 -0
- package/es/canvas/contributions/feishu/canvas.d.ts +3 -1
- package/es/canvas/contributions/feishu/canvas.js +6 -0
- package/es/canvas/contributions/feishu/canvas.js.map +1 -1
- package/es/canvas/contributions/lynx/canvas.d.ts +3 -1
- package/es/canvas/contributions/lynx/canvas.js +6 -0
- package/es/canvas/contributions/lynx/canvas.js.map +1 -1
- package/es/canvas/contributions/node/canvas.d.ts +2 -0
- package/es/canvas/contributions/node/canvas.js +2 -0
- package/es/canvas/contributions/node/canvas.js.map +1 -1
- package/es/canvas/contributions/taro/canvas.d.ts +3 -1
- package/es/canvas/contributions/taro/canvas.js +6 -0
- package/es/canvas/contributions/taro/canvas.js.map +1 -1
- package/es/canvas/contributions/tt/canvas.d.ts +3 -1
- package/es/canvas/contributions/tt/canvas.js +6 -0
- package/es/canvas/contributions/tt/canvas.js.map +1 -1
- package/es/canvas/contributions/wx/canvas.d.ts +2 -0
- package/es/canvas/contributions/wx/canvas.js +6 -0
- package/es/canvas/contributions/wx/canvas.js.map +1 -1
- package/es/common/render-area.d.ts +4 -0
- package/es/common/render-area.js +76 -16
- package/es/common/render-area.js.map +1 -1
- package/es/common/render-curve.d.ts +4 -0
- package/es/common/render-curve.js +60 -8
- package/es/common/render-curve.js.map +1 -1
- package/es/common/seg-context.d.ts +10 -8
- package/es/common/seg-context.js +23 -20
- package/es/common/seg-context.js.map +1 -1
- package/es/common/segment/basis.d.ts +5 -3
- package/es/common/segment/basis.js +6 -6
- package/es/common/segment/basis.js.map +1 -1
- package/es/common/segment/curve/cubic-bezier.d.ts +2 -0
- package/es/common/segment/curve/cubic-bezier.js.map +1 -1
- package/es/common/segment/curve/line.d.ts +2 -0
- package/es/common/segment/curve/line.js.map +1 -1
- package/es/common/segment/curve/quadratic-bezier.d.ts +2 -0
- package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/es/common/segment/linear-closed.d.ts +1 -1
- package/es/common/segment/linear-closed.js +2 -2
- package/es/common/segment/linear-closed.js.map +1 -1
- package/es/common/segment/linear.d.ts +2 -2
- package/es/common/segment/linear.js +2 -2
- package/es/common/segment/linear.js.map +1 -1
- package/es/common/segment/monotone.d.ts +4 -2
- package/es/common/segment/monotone.js +9 -8
- package/es/common/segment/monotone.js.map +1 -1
- package/es/common/segment/step.d.ts +2 -1
- package/es/common/segment/step.js +7 -7
- package/es/common/segment/step.js.map +1 -1
- package/es/common/utils.d.ts +14 -2
- package/es/common/utils.js +22 -0
- package/es/common/utils.js.map +1 -1
- package/es/constants.d.ts +1 -1
- package/es/constants.js +1 -1
- package/es/constants.js.map +1 -1
- package/es/core/contributions/env/feishu-contribution.js +4 -2
- package/es/core/contributions/env/feishu-contribution.js.map +1 -1
- package/es/core/contributions/env/lynx-contribution.js +4 -2
- package/es/core/contributions/env/lynx-contribution.js.map +1 -1
- package/es/core/contributions/env/node-contribution.js +4 -2
- package/es/core/contributions/env/node-contribution.js.map +1 -1
- package/es/core/contributions/env/wx-contribution.js +4 -2
- package/es/core/contributions/env/wx-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -0
- package/es/core/contributions/layerHandler/canvas2d-contribution.js +10 -4
- package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js +2 -2
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/es/core/contributions/textMeasure/AtextMeasure.d.ts +26 -2
- package/es/core/contributions/textMeasure/AtextMeasure.js +74 -6
- package/es/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
- package/es/core/contributions/textMeasure/layout.d.ts +2 -2
- package/es/core/contributions/textMeasure/layout.js +4 -4
- package/es/core/contributions/textMeasure/layout.js.map +1 -1
- package/es/core/contributions/window/browser-contribution.js +2 -2
- package/es/core/contributions/window/browser-contribution.js.map +1 -1
- package/es/core/contributions/window/feishu-contribution.js +2 -2
- package/es/core/contributions/window/feishu-contribution.js.map +1 -1
- package/es/core/contributions/window/lynx-contribution.js +2 -2
- package/es/core/contributions/window/lynx-contribution.js.map +1 -1
- package/es/core/contributions/window/native-contribution.js.map +1 -1
- package/es/core/contributions/window/node-contribution.js +2 -2
- package/es/core/contributions/window/node-contribution.js.map +1 -1
- package/es/core/contributions/window/taro-contribution.js +2 -2
- package/es/core/contributions/window/taro-contribution.js.map +1 -1
- package/es/core/contributions/window/wx-contribution.js +2 -2
- package/es/core/contributions/window/wx-contribution.js.map +1 -1
- package/es/core/core-modules.js +4 -4
- package/es/core/core-modules.js.map +1 -1
- package/es/core/global-module.d.ts +5 -1
- package/es/core/global-module.js +20 -1
- package/es/core/global-module.js.map +1 -1
- package/es/core/graphic-utils.js +2 -2
- package/es/core/graphic-utils.js.map +1 -1
- package/es/core/layer-service.js +2 -2
- package/es/core/layer-service.js.map +1 -1
- package/es/core/stage.d.ts +5 -1
- package/es/core/stage.js +21 -9
- package/es/core/stage.js.map +1 -1
- package/es/core/window.d.ts +1 -1
- package/es/core/window.js +3 -3
- package/es/core/window.js.map +1 -1
- package/es/graphic/config.d.ts +3 -1
- package/es/graphic/config.js +25 -6
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.js +12 -3
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +1 -0
- package/es/graphic/graphic.js +3 -0
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/node-tree.d.ts +2 -2
- package/es/graphic/node-tree.js +2 -0
- package/es/graphic/node-tree.js.map +1 -1
- package/es/graphic/text.d.ts +5 -1
- package/es/graphic/text.js +100 -6
- package/es/graphic/text.js.map +1 -1
- package/es/graphic/tools.d.ts +8 -0
- package/es/graphic/tools.js +38 -0
- package/es/graphic/tools.js.map +1 -1
- package/es/graphic/wrap-text.js +5 -1
- package/es/graphic/wrap-text.js.map +1 -1
- package/es/index.d.ts +2 -1
- package/es/index.js +3 -1
- package/es/index.js.map +1 -1
- package/es/interface/curve.d.ts +3 -3
- package/es/interface/curve.js.map +1 -1
- package/es/interface/graphic/area.d.ts +3 -3
- package/es/interface/graphic/area.js.map +1 -1
- package/es/interface/graphic/group.d.ts +6 -0
- package/es/interface/graphic/group.js.map +1 -1
- package/es/interface/graphic/line.d.ts +3 -3
- package/es/interface/graphic/line.js.map +1 -1
- package/es/interface/graphic/text.d.ts +7 -0
- package/es/interface/graphic/text.js.map +1 -1
- package/es/interface/graphic.d.ts +19 -0
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/path.d.ts +2 -0
- package/es/interface/path.js.map +1 -1
- package/es/interface/stage.d.ts +2 -0
- package/es/interface/stage.js.map +1 -1
- package/es/interface/text.d.ts +26 -2
- package/es/interface/text.js.map +1 -1
- package/es/modules.d.ts +1 -1
- package/es/modules.js +3 -3
- package/es/modules.js.map +1 -1
- package/es/picker/canvas-picker-service.js +2 -2
- package/es/picker/canvas-picker-service.js.map +1 -1
- package/es/picker/global-picker-service.js +2 -2
- package/es/picker/global-picker-service.js.map +1 -1
- package/es/picker/math-picker-service.js +2 -2
- package/es/picker/math-picker-service.js.map +1 -1
- package/es/picker/picker-service.js +2 -2
- package/es/picker/picker-service.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.d.ts +34 -0
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +152 -0
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -0
- package/es/render/contributions/render/arc-render.js +3 -3
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/arc3d-render.js +2 -2
- package/es/render/contributions/render/arc3d-render.js.map +1 -1
- package/es/render/contributions/render/area-render.d.ts +1 -0
- package/es/render/contributions/render/area-render.js +54 -17
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/circle-render.js +2 -2
- package/es/render/contributions/render/circle-render.js.map +1 -1
- package/es/render/contributions/render/group-render.js +2 -2
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/image-render.js +1 -1
- package/es/render/contributions/render/image-render.js.map +1 -1
- package/es/render/contributions/render/incremental-area-render.js +1 -1
- package/es/render/contributions/render/incremental-area-render.js.map +1 -1
- package/es/render/contributions/render/incremental-draw-contribution.js +2 -2
- package/es/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/es/render/contributions/render/incremental-line-render.js +1 -1
- package/es/render/contributions/render/incremental-line-render.js.map +1 -1
- package/es/render/contributions/render/line-render.js +30 -4
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/path-render.js +2 -2
- package/es/render/contributions/render/path-render.js.map +1 -1
- package/es/render/contributions/render/polygon-render.js +2 -2
- package/es/render/contributions/render/polygon-render.js.map +1 -1
- package/es/render/contributions/render/pyramid3d-render.js +1 -1
- package/es/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/es/render/contributions/render/rect-render.js +2 -2
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/rect3d-render.js +1 -1
- package/es/render/contributions/render/rect3d-render.js.map +1 -1
- package/es/render/contributions/render/richtext-render.js +1 -1
- package/es/render/contributions/render/richtext-render.js.map +1 -1
- package/es/render/contributions/render/symbol-render.js +2 -2
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/contributions/render/text-render.js +65 -12
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/es/render/contributions/render/utils.d.ts +3 -3
- package/es/render/contributions/render/utils.js +7 -7
- package/es/render/contributions/render/utils.js.map +1 -1
- package/es/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
value: !0
|
|
11
11
|
}), exports.ATextMeasure = void 0;
|
|
12
12
|
|
|
13
|
-
const inversify_1 = require("inversify"), config_1 = require("../../../graphic/config");
|
|
13
|
+
const inversify_1 = require("inversify"), config_1 = require("../../../graphic/config"), utils_1 = require("../../../graphic/richtext/utils");
|
|
14
14
|
|
|
15
15
|
let ATextMeasure = class {
|
|
16
16
|
configure(service, env) {
|
|
@@ -46,19 +46,63 @@ let ATextMeasure = class {
|
|
|
46
46
|
measureText(text, options) {
|
|
47
47
|
return this.context ? (this.context.setTextStyleWithoutAlignBaseline(options), this.context.measureText(text)) : this.estimate(text, options);
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
clipTextVertical(verticalList, options, width, wordBreak) {
|
|
50
|
+
if (0 === verticalList.length) return {
|
|
51
|
+
verticalList: verticalList,
|
|
52
|
+
width: 0
|
|
53
|
+
};
|
|
54
|
+
const {fontSize: fontSize = 12} = options;
|
|
55
|
+
verticalList.forEach((item => {
|
|
56
|
+
item.width = 0 === item.direction ? fontSize : this.measureTextWidth(item.text, options);
|
|
57
|
+
}));
|
|
58
|
+
const out = [];
|
|
59
|
+
let length = 0, i = 0;
|
|
60
|
+
for (;i < verticalList.length && length + verticalList[i].width < width; i++) length += verticalList[i].width,
|
|
61
|
+
out.push(verticalList[i]);
|
|
62
|
+
if (verticalList[i] && verticalList[i].text.length > 1) {
|
|
63
|
+
const clipedData = this._clipText(verticalList[i].text, options, width - length, 0, verticalList[i].text.length - 1);
|
|
64
|
+
if (wordBreak && clipedData.str !== verticalList[i].text) {
|
|
65
|
+
let text = "", length = 0;
|
|
66
|
+
for (let j = 0; j < i; j++) {
|
|
67
|
+
const item = verticalList[j];
|
|
68
|
+
text += item.text, length += item.text.length;
|
|
69
|
+
}
|
|
70
|
+
text += verticalList[i].text;
|
|
71
|
+
const totalLength = length + clipedData.str.length;
|
|
72
|
+
let index = (0, utils_1.testLetter)(text, totalLength);
|
|
73
|
+
index -= length, index !== clipedData.str.length - 1 && (clipedData.str = clipedData.str.substring(0, index),
|
|
74
|
+
clipedData.width = this.measureTextWidth(clipedData.str, options));
|
|
75
|
+
}
|
|
76
|
+
out.push(Object.assign(Object.assign({}, verticalList[i]), {
|
|
77
|
+
text: clipedData.str,
|
|
78
|
+
width: clipedData.width
|
|
79
|
+
})), length += clipedData.width;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
verticalList: out,
|
|
83
|
+
width: length
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
clipText(text, options, width, wordBreak) {
|
|
50
87
|
if (0 === text.length) return {
|
|
51
88
|
str: "",
|
|
52
89
|
width: 0
|
|
53
90
|
};
|
|
54
91
|
let length = this.measureTextWidth(text, options);
|
|
55
|
-
|
|
92
|
+
if (length <= width) return {
|
|
56
93
|
str: text,
|
|
57
94
|
width: length
|
|
58
|
-
}
|
|
95
|
+
};
|
|
96
|
+
if (length = this.measureTextWidth(text[0], options), length > width) return {
|
|
59
97
|
str: "",
|
|
60
98
|
width: 0
|
|
61
|
-
}
|
|
99
|
+
};
|
|
100
|
+
const data = this._clipText(text, options, width, 0, text.length - 1);
|
|
101
|
+
if (wordBreak && data.str !== text) {
|
|
102
|
+
const index = (0, utils_1.testLetter)(text, data.str.length);
|
|
103
|
+
index !== data.str.length && (data.str = text.substring(0, index), data.width = this.measureTextWidth(data.str, options));
|
|
104
|
+
}
|
|
105
|
+
return data;
|
|
62
106
|
}
|
|
63
107
|
_clipText(text, options, width, leftIdx, rightIdx) {
|
|
64
108
|
const middleIdx = Math.floor((leftIdx + rightIdx) / 2), subText = text.substring(0, middleIdx + 1), strWidth = this.measureTextWidth(subText, options);
|
|
@@ -90,8 +134,26 @@ let ATextMeasure = class {
|
|
|
90
134
|
width: strWidth
|
|
91
135
|
};
|
|
92
136
|
}
|
|
93
|
-
|
|
94
|
-
if ("" === suffix) return this.
|
|
137
|
+
clipTextWithSuffixVertical(verticalList, options, width, suffix, wordBreak) {
|
|
138
|
+
if ("" === suffix) return this.clipTextVertical(verticalList, options, width, wordBreak);
|
|
139
|
+
if (0 === verticalList.length) return {
|
|
140
|
+
verticalList: verticalList,
|
|
141
|
+
width: 0
|
|
142
|
+
};
|
|
143
|
+
const output = this.clipTextVertical(verticalList, options, width, wordBreak);
|
|
144
|
+
if (output.verticalList.length === verticalList.length && output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width) return output;
|
|
145
|
+
const suffixWidth = this.measureTextWidth(suffix, options);
|
|
146
|
+
if (suffixWidth > width) return output;
|
|
147
|
+
width -= suffixWidth;
|
|
148
|
+
const out = this.clipTextVertical(verticalList, options, width, wordBreak);
|
|
149
|
+
return out.width += suffixWidth, out.verticalList.push({
|
|
150
|
+
text: suffix,
|
|
151
|
+
direction: 1,
|
|
152
|
+
width: suffixWidth
|
|
153
|
+
}), out;
|
|
154
|
+
}
|
|
155
|
+
clipTextWithSuffix(text, options, width, suffix, wordBreak) {
|
|
156
|
+
if ("" === suffix) return this.clipText(text, options, width, wordBreak);
|
|
95
157
|
if (0 === text.length) return {
|
|
96
158
|
str: "",
|
|
97
159
|
width: 0
|
|
@@ -108,6 +170,10 @@ let ATextMeasure = class {
|
|
|
108
170
|
};
|
|
109
171
|
width -= suffixWidth;
|
|
110
172
|
const data = this._clipText(text, options, width, 0, text.length - 1);
|
|
173
|
+
if (wordBreak && data.str !== text) {
|
|
174
|
+
const index = (0, utils_1.testLetter)(text, data.str.length);
|
|
175
|
+
index !== data.str.length && (data.str = text.substring(0, index), data.width = this.measureTextWidth(data.str, options));
|
|
176
|
+
}
|
|
111
177
|
return data.str += suffix, data.width += suffixWidth, data;
|
|
112
178
|
}
|
|
113
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/textMeasure/AtextMeasure.ts"],"names":[],"mappings":"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","file":"AtextMeasure.js","sourcesContent":["import { injectable } from 'inversify';\nimport type { IGraphicUtil } from '../../../interface/core';\nimport type { ICanvas, IContext2d, EnvType } from '../../../interface';\nimport type { TextOptionsType, ITextMeasure } from '../../../interface/text';\nimport { DefaultTextAttribute, DefaultTextStyle } from '../../../graphic/config';\n\n@injectable()\nexport class ATextMeasure implements ITextMeasure {\n release: (...params: any) => void;\n protected canvas?: ICanvas;\n protected context?: IContext2d | null;\n\n configure(service: IGraphicUtil, env: EnvType): void {\n this.canvas = service.canvas;\n this.context = service.context;\n service.bindTextMeasure(this);\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return textMeasure.width;\n }\n\n // 估算文字长度\n estimate(\n text: string,\n { fontSize = DefaultTextAttribute.fontSize }: TextOptionsType\n ): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n /**\n * 获取text像素高度,基于actualBoundingBoxAscent和actualBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextPixelHeight(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).actualBoundingBoxAscent - (textMeasure as any).actualBoundingBoxDescent);\n }\n\n /**\n * 获取text包围盒的高度,基于fontBoundingBoxAscent和fontBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextBoundHieght(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).fontBoundingBoxAscent - (textMeasure as any).fontBoundingBoxDescent);\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n if (!this.context) {\n return this.estimate(text, options);\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n return this.context.measureText(text);\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: TextOptionsType,\n width: number\n ): {\n str: string;\n width: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n return this._clipText(text, options, width, 0, text.length - 1);\n }\n\n // 二分法找到最佳宽\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipText(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipText(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1);\n data.str += suffix;\n data.width += suffixWidth;\n return data;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/textMeasure/AtextMeasure.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAAuC;AAIvC,oDAAiF;AACjF,2DAA6D;AAGtD,IAAM,YAAY,GAAlB,MAAM,YAAY;IAKvB,SAAS,CAAC,OAAqB,EAAE,GAAY;QAC3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAOD,gBAAgB,CAAC,IAAY,EAAE,OAAwB;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;SAC3C;QACD,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAGD,QAAQ,CACN,IAAY,EACZ,EAAE,QAAQ,GAAG,6BAAoB,CAAC,QAAQ,EAAmB;QAG7D,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACpD;QACD,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;YAC1D,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAOD,sBAAsB,CAAC,IAAY,EAAE,OAAwB;;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,MAAA,OAAO,CAAC,QAAQ,mCAAI,yBAAgB,CAAC,QAAQ,CAAC;SACtD;QACD,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,CAAE,WAAmB,CAAC,uBAAuB,GAAI,WAAmB,CAAC,wBAAwB,CAAC,CAAC;IAChH,CAAC;IAOD,sBAAsB,CAAC,IAAY,EAAE,OAAwB;;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,MAAA,OAAO,CAAC,QAAQ,mCAAI,yBAAgB,CAAC,QAAQ,CAAC;SACtD;QACD,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,CAAE,WAAmB,CAAC,qBAAqB,GAAI,WAAmB,CAAC,sBAAsB,CAAC,CAAC;IAC5G,CAAC;IAOD,WAAW,CAAC,IAAY,EAAE,OAAwB;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACrC;QACD,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB,CACd,YAAmE,EACnE,OAAwB,EACxB,KAAa,EACb,SAAkB;QAKlB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACnC;QACD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAElC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAA0D,EAAE,CAAC;QACtE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE;gBAC1C,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B;iBAAM;gBACL,MAAM;aACP;SACF;QACD,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EACpB,OAAO,EACP,KAAK,GAAG,MAAM,EACd,CAAC,EACD,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAChC,CAAC;YACF,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACxD,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;oBAClB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBAC5B;gBACD,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBACnD,IAAI,KAAK,GAAG,IAAA,kBAAU,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC1C,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;gBACvB,IAAI,KAAK,KAAK,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBACpD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;iBACnE;aACF;YACD,GAAG,CAAC,IAAI,iCAAM,YAAY,CAAC,CAAC,CAAC,KAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAG,CAAC;YAChF,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC;SAC5B;QAED,OAAO;YACL,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,MAAM;SACd,CAAC;IACJ,CAAC;IAQD,QAAQ,CACN,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,SAAkB;QAKlB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrC;QACD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,KAAK,EAAE;YAClB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEtE,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aACvD;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGO,SAAS,CACf,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,OAAe,EACf,QAAgB;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,GAAG,KAAK,EAAE;YAEpB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;gBACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9B;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAEzC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC/B;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACjE;aAAM,IAAI,QAAQ,GAAG,KAAK,EAAE;YAE3B,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;aACnE;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YAE7C,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SAClE;QAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,0BAA0B,CACxB,YAAmE,EACnE,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAkB;QAKlB,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACvE;QACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACnC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9E,IACE,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YAClD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EACzG;YACA,OAAO,MAAM,CAAC;SACf;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,WAAW,GAAG,KAAK,EAAE;YACvB,OAAO,MAAM,CAAC;SACf;QAED,KAAK,IAAI,WAAW,CAAC;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3E,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC;QACzB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IACD,kBAAkB,CAChB,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAkB;QAKlB,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACvD;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,WAAW,GAAG,KAAK,EAAE;YACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,KAAK,IAAI,WAAW,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAGtE,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aACvD;SACF;QACD,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAtTY,YAAY;IADxB,IAAA,sBAAU,GAAE;GACA,YAAY,CAsTxB;AAtTY,oCAAY","file":"AtextMeasure.js","sourcesContent":["import { injectable } from 'inversify';\nimport type { IGraphicUtil } from '../../../interface/core';\nimport type { ICanvas, IContext2d, EnvType } from '../../../interface';\nimport type { TextOptionsType, ITextMeasure } from '../../../interface/text';\nimport { DefaultTextAttribute, DefaultTextStyle } from '../../../graphic/config';\nimport { testLetter } from '../../../graphic/richtext/utils';\n\n@injectable()\nexport class ATextMeasure implements ITextMeasure {\n release: (...params: any) => void;\n protected canvas?: ICanvas;\n protected context?: IContext2d | null;\n\n configure(service: IGraphicUtil, env: EnvType): void {\n this.canvas = service.canvas;\n this.context = service.context;\n service.bindTextMeasure(this);\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return textMeasure.width;\n }\n\n // 估算文字长度\n estimate(\n text: string,\n { fontSize = DefaultTextAttribute.fontSize }: TextOptionsType\n ): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n /**\n * 获取text像素高度,基于actualBoundingBoxAscent和actualBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextPixelHeight(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).actualBoundingBoxAscent - (textMeasure as any).actualBoundingBoxDescent);\n }\n\n /**\n * 获取text包围盒的高度,基于fontBoundingBoxAscent和fontBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextBoundHieght(text: string, options: TextOptionsType): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n const textMeasure = this.context.measureText(text);\n return Math.abs((textMeasure as any).fontBoundingBoxAscent - (textMeasure as any).fontBoundingBoxDescent);\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n if (!this.context) {\n return this.estimate(text, options);\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n return this.context.measureText(text);\n }\n\n clipTextVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n const { fontSize = 12 } = options;\n // 计算每一个区域的width\n verticalList.forEach(item => {\n item.width = item.direction === 0 ? fontSize : this.measureTextWidth(item.text, options);\n });\n const out: { text: string; width?: number; direction: number }[] = [];\n let length = 0;\n let i = 0;\n for (; i < verticalList.length; i++) {\n if (length + verticalList[i].width < width) {\n length += verticalList[i].width;\n out.push(verticalList[i]);\n } else {\n break;\n }\n }\n if (verticalList[i] && verticalList[i].text.length > 1) {\n const clipedData = this._clipText(\n verticalList[i].text,\n options,\n width - length,\n 0,\n verticalList[i].text.length - 1\n );\n if (wordBreak && clipedData.str !== verticalList[i].text) {\n let text = '';\n let length = 0;\n for (let j = 0; j < i; j++) {\n const item = verticalList[j];\n text += item.text;\n length += item.text.length;\n }\n text += verticalList[i].text;\n const totalLength = length + clipedData.str.length;\n let index = testLetter(text, totalLength);\n index = index - length;\n if (index !== clipedData.str.length - 1) {\n clipedData.str = clipedData.str.substring(0, index);\n clipedData.width = this.measureTextWidth(clipedData.str, options);\n }\n }\n out.push({ ...verticalList[i], text: clipedData.str, width: clipedData.width });\n length += clipedData.width;\n }\n\n return {\n verticalList: out,\n width: length\n };\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n str: string;\n width: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n const data = this._clipText(text, options, width, 0, text.length - 1);\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n return data;\n }\n\n // 二分法找到最佳宽\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipText(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipText(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n clipTextWithSuffixVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (suffix === '') {\n return this.clipTextVertical(verticalList, options, width, wordBreak);\n }\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n\n const output = this.clipTextVertical(verticalList, options, width, wordBreak);\n if (\n output.verticalList.length === verticalList.length &&\n output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width\n ) {\n return output;\n }\n\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return output;\n }\n\n width -= suffixWidth;\n\n const out = this.clipTextVertical(verticalList, options, width, wordBreak);\n out.width += suffixWidth;\n out.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n return out;\n }\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width, wordBreak);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1);\n\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n data.str += suffix;\n data.width += suffixWidth;\n return data;\n }\n}\n"]}
|
|
@@ -6,8 +6,8 @@ export declare class CanvasTextLayout {
|
|
|
6
6
|
private textMeasure;
|
|
7
7
|
constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure);
|
|
8
8
|
LayoutBBox(bbox: TextLayoutBBox, textAlign: TextAlignType, textBaseline: TextBaselineType): TextLayoutBBox;
|
|
9
|
-
GetLayout(str: string, width: number, height: number, textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, miniApp: boolean): LayoutType;
|
|
10
|
-
GetLayoutByLines(lines: (string | number)[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix
|
|
9
|
+
GetLayout(str: string, width: number, height: number, textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, wordBreak: boolean, miniApp: boolean): LayoutType;
|
|
10
|
+
GetLayoutByLines(lines: (string | number)[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, wordBreak: boolean, lineWidth?: number): LayoutType;
|
|
11
11
|
layoutWithBBox(bbox: TextLayoutBBox, lines: LayoutItemType[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number): LayoutType;
|
|
12
12
|
private lineOffset;
|
|
13
13
|
}
|
|
@@ -16,10 +16,10 @@ class CanvasTextLayout {
|
|
|
16
16
|
return bbox.yOffset = "top" === textBaseline ? 0 : "middle" === textBaseline ? bbox.height / -2 : "alphabetic" === textBaseline ? -.79 * bbox.height : -bbox.height,
|
|
17
17
|
bbox;
|
|
18
18
|
}
|
|
19
|
-
GetLayout(str, width, height, textAlign, textBaseline, lineHeight, suffix, miniApp) {
|
|
19
|
+
GetLayout(str, width, height, textAlign, textBaseline, lineHeight, suffix, wordBreak, miniApp) {
|
|
20
20
|
const linesLayout = [], bboxWH = [ width, height ], bboxOffset = [ 0, 0 ];
|
|
21
21
|
for (;str.length > 0; ) {
|
|
22
|
-
const {str: clipText} = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix);
|
|
22
|
+
const {str: clipText} = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix, wordBreak);
|
|
23
23
|
linesLayout.push({
|
|
24
24
|
str: clipText,
|
|
25
25
|
width: this.textMeasure.measureTextWidth(clipText, this.textOptions)
|
|
@@ -35,14 +35,14 @@ class CanvasTextLayout {
|
|
|
35
35
|
};
|
|
36
36
|
return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);
|
|
37
37
|
}
|
|
38
|
-
GetLayoutByLines(lines, textAlign, textBaseline, lineHeight, suffix = "", lineWidth) {
|
|
38
|
+
GetLayoutByLines(lines, textAlign, textBaseline, lineHeight, suffix = "", wordBreak, lineWidth) {
|
|
39
39
|
lines = lines.map((l => l.toString()));
|
|
40
40
|
const linesLayout = [], bboxWH = [ 0, 0 ];
|
|
41
41
|
if ("number" == typeof lineWidth && lineWidth !== 1 / 0) {
|
|
42
42
|
let width;
|
|
43
43
|
for (let i = 0, len = lines.length; i < len; i++) width = Math.min(this.textMeasure.measureTextWidth(lines[i], this.textOptions), lineWidth),
|
|
44
44
|
linesLayout.push({
|
|
45
|
-
str: this.textMeasure.clipTextWithSuffix(lines[i], this.textOptions, width, suffix).str,
|
|
45
|
+
str: this.textMeasure.clipTextWithSuffix(lines[i], this.textOptions, width, suffix, wordBreak).str,
|
|
46
46
|
width: width
|
|
47
47
|
});
|
|
48
48
|
bboxWH[0] = lineWidth;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/textMeasure/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { vec2 } from '@visactor/vutils';\nimport type { ITextMeasure, TextOptionsType } from '../../../interface/text';\nimport type { TextLayoutBBox, LayoutItemType, LayoutType, TextAlignType, TextBaselineType } from '../../../interface';\n\nexport class CanvasTextLayout {\n private fontFamily: string;\n private textOptions: TextOptionsType;\n private textMeasure: ITextMeasure;\n\n constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure) {\n this.fontFamily = fontFamily;\n this.textOptions = options;\n this.textMeasure = textMeasure;\n }\n\n LayoutBBox(bbox: TextLayoutBBox, textAlign: TextAlignType, textBaseline: TextBaselineType): TextLayoutBBox {\n if (textAlign === 'left' || textAlign === 'start') {\n bbox.xOffset = 0;\n } else if (textAlign === 'center') {\n bbox.xOffset = bbox.width / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bbox.xOffset = -bbox.width;\n } else {\n throw new Error('非法的textAlign');\n }\n\n if (textBaseline === 'top') {\n bbox.yOffset = 0;\n } else if (textBaseline === 'middle') {\n bbox.yOffset = bbox.height / -2;\n } else if (textBaseline === 'alphabetic') {\n bbox.yOffset = bbox.height * -0.79;\n } else {\n bbox.yOffset = -bbox.height;\n }\n\n return bbox;\n }\n\n GetLayout(\n str: string,\n width: number,\n height: number,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string,\n miniApp: boolean\n ): LayoutType {\n // 拆分str\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [width, height];\n const bboxOffset: vec2 = [0, 0];\n\n while (str.length > 0) {\n const { str: clipText } = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix);\n linesLayout.push({\n str: clipText,\n width: this.textMeasure.measureTextWidth(clipText, this.textOptions)\n });\n str = str.substring(clipText.length);\n }\n\n if (textAlign === 'left' || textAlign === 'start') {\n // origin[0] = 0;\n } else if (textAlign === 'center') {\n bboxOffset[0] = bboxWH[0] / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bboxOffset[0] = -bboxWH[0];\n }\n\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n bboxOffset[1] = bboxWH[1] / -2;\n } else if (textBaseline === 'bottom') {\n bboxOffset[1] = -bboxWH[1];\n }\n\n const bbox: TextLayoutBBox = {\n xOffset: bboxOffset[0],\n yOffset: bboxOffset[1],\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n /**\n * 给定拆分好的每行字符串进行布局,如果传入lineWidth,那么后面的字符就拆分\n * @param lines\n * @param lineWidth\n */\n GetLayoutByLines(\n lines: (string | number)[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string = '',\n lineWidth?: number\n ): LayoutType {\n lines = lines.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [0, 0];\n if (typeof lineWidth === 'number' && lineWidth !== Infinity) {\n // 直接使用lineWidth,并拆分字符串\n let width: number;\n for (let i = 0, len = lines.length; i < len; i++) {\n width = Math.min(this.textMeasure.measureTextWidth(lines[i] as string, this.textOptions), lineWidth);\n linesLayout.push({\n str: this.textMeasure.clipTextWithSuffix(lines[i] as string, this.textOptions, width, suffix).str,\n width\n });\n }\n bboxWH[0] = lineWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n text = lines[i] as string;\n width = this.textMeasure.measureTextWidth(text, this.textOptions);\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n const bbox: TextLayoutBBox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n this.LayoutBBox(bbox, textAlign, textBaseline);\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n layoutWithBBox(\n bbox: TextLayoutBBox,\n lines: LayoutItemType[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number\n ): LayoutType {\n const origin: vec2 = [0, 0];\n const totalLineHeight = lines.length * lineHeight; // 总高度\n // origin在y方向需要初始化,然后递增即可\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n origin[1] = (bbox.height - totalLineHeight) / 2;\n } else if (textBaseline === 'bottom') {\n origin[1] = bbox.height - totalLineHeight;\n }\n\n for (let i = 0; i < lines.length; i++) {\n this.lineOffset(bbox, lines[i], textAlign, textBaseline, lineHeight, origin);\n }\n\n return {\n bbox,\n lines,\n fontFamily: this.fontFamily,\n fontSize: this.textOptions.fontSize,\n fontWeight: this.textOptions.fontWeight,\n lineHeight,\n textAlign,\n textBaseline\n };\n }\n\n /**\n * 计算line在bbox中的位置,需要配合layoutWithBBox使用\n * @param bbox\n * @param line\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @param origin 这个line的左上角位置,会复用并修改\n */\n private lineOffset(\n bbox: TextLayoutBBox,\n line: LayoutItemType,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n origin: vec2\n ): LayoutItemType {\n if (textAlign === 'left' || textAlign === 'start') {\n line.leftOffset = 0;\n } else if (textAlign === 'center') {\n line.leftOffset = (bbox.width - line.width) / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n line.leftOffset = bbox.width - line.width;\n }\n\n // line.topOffset = lineHeight * 0.79 + origin[1]; // 渲染默认使用alphabetic\n line.topOffset = (lineHeight - this.textOptions.fontSize) / 2 + this.textOptions.fontSize * 0.79 + origin[1];\n origin[1] += lineHeight;\n\n return line;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/textMeasure/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { vec2 } from '@visactor/vutils';\nimport type { ITextMeasure, TextOptionsType } from '../../../interface/text';\nimport type { TextLayoutBBox, LayoutItemType, LayoutType, TextAlignType, TextBaselineType } from '../../../interface';\n\nexport class CanvasTextLayout {\n private fontFamily: string;\n private textOptions: TextOptionsType;\n private textMeasure: ITextMeasure;\n\n constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure) {\n this.fontFamily = fontFamily;\n this.textOptions = options;\n this.textMeasure = textMeasure;\n }\n\n LayoutBBox(bbox: TextLayoutBBox, textAlign: TextAlignType, textBaseline: TextBaselineType): TextLayoutBBox {\n if (textAlign === 'left' || textAlign === 'start') {\n bbox.xOffset = 0;\n } else if (textAlign === 'center') {\n bbox.xOffset = bbox.width / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bbox.xOffset = -bbox.width;\n } else {\n throw new Error('非法的textAlign');\n }\n\n if (textBaseline === 'top') {\n bbox.yOffset = 0;\n } else if (textBaseline === 'middle') {\n bbox.yOffset = bbox.height / -2;\n } else if (textBaseline === 'alphabetic') {\n bbox.yOffset = bbox.height * -0.79;\n } else {\n bbox.yOffset = -bbox.height;\n }\n\n return bbox;\n }\n\n GetLayout(\n str: string,\n width: number,\n height: number,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string,\n wordBreak: boolean,\n miniApp: boolean\n ): LayoutType {\n // 拆分str\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [width, height];\n const bboxOffset: vec2 = [0, 0];\n\n while (str.length > 0) {\n const { str: clipText } = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix, wordBreak);\n linesLayout.push({\n str: clipText,\n width: this.textMeasure.measureTextWidth(clipText, this.textOptions)\n });\n str = str.substring(clipText.length);\n }\n\n if (textAlign === 'left' || textAlign === 'start') {\n // origin[0] = 0;\n } else if (textAlign === 'center') {\n bboxOffset[0] = bboxWH[0] / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bboxOffset[0] = -bboxWH[0];\n }\n\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n bboxOffset[1] = bboxWH[1] / -2;\n } else if (textBaseline === 'bottom') {\n bboxOffset[1] = -bboxWH[1];\n }\n\n const bbox: TextLayoutBBox = {\n xOffset: bboxOffset[0],\n yOffset: bboxOffset[1],\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n /**\n * 给定拆分好的每行字符串进行布局,如果传入lineWidth,那么后面的字符就拆分\n * @param lines\n * @param lineWidth\n */\n GetLayoutByLines(\n lines: (string | number)[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string = '',\n wordBreak: boolean,\n lineWidth?: number\n ): LayoutType {\n lines = lines.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [0, 0];\n if (typeof lineWidth === 'number' && lineWidth !== Infinity) {\n // 直接使用lineWidth,并拆分字符串\n let width: number;\n for (let i = 0, len = lines.length; i < len; i++) {\n width = Math.min(this.textMeasure.measureTextWidth(lines[i] as string, this.textOptions), lineWidth);\n linesLayout.push({\n str: this.textMeasure.clipTextWithSuffix(lines[i] as string, this.textOptions, width, suffix, wordBreak).str,\n width\n });\n }\n bboxWH[0] = lineWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n text = lines[i] as string;\n width = this.textMeasure.measureTextWidth(text, this.textOptions);\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n const bbox: TextLayoutBBox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n this.LayoutBBox(bbox, textAlign, textBaseline);\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n layoutWithBBox(\n bbox: TextLayoutBBox,\n lines: LayoutItemType[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number\n ): LayoutType {\n const origin: vec2 = [0, 0];\n const totalLineHeight = lines.length * lineHeight; // 总高度\n // origin在y方向需要初始化,然后递增即可\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n origin[1] = (bbox.height - totalLineHeight) / 2;\n } else if (textBaseline === 'bottom') {\n origin[1] = bbox.height - totalLineHeight;\n }\n\n for (let i = 0; i < lines.length; i++) {\n this.lineOffset(bbox, lines[i], textAlign, textBaseline, lineHeight, origin);\n }\n\n return {\n bbox,\n lines,\n fontFamily: this.fontFamily,\n fontSize: this.textOptions.fontSize,\n fontWeight: this.textOptions.fontWeight,\n lineHeight,\n textAlign,\n textBaseline\n };\n }\n\n /**\n * 计算line在bbox中的位置,需要配合layoutWithBBox使用\n * @param bbox\n * @param line\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @param origin 这个line的左上角位置,会复用并修改\n */\n private lineOffset(\n bbox: TextLayoutBBox,\n line: LayoutItemType,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n origin: vec2\n ): LayoutItemType {\n if (textAlign === 'left' || textAlign === 'start') {\n line.leftOffset = 0;\n } else if (textAlign === 'center') {\n line.leftOffset = (bbox.width - line.width) / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n line.leftOffset = bbox.width - line.width;\n }\n\n // line.topOffset = lineHeight * 0.79 + origin[1]; // 渲染默认使用alphabetic\n line.topOffset = (lineHeight - this.textOptions.fontSize) / 2 + this.textOptions.fontSize * 0.79 + origin[1];\n origin[1] += lineHeight;\n\n return line;\n }\n}\n"]}
|
|
@@ -140,6 +140,6 @@ let BrowserWindowHandlerContribution = class extends base_contribution_1.BaseWin
|
|
|
140
140
|
};
|
|
141
141
|
|
|
142
142
|
BrowserWindowHandlerContribution.env = "browser", BrowserWindowHandlerContribution = __decorate([ (0,
|
|
143
|
-
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.
|
|
143
|
+
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.Global)), __metadata("design:paramtypes", [ Object ]) ], BrowserWindowHandlerContribution),
|
|
144
144
|
exports.BrowserWindowHandlerContribution = BrowserWindowHandlerContribution;
|
|
145
145
|
//# sourceMappingURL=browser-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/window/browser-contribution.ts"],"names":[],"mappings":"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","file":"browser-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { BrowserCanvas } from '../../../canvas/contributions/browser';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n IContext2d,\n ICanvas,\n IDomRectLike,\n EnvType,\n IGlobal,\n IWindowHandlerContribution,\n IWindowParams\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { VGlobal } from '../../../constants';\n\n@injectable()\nexport class BrowserWindowHandlerContribution\n extends BaseWindowHandlerContribution\n implements IWindowHandlerContribution\n{\n static env: EnvType = 'browser';\n\n type: EnvType = 'browser';\n\n canvas: ICanvas;\n\n observer?: MutationObserver;\n\n get container(): HTMLElement | null {\n return this.canvas.nativeCanvas.parentElement;\n }\n\n constructor(@inject(VGlobal) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n\n // this.bindOnChangeEvent();\n }\n\n // private bindOnChangeEvent() {\n // const { nativeCanvas } = this.canvas;\n // const observer = new MutationObserver((mutations, observer) => {\n // mutations.forEach((mutaion) => {\n // console.log(mutaion);\n // })\n // });\n // observer.observe(nativeCanvas, { attributes: true, childList: true, subtree: true })\n // }\n\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n // 保存到dom中\n let container: HTMLElement | null;\n if (typeof params.container === 'string') {\n container = this.global.getElementById(params.container);\n } else if (params.container) {\n container = params.container;\n } else {\n container = this.global.getRootElement();\n }\n if (!container) {\n throw new Error('发生错误,containerId可能传入有误');\n }\n\n if (!params.offscreen) {\n container.appendChild(nativeCanvas);\n } else {\n container = null;\n }\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n container,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: true\n };\n this.canvas = new BrowserCanvas(options);\n // 应用位置属性\n // window上的不需要设置position\n // this.canvas.applyPosition();\n // this.canvas.resetStyle(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n if (!canvas) {\n throw new Error('发生错误,传入的canvas不正确');\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (params.canvasControled === false) {\n if (dpr) {\n console.warn('canvasControled为false后,dpr参数将无效');\n }\n dpr = null;\n }\n if (dpr == null) {\n const ctx = canvas.getContext('2d');\n // 兼容XTable\n dpr = (ctx as any).pixelRatio ?? canvas.width / width;\n }\n this.canvas = new BrowserCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n // if (params.canvasControled) {\n // this.canvas.resetStyle({\n // width,\n // height,\n // dpr\n // });\n // }\n }\n releaseWindow(): void {\n this.canvas.release();\n }\n resizeWindow(width: number, height: number): void {\n this.canvas.resize(width, height);\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).dispatchEvent(event);\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return this.canvas.nativeCanvas.style;\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n this.canvas.nativeCanvas.style = style;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const c = this.canvas.nativeCanvas as HTMLCanvasElement;\n const wh = this.getWH();\n if (!c.parentElement) {\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/window/browser-contribution.ts"],"names":[],"mappings":"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","file":"browser-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { BrowserCanvas } from '../../../canvas/contributions/browser';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n IContext2d,\n ICanvas,\n IDomRectLike,\n EnvType,\n IGlobal,\n IWindowHandlerContribution,\n IWindowParams\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { Global } from '../../../constants';\n\n@injectable()\nexport class BrowserWindowHandlerContribution\n extends BaseWindowHandlerContribution\n implements IWindowHandlerContribution\n{\n static env: EnvType = 'browser';\n\n type: EnvType = 'browser';\n\n canvas: ICanvas;\n\n observer?: MutationObserver;\n\n get container(): HTMLElement | null {\n return this.canvas.nativeCanvas.parentElement;\n }\n\n constructor(@inject(Global) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n\n // this.bindOnChangeEvent();\n }\n\n // private bindOnChangeEvent() {\n // const { nativeCanvas } = this.canvas;\n // const observer = new MutationObserver((mutations, observer) => {\n // mutations.forEach((mutaion) => {\n // console.log(mutaion);\n // })\n // });\n // observer.observe(nativeCanvas, { attributes: true, childList: true, subtree: true })\n // }\n\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n // 保存到dom中\n let container: HTMLElement | null;\n if (typeof params.container === 'string') {\n container = this.global.getElementById(params.container);\n } else if (params.container) {\n container = params.container;\n } else {\n container = this.global.getRootElement();\n }\n if (!container) {\n throw new Error('发生错误,containerId可能传入有误');\n }\n\n if (!params.offscreen) {\n container.appendChild(nativeCanvas);\n } else {\n container = null;\n }\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n container,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: true\n };\n this.canvas = new BrowserCanvas(options);\n // 应用位置属性\n // window上的不需要设置position\n // this.canvas.applyPosition();\n // this.canvas.resetStyle(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n if (!canvas) {\n throw new Error('发生错误,传入的canvas不正确');\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (params.canvasControled === false) {\n if (dpr) {\n console.warn('canvasControled为false后,dpr参数将无效');\n }\n dpr = null;\n }\n if (dpr == null) {\n const ctx = canvas.getContext('2d');\n // 兼容XTable\n dpr = (ctx as any).pixelRatio ?? canvas.width / width;\n }\n this.canvas = new BrowserCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n // if (params.canvasControled) {\n // this.canvas.resetStyle({\n // width,\n // height,\n // dpr\n // });\n // }\n }\n releaseWindow(): void {\n this.canvas.release();\n }\n resizeWindow(width: number, height: number): void {\n this.canvas.resize(width, height);\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n return (this.canvas.nativeCanvas as HTMLCanvasElement).dispatchEvent(event);\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return this.canvas.nativeCanvas.style;\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n this.canvas.nativeCanvas.style = style;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const c = this.canvas.nativeCanvas as HTMLCanvasElement;\n const wh = this.getWH();\n if (!c.parentElement) {\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n return this.canvas.nativeCanvas.getBoundingClientRect();\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
@@ -152,6 +152,6 @@ let FeishuWindowHandlerContribution = class extends base_contribution_1.BaseWind
|
|
|
152
152
|
};
|
|
153
153
|
|
|
154
154
|
FeishuWindowHandlerContribution.env = "feishu", FeishuWindowHandlerContribution = __decorate([ (0,
|
|
155
|
-
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.
|
|
155
|
+
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.Global)), __metadata("design:paramtypes", [ Object ]) ], FeishuWindowHandlerContribution),
|
|
156
156
|
exports.FeishuWindowHandlerContribution = FeishuWindowHandlerContribution;
|
|
157
157
|
//# sourceMappingURL=feishu-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/window/feishu-contribution.ts"],"names":[],"mappings":"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","file":"feishu-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { FeishuCanvas } from '../../../canvas/contributions/feishu';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowHandlerContribution,\n IWindowParams\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { VGlobal } from '../../../constants';\n\nclass MiniAppEventManager {\n addEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n this.cache[type] = this.cache[type] || {\n listener: []\n };\n this.cache[type].listener.push(func);\n }\n removeEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n if (!this.cache[type]) {\n return;\n }\n const index = this.cache[type].listener.findIndex((f: EventListenerOrEventListenerObject) => f === func);\n if (index >= 0) {\n this.cache[type].listener.splice(index, 1);\n }\n }\n cleanEvent() {\n this.cache = {};\n }\n cache: Record<string, { listener: EventListenerOrEventListenerObject[] }> = {};\n}\n\n@injectable()\nexport class FeishuWindowHandlerContribution\n extends BaseWindowHandlerContribution\n implements IWindowHandlerContribution\n{\n static env: EnvType = 'feishu';\n type: EnvType = 'feishu';\n\n protected eventManager = new MiniAppEventManager();\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(VGlobal) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: false\n };\n this.canvas = new FeishuCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (dpr == null) {\n dpr = canvas.width / width;\n }\n this.canvas = new FeishuCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n return;\n }\n resizeWindow(width: number, height: number): void {\n return;\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.addEventListener(type, listener);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.removeEventListener(type, listener);\n }\n dispatchEvent(event: any): boolean {\n const { type } = event;\n if (!this.eventManager.cache[type]) {\n return false;\n }\n\n // hack for offsetX offsetY\n if (event.changedTouches && event.changedTouches[0]) {\n event.offsetX = event.changedTouches[0].x;\n event.changedTouches[0].offsetX = event.changedTouches[0].x;\n event.changedTouches[0].clientX = event.changedTouches[0].x;\n event.offsetY = event.changedTouches[0].y;\n event.changedTouches[0].offsetY = event.changedTouches[0].y;\n event.changedTouches[0].clientY = event.changedTouches[0].y;\n }\n event.preventDefault = () => {\n return;\n };\n event.stopPropagation = () => {\n return;\n };\n if (this.eventManager.cache[type].listener) {\n this.eventManager.cache[type].listener.forEach((f: EventListener) => {\n f(event);\n });\n }\n return true;\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return {};\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const wh = this.getWH();\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/window/feishu-contribution.ts"],"names":[],"mappings":"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","file":"feishu-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { FeishuCanvas } from '../../../canvas/contributions/feishu';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowHandlerContribution,\n IWindowParams\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { Global } from '../../../constants';\n\nclass MiniAppEventManager {\n addEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n this.cache[type] = this.cache[type] || {\n listener: []\n };\n this.cache[type].listener.push(func);\n }\n removeEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n if (!this.cache[type]) {\n return;\n }\n const index = this.cache[type].listener.findIndex((f: EventListenerOrEventListenerObject) => f === func);\n if (index >= 0) {\n this.cache[type].listener.splice(index, 1);\n }\n }\n cleanEvent() {\n this.cache = {};\n }\n cache: Record<string, { listener: EventListenerOrEventListenerObject[] }> = {};\n}\n\n@injectable()\nexport class FeishuWindowHandlerContribution\n extends BaseWindowHandlerContribution\n implements IWindowHandlerContribution\n{\n static env: EnvType = 'feishu';\n type: EnvType = 'feishu';\n\n protected eventManager = new MiniAppEventManager();\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(Global) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: false\n };\n this.canvas = new FeishuCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (dpr == null) {\n dpr = canvas.width / width;\n }\n this.canvas = new FeishuCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n return;\n }\n resizeWindow(width: number, height: number): void {\n return;\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.addEventListener(type, listener);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.removeEventListener(type, listener);\n }\n dispatchEvent(event: any): boolean {\n const { type } = event;\n if (!this.eventManager.cache[type]) {\n return false;\n }\n\n // hack for offsetX offsetY\n if (event.changedTouches && event.changedTouches[0]) {\n event.offsetX = event.changedTouches[0].x;\n event.changedTouches[0].offsetX = event.changedTouches[0].x;\n event.changedTouches[0].clientX = event.changedTouches[0].x;\n event.offsetY = event.changedTouches[0].y;\n event.changedTouches[0].offsetY = event.changedTouches[0].y;\n event.changedTouches[0].clientY = event.changedTouches[0].y;\n }\n event.preventDefault = () => {\n return;\n };\n event.stopPropagation = () => {\n return;\n };\n if (this.eventManager.cache[type].listener) {\n this.eventManager.cache[type].listener.forEach((f: EventListener) => {\n f(event);\n });\n }\n return true;\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return {};\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const wh = this.getWH();\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
@@ -152,6 +152,6 @@ let LynxWindowHandlerContribution = class extends base_contribution_1.BaseWindow
|
|
|
152
152
|
};
|
|
153
153
|
|
|
154
154
|
LynxWindowHandlerContribution.env = "lynx", LynxWindowHandlerContribution = __decorate([ (0,
|
|
155
|
-
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.
|
|
155
|
+
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.Global)), __metadata("design:paramtypes", [ Object ]) ], LynxWindowHandlerContribution),
|
|
156
156
|
exports.LynxWindowHandlerContribution = LynxWindowHandlerContribution;
|
|
157
157
|
//# sourceMappingURL=lynx-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/window/lynx-contribution.ts"],"names":[],"mappings":"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","file":"lynx-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { LynxCanvas } from '../../../canvas/contributions/lynx';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowParams,\n IWindowHandlerContribution\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { VGlobal } from '../../../constants';\n\nclass MiniAppEventManager {\n addEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n this.cache[type] = this.cache[type] || {\n listener: []\n };\n this.cache[type].listener.push(func);\n }\n removeEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n if (!this.cache[type]) {\n return;\n }\n const index = this.cache[type].listener.findIndex((f: EventListenerOrEventListenerObject) => f === func);\n if (index >= 0) {\n this.cache[type].listener.splice(index, 1);\n }\n }\n cleanEvent() {\n this.cache = {};\n }\n cache: Record<string, { listener: EventListenerOrEventListenerObject[] }> = {};\n}\n\n@injectable()\nexport class LynxWindowHandlerContribution extends BaseWindowHandlerContribution implements IWindowHandlerContribution {\n static env: EnvType = 'lynx';\n type: EnvType = 'lynx';\n\n protected eventManager = new MiniAppEventManager();\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(VGlobal) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: false\n };\n this.canvas = new LynxCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (dpr == null) {\n dpr = canvas.width / width;\n }\n this.canvas = new LynxCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n return;\n }\n resizeWindow(width: number, height: number): void {\n return;\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.addEventListener(type, listener);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.removeEventListener(type, listener);\n }\n dispatchEvent(event: any): boolean {\n const { type } = event;\n if (!this.eventManager.cache[type]) {\n return false;\n }\n\n // hack for offsetX offsetY\n if (event.changedTouches && event.changedTouches[0]) {\n event.offsetX = event.changedTouches[0].x;\n event.changedTouches[0].offsetX = event.changedTouches[0].x;\n event.changedTouches[0].clientX = event.changedTouches[0].x;\n event.offsetY = event.changedTouches[0].y;\n event.changedTouches[0].offsetY = event.changedTouches[0].y;\n event.changedTouches[0].clientY = event.changedTouches[0].y;\n }\n event.preventDefault = () => {\n return;\n };\n event.stopPropagation = () => {\n return;\n };\n if (this.eventManager.cache[type].listener) {\n this.eventManager.cache[type].listener.forEach((f: EventListener) => {\n f(event);\n });\n }\n return true;\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return {};\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const wh = this.getWH();\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/window/lynx-contribution.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA+C;AAC/C,6DAAgE;AAChE,yDAAsD;AACtD,2DAAoE;AAWpE,kDAA4C;AAE5C,MAAM,mBAAmB;IAAzB;QAyBE,UAAK,GAAuE,EAAE,CAAC;IACjF,CAAC;IAzBC,gBAAgB,CAAC,IAAY,EAAE,IAAwC;QACrE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,OAAO;SACR;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;YACrC,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,mBAAmB,CAAC,IAAY,EAAE,IAAwC;QACxE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACrB,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAqC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACzG,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC5C;IACH,CAAC;IACD,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CAEF;AAGM,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,iDAA6B;IAO9E,IAAI,SAAS;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAA6C,MAAe;QAC1D,KAAK,EAAE,CAAC;QADmC,WAAM,GAAN,MAAM,CAAS;QAT5D,SAAI,GAAY,MAAM,CAAC;QAEb,iBAAY,GAAG,IAAI,mBAAmB,EAAE,CAAC;IASnD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,KAAK;QACH,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACjD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,KAAK;QACH,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,MAAqB;QAEhC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SACnC;IACH,CAAC;IACO,oBAAoB,CAAC,MAAqB;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAGH,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,YAAY;YACZ,EAAE,EAAE,qBAAS,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE;YAC7C,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACO,oBAAoB,CAAC,MAAqB;QAEhD,IAAI,MAAgC,CAAC;QACrC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YACrC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAA6B,CAAC;YAC/E,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACrD;SACF;aAAM;YACL,MAAM,GAAG,MAAO,CAAC,MAAkC,CAAC;SACrD;QAGD,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACtB;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACrB,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;SAC5B;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAU,CAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;YACR,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC,CAAC,CAAC;IACL,CAAC;IACD,aAAa;QACX,OAAO;IACT,CAAC;IACD,YAAY,CAAC,KAAa,EAAE,MAAc;QACxC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACxB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IACD,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,CAAC;IAOD,gBAAgB,CAAC,IAAY,EAAE,QAA4C;QACzE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAMD,mBAAmB,CAAC,IAAY,EAAE,QAA4C;QAC5E,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IACD,aAAa,CAAC,KAAU;QACtB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO,KAAK,CAAC;SACd;QAGD,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YACnD,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7D;QACD,KAAK,CAAC,cAAc,GAAG,GAAG,EAAE;YAC1B,OAAO;QACT,CAAC,CAAC;QACF,KAAK,CAAC,eAAe,GAAG,GAAG,EAAE;YAC3B,OAAO;QACT,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAgB,EAAE,EAAE;gBAClE,CAAC,CAAC,KAAK,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,QAAQ,CAAC,KAAgD;QACvD,OAAO;IACT,CAAC;IAED,qBAAqB;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACV,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,EAAe,EAAE,KAAc;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,aAA0C,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SAC9D;QACD,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;;AAzLM,iCAAG,GAAY,MAAM,CAAC;AADlB,6BAA6B;IADzC,IAAA,sBAAU,GAAE;IAYE,WAAA,IAAA,kBAAM,EAAC,kBAAM,CAAC,CAAA;;GAXhB,6BAA6B,CA2LzC;AA3LY,sEAA6B","file":"lynx-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport { LynxCanvas } from '../../../canvas/contributions/lynx';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowParams,\n IWindowHandlerContribution\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { Global } from '../../../constants';\n\nclass MiniAppEventManager {\n addEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n this.cache[type] = this.cache[type] || {\n listener: []\n };\n this.cache[type].listener.push(func);\n }\n removeEventListener(type: string, func: EventListenerOrEventListenerObject) {\n if (!type || !func) {\n return;\n }\n if (!this.cache[type]) {\n return;\n }\n const index = this.cache[type].listener.findIndex((f: EventListenerOrEventListenerObject) => f === func);\n if (index >= 0) {\n this.cache[type].listener.splice(index, 1);\n }\n }\n cleanEvent() {\n this.cache = {};\n }\n cache: Record<string, { listener: EventListenerOrEventListenerObject[] }> = {};\n}\n\n@injectable()\nexport class LynxWindowHandlerContribution extends BaseWindowHandlerContribution implements IWindowHandlerContribution {\n static env: EnvType = 'lynx';\n type: EnvType = 'lynx';\n\n protected eventManager = new MiniAppEventManager();\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(Global) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return this.canvas.id.toString();\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.width / (this.canvas.dpr || 1),\n height: this.canvas.height / (this.canvas.dpr || 1)\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({\n width: params.width,\n height: params.height\n });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: false\n };\n this.canvas = new LynxCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n let canvas: HTMLCanvasElement | null;\n if (typeof params.canvas === 'string') {\n canvas = this.global.getElementById(params.canvas) as HTMLCanvasElement | null;\n if (!canvas) {\n throw new Error('canvasId 参数不正确,请确认canvas存在并插入dom');\n }\n } else {\n canvas = params!.canvas as HTMLCanvasElement | null;\n }\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n const data = canvas.getBoundingClientRect();\n width = data.width;\n height = data.height;\n }\n // 如果没有dpr,就使用canvas的原始dpr\n let dpr = params.dpr;\n if (dpr == null) {\n dpr = canvas.width / width;\n }\n this.canvas = new LynxCanvas({\n width: width,\n height: height,\n dpr: dpr,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n return;\n }\n resizeWindow(width: number, height: number): void {\n return;\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.addEventListener(type, listener);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void {\n this.eventManager.removeEventListener(type, listener);\n }\n dispatchEvent(event: any): boolean {\n const { type } = event;\n if (!this.eventManager.cache[type]) {\n return false;\n }\n\n // hack for offsetX offsetY\n if (event.changedTouches && event.changedTouches[0]) {\n event.offsetX = event.changedTouches[0].x;\n event.changedTouches[0].offsetX = event.changedTouches[0].x;\n event.changedTouches[0].clientX = event.changedTouches[0].x;\n event.offsetY = event.changedTouches[0].y;\n event.changedTouches[0].offsetY = event.changedTouches[0].y;\n event.changedTouches[0].clientY = event.changedTouches[0].y;\n }\n event.preventDefault = () => {\n return;\n };\n event.stopPropagation = () => {\n return;\n };\n if (this.eventManager.cache[type].listener) {\n this.eventManager.cache[type].listener.forEach((f: EventListener) => {\n f(event);\n });\n }\n return true;\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return {};\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>) {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n const wh = this.getWH();\n return {\n x: 0,\n y: 0,\n width: wh.width,\n height: wh.height,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n const context = this.getContext();\n const dpr = this.getDpr();\n context.nativeContext.save();\n (context.nativeContext as CanvasRenderingContext2D).setTransform(dpr, 0, 0, dpr, 0, 0);\n context.clearRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n if (color) {\n context.fillStyle = color;\n context.fillRect(vb.x1, vb.y1, vb.x2 - vb.x1, vb.y2 - vb.y1);\n }\n context.nativeContext.restore();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/window/native-contribution.ts"],"names":[],"mappings":"","file":"native-contribution.js","sourcesContent":["// import { createCanvas, createImageData, loadImage } from 'canvas';\n// import { inject, injectable } from 'inversify';\n// import {
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/window/native-contribution.ts"],"names":[],"mappings":"","file":"native-contribution.js","sourcesContent":["// import { createCanvas, createImageData, loadImage } from 'canvas';\n// import { inject, injectable } from 'inversify';\n// import { Global, IWindow, EnvType, IGlobal, IWindowHandlerContribution, IWindowParams } from '../..';\n// import { BaseWindowHandlerContribution } from './base-contribution';\n\n// type NodePkg = {\n// createCanvas: typeof createCanvas;\n// createImageData: typeof createImageData;\n// loadImage: typeof loadImage;\n// };\n\n// @injectable()\n// export class NodeWindowHandlerContribution extends BaseWindowHandlerContribution implements IWindowHandlerContribution {\n// type: EnvType = 'native';\n\n// pkg: NodePkg;\n\n// configure(window: IWindow, global: IGlobal) {\n// if (global.env === this.type) {\n// window.setWindowHandler(this);\n// this.pkg = global.envParams;\n// }\n// }\n\n// get container(): HTMLElement | null {\n// // return this.canvas.nativeCanvas.parentElement;\n// return null;\n// }\n\n// constructor(@inject(Global) private readonly global: IGlobal) {\n// super();\n// }\n\n// createWindow(params: IWindowParams): void {\n// // 如果没有传入canvas,那么就创建一个canvas\n// params.CreateWindow && params.CreateWindow(params.width, params.height, params.title);\n// }\n\n// destroyWindow(): void {\n// return;\n// }\n// resizeWindow(width: number, height: number): void {\n// return;\n// }\n// setDpr(dpr: number): void {\n// return;\n// }\n\n// getContext(): any {\n// throw new Error('暂不支持');\n// }\n\n// getWH(): { width: number; height: number } {\n// throw new Error('暂不支持');\n// }\n// getTitle(): string {\n// throw new Error('暂不支持');\n// }\n// getXY(): { x: number; y: number } {\n// throw new Error('暂不支持');\n// }\n// }\n"]}
|
|
@@ -104,6 +104,6 @@ let NodeWindowHandlerContribution = class extends base_contribution_1.BaseWindow
|
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
NodeWindowHandlerContribution.env = "node", NodeWindowHandlerContribution = __decorate([ (0,
|
|
107
|
-
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.
|
|
107
|
+
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.Global)), __metadata("design:paramtypes", [ Object ]) ], NodeWindowHandlerContribution),
|
|
108
108
|
exports.NodeWindowHandlerContribution = NodeWindowHandlerContribution;
|
|
109
109
|
//# sourceMappingURL=node-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/contributions/window/node-contribution.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA+C;AAE/C,6DAAgE;AAChE,yDAAsD;AACtD,2DAAoE;AAUpE,
|
|
1
|
+
{"version":3,"sources":["../../src/core/contributions/window/node-contribution.ts"],"names":[],"mappings":"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","file":"node-contribution.js","sourcesContent":["import { inject, injectable } from 'inversify';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { NodeCanvas } from '../../../canvas/contributions/node';\nimport { Generator } from '../../../common/generator';\nimport { BaseWindowHandlerContribution } from './base-contribution';\nimport type {\n EnvType,\n IGlobal,\n IContext2d,\n ICanvas,\n IDomRectLike,\n IWindowHandlerContribution,\n IWindowParams\n} from '../../../interface';\nimport { Global } from '../../../constants';\n\n@injectable()\nexport class NodeWindowHandlerContribution extends BaseWindowHandlerContribution implements IWindowHandlerContribution {\n static env: EnvType = 'node';\n type: EnvType = 'node';\n\n canvas: ICanvas;\n get container(): HTMLElement | null {\n return null;\n }\n\n constructor(@inject(Global) private readonly global: IGlobal) {\n super();\n }\n\n getTitle(): string {\n return '';\n }\n\n getWH(): { width: number; height: number } {\n return {\n width: this.canvas.displayWidth,\n height: this.canvas.displayHeight\n };\n }\n\n getXY(): { x: number; y: number } {\n return { x: 0, y: 0 };\n }\n\n createWindow(params: IWindowParams): void {\n // 如果没有传入canvas,那么就创建一个canvas\n if (!params.canvas) {\n this.createWindowByConfig(params);\n } else {\n this.createWindowByCanvas(params);\n }\n }\n private createWindowByConfig(params: IWindowParams) {\n // 创建canvas\n const nativeCanvas = this.global.createCanvas({ width: params.width, height: params.height });\n\n // 绑定\n const options = {\n width: params.width,\n height: params.height,\n dpr: params.dpr,\n nativeCanvas,\n id: Generator.GenAutoIncrementId().toString(),\n canvasControled: true\n };\n this.canvas = new NodeCanvas(options);\n }\n private createWindowByCanvas(params: IWindowParams) {\n // 获取canvas\n const canvas = params!.canvas as HTMLCanvasElement | null;\n\n // 如果没有传入wh,或者是不受控制的canvas,那就用canvas的原始wh\n let width = params.width;\n let height = params.height;\n if (width == null || height == null || !params.canvasControled) {\n width = canvas.width;\n height = canvas.height;\n }\n\n this.canvas = new NodeCanvas({\n width: width,\n height: height,\n dpr: 1,\n nativeCanvas: canvas,\n canvasControled: params.canvasControled\n });\n }\n releaseWindow(): void {\n this.canvas.release();\n }\n resizeWindow(width: number, height: number): void {\n this.canvas.resize(width, height);\n }\n setDpr(dpr: number): void {\n this.canvas.dpr = dpr;\n }\n\n getContext(): IContext2d {\n return this.canvas.getContext();\n }\n getNativeHandler(): ICanvas {\n return this.canvas;\n }\n getDpr(): number {\n return this.canvas.dpr;\n }\n\n getImageBuffer(type: string = 'image/png'): any {\n const canvas = this.canvas.nativeCanvas;\n return canvas.toBuffer(type);\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n dispatchEvent(event: any): boolean {\n return true;\n }\n\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return;\n }\n\n getStyle(): CSSStyleDeclaration | Record<string, any> {\n return;\n }\n setStyle(style: CSSStyleDeclaration | Record<string, any>): void {\n return;\n }\n\n getBoundingClientRect(): IDomRectLike {\n return null;\n }\n\n clearViewBox(vb: IBoundsLike, color?: string): void {\n return;\n }\n}\n"]}
|
|
@@ -159,6 +159,6 @@ let TaroWindowHandlerContribution = class extends base_contribution_1.BaseWindow
|
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
TaroWindowHandlerContribution.env = "taro", TaroWindowHandlerContribution = __decorate([ (0,
|
|
162
|
-
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.
|
|
162
|
+
inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(constants_1.Global)), __metadata("design:paramtypes", [ Object ]) ], TaroWindowHandlerContribution),
|
|
163
163
|
exports.TaroWindowHandlerContribution = TaroWindowHandlerContribution;
|
|
164
164
|
//# sourceMappingURL=taro-contribution.js.map
|