Browse Source

REPORT-57722 看看绘制间距线判断的地方有没有优化的空间

fix-lag
方磊 3 years ago
parent
commit
a5e44c5387
  1. 28
      designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java
  2. 13
      designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
  3. 5
      designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java
  4. 60
      designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java

28
designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java

@ -68,9 +68,6 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
protected Widget data;
protected JComponent editor;
protected CoverReportPane coverPanel;
protected boolean inAbsoluteBodyLayout = false;
// XCreator加入到某些XLayoutContainer中时,能调整宽度或者高度
private int[] directions;
private Rectangle backupBound;
@ -897,29 +894,4 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
}
return ((XCreator) this.getParent()).getLevel() + 1;
}
public boolean isAbleDrawSpacingLine() {
return !isBody() && !isParameter() && !isInPara() && isInAbsoluteBodyLayout();
}
public boolean isBody() {
return false;
}
public boolean isParameter() {
return false;
}
public boolean isInPara() {
XLayoutContainer container = XCreatorUtils.getHotspotContainer(this);
return container != null && container.acceptType(XWParameterLayout.class);
}
public boolean isInAbsoluteBodyLayout() {
return inAbsoluteBodyLayout;
}
public void setInAbsoluteBodyLayout(boolean inAbsoluteBodyLayout) {
this.inAbsoluteBodyLayout = inAbsoluteBodyLayout;
}
}

13
designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java

@ -12,7 +12,6 @@ import com.fr.stable.core.PropertyChangeAdapter;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ContainerEvent;
import java.beans.IntrospectionException;
/**
@ -136,16 +135,4 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout {
return false;
}
@Override
public void componentAdded(ContainerEvent e) {
super.componentAdded(e);
XWidgetCreator creator = (XWidgetCreator) e.getChild();
creator.setInAbsoluteBodyLayout(true);
}
@Override
public boolean isBody() {
return true;
}
}

5
designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java

@ -260,9 +260,4 @@ public class XWParameterLayout extends XWAbsoluteLayout {
public boolean isTopable() {
return false;
}
@Override
public boolean isParameter() {
return true;
}
}

60
designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java

@ -5,6 +5,9 @@ import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XElementCase;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.form.parameter.FormParaDesigner;
import com.fr.design.form.util.FormDesignerUtils;
import com.fr.design.utils.ComponentUtils;
import com.fr.stable.Constants;
import com.fr.stable.GraphDrawHelper;
@ -28,6 +31,7 @@ public class FormSpacingLineDrawer {
private FormDesigner designer;
private XCreator hoverCreator = null;
private XCreator selectedCreator = null;
private Rectangle selectedRec;
private Rectangle hoveredRec;
private boolean isMouseMoveEvent = false;
@ -37,15 +41,15 @@ public class FormSpacingLineDrawer {
}
public void updateMouseEvent(MouseEvent e, boolean isMouseMoveEvent) {
XCreator creator = designer.getSelectionModel().getSelection().getSelectedCreator();
if (creator != null) {
selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
if (selectedCreator != null) {
this.hoverCreator = getHoverComponentAt(e.getX(), e.getY());
}
this.isMouseMoveEvent = isMouseMoveEvent;
}
public void draw(Graphics g) {
if (!isMouseMoveEvent) {
if (!isMouseMoveEvent || selectedCreator == null || hoverCreator == null) {
return;
}
@ -53,10 +57,6 @@ public class FormSpacingLineDrawer {
return;
}
if (!hoverCreator.isParentAbsolute()) {
return;
}
this.selectedRec = designer.getSelectionModel().getSelection().getRelativeBounds();
this.hoveredRec = ComponentUtils.getRelativeBounds(hoverCreator);
@ -137,13 +137,55 @@ public class FormSpacingLineDrawer {
GraphDrawHelper.drawString(g2d, text, labelX, labelY);
}
private boolean isSelectedParaComponent() {
return designer.getParaComponent() == selectedCreator;
}
private boolean isSelectedRootComponent() {
return designer.isRoot(selectedCreator);
}
private boolean isSelectedForm() {
return selectedCreator.getParent() == null;
}
private boolean isNeedExtendedLine(AbstractFormParallelLine[] nearestSides) {
return nearestSides[0].isVerticalCenterLineBeforeTheParallelLine(nearestSides[1]) || nearestSides[0].isVerticalCenterLineBehindTheParallelLine(nearestSides[1]);
}
private boolean isSelectedRootPane() {
// form、body、para这三个选中了,都不要画任何间距线
return isSelectedForm() || isSelectedRootComponent() || isSelectedParaComponent();
}
// 当前组件是否在参数面板里面
private boolean isCompInBody(XCreator creator) {
XLayoutContainer container = XCreatorUtils.getHotspotContainer(creator);
return container != null && !container.acceptType(XWParameterLayout.class);
}
private boolean isSelectedCompInBody() {
return isCompInBody(selectedCreator);
}
private boolean isHoveredCompInBody() {
return isCompInBody(hoverCreator);
}
private boolean isCompInBody() {
return isSelectedCompInBody() && isHoveredCompInBody();
}
private boolean isBodyAbsoluteLayout() {
return !(designer instanceof FormParaDesigner) && FormDesignerUtils.isBodyAbsolute(designer);
}
private boolean isInAbsoluteLayout() {
return isBodyAbsoluteLayout() && hoverCreator.isParentAbsolute() && selectedCreator.isParentAbsolute();
}
private boolean isDrawSpacingLine() {
XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
return hoverCreator != null && selectedCreator != null && hoverCreator.isAbleDrawSpacingLine() && selectedCreator.isAbleDrawSpacingLine();
return isInAbsoluteLayout() && !isSelectedRootPane() && isCompInBody();
}
private AbstractFormParallelLine[] getNearestHorizontalSide() {

Loading…
Cancel
Save