@visactor/vrender-core 0.17.0-alpha.8 → 0.17.1-alpha.1
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/allocator/bounds-allocate.d.ts +13 -0
- package/cjs/allocator/bounds-allocate.js +38 -0
- package/cjs/allocator/bounds-allocate.js.map +1 -0
- package/cjs/allocator/canvas-allocate.d.ts +4 -0
- package/cjs/allocator/canvas-allocate.js +19 -6
- package/cjs/allocator/canvas-allocate.js.map +1 -1
- package/cjs/allocator/graphic-allocate.d.ts +56 -1
- package/cjs/allocator/graphic-allocate.js +163 -1
- package/cjs/allocator/graphic-allocate.js.map +1 -1
- package/cjs/animate/Ticker/default-ticker.js +3 -3
- package/cjs/animate/Ticker/default-ticker.js.map +1 -1
- package/cjs/animate/animate.js +2 -2
- package/cjs/animate/animate.js.map +1 -1
- package/cjs/animate/config.js +1 -2
- package/cjs/animate/custom-animate.d.ts +14 -3
- package/cjs/animate/custom-animate.js +100 -5
- package/cjs/animate/custom-animate.js.map +1 -1
- package/cjs/animate/default-ticker.js +2 -1
- package/cjs/canvas/contributions/base-canvas.js +4 -2
- package/cjs/canvas/contributions/base-canvas.js.map +1 -1
- package/cjs/common/Reflect-metadata.js +349 -359
- package/cjs/common/Reflect-metadata.js.map +1 -1
- package/cjs/common/bounds-context.js +2 -1
- package/cjs/common/inversify/annotation/inject.d.ts +1 -0
- package/cjs/common/inversify/annotation/inject.js +10 -0
- package/cjs/common/inversify/annotation/inject.js.map +1 -0
- package/cjs/common/inversify/annotation/inject_base.d.ts +14 -0
- package/cjs/common/inversify/annotation/inject_base.js +39 -0
- package/cjs/common/inversify/annotation/inject_base.js.map +1 -0
- package/cjs/common/inversify/annotation/injectable.d.ts +1 -0
- package/cjs/common/{inversify-lite/annotation/post_construct.js → inversify/annotation/injectable.js} +15 -5
- package/cjs/common/inversify/annotation/injectable.js.map +1 -0
- package/cjs/common/inversify/annotation/multi_inject.d.ts +1 -0
- package/cjs/common/inversify/annotation/multi_inject.js +10 -0
- package/cjs/common/inversify/annotation/multi_inject.js.map +1 -0
- package/cjs/common/inversify/annotation/named.d.ts +1 -0
- package/cjs/common/inversify/annotation/named.js +14 -0
- package/cjs/common/inversify/annotation/named.js.map +1 -0
- package/cjs/common/inversify/binding.d.ts +18 -0
- package/cjs/common/inversify/binding.js +26 -0
- package/cjs/common/inversify/binding.js.map +1 -0
- package/cjs/common/inversify/container.d.ts +28 -0
- package/cjs/common/inversify/container.js +155 -0
- package/cjs/common/inversify/container.js.map +1 -0
- package/cjs/common/inversify/cotainer-module.d.ts +6 -0
- package/cjs/common/inversify/cotainer-module.js +16 -0
- package/cjs/common/inversify/cotainer-module.js.map +1 -0
- package/cjs/common/inversify/index.d.ts +7 -0
- package/cjs/common/inversify/index.js +75 -0
- package/cjs/common/inversify/index.js.map +1 -0
- package/cjs/common/inversify/interfaces.d.ts +218 -0
- package/cjs/common/inversify/interfaces.js +6 -0
- package/cjs/common/inversify/interfaces.js.map +1 -0
- package/cjs/common/inversify/literal_types.d.ts +5 -0
- package/cjs/common/inversify/literal_types.js +34 -0
- package/cjs/common/inversify/literal_types.js.map +1 -0
- package/cjs/common/inversify/meta-data.d.ts +6 -0
- package/cjs/common/inversify/meta-data.js +19 -0
- package/cjs/common/inversify/meta-data.js.map +1 -0
- package/cjs/common/inversify/metadata_keys.d.ts +12 -0
- package/cjs/common/inversify/metadata_keys.js +15 -0
- package/cjs/common/inversify/metadata_keys.js.map +1 -0
- package/cjs/common/inversify/metadata_reader.d.ts +6 -0
- package/cjs/common/inversify/metadata_reader.js +28 -0
- package/cjs/common/inversify/metadata_reader.js.map +1 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.js +29 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.js.map +1 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.js +40 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.js.map +1 -0
- package/cjs/common/inversify/syntax/constraint_helpers.d.ts +2 -0
- package/cjs/common/inversify/syntax/constraint_helpers.js +20 -0
- package/cjs/common/inversify/syntax/constraint_helpers.js.map +1 -0
- package/cjs/common/inversify-lite/container/container.js +1 -3
- package/cjs/common/inversify-lite/container/container.js.map +1 -1
- package/cjs/common/inversify-lite/index.d.ts +1 -8
- package/cjs/common/inversify-lite/index.js +1 -64
- package/cjs/common/inversify-lite/index.js.map +1 -1
- package/cjs/common/inversify-lite/interfaces/interfaces.d.ts +0 -2
- package/cjs/common/inversify-lite/interfaces/interfaces.js.map +1 -1
- package/cjs/common/inversify-lite/planning/queryable_string.d.ts +0 -2
- package/cjs/common/inversify-lite/planning/queryable_string.js +0 -10
- package/cjs/common/inversify-lite/planning/queryable_string.js.map +1 -1
- package/cjs/common/inversify-lite/resolution/resolver.js.map +1 -1
- package/cjs/common/segment/monotone.js +2 -2
- package/cjs/common/segment/monotone.js.map +1 -1
- package/cjs/common/shape/rect.js +2 -1
- package/cjs/common/shape/rect.js.map +1 -1
- package/cjs/common/sort.js +1 -2
- package/cjs/common/store.js +2 -1
- package/cjs/common/utils.d.ts +1 -0
- package/cjs/common/utils.js +10 -1
- package/cjs/common/utils.js.map +1 -1
- package/cjs/common/xml/OrderedObjParser.js +2 -2
- package/cjs/common/xml/OrderedObjParser.js.map +1 -1
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -2
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +4 -9
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/empty-contribution.d.ts +2 -2
- package/cjs/core/contributions/layerHandler/empty-contribution.js +4 -9
- package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.d.ts +2 -2
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +4 -9
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/cjs/core/contributions/textMeasure/AtextMeasure.d.ts +14 -2
- package/cjs/core/contributions/textMeasure/AtextMeasure.js +99 -13
- 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/textMeasure/modules.js +1 -2
- package/cjs/core/contributions/textMeasure/modules.js.map +1 -1
- package/cjs/core/core-modules.js +5 -6
- package/cjs/core/core-modules.js.map +1 -1
- package/cjs/core/global-module.js +2 -0
- package/cjs/core/global.d.ts +9 -0
- package/cjs/core/global.js +23 -5
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/graphic-utils.d.ts +7 -4
- package/cjs/core/graphic-utils.js +18 -14
- package/cjs/core/graphic-utils.js.map +1 -1
- package/cjs/core/layer-service.d.ts +5 -2
- package/cjs/core/layer-service.js +17 -15
- package/cjs/core/layer-service.js.map +1 -1
- package/cjs/core/stage.d.ts +8 -4
- package/cjs/core/stage.js +42 -27
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.d.ts +2 -2
- package/cjs/core/window.js +7 -12
- package/cjs/core/window.js.map +1 -1
- package/cjs/env-check.d.ts +3 -0
- package/cjs/env-check.js +19 -0
- package/cjs/env-check.js.map +1 -0
- package/cjs/event/event-manager.d.ts +5 -1
- package/cjs/event/event-manager.js +31 -25
- package/cjs/event/event-manager.js.map +1 -1
- package/cjs/event/event-system.js +12 -11
- package/cjs/event/event-system.js.map +1 -1
- package/cjs/event/federated-event/base-event.d.ts +5 -6
- package/cjs/event/federated-event/base-event.js +15 -5
- package/cjs/event/federated-event/base-event.js.map +1 -1
- package/cjs/event/federated-event/mouse-event.d.ts +6 -6
- package/cjs/event/federated-event/mouse-event.js +17 -3
- package/cjs/event/federated-event/mouse-event.js.map +1 -1
- package/cjs/graphic/area.js +1 -0
- package/cjs/graphic/area.js.map +1 -1
- package/cjs/graphic/bounds.d.ts +2 -2
- package/cjs/graphic/bounds.js +8 -10
- package/cjs/graphic/bounds.js.map +1 -1
- package/cjs/graphic/builtin-symbol/index.d.ts +1 -0
- package/cjs/graphic/builtin-symbol/index.js +7 -2
- package/cjs/graphic/builtin-symbol/index.js.map +1 -1
- package/cjs/graphic/builtin-symbol/rect.d.ts +2 -1
- package/cjs/graphic/builtin-symbol/rect.js +11 -6
- package/cjs/graphic/builtin-symbol/rect.js.map +1 -1
- package/cjs/graphic/config.js +11 -3
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/graphic-creator.d.ts +24 -36
- package/cjs/graphic/graphic-creator.js +16 -99
- package/cjs/graphic/graphic-creator.js.map +1 -1
- package/cjs/graphic/graphic-service/arc-contribution.d.ts +1 -5
- package/cjs/graphic/graphic-service/arc-contribution.js +0 -18
- package/cjs/graphic/graphic-service/arc-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/area-contribution.d.ts +1 -1
- package/cjs/graphic/graphic-service/area-contribution.js +1 -4
- package/cjs/graphic/graphic-service/area-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/circle-contribution.d.ts +1 -5
- package/cjs/graphic/graphic-service/circle-contribution.js +0 -18
- package/cjs/graphic/graphic-service/circle-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/common-contribution.js +2 -11
- package/cjs/graphic/graphic-service/common-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-module.js +2 -17
- package/cjs/graphic/graphic-service/graphic-module.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.d.ts +5 -9
- package/cjs/graphic/graphic-service/graphic-service.js +43 -32
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic-service/path-contribution.d.ts +1 -5
- package/cjs/graphic/graphic-service/path-contribution.js +0 -18
- package/cjs/graphic/graphic-service/path-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/rect-contribution.d.ts +1 -5
- package/cjs/graphic/graphic-service/rect-contribution.js +0 -18
- package/cjs/graphic/graphic-service/rect-contribution.js.map +1 -1
- package/cjs/graphic/graphic-service/symbol-contribution.d.ts +0 -1
- package/cjs/graphic/graphic-service/symbol-contribution.js +4 -13
- package/cjs/graphic/graphic-service/symbol-contribution.js.map +1 -1
- package/cjs/graphic/graphic.js +9 -7
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.d.ts +1 -0
- package/cjs/graphic/group.js +7 -3
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/index.d.ts +1 -0
- package/cjs/graphic/index.js +6 -5
- package/cjs/graphic/index.js.map +1 -1
- package/cjs/graphic/line.js +1 -0
- package/cjs/graphic/line.js.map +1 -1
- package/cjs/graphic/node-tree.js +1 -1
- package/cjs/graphic/node-tree.js.map +1 -1
- package/cjs/graphic/rect.d.ts +2 -3
- package/cjs/graphic/rect.js +3 -5
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/graphic/richtext/line.d.ts +1 -0
- package/cjs/graphic/richtext/line.js +6 -3
- package/cjs/graphic/richtext/line.js.map +1 -1
- package/cjs/graphic/richtext/paragraph.js +12 -11
- package/cjs/graphic/richtext/paragraph.js.map +1 -1
- package/cjs/graphic/richtext/utils.js +2 -1
- package/cjs/graphic/richtext/utils.js.map +1 -1
- package/cjs/graphic/richtext.d.ts +3 -3
- package/cjs/graphic/richtext.js +12 -3
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/graphic/symbol.js +11 -9
- package/cjs/graphic/symbol.js.map +1 -1
- package/cjs/graphic/text.d.ts +1 -0
- package/cjs/graphic/text.js +97 -11
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/graphic/theme.d.ts +4 -4
- package/cjs/graphic/theme.js +26 -27
- package/cjs/graphic/theme.js.map +1 -1
- package/cjs/graphic/tools.js +1 -1
- package/cjs/graphic/tools.js.map +1 -1
- package/cjs/graphic/wrap-text.js +6 -5
- package/cjs/graphic/wrap-text.js.map +1 -1
- package/cjs/index.d.ts +18 -0
- package/cjs/index.js +10 -1
- package/cjs/index.js.map +1 -1
- package/cjs/interface/allocator.d.ts +1 -0
- package/cjs/interface/allocator.js.map +1 -1
- package/cjs/interface/event.d.ts +15 -44
- package/cjs/interface/event.js.map +1 -1
- package/cjs/interface/global.d.ts +1 -0
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/graphic/rect.d.ts +2 -0
- package/cjs/interface/graphic/rect.js.map +1 -1
- package/cjs/interface/graphic/richText.d.ts +1 -1
- package/cjs/interface/graphic/richText.js.map +1 -1
- package/cjs/interface/graphic/text.d.ts +5 -1
- package/cjs/interface/graphic/text.js.map +1 -1
- package/cjs/interface/graphic.d.ts +3 -2
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/render.d.ts +2 -2
- package/cjs/interface/render.js.map +1 -1
- package/cjs/interface/stage.d.ts +8 -1
- package/cjs/interface/stage.js.map +1 -1
- package/cjs/interface/text.d.ts +2 -2
- package/cjs/interface/text.js.map +1 -1
- package/cjs/modules.d.ts +1 -2
- package/cjs/modules.js +8 -8
- package/cjs/modules.js.map +1 -1
- package/cjs/picker/global-picker-service.d.ts +2 -2
- package/cjs/picker/global-picker-service.js +4 -9
- package/cjs/picker/global-picker-service.js.map +1 -1
- package/cjs/picker/pick-interceptor.js +2 -1
- package/cjs/picker/pick-interceptor.js.map +1 -1
- package/cjs/picker/pick-modules.js +2 -4
- package/cjs/picker/pick-modules.js.map +1 -1
- package/cjs/picker/picker-service.d.ts +2 -2
- package/cjs/picker/picker-service.js +11 -7
- package/cjs/picker/picker-service.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +9 -5
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/plugins/plugin-modules.js +1 -2
- package/cjs/plugins/plugin-modules.js.map +1 -1
- package/cjs/render/contributions/render/arc-module.d.ts +2 -0
- package/cjs/render/contributions/render/arc-module.js +17 -0
- package/cjs/render/contributions/render/arc-module.js.map +1 -0
- package/cjs/render/contributions/render/arc-render.js +2 -1
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/arc3d-module.d.ts +2 -0
- package/cjs/render/contributions/render/arc3d-module.js +15 -0
- package/cjs/render/contributions/render/arc3d-module.js.map +1 -0
- package/cjs/render/contributions/render/area-module.d.ts +2 -0
- package/cjs/render/contributions/render/area-module.js +18 -0
- package/cjs/render/contributions/render/area-module.js.map +1 -0
- package/cjs/render/contributions/render/area-render.d.ts +1 -0
- package/cjs/render/contributions/render/area-render.js +44 -6
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-render.d.ts +1 -1
- package/cjs/render/contributions/render/base-render.js +15 -18
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/circle-module.d.ts +2 -0
- package/cjs/render/contributions/render/circle-module.js +17 -0
- package/cjs/render/contributions/render/circle-module.js.map +1 -0
- package/cjs/render/contributions/render/circle-render.js +2 -1
- package/cjs/render/contributions/render/circle-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/arc-contribution-render.d.ts +3 -7
- package/cjs/render/contributions/render/contributions/arc-contribution-render.js +7 -30
- package/cjs/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/area-contribution-render.d.ts +3 -4
- package/cjs/render/contributions/render/contributions/area-contribution-render.js +7 -21
- package/cjs/render/contributions/render/contributions/area-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +4 -0
- package/cjs/render/contributions/render/contributions/base-contribution-render.js +24 -15
- package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/circle-contribution-render.d.ts +3 -7
- package/cjs/render/contributions/render/contributions/circle-contribution-render.js +7 -30
- package/cjs/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/constants.d.ts +1 -0
- package/cjs/render/contributions/render/contributions/constants.js +2 -2
- package/cjs/render/contributions/render/contributions/constants.js.map +1 -1
- package/cjs/render/contributions/render/contributions/group-contribution-render.d.ts +1 -0
- package/cjs/render/contributions/render/contributions/group-contribution-render.js +8 -14
- package/cjs/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/image-contribution-render.d.ts +1 -0
- package/cjs/render/contributions/render/contributions/image-contribution-render.js +8 -15
- package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/path-contribution-render.d.ts +2 -9
- package/cjs/render/contributions/render/contributions/path-contribution-render.js +4 -25
- package/cjs/render/contributions/render/contributions/path-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/polygon-contribution-render.d.ts +2 -9
- package/cjs/render/contributions/render/contributions/polygon-contribution-render.js +4 -25
- package/cjs/render/contributions/render/contributions/polygon-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/rect-contribution-render.d.ts +5 -7
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js +17 -37
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/symbol-contribution-render.d.ts +3 -7
- package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +6 -27
- package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/text-contribution-render.d.ts +8 -1
- package/cjs/render/contributions/render/contributions/text-contribution-render.js +25 -1
- package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +7 -6
- package/cjs/render/contributions/render/draw-contribution.js +44 -26
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.d.ts +7 -1
- package/cjs/render/contributions/render/draw-interceptor.js +43 -28
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/glyph-module.d.ts +2 -0
- package/cjs/render/contributions/render/glyph-module.js +15 -0
- package/cjs/render/contributions/render/glyph-module.js.map +1 -0
- package/cjs/render/contributions/render/glyph-render.d.ts +1 -2
- package/cjs/render/contributions/render/glyph-render.js +13 -8
- package/cjs/render/contributions/render/glyph-render.js.map +1 -1
- package/cjs/render/contributions/render/group-render.js +3 -2
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/image-module.d.ts +2 -0
- package/cjs/render/contributions/render/image-module.js +16 -0
- package/cjs/render/contributions/render/image-module.js.map +1 -0
- package/cjs/render/contributions/render/image-render.js +4 -2
- package/cjs/render/contributions/render/image-render.js.map +1 -1
- package/cjs/render/contributions/render/incremental-draw-contribution.d.ts +2 -6
- package/cjs/render/contributions/render/incremental-draw-contribution.js +8 -11
- package/cjs/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/line-module.d.ts +2 -0
- package/cjs/render/contributions/render/line-module.js +17 -0
- package/cjs/render/contributions/render/line-module.js.map +1 -0
- package/cjs/render/contributions/render/line-render.d.ts +1 -0
- package/cjs/render/contributions/render/line-render.js +21 -6
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/module.js +8 -98
- package/cjs/render/contributions/render/module.js.map +1 -1
- package/cjs/render/contributions/render/path-module.d.ts +2 -0
- package/cjs/render/contributions/render/path-module.js +17 -0
- package/cjs/render/contributions/render/path-module.js.map +1 -0
- package/cjs/render/contributions/render/path-render.d.ts +2 -1
- package/cjs/render/contributions/render/path-render.js +8 -5
- package/cjs/render/contributions/render/path-render.js.map +1 -1
- package/cjs/render/contributions/render/polygon-module.d.ts +2 -0
- package/cjs/render/contributions/render/polygon-module.js +16 -0
- package/cjs/render/contributions/render/polygon-module.js.map +1 -0
- package/cjs/render/contributions/render/polygon-render.js +2 -1
- package/cjs/render/contributions/render/polygon-render.js.map +1 -1
- package/cjs/render/contributions/render/pyramid3d-module.d.ts +2 -0
- package/cjs/render/contributions/render/pyramid3d-module.js +15 -0
- package/cjs/render/contributions/render/pyramid3d-module.js.map +1 -0
- package/cjs/render/contributions/render/rect-module.d.ts +2 -0
- package/cjs/render/contributions/render/rect-module.js +17 -0
- package/cjs/render/contributions/render/rect-module.js.map +1 -0
- package/cjs/render/contributions/render/rect-render.d.ts +2 -1
- package/cjs/render/contributions/render/rect-render.js +11 -5
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/rect3d-module.d.ts +2 -0
- package/cjs/render/contributions/render/rect3d-module.js +15 -0
- package/cjs/render/contributions/render/rect3d-module.js.map +1 -0
- package/cjs/render/contributions/render/render-slector.d.ts +1 -4
- package/cjs/render/contributions/render/render-slector.js +0 -20
- package/cjs/render/contributions/render/render-slector.js.map +1 -1
- package/cjs/render/contributions/render/richtext-module.d.ts +2 -0
- package/cjs/render/contributions/render/richtext-module.js +15 -0
- package/cjs/render/contributions/render/richtext-module.js.map +1 -0
- package/cjs/render/contributions/render/richtext-render.d.ts +1 -0
- package/cjs/render/contributions/render/richtext-render.js +12 -7
- package/cjs/render/contributions/render/richtext-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol-module.d.ts +2 -0
- package/cjs/render/contributions/render/symbol-module.js +17 -0
- package/cjs/render/contributions/render/symbol-module.js.map +1 -0
- package/cjs/render/contributions/render/symbol-render.js +22 -5
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/contributions/render/text-module.d.ts +2 -0
- package/cjs/render/contributions/render/text-module.js +16 -0
- package/cjs/render/contributions/render/text-module.js.map +1 -0
- package/cjs/render/contributions/render/text-render.js +13 -10
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/cjs/render/contributions/render/utils.js +2 -2
- package/cjs/render/contributions/render/utils.js.map +1 -1
- package/cjs/render/render-modules.js +1 -1
- package/cjs/render/render-modules.js.map +1 -1
- package/cjs/render/render-service.js +1 -1
- package/cjs/render/render-service.js.map +1 -1
- package/cjs/resource-loader/loader.js +1 -3
- package/cjs/resource-loader/loader.js.map +1 -1
- package/dist/index.js +8931 -9097
- package/dist/index.min.js +1 -1
- package/es/allocator/bounds-allocate.d.ts +13 -0
- package/es/allocator/bounds-allocate.js +32 -0
- package/es/allocator/bounds-allocate.js.map +1 -0
- package/es/allocator/canvas-allocate.d.ts +4 -0
- package/es/allocator/canvas-allocate.js +19 -6
- package/es/allocator/canvas-allocate.js.map +1 -1
- package/es/allocator/graphic-allocate.d.ts +56 -1
- package/es/allocator/graphic-allocate.js +155 -1
- package/es/allocator/graphic-allocate.js.map +1 -1
- package/es/animate/Ticker/default-ticker.js +4 -2
- package/es/animate/Ticker/default-ticker.js.map +1 -1
- package/es/animate/animate.js +3 -3
- package/es/animate/animate.js.map +1 -1
- package/es/animate/config.js +1 -2
- package/es/animate/custom-animate.d.ts +14 -3
- package/es/animate/custom-animate.js +103 -5
- package/es/animate/custom-animate.js.map +1 -1
- package/es/animate/default-ticker.js +2 -1
- package/es/canvas/contributions/base-canvas.js +4 -2
- package/es/canvas/contributions/base-canvas.js.map +1 -1
- package/es/common/Reflect-metadata.js +349 -359
- package/es/common/Reflect-metadata.js.map +1 -1
- package/es/common/bounds-context.js +2 -1
- package/es/common/inversify/annotation/inject.d.ts +1 -0
- package/es/common/inversify/annotation/inject.js +6 -0
- package/es/common/inversify/annotation/inject.js.map +1 -0
- package/es/common/inversify/annotation/inject_base.d.ts +14 -0
- package/es/common/inversify/annotation/inject_base.js +29 -0
- package/es/common/inversify/annotation/inject_base.js.map +1 -0
- package/es/common/inversify/annotation/injectable.d.ts +1 -0
- package/es/common/inversify/annotation/injectable.js +10 -0
- package/es/common/inversify/annotation/injectable.js.map +1 -0
- package/es/common/inversify/annotation/multi_inject.d.ts +1 -0
- package/es/common/inversify/annotation/multi_inject.js +6 -0
- package/es/common/inversify/annotation/multi_inject.js.map +1 -0
- package/es/common/inversify/annotation/named.d.ts +1 -0
- package/es/common/inversify/annotation/named.js +10 -0
- package/es/common/inversify/annotation/named.js.map +1 -0
- package/es/common/inversify/binding.d.ts +18 -0
- package/es/common/inversify/binding.js +22 -0
- package/es/common/inversify/binding.js.map +1 -0
- package/es/common/inversify/container.d.ts +28 -0
- package/es/common/inversify/container.js +155 -0
- package/es/common/inversify/container.js.map +1 -0
- package/es/common/inversify/cotainer-module.d.ts +6 -0
- package/es/common/inversify/cotainer-module.js +8 -0
- package/es/common/inversify/cotainer-module.js.map +1 -0
- package/es/common/inversify/index.d.ts +7 -0
- package/es/common/inversify/index.js +14 -0
- package/es/common/inversify/index.js.map +1 -0
- package/es/common/inversify/interfaces.d.ts +218 -0
- package/es/common/inversify/interfaces.js +2 -0
- package/es/common/inversify/interfaces.js.map +1 -0
- package/es/common/inversify/literal_types.d.ts +5 -0
- package/es/common/inversify/literal_types.js +20 -0
- package/es/common/inversify/literal_types.js.map +1 -0
- package/es/common/inversify/meta-data.d.ts +6 -0
- package/es/common/inversify/meta-data.js +11 -0
- package/es/common/inversify/meta-data.js.map +1 -0
- package/es/common/inversify/metadata_keys.d.ts +12 -0
- package/es/common/inversify/metadata_keys.js +28 -0
- package/es/common/inversify/metadata_keys.js.map +1 -0
- package/es/common/inversify/metadata_reader.d.ts +6 -0
- package/es/common/inversify/metadata_reader.js +18 -0
- package/es/common/inversify/metadata_reader.js.map +1 -0
- package/es/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
- package/es/common/inversify/syntax/binding_in_syntax.js +24 -0
- package/es/common/inversify/syntax/binding_in_syntax.js.map +1 -0
- package/es/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
- package/es/common/inversify/syntax/binding_to_syntax.js +36 -0
- package/es/common/inversify/syntax/binding_to_syntax.js.map +1 -0
- package/es/common/inversify/syntax/constraint_helpers.d.ts +2 -0
- package/es/common/inversify/syntax/constraint_helpers.js +18 -0
- package/es/common/inversify/syntax/constraint_helpers.js.map +1 -0
- package/es/common/inversify-lite/container/container.js +2 -4
- package/es/common/inversify-lite/container/container.js.map +1 -1
- package/es/common/inversify-lite/index.d.ts +1 -8
- package/es/common/inversify-lite/index.js +1 -15
- package/es/common/inversify-lite/index.js.map +1 -1
- package/es/common/inversify-lite/interfaces/interfaces.d.ts +0 -2
- package/es/common/inversify-lite/interfaces/interfaces.js.map +1 -1
- package/es/common/inversify-lite/planning/queryable_string.d.ts +0 -2
- package/es/common/inversify-lite/planning/queryable_string.js +0 -10
- package/es/common/inversify-lite/planning/queryable_string.js.map +1 -1
- package/es/common/inversify-lite/resolution/resolver.js.map +1 -1
- package/es/common/segment/monotone.js +2 -2
- package/es/common/segment/monotone.js.map +1 -1
- package/es/common/shape/rect.js +2 -1
- package/es/common/shape/rect.js.map +1 -1
- package/es/common/sort.js +1 -2
- package/es/common/store.js +2 -1
- package/es/common/utils.d.ts +1 -0
- package/es/common/utils.js +8 -1
- package/es/common/utils.js.map +1 -1
- package/es/common/xml/OrderedObjParser.js +2 -2
- package/es/common/xml/OrderedObjParser.js.map +1 -1
- package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -2
- package/es/core/contributions/layerHandler/canvas2d-contribution.js +5 -9
- package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/empty-contribution.d.ts +2 -2
- package/es/core/contributions/layerHandler/empty-contribution.js +5 -9
- package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/offscreen2d-contribution.d.ts +2 -2
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js +5 -9
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/es/core/contributions/textMeasure/AtextMeasure.d.ts +14 -2
- package/es/core/contributions/textMeasure/AtextMeasure.js +99 -13
- 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/textMeasure/modules.js +1 -1
- package/es/core/contributions/textMeasure/modules.js.map +1 -1
- package/es/core/core-modules.js +4 -6
- package/es/core/core-modules.js.map +1 -1
- package/es/core/global-module.js +2 -0
- package/es/core/global.d.ts +9 -0
- package/es/core/global.js +23 -4
- package/es/core/global.js.map +1 -1
- package/es/core/graphic-utils.d.ts +7 -4
- package/es/core/graphic-utils.js +20 -15
- package/es/core/graphic-utils.js.map +1 -1
- package/es/core/layer-service.d.ts +5 -2
- package/es/core/layer-service.js +18 -15
- package/es/core/layer-service.js.map +1 -1
- package/es/core/stage.d.ts +8 -4
- package/es/core/stage.js +47 -30
- package/es/core/stage.js.map +1 -1
- package/es/core/window.d.ts +2 -2
- package/es/core/window.js +8 -12
- package/es/core/window.js.map +1 -1
- package/es/env-check.d.ts +3 -0
- package/es/env-check.js +12 -0
- package/es/env-check.js.map +1 -0
- package/es/event/event-manager.d.ts +5 -1
- package/es/event/event-manager.js +32 -26
- package/es/event/event-manager.js.map +1 -1
- package/es/event/event-system.js +8 -6
- package/es/event/event-system.js.map +1 -1
- package/es/event/federated-event/base-event.d.ts +5 -6
- package/es/event/federated-event/base-event.js +15 -5
- package/es/event/federated-event/base-event.js.map +1 -1
- package/es/event/federated-event/mouse-event.d.ts +6 -6
- package/es/event/federated-event/mouse-event.js +16 -4
- package/es/event/federated-event/mouse-event.js.map +1 -1
- package/es/graphic/area.js +1 -0
- package/es/graphic/area.js.map +1 -1
- package/es/graphic/bounds.d.ts +2 -2
- package/es/graphic/bounds.js +6 -8
- package/es/graphic/bounds.js.map +1 -1
- package/es/graphic/builtin-symbol/index.d.ts +1 -0
- package/es/graphic/builtin-symbol/index.js +7 -0
- package/es/graphic/builtin-symbol/index.js.map +1 -1
- package/es/graphic/builtin-symbol/rect.d.ts +2 -1
- package/es/graphic/builtin-symbol/rect.js +9 -4
- package/es/graphic/builtin-symbol/rect.js.map +1 -1
- package/es/graphic/config.js +12 -4
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/graphic-creator.d.ts +24 -36
- package/es/graphic/graphic-creator.js +14 -125
- package/es/graphic/graphic-creator.js.map +1 -1
- package/es/graphic/graphic-service/arc-contribution.d.ts +1 -5
- package/es/graphic/graphic-service/arc-contribution.js +0 -15
- package/es/graphic/graphic-service/arc-contribution.js.map +1 -1
- package/es/graphic/graphic-service/area-contribution.d.ts +1 -1
- package/es/graphic/graphic-service/area-contribution.js +2 -1
- package/es/graphic/graphic-service/area-contribution.js.map +1 -1
- package/es/graphic/graphic-service/circle-contribution.d.ts +1 -5
- package/es/graphic/graphic-service/circle-contribution.js +0 -15
- package/es/graphic/graphic-service/circle-contribution.js.map +1 -1
- package/es/graphic/graphic-service/common-contribution.js +2 -14
- package/es/graphic/graphic-service/common-contribution.js.map +1 -1
- package/es/graphic/graphic-service/graphic-module.js +1 -23
- package/es/graphic/graphic-service/graphic-module.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.d.ts +5 -9
- package/es/graphic/graphic-service/graphic-service.js +44 -34
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic-service/path-contribution.d.ts +1 -5
- package/es/graphic/graphic-service/path-contribution.js +0 -15
- package/es/graphic/graphic-service/path-contribution.js.map +1 -1
- package/es/graphic/graphic-service/rect-contribution.d.ts +1 -5
- package/es/graphic/graphic-service/rect-contribution.js +0 -15
- package/es/graphic/graphic-service/rect-contribution.js.map +1 -1
- package/es/graphic/graphic-service/symbol-contribution.d.ts +0 -1
- package/es/graphic/graphic-service/symbol-contribution.js +2 -16
- package/es/graphic/graphic-service/symbol-contribution.js.map +1 -1
- package/es/graphic/graphic.js +8 -6
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.d.ts +1 -0
- package/es/graphic/group.js +8 -1
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/index.d.ts +1 -0
- package/es/graphic/index.js +2 -0
- package/es/graphic/index.js.map +1 -1
- package/es/graphic/line.js +1 -0
- package/es/graphic/line.js.map +1 -1
- package/es/graphic/node-tree.js +2 -2
- package/es/graphic/node-tree.js.map +1 -1
- package/es/graphic/rect.d.ts +2 -3
- package/es/graphic/rect.js +3 -7
- package/es/graphic/rect.js.map +1 -1
- package/es/graphic/richtext/line.d.ts +1 -0
- package/es/graphic/richtext/line.js +6 -4
- package/es/graphic/richtext/line.js.map +1 -1
- package/es/graphic/richtext/paragraph.js +5 -2
- package/es/graphic/richtext/paragraph.js.map +1 -1
- package/es/graphic/richtext/utils.js +2 -1
- package/es/graphic/richtext/utils.js.map +1 -1
- package/es/graphic/richtext.d.ts +3 -3
- package/es/graphic/richtext.js +12 -3
- package/es/graphic/richtext.js.map +1 -1
- package/es/graphic/symbol.js +11 -10
- package/es/graphic/symbol.js.map +1 -1
- package/es/graphic/text.d.ts +1 -0
- package/es/graphic/text.js +94 -13
- package/es/graphic/text.js.map +1 -1
- package/es/graphic/theme.d.ts +4 -4
- package/es/graphic/theme.js +27 -28
- package/es/graphic/theme.js.map +1 -1
- package/es/graphic/tools.js +1 -1
- package/es/graphic/tools.js.map +1 -1
- package/es/graphic/wrap-text.js +6 -4
- package/es/graphic/wrap-text.js.map +1 -1
- package/es/index.d.ts +18 -0
- package/es/index.js +36 -0
- package/es/index.js.map +1 -1
- package/es/interface/allocator.d.ts +1 -0
- package/es/interface/allocator.js.map +1 -1
- package/es/interface/event.d.ts +15 -44
- package/es/interface/event.js.map +1 -1
- package/es/interface/global.d.ts +1 -0
- package/es/interface/global.js.map +1 -1
- package/es/interface/graphic/rect.d.ts +2 -0
- package/es/interface/graphic/rect.js.map +1 -1
- package/es/interface/graphic/richText.d.ts +1 -1
- package/es/interface/graphic/richText.js.map +1 -1
- package/es/interface/graphic/text.d.ts +5 -1
- package/es/interface/graphic/text.js.map +1 -1
- package/es/interface/graphic.d.ts +3 -2
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/render.d.ts +2 -2
- package/es/interface/render.js.map +1 -1
- package/es/interface/stage.d.ts +8 -1
- package/es/interface/stage.js.map +1 -1
- package/es/interface/text.d.ts +2 -2
- package/es/interface/text.js.map +1 -1
- package/es/modules.d.ts +1 -2
- package/es/modules.js +0 -4
- package/es/modules.js.map +1 -1
- package/es/picker/global-picker-service.d.ts +2 -2
- package/es/picker/global-picker-service.js +5 -9
- package/es/picker/global-picker-service.js.map +1 -1
- package/es/picker/pick-interceptor.js +2 -1
- package/es/picker/pick-interceptor.js.map +1 -1
- package/es/picker/pick-modules.js +1 -4
- package/es/picker/pick-modules.js.map +1 -1
- package/es/picker/picker-service.d.ts +2 -2
- package/es/picker/picker-service.js +10 -6
- package/es/picker/picker-service.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +12 -6
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/plugins/plugin-modules.js +1 -2
- package/es/plugins/plugin-modules.js.map +1 -1
- package/es/render/contributions/render/arc-module.d.ts +2 -0
- package/es/render/contributions/render/arc-module.js +21 -0
- package/es/render/contributions/render/arc-module.js.map +1 -0
- package/es/render/contributions/render/arc-render.js +3 -0
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/arc3d-module.d.ts +2 -0
- package/es/render/contributions/render/arc3d-module.js +13 -0
- package/es/render/contributions/render/arc3d-module.js.map +1 -0
- package/es/render/contributions/render/area-module.d.ts +2 -0
- package/es/render/contributions/render/area-module.js +23 -0
- package/es/render/contributions/render/area-module.js.map +1 -0
- package/es/render/contributions/render/area-render.d.ts +1 -0
- package/es/render/contributions/render/area-render.js +45 -5
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-render.d.ts +1 -1
- package/es/render/contributions/render/base-render.js +15 -22
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/circle-module.d.ts +2 -0
- package/es/render/contributions/render/circle-module.js +21 -0
- package/es/render/contributions/render/circle-module.js.map +1 -0
- package/es/render/contributions/render/circle-render.js +3 -0
- package/es/render/contributions/render/circle-render.js.map +1 -1
- package/es/render/contributions/render/contributions/arc-contribution-render.d.ts +3 -7
- package/es/render/contributions/render/contributions/arc-contribution-render.js +6 -32
- package/es/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/area-contribution-render.d.ts +3 -4
- package/es/render/contributions/render/contributions/area-contribution-render.js +5 -23
- package/es/render/contributions/render/contributions/area-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/base-contribution-render.d.ts +4 -0
- package/es/render/contributions/render/contributions/base-contribution-render.js +21 -16
- package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/circle-contribution-render.d.ts +3 -7
- package/es/render/contributions/render/contributions/circle-contribution-render.js +6 -32
- package/es/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/constants.d.ts +1 -0
- package/es/render/contributions/render/contributions/constants.js +2 -0
- package/es/render/contributions/render/contributions/constants.js.map +1 -1
- package/es/render/contributions/render/contributions/group-contribution-render.d.ts +1 -0
- package/es/render/contributions/render/contributions/group-contribution-render.js +5 -15
- package/es/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/image-contribution-render.d.ts +1 -0
- package/es/render/contributions/render/contributions/image-contribution-render.js +6 -17
- package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/path-contribution-render.d.ts +2 -9
- package/es/render/contributions/render/contributions/path-contribution-render.js +3 -29
- package/es/render/contributions/render/contributions/path-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/polygon-contribution-render.d.ts +2 -9
- package/es/render/contributions/render/contributions/polygon-contribution-render.js +3 -29
- package/es/render/contributions/render/contributions/polygon-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/rect-contribution-render.d.ts +5 -7
- package/es/render/contributions/render/contributions/rect-contribution-render.js +19 -46
- package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +3 -7
- package/es/render/contributions/render/contributions/symbol-contribution-render.js +6 -24
- package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/text-contribution-render.d.ts +8 -1
- package/es/render/contributions/render/contributions/text-contribution-render.js +24 -1
- package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +7 -6
- package/es/render/contributions/render/draw-contribution.js +49 -29
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.d.ts +7 -1
- package/es/render/contributions/render/draw-interceptor.js +42 -38
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/glyph-module.d.ts +2 -0
- package/es/render/contributions/render/glyph-module.js +13 -0
- package/es/render/contributions/render/glyph-module.js.map +1 -0
- package/es/render/contributions/render/glyph-render.d.ts +1 -2
- package/es/render/contributions/render/glyph-render.js +12 -9
- package/es/render/contributions/render/glyph-render.js.map +1 -1
- package/es/render/contributions/render/group-render.js +4 -1
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/image-module.d.ts +2 -0
- package/es/render/contributions/render/image-module.js +20 -0
- package/es/render/contributions/render/image-module.js.map +1 -0
- package/es/render/contributions/render/image-render.js +5 -2
- package/es/render/contributions/render/image-render.js.map +1 -1
- package/es/render/contributions/render/incremental-draw-contribution.d.ts +2 -6
- package/es/render/contributions/render/incremental-draw-contribution.js +5 -11
- package/es/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/es/render/contributions/render/line-module.d.ts +2 -0
- package/es/render/contributions/render/line-module.js +16 -0
- package/es/render/contributions/render/line-module.js.map +1 -0
- package/es/render/contributions/render/line-render.d.ts +1 -0
- package/es/render/contributions/render/line-render.js +21 -6
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/module.js +8 -129
- package/es/render/contributions/render/module.js.map +1 -1
- package/es/render/contributions/render/path-module.d.ts +2 -0
- package/es/render/contributions/render/path-module.js +21 -0
- package/es/render/contributions/render/path-module.js.map +1 -0
- package/es/render/contributions/render/path-render.d.ts +2 -1
- package/es/render/contributions/render/path-render.js +8 -4
- package/es/render/contributions/render/path-render.js.map +1 -1
- package/es/render/contributions/render/polygon-module.d.ts +2 -0
- package/es/render/contributions/render/polygon-module.js +20 -0
- package/es/render/contributions/render/polygon-module.js.map +1 -0
- package/es/render/contributions/render/polygon-render.js +3 -0
- package/es/render/contributions/render/polygon-render.js.map +1 -1
- package/es/render/contributions/render/pyramid3d-module.d.ts +2 -0
- package/es/render/contributions/render/pyramid3d-module.js +13 -0
- package/es/render/contributions/render/pyramid3d-module.js.map +1 -0
- package/es/render/contributions/render/rect-module.d.ts +2 -0
- package/es/render/contributions/render/rect-module.js +21 -0
- package/es/render/contributions/render/rect-module.js.map +1 -0
- package/es/render/contributions/render/rect-render.d.ts +2 -1
- package/es/render/contributions/render/rect-render.js +11 -3
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/rect3d-module.d.ts +2 -0
- package/es/render/contributions/render/rect3d-module.js +13 -0
- package/es/render/contributions/render/rect3d-module.js.map +1 -0
- package/es/render/contributions/render/render-slector.d.ts +1 -4
- package/es/render/contributions/render/render-slector.js +0 -15
- package/es/render/contributions/render/render-slector.js.map +1 -1
- package/es/render/contributions/render/richtext-module.d.ts +2 -0
- package/es/render/contributions/render/richtext-module.js +13 -0
- package/es/render/contributions/render/richtext-module.js.map +1 -0
- package/es/render/contributions/render/richtext-render.d.ts +1 -0
- package/es/render/contributions/render/richtext-render.js +12 -6
- package/es/render/contributions/render/richtext-render.js.map +1 -1
- package/es/render/contributions/render/symbol-module.d.ts +2 -0
- package/es/render/contributions/render/symbol-module.js +21 -0
- package/es/render/contributions/render/symbol-module.js.map +1 -0
- package/es/render/contributions/render/symbol-render.js +23 -4
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/contributions/render/text-module.d.ts +2 -0
- package/es/render/contributions/render/text-module.js +20 -0
- package/es/render/contributions/render/text-module.js.map +1 -0
- package/es/render/contributions/render/text-render.js +16 -10
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/es/render/contributions/render/utils.js +2 -2
- package/es/render/contributions/render/utils.js.map +1 -1
- package/es/render/render-modules.js +1 -1
- package/es/render/render-modules.js.map +1 -1
- package/es/render/render-service.js +1 -1
- package/es/render/render-service.js.map +1 -1
- package/es/resource-loader/loader.js +1 -3
- package/es/resource-loader/loader.js.map +1 -1
- package/package.json +7 -3
- package/cjs/common/inversify-lite/annotation/post_construct.d.ts +0 -4
- package/cjs/common/inversify-lite/annotation/post_construct.js.map +0 -1
- package/es/common/inversify-lite/annotation/post_construct.d.ts +0 -4
- package/es/common/inversify-lite/annotation/post_construct.js +0 -10
- package/es/common/inversify-lite/annotation/post_construct.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/contributions/layerHandler/empty-contribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/core/contributions/layerHandler/empty-contribution.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAU,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAcpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG5C,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAYxC;QACE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,MAAe,EAAE,MAA+B;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS;QACzB,OAAO;IACT,CAAC;IACD,UAAU,CAAC,CAAS,EAAE,CAAS;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAe,EAAE,MAA+B,EAAE,UAAkC;QACzF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,kCAAO,UAAU,KAAE,KAAK,EAAE,KAAK,IAAG,CAAC;QACxE,OAAO;IACT,CAAC;IAED,KAAK,CAAC,aAA0C;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,WAAoB,EAAE,MAA+B;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,CAAC,MAAe,EAAE,KAAe,EAAE,MAA+C;;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,gCAC/B,OAAO,IACJ,MAAM,KACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,UAAU,mCAAI,MAAM,CAAC,CAAC,CAAC,SAAS,IAC7D,CAAC;QACH,OAAO;IACT,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO;IACT,CAAC;CACF,CAAA;AAtEY,6BAA6B;IADzC,UAAU,EAAE;;GACA,6BAA6B,CAsEzC;SAtEY,6BAA6B","file":"empty-contribution.js","sourcesContent":["import { inject, injectable } from '../../../common/inversify-lite';\nimport type {\n IGlobal,\n IDrawToParams,\n IGroup,\n ILayer,\n ILayerHandlerContribution,\n IWindow,\n ILayerHandlerInitParams,\n ILayerHandlerDrawParams,\n IDrawContext,\n LayerMode\n} from '../../../interface';\nimport type { IBounds } from '@visactor/vutils';\nimport { application } from '../../../application';\n\n@injectable()\nexport class EmptyLayerHandlerContribution implements ILayerHandlerContribution {\n declare layer: ILayer;\n declare canvas: null;\n declare context: null;\n declare offscreen: boolean;\n declare main: boolean;\n declare window: IWindow;\n declare type: LayerMode;\n // 所依赖的主layer handler\n declare mainHandler: ILayerHandlerContribution;\n declare global: IGlobal;\n\n constructor() {\n this.offscreen = false;\n this.type = 'virtual';\n this.global = application.global;\n }\n\n setDpr(dpr: number) {\n return;\n }\n\n init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void {\n this.layer = layer;\n this.window = window;\n if (params.main) {\n throw new Error('virtual layer不能作为main layer');\n }\n this.main = false;\n this.canvas = null;\n this.context = null;\n }\n\n resize(w: number, h: number) {\n return;\n }\n resizeView(w: number, h: number) {\n return;\n }\n\n render(group: IGroup[], params: ILayerHandlerDrawParams, userParams?: Partial<IDrawContext>): void {\n this.mainHandler.render(group, params, { ...userParams, clear: false });\n return;\n }\n\n merge(layerHandlers: ILayerHandlerContribution[]) {\n return;\n }\n\n prepare(dirtyBounds: IBounds, params: ILayerHandlerDrawParams) {\n return;\n }\n\n drawTo(target: IWindow, group: IGroup[], params: IDrawToParams & ILayerHandlerDrawParams) {\n const context = target.getContext();\n params.renderService.render(group, {\n context,\n ...params,\n clear: params.clear ? params.background ?? '#fff' : undefined\n });\n return;\n }\n\n getContext(): null {\n return null;\n }\n\n release() {\n return;\n }\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { IGlobal, ICanvas, IContext2d, IDrawToParams, IGroup, ILayer, ILayerHandlerContribution, ILayerHandlerInitParams, IWindow, ILayerHandlerDrawParams, LayerMode } from '../../../interface';
|
|
2
2
|
import type { IBoundsLike } from '@visactor/vutils';
|
|
3
3
|
export declare class OffscreenLayerHandlerContribution implements ILayerHandlerContribution {
|
|
4
|
-
readonly global: IGlobal;
|
|
5
4
|
layer: ILayer;
|
|
6
5
|
canvas: ICanvas;
|
|
7
6
|
context: IContext2d;
|
|
8
7
|
offscreen: boolean;
|
|
9
8
|
type: LayerMode;
|
|
10
9
|
secondaryHandlers: ILayerHandlerContribution[];
|
|
11
|
-
|
|
10
|
+
global: IGlobal;
|
|
11
|
+
constructor();
|
|
12
12
|
setDpr(dpr: number): void;
|
|
13
13
|
init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void;
|
|
14
14
|
resize(w: number, h: number): void;
|
|
@@ -4,21 +4,17 @@ var __decorate = this && this.__decorate || function(decorators, target, key, de
|
|
|
4
4
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
5
5
|
}, __metadata = this && this.__metadata || function(k, v) {
|
|
6
6
|
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
|
|
7
|
-
}, __param = this && this.__param || function(paramIndex, decorator) {
|
|
8
|
-
return function(target, key) {
|
|
9
|
-
decorator(target, key, paramIndex);
|
|
10
|
-
};
|
|
11
7
|
};
|
|
12
8
|
|
|
13
|
-
import {
|
|
9
|
+
import { injectable } from "../../../common/inversify-lite";
|
|
14
10
|
|
|
15
11
|
import { wrapCanvas } from "../../../canvas/util";
|
|
16
12
|
|
|
17
|
-
import {
|
|
13
|
+
import { application } from "../../../application";
|
|
18
14
|
|
|
19
15
|
let OffscreenLayerHandlerContribution = class {
|
|
20
|
-
constructor(
|
|
21
|
-
this.
|
|
16
|
+
constructor() {
|
|
17
|
+
this.offscreen = !0, this.type = "dynamic", this.global = application.global;
|
|
22
18
|
}
|
|
23
19
|
setDpr(dpr) {
|
|
24
20
|
this.canvas.dpr = dpr;
|
|
@@ -70,7 +66,7 @@ let OffscreenLayerHandlerContribution = class {
|
|
|
70
66
|
merge(layerHandlers) {}
|
|
71
67
|
};
|
|
72
68
|
|
|
73
|
-
OffscreenLayerHandlerContribution = __decorate([ injectable(),
|
|
69
|
+
OffscreenLayerHandlerContribution = __decorate([ injectable(), __metadata("design:paramtypes", []) ], OffscreenLayerHandlerContribution);
|
|
74
70
|
|
|
75
71
|
export { OffscreenLayerHandlerContribution };
|
|
76
72
|
//# sourceMappingURL=offscreen2d-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/contributions/layerHandler/offscreen2d-contribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/core/contributions/layerHandler/offscreen2d-contribution.ts"],"names":[],"mappings":"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","file":"offscreen2d-contribution.js","sourcesContent":["import { inject, injectable } from '../../../common/inversify-lite';\nimport { wrapCanvas } from '../../../canvas/util';\nimport type {\n IGlobal,\n ICanvas,\n IContext2d,\n IDrawToParams,\n IGroup,\n ILayer,\n ILayerHandlerContribution,\n ILayerHandlerInitParams,\n IWindow,\n ILayerHandlerDrawParams,\n LayerMode\n} from '../../../interface';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { application } from '../../../application';\n\n@injectable()\nexport class OffscreenLayerHandlerContribution implements ILayerHandlerContribution {\n declare layer: ILayer;\n declare canvas: ICanvas;\n declare context: IContext2d;\n declare offscreen: boolean;\n declare type: LayerMode;\n // 所绑定的副layer handler\n declare secondaryHandlers: ILayerHandlerContribution[];\n declare global: IGlobal;\n\n constructor() {\n this.offscreen = true;\n this.type = 'dynamic';\n this.global = application.global;\n }\n\n setDpr(dpr: number) {\n this.canvas.dpr = dpr;\n return;\n }\n\n init(layer: ILayer, window: IWindow, params: ILayerHandlerInitParams): void {\n this.layer = layer;\n const nativeCanvas = this.global.createOffscreenCanvas({\n width: params.width,\n height: params.height,\n dpr: window.dpr\n });\n const canvas = wrapCanvas({\n nativeCanvas,\n width: params.width,\n height: params.height,\n dpr: window.dpr,\n canvasControled: true\n });\n\n this.canvas = canvas;\n this.context = canvas.getContext();\n }\n\n resize(w: number, h: number) {\n this.canvas.resize(w, h);\n return;\n }\n resizeView(w: number, h: number) {\n this.canvas.resize(w, h);\n return;\n }\n\n render(group: IGroup[], params: ILayerHandlerDrawParams): void {\n params.renderService.render(group, {\n context: this.context,\n ...params,\n x: 0,\n y: 0,\n clear: params.background ?? '#ffffff'\n });\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n release() {\n this.canvas.release();\n }\n\n getContext(): IContext2d {\n return this.context;\n }\n\n drawTo(target: IWindow, group: IGroup[], params: IDrawToParams & ILayerHandlerDrawParams) {\n const context = target.getContext();\n const targetDpr = target.dpr;\n\n const { x = 0, y = 0, width = this.layer.viewWidth, height = this.layer.viewHeight } = params;\n // 这个context可能是外部的,不要使用内置的状态,直接用原生的context\n context.nativeContext.save();\n context.nativeContext.setTransform(targetDpr, 0, 0, targetDpr, 0, 0);\n if (params.clear) {\n context.clearRect(x, y, width, height);\n }\n context.drawImage(this.canvas.nativeCanvas, 0, 0, this.canvas.width, this.canvas.height, x, y, width, height);\n context.nativeContext.restore();\n }\n\n merge(layerHandlers: ILayerHandlerContribution[]) {\n return;\n }\n}\n"]}
|
|
@@ -33,11 +33,14 @@ export declare class ATextMeasure implements ITextMeasure {
|
|
|
33
33
|
width: number;
|
|
34
34
|
};
|
|
35
35
|
private _clipText;
|
|
36
|
+
private _clipTextEnd;
|
|
37
|
+
private _clipTextStart;
|
|
38
|
+
private _clipTextMiddle;
|
|
36
39
|
clipTextWithSuffixVertical(verticalList: {
|
|
37
40
|
text: string;
|
|
38
41
|
width?: number;
|
|
39
42
|
direction: number;
|
|
40
|
-
}[], options: TextOptionsType, width: number, suffix: string, wordBreak: boolean): {
|
|
43
|
+
}[], options: TextOptionsType, width: number, suffix: string, wordBreak: boolean, suffixPosition: 'start' | 'end' | 'middle'): {
|
|
41
44
|
verticalList: {
|
|
42
45
|
text: string;
|
|
43
46
|
width?: number;
|
|
@@ -45,7 +48,16 @@ export declare class ATextMeasure implements ITextMeasure {
|
|
|
45
48
|
}[];
|
|
46
49
|
width: number;
|
|
47
50
|
};
|
|
48
|
-
|
|
51
|
+
revertVerticalList(verticalList: {
|
|
52
|
+
text: string;
|
|
53
|
+
width?: number;
|
|
54
|
+
direction: number;
|
|
55
|
+
}[]): {
|
|
56
|
+
text: string;
|
|
57
|
+
width?: number;
|
|
58
|
+
direction: number;
|
|
59
|
+
}[];
|
|
60
|
+
clipTextWithSuffix(text: string, options: TextOptionsType, width: number, suffix: string, wordBreak: boolean, position: 'start' | 'end' | 'middle'): {
|
|
49
61
|
str: string;
|
|
50
62
|
width: number;
|
|
51
63
|
};
|
|
@@ -58,7 +58,7 @@ let ATextMeasure = class {
|
|
|
58
58
|
for (;i < verticalList.length && length + verticalList[i].width < width; i++) length += verticalList[i].width,
|
|
59
59
|
out.push(verticalList[i]);
|
|
60
60
|
if (verticalList[i] && verticalList[i].text.length > 1) {
|
|
61
|
-
const clipedData = this._clipText(verticalList[i].text, options, width - length, 0, verticalList[i].text.length - 1);
|
|
61
|
+
const clipedData = this._clipText(verticalList[i].text, options, width - length, 0, verticalList[i].text.length - 1, "end", !1);
|
|
62
62
|
if (wordBreak && clipedData.str !== verticalList[i].text) {
|
|
63
63
|
let text = "", length = 0;
|
|
64
64
|
for (let j = 0; j < i; j++) {
|
|
@@ -95,14 +95,28 @@ let ATextMeasure = class {
|
|
|
95
95
|
str: "",
|
|
96
96
|
width: 0
|
|
97
97
|
};
|
|
98
|
-
const data = this._clipText(text, options, width, 0, text.length - 1);
|
|
98
|
+
const data = this._clipText(text, options, width, 0, text.length - 1, "end", !1);
|
|
99
99
|
if (wordBreak && data.str !== text) {
|
|
100
100
|
const index = testLetter(text, data.str.length);
|
|
101
101
|
index !== data.str.length && (data.str = text.substring(0, index), data.width = this.measureTextWidth(data.str, options));
|
|
102
102
|
}
|
|
103
103
|
return data;
|
|
104
104
|
}
|
|
105
|
-
_clipText(text, options, width, leftIdx, rightIdx) {
|
|
105
|
+
_clipText(text, options, width, leftIdx, rightIdx, position, suffix) {
|
|
106
|
+
let data;
|
|
107
|
+
if ("end" === position) data = this._clipTextEnd(text, options, width, leftIdx, rightIdx),
|
|
108
|
+
suffix && (data.result = data.str + suffix); else if ("start" === position) data = this._clipTextStart(text, options, width, leftIdx, rightIdx),
|
|
109
|
+
suffix && (data.result = suffix + data.str); else if ("middle" === position) {
|
|
110
|
+
const d = this._clipTextMiddle(text, options, width, "", "", 0, 0, 1);
|
|
111
|
+
data = {
|
|
112
|
+
str: "none",
|
|
113
|
+
width: d.width,
|
|
114
|
+
result: d.left + suffix + d.right
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
_clipTextEnd(text, options, width, leftIdx, rightIdx) {
|
|
106
120
|
const middleIdx = Math.floor((leftIdx + rightIdx) / 2), subText = text.substring(0, middleIdx + 1), strWidth = this.measureTextWidth(subText, options);
|
|
107
121
|
let length;
|
|
108
122
|
if (strWidth > width) {
|
|
@@ -114,7 +128,7 @@ let ATextMeasure = class {
|
|
|
114
128
|
return length = this.measureTextWidth(str, options), length <= width ? {
|
|
115
129
|
str: str,
|
|
116
130
|
width: length
|
|
117
|
-
} : this.
|
|
131
|
+
} : this._clipTextEnd(text, options, width, leftIdx, middleIdx);
|
|
118
132
|
}
|
|
119
133
|
if (strWidth < width) {
|
|
120
134
|
if (middleIdx >= text.length - 1) return {
|
|
@@ -125,14 +139,58 @@ let ATextMeasure = class {
|
|
|
125
139
|
return length = this.measureTextWidth(str, options), length >= width ? {
|
|
126
140
|
str: subText,
|
|
127
141
|
width: strWidth
|
|
128
|
-
} : this.
|
|
142
|
+
} : this._clipTextEnd(text, options, width, middleIdx, rightIdx);
|
|
129
143
|
}
|
|
130
144
|
return {
|
|
131
145
|
str: subText,
|
|
132
146
|
width: strWidth
|
|
133
147
|
};
|
|
134
148
|
}
|
|
135
|
-
|
|
149
|
+
_clipTextStart(text, options, width, leftIdx, rightIdx) {
|
|
150
|
+
const middleIdx = Math.ceil((leftIdx + rightIdx) / 2), subText = text.substring(middleIdx - 1, text.length - 1), strWidth = this.measureTextWidth(subText, options);
|
|
151
|
+
let length;
|
|
152
|
+
if (strWidth > width) {
|
|
153
|
+
if (subText.length <= 1) return {
|
|
154
|
+
str: "",
|
|
155
|
+
width: 0
|
|
156
|
+
};
|
|
157
|
+
const str = text.substring(middleIdx, text.length - 1);
|
|
158
|
+
return length = this.measureTextWidth(str, options), length <= width ? {
|
|
159
|
+
str: str,
|
|
160
|
+
width: length
|
|
161
|
+
} : this._clipTextStart(text, options, width, middleIdx, text.length - 1);
|
|
162
|
+
}
|
|
163
|
+
if (strWidth < width) {
|
|
164
|
+
if (middleIdx <= 0) return {
|
|
165
|
+
str: text,
|
|
166
|
+
width: this.measureTextWidth(text, options)
|
|
167
|
+
};
|
|
168
|
+
const str = text.substring(middleIdx - 2, text.length - 1);
|
|
169
|
+
return length = this.measureTextWidth(str, options), length >= width ? {
|
|
170
|
+
str: subText,
|
|
171
|
+
width: strWidth
|
|
172
|
+
} : this._clipTextStart(text, options, width, leftIdx, middleIdx);
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
str: subText,
|
|
176
|
+
width: strWidth
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
_clipTextMiddle(text, options, width, left, right, leftW, rightW, buffer) {
|
|
180
|
+
const subLeftText = text.substring(0, buffer), strLeftWidth = this.measureTextWidth(subLeftText, options);
|
|
181
|
+
if (strLeftWidth + rightW > width) return {
|
|
182
|
+
left: left,
|
|
183
|
+
right: right,
|
|
184
|
+
width: leftW + rightW
|
|
185
|
+
};
|
|
186
|
+
const subRightText = text.substring(text.length - buffer, text.length), strRightWidth = this.measureTextWidth(subRightText, options);
|
|
187
|
+
return strLeftWidth + strRightWidth > width ? {
|
|
188
|
+
left: subLeftText,
|
|
189
|
+
right: right,
|
|
190
|
+
width: strLeftWidth + rightW
|
|
191
|
+
} : this._clipTextMiddle(text, options, width, subLeftText, subRightText, strLeftWidth, strRightWidth, buffer + 1);
|
|
192
|
+
}
|
|
193
|
+
clipTextWithSuffixVertical(verticalList, options, width, suffix, wordBreak, suffixPosition) {
|
|
136
194
|
if ("" === suffix) return this.clipTextVertical(verticalList, options, width, wordBreak);
|
|
137
195
|
if (0 === verticalList.length) return {
|
|
138
196
|
verticalList: verticalList,
|
|
@@ -142,15 +200,43 @@ let ATextMeasure = class {
|
|
|
142
200
|
if (output.verticalList.length === verticalList.length && output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width) return output;
|
|
143
201
|
const suffixWidth = this.measureTextWidth(suffix, options);
|
|
144
202
|
if (suffixWidth > width) return output;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
203
|
+
let out;
|
|
204
|
+
if (width -= suffixWidth, "start" === suffixPosition) {
|
|
205
|
+
const nextVerticalList = this.revertVerticalList(verticalList);
|
|
206
|
+
out = this.clipTextVertical(nextVerticalList, options, width, wordBreak);
|
|
207
|
+
const v = this.revertVerticalList(out.verticalList);
|
|
208
|
+
v.unshift({
|
|
209
|
+
text: suffix,
|
|
210
|
+
direction: 1,
|
|
211
|
+
width: suffixWidth
|
|
212
|
+
}), out.verticalList = v;
|
|
213
|
+
} else if ("middle" === suffixPosition) {
|
|
214
|
+
const leftOut = this.clipTextVertical(verticalList, options, width / 2, wordBreak), nextVerticalList = this.revertVerticalList(verticalList), rightOut = this.clipTextVertical(nextVerticalList, options, width / 2, wordBreak);
|
|
215
|
+
leftOut.verticalList.push({
|
|
216
|
+
text: suffix,
|
|
217
|
+
direction: 1,
|
|
218
|
+
width: suffixWidth
|
|
219
|
+
}), this.revertVerticalList(rightOut.verticalList).forEach((v => leftOut.verticalList.push(v))),
|
|
220
|
+
out = {
|
|
221
|
+
verticalList: leftOut.verticalList,
|
|
222
|
+
width: leftOut.width + rightOut.width
|
|
223
|
+
};
|
|
224
|
+
} else out = this.clipTextVertical(verticalList, options, width, wordBreak), out.verticalList.push({
|
|
148
225
|
text: suffix,
|
|
149
226
|
direction: 1,
|
|
150
227
|
width: suffixWidth
|
|
151
|
-
})
|
|
228
|
+
});
|
|
229
|
+
return out.width += suffixWidth, out;
|
|
230
|
+
}
|
|
231
|
+
revertVerticalList(verticalList) {
|
|
232
|
+
return verticalList.reverse().map((l => {
|
|
233
|
+
const t = l.text.split("").reverse().join("");
|
|
234
|
+
return Object.assign(Object.assign({}, l), {
|
|
235
|
+
text: t
|
|
236
|
+
});
|
|
237
|
+
}));
|
|
152
238
|
}
|
|
153
|
-
clipTextWithSuffix(text, options, width, suffix, wordBreak) {
|
|
239
|
+
clipTextWithSuffix(text, options, width, suffix, wordBreak, position) {
|
|
154
240
|
if ("" === suffix) return this.clipText(text, options, width, wordBreak);
|
|
155
241
|
if (0 === text.length) return {
|
|
156
242
|
str: "",
|
|
@@ -167,12 +253,12 @@ let ATextMeasure = class {
|
|
|
167
253
|
width: 0
|
|
168
254
|
};
|
|
169
255
|
width -= suffixWidth;
|
|
170
|
-
const data = this._clipText(text, options, width, 0, text.length - 1);
|
|
256
|
+
const data = this._clipText(text, options, width, 0, text.length - 1, position, suffix);
|
|
171
257
|
if (wordBreak && data.str !== text) {
|
|
172
258
|
const index = testLetter(text, data.str.length);
|
|
173
259
|
index !== data.str.length && (data.str = text.substring(0, index), data.width = this.measureTextWidth(data.str, options));
|
|
174
260
|
}
|
|
175
|
-
return data.str
|
|
261
|
+
return data.str = data.result, data.width += suffixWidth, data;
|
|
176
262
|
}
|
|
177
263
|
};
|
|
178
264
|
|
|
@@ -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 '../../../common/inversify-lite';\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/contributions/textMeasure/AtextMeasure.ts"],"names":[],"mappings":"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","file":"AtextMeasure.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\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 'end',\n false\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, 'end', false);\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 // TODO: 后续考虑代码合并\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number,\n position: 'start' | 'end' | 'middle',\n suffix: string | false\n ): { str: string; width: number; result?: string } {\n let data: { str: string; width: number; result?: string };\n if (position === 'end') {\n data = this._clipTextEnd(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = data.str + suffix);\n } else if (position === 'start') {\n data = this._clipTextStart(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = suffix + data.str);\n } else if (position === 'middle') {\n const d = this._clipTextMiddle(text, options, width, '', '', 0, 0, 1);\n data = { str: 'none', width: d.width, result: d.left + suffix + d.right };\n }\n return data;\n }\n\n private _clipTextEnd(\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._clipTextEnd(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._clipTextEnd(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextStart(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.ceil((leftIdx + rightIdx) / 2);\n const subText = text.substring(middleIdx - 1, text.length - 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(middleIdx, text.length - 1);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextStart(text, options, width, middleIdx, text.length - 1);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx <= 0) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(middleIdx - 2, text.length - 1);\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._clipTextStart(text, options, width, leftIdx, middleIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextMiddle(\n text: string,\n options: TextOptionsType,\n width: number,\n left: string,\n right: string,\n leftW: number,\n rightW: number,\n buffer: number\n ): { left: string; right: string; width: number } {\n const subLeftText = text.substring(0, buffer);\n const strLeftWidth = this.measureTextWidth(subLeftText, options);\n if (strLeftWidth + rightW > width) {\n return { left, right, width: leftW + rightW };\n }\n const subRightText = text.substring(text.length - buffer, text.length);\n const strRightWidth = this.measureTextWidth(subRightText, options);\n if (strLeftWidth + strRightWidth > width) {\n return { left: subLeftText, right, width: strLeftWidth + rightW };\n }\n return this._clipTextMiddle(\n text,\n options,\n width,\n subLeftText,\n subRightText,\n strLeftWidth,\n strRightWidth,\n buffer + 1\n );\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 suffixPosition: 'start' | 'end' | 'middle'\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 let out;\n if (suffixPosition === 'start') {\n const nextVerticalList = this.revertVerticalList(verticalList);\n out = this.clipTextVertical(nextVerticalList, options, width, wordBreak);\n const v = this.revertVerticalList(out.verticalList);\n v.unshift({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n out.verticalList = v;\n } else if (suffixPosition === 'middle') {\n const leftOut = this.clipTextVertical(verticalList, options, width / 2, wordBreak);\n const nextVerticalList = this.revertVerticalList(verticalList);\n const rightOut = this.clipTextVertical(nextVerticalList, options, width / 2, wordBreak);\n // 添加suffix\n leftOut.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n this.revertVerticalList(rightOut.verticalList).forEach(v => leftOut.verticalList.push(v));\n out = {\n verticalList: leftOut.verticalList,\n width: leftOut.width + rightOut.width\n };\n } else {\n out = this.clipTextVertical(verticalList, options, width, wordBreak);\n out.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n }\n out.width += suffixWidth;\n return out;\n }\n\n revertVerticalList(\n verticalList: {\n text: string;\n width?: number;\n direction: number;\n }[]\n ) {\n return verticalList.reverse().map(l => {\n const t = l.text.split('').reverse().join('');\n return {\n ...l,\n text: t\n };\n });\n }\n\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n position: 'start' | 'end' | 'middle'\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, position, suffix);\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 = data.result!;\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, wordBreak: boolean,
|
|
10
|
-
GetLayoutByLines(lines: (string | number)[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, wordBreak: boolean, lineWidth?: number): LayoutType;
|
|
9
|
+
GetLayout(str: string, width: number, height: number, textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, wordBreak: boolean, suffixPosition: 'start' | 'end' | 'middle'): LayoutType;
|
|
10
|
+
GetLayoutByLines(lines: (string | number)[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number, suffix: string, wordBreak: boolean, lineWidth?: number, suffixPosition?: 'start' | 'end' | 'middle'): LayoutType;
|
|
11
11
|
layoutWithBBox(bbox: TextLayoutBBox, lines: LayoutItemType[], textAlign: TextAlignType, textBaseline: TextBaselineType, lineHeight: number): LayoutType;
|
|
12
12
|
private lineOffset;
|
|
13
13
|
}
|
|
@@ -10,10 +10,10 @@ export class CanvasTextLayout {
|
|
|
10
10
|
return bbox.yOffset = "top" === textBaseline ? 0 : "middle" === textBaseline ? bbox.height / -2 : "alphabetic" === textBaseline ? -.79 * bbox.height : -bbox.height,
|
|
11
11
|
bbox;
|
|
12
12
|
}
|
|
13
|
-
GetLayout(str, width, height, textAlign, textBaseline, lineHeight, suffix, wordBreak,
|
|
13
|
+
GetLayout(str, width, height, textAlign, textBaseline, lineHeight, suffix, wordBreak, suffixPosition) {
|
|
14
14
|
const linesLayout = [], bboxWH = [ width, height ], bboxOffset = [ 0, 0 ];
|
|
15
15
|
for (;str.length > 0; ) {
|
|
16
|
-
const {str: clipText} = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix, wordBreak);
|
|
16
|
+
const {str: clipText} = this.textMeasure.clipTextWithSuffix(str, this.textOptions, width, suffix, wordBreak, suffixPosition);
|
|
17
17
|
linesLayout.push({
|
|
18
18
|
str: clipText,
|
|
19
19
|
width: this.textMeasure.measureTextWidth(clipText, this.textOptions)
|
|
@@ -29,14 +29,14 @@ export class CanvasTextLayout {
|
|
|
29
29
|
};
|
|
30
30
|
return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);
|
|
31
31
|
}
|
|
32
|
-
GetLayoutByLines(lines, textAlign, textBaseline, lineHeight, suffix = "", wordBreak, lineWidth) {
|
|
32
|
+
GetLayoutByLines(lines, textAlign, textBaseline, lineHeight, suffix = "", wordBreak, lineWidth, suffixPosition = "end") {
|
|
33
33
|
lines = lines.map((l => l.toString()));
|
|
34
34
|
const linesLayout = [], bboxWH = [ 0, 0 ];
|
|
35
35
|
if ("number" == typeof lineWidth && lineWidth !== 1 / 0) {
|
|
36
36
|
let width;
|
|
37
37
|
for (let i = 0, len = lines.length; i < len; i++) width = Math.min(this.textMeasure.measureTextWidth(lines[i], this.textOptions), lineWidth),
|
|
38
38
|
linesLayout.push({
|
|
39
|
-
str: this.textMeasure.clipTextWithSuffix(lines[i], this.textOptions, width, suffix, wordBreak).str,
|
|
39
|
+
str: this.textMeasure.clipTextWithSuffix(lines[i], this.textOptions, width, suffix, wordBreak, suffixPosition).str,
|
|
40
40
|
width: width
|
|
41
41
|
});
|
|
42
42
|
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 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 bboxWH[0] = linesLayout.reduce((a, b) => Math.max(a, b.width), 0);\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 suffixPosition: 'start' | 'end' | 'middle'\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(\n str,\n this.textOptions,\n width,\n suffix,\n wordBreak,\n suffixPosition\n );\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 suffixPosition: 'start' | 'end' | 'middle' = 'end'\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(\n lines[i] as string,\n this.textOptions,\n width,\n suffix,\n wordBreak,\n suffixPosition\n ).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 bboxWH[0] = linesLayout.reduce((a, b) => Math.max(a, b.width), 0);\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"]}
|
|
@@ -5,7 +5,7 @@ import { bindContributionProvider } from "../../../common/contribution-provider"
|
|
|
5
5
|
import { DefaultTextMeasureContribution, TextMeasureContribution } from "./textMeasure-contribution";
|
|
6
6
|
|
|
7
7
|
export default new ContainerModule((bind => {
|
|
8
|
-
bind(
|
|
8
|
+
bind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope(),
|
|
9
9
|
bindContributionProvider(bind, TextMeasureContribution);
|
|
10
10
|
}));
|
|
11
11
|
//# sourceMappingURL=modules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/contributions/textMeasure/modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErG,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;IACxC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"sources":["../src/core/contributions/textMeasure/modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErG,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;IACxC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC","file":"modules.js","sourcesContent":["import { ContainerModule } from '../../../common/inversify-lite';\nimport { bindContributionProvider } from '../../../common/contribution-provider';\nimport { DefaultTextMeasureContribution, TextMeasureContribution } from './textMeasure-contribution';\n\nexport default new ContainerModule(bind => {\n bind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n bindContributionProvider(bind, TextMeasureContribution);\n});\n"]}
|
package/es/core/core-modules.js
CHANGED
|
@@ -13,10 +13,8 @@ import { GraphicUtil, LayerService, TransformUtil } from "./constants";
|
|
|
13
13
|
import { VGlobal } from "../constants";
|
|
14
14
|
|
|
15
15
|
export default new ContainerModule((bind => {
|
|
16
|
-
bind(
|
|
17
|
-
bind(
|
|
18
|
-
bind(
|
|
19
|
-
bind(TransformUtil).toService(DefaultTransformUtil), bind(DefaultLayerService).toSelf().inSingletonScope(),
|
|
20
|
-
bind(LayerService).toService(DefaultLayerService);
|
|
16
|
+
bind(VGlobal).to(DefaultGlobal).inSingletonScope(), bind(VWindow).to(DefaultWindow),
|
|
17
|
+
bind(GraphicUtil).to(DefaultGraphicUtil).inSingletonScope(), bind(TransformUtil).to(DefaultTransformUtil).inSingletonScope(),
|
|
18
|
+
bind(LayerService).to(DefaultLayerService).inSingletonScope();
|
|
21
19
|
}));
|
|
22
|
-
//# sourceMappingURL=core-modules.js.map
|
|
20
|
+
//# sourceMappingURL=core-modules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/core-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;IAExC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"sources":["../src/core/core-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;IAExC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEnD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;IAChC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC5D,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAChE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAahE,CAAC,CAAC,CAAC","file":"core-modules.js","sourcesContent":["import { ContainerModule } from '../common/inversify-lite';\nimport { DefaultGlobal } from './global';\nimport { DefaultGraphicUtil, DefaultTransformUtil } from './graphic-utils';\nimport { DefaultLayerService } from './layer-service';\nimport { DefaultWindow, VWindow } from './window';\nimport { GraphicUtil, LayerService, TransformUtil } from './constants';\nimport { VGlobal } from '../constants';\n\nexport default new ContainerModule(bind => {\n // global对象,全局单例模式\n bind(VGlobal).to(DefaultGlobal).inSingletonScope();\n\n bind(VWindow).to(DefaultWindow);\n bind(GraphicUtil).to(DefaultGraphicUtil).inSingletonScope();\n bind(TransformUtil).to(DefaultTransformUtil).inSingletonScope();\n bind(LayerService).to(DefaultLayerService).inSingletonScope();\n\n // bind(Stage).to(DefaultStage);\n // bind<(params: Partial<IStageParams>) => IStage>(StageFactory).toFactory<IStage>((context: interface.Context) => {\n // return (params: Partial<IStageParams>) => {\n // const g = context.container.get<IGlobal>(Global);\n // const ws = context.container.get<IWindow>(VWindow);\n // const rs = context.container.get<IRenderService>(RenderService);\n // const layer = context.container.get<ILayer>(Layer);\n // return new DefaultStage(params, g, ws, rs, layer);\n // };\n // });\n // bind(Layer).to(DefaultLayer);\n});\n"]}
|
package/es/core/global-module.js
CHANGED