Browse Source

REPORT-54410: 决策报表,模板中其他组件的宽高修改会影响绝对画布块中组件的宽高和位置

【问题原因】
自适应布局下的绝对画布块,在缩放内部组件时的时机不对,导致绝对布局计算自己的
缩放比例时,实际计算的是: (currentHeight + GAP / 2) / backupHeight,
然后把这个比例用在了自己的子组件上,导致绝对画布块内部组件的尺寸缩放比例与
外界不一致

【改动思路】
在addCompInterval调用后,此时XWAbsolute.getBounds中年返回的尺寸
是不包含gap的,进行绝对画布块内部组件尺寸调整
zheng-1641779399395
Starryi 3 years ago
parent
commit
0e7d4a9251
  1. 14
      designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java

14
designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java

@ -780,6 +780,17 @@ public class XWFitLayout extends XLayoutContainer {
tabLayout.updateBoundsWidget(); tabLayout.updateBoundsWidget();
} }
} }
}
layout.setContainerHeight(containerHeight);
layout.setContainerWidth(containerWidth);
addCompInterval(getAcualInterval());
// REPORT-54410: 决策报表,模板中其他组件的宽高修改会影响绝对画布块中组件的宽高和位置
// 绝对布局内的组件尺寸调整需要在绝对布局的bound排除GAP后进行,否则计算出的
// 组件尺寸缩放比例会有问题
for (int index = 0, n = this.getComponentCount(); index < n; index++) {
XCreator creator = (XCreator) this.getComponent(index);
BoundsWidget wgt = (BoundsWidget) layout.getBoundsWidget(creator.toData());
//如果子组件是绝对布局,则内部的widget也要更新 //如果子组件是绝对布局,则内部的widget也要更新
if (creator.acceptType(XWAbsoluteLayout.class)){ if (creator.acceptType(XWAbsoluteLayout.class)){
//更新的时候一定要带上backupBound //更新的时候一定要带上backupBound
@ -790,9 +801,6 @@ public class XWFitLayout extends XLayoutContainer {
creator.setBackupBound(creator.getBounds()); creator.setBackupBound(creator.getBounds());
} }
} }
layout.setContainerHeight(containerHeight);
layout.setContainerWidth(containerWidth);
addCompInterval(getAcualInterval());
} }
private Rectangle recalculateWidgetBounds(Rectangle rec, int[] hors, int[] veris) { private Rectangle recalculateWidgetBounds(Rectangle rec, int[] hors, int[] veris) {

Loading…
Cancel
Save