UNPKG

2.8 kBJavaScriptView Raw
1import { __read, __spreadArray } from "tslib";
2import { each } from '@antv/util';
3import { COMPONENT_TYPE } from '../../constant';
4import { BBox } from '../../util/bbox';
5import { isAutoPadding, parsePadding } from '../../util/padding';
6import { PaddingCal } from './padding-cal';
7/**
8 * @ignore
9 * 根据 view 中的组件,计算实际的 padding 数值
10 * @param view
11 */
12export function calculatePadding(view) {
13 var padding = view.padding;
14 // 如果不是 auto padding,那么直接解析之后返回
15 if (!isAutoPadding(padding)) {
16 return new (PaddingCal.bind.apply(PaddingCal, __spreadArray([void 0], __read(parsePadding(padding)), false)))();
17 }
18 // 是 auto padding,根据组件的情况,来计算 padding
19 var viewBBox = view.viewBBox;
20 var paddingCal = new PaddingCal();
21 var axisComponents = [];
22 var paddingComponents = [];
23 var otherComponents = [];
24 each(view.getComponents(), function (co) {
25 var type = co.type;
26 if (type === COMPONENT_TYPE.AXIS) {
27 axisComponents.push(co);
28 }
29 else if ([COMPONENT_TYPE.LEGEND, COMPONENT_TYPE.SLIDER, COMPONENT_TYPE.SCROLLBAR].includes(type)) {
30 paddingComponents.push(co);
31 }
32 else if (type !== COMPONENT_TYPE.GRID && type !== COMPONENT_TYPE.TOOLTIP) {
33 otherComponents.push(co);
34 }
35 });
36 // 进行坐标轴布局,应该是取 padding 的并集,而不是进行相加
37 each(axisComponents, function (co) {
38 var component = co.component;
39 var bboxObject = component.getLayoutBBox();
40 var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height);
41 var exceed = componentBBox.exceed(viewBBox);
42 // 在对组件分组之后,先对 axis 进行处理,然后取最大的超出即可。
43 paddingCal.max(exceed);
44 });
45 // 有 padding 的组件布局
46 each(paddingComponents, function (co) {
47 var component = co.component, direction = co.direction;
48 var bboxObject = component.getLayoutBBox();
49 var componentPadding = component.get('padding');
50 var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(componentPadding);
51 // 按照方向计算 padding
52 paddingCal.inc(componentBBox, direction);
53 });
54 // 其他组件布局
55 each(otherComponents, function (co) {
56 var component = co.component, direction = co.direction;
57 var bboxObject = component.getLayoutBBox();
58 var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height);
59 // 按照方向计算 padding
60 paddingCal.inc(componentBBox, direction);
61 });
62 return paddingCal;
63}
64//# sourceMappingURL=auto.js.map
\No newline at end of file