diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java index 8bcacb7d2..3291159a3 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java @@ -44,9 +44,7 @@ public class XEditorHolder extends XWidgetCreator { ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); Rectangle rect = this.getBounds(); - int min = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); - int max = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); - if (e.getX() > min && e.getX() < max) { + if (checkMouseEditRangeValid(e, rect, editingMouseListener)) { ToolTipEditor.getInstance().showToolTip((XEditorHolder) this, e.getXOnScreen(), e.getYOnScreen()); } @@ -54,6 +52,29 @@ public class XEditorHolder extends XWidgetCreator { } } + /** + * 判断当前鼠标事件是否在可编辑区域内 + * + * @param e 鼠标事件 + * @param rect 区域 + * @param editingMouseListener 位置处理器 + * @return 是否位于可编辑区 + */ + private boolean checkMouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { + int horizontalValue = editingMouseListener.getDesigner().getHorizontalScaleValue(); + int verticalValue = editingMouseListener.getDesigner().getVerticalScaleValue(); + int minMoveSize = editingMouseListener.getMinMoveSize(); + + int minHorizontal = rect.x + rect.width / 2 - minMoveSize - horizontalValue; + int maxHorizontal = rect.x + rect.width / 2 + minMoveSize - horizontalValue; + int minVertical = rect.y + rect.height / 2 - minMoveSize - verticalValue; + int maxVertical = rect.y + rect.height / 2 + minMoveSize - verticalValue; + boolean xRangeValid = e.getX() > minHorizontal && e.getX() < maxHorizontal; + boolean yRangeValid = e.getY() > minVertical && e.getY() < maxVertical; + + return xRangeValid && yRangeValid; + } + @Override protected String getIconName() { return "text_field_16.png"; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java index 0555cf172..801a34219 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java @@ -279,9 +279,7 @@ public class EditingMouseListener extends MouseInputAdapter { if (component instanceof XEditorHolder) { XEditorHolder xcreator = (XEditorHolder) component; Rectangle rect = xcreator.getBounds(); - int min = rect.x + rect.width / 2 - minMoveSize; - int max = rect.x + rect.width / 2 + minMoveSize; - if (e.getX() > min && e.getX() < max) { + if (checkCreatorRangeValid(e, rect)) { if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } @@ -673,8 +671,8 @@ public class EditingMouseListener extends MouseInputAdapter { currentEditor = designerEditor; currentXCreator = creator; Rectangle bounds = new Rectangle(1, 1, creator.getWidth() - 2, creator.getHeight() - 2); - bounds.x += (rect.x - designer.getArea().getHorizontalValue()); - bounds.y += (rect.y - designer.getArea().getVerticalValue()); + bounds.x += (rect.x - designer.getHorizontalScaleValue()); + bounds.y += (rect.y - designer.getVerticalScaleValue()); designerEditor.getEditorTarget().setBounds(bounds); designer.add(designerEditor.getEditorTarget()); designer.invalidate(); @@ -747,4 +745,19 @@ public class EditingMouseListener extends MouseInputAdapter { refreshTopXCreator(false); } + /** + * 判断当前鼠标移动事件是否在Creator有效范围内 + */ + private boolean checkCreatorRangeValid(MouseEvent e, Rectangle rect) { + int horizontalValue = designer.getHorizontalScaleValue(); + int verticalValue = designer.getVerticalScaleValue(); + + int minHorizontal = rect.x + rect.width / 2 - minMoveSize - horizontalValue; + int maxHorizontal = rect.x + rect.width / 2 + minMoveSize - horizontalValue; + int minVertical = rect.y + rect.height / 2 - minMoveSize - verticalValue; + int maxVertical = rect.y + rect.height / 2 + minMoveSize - verticalValue; + boolean xRangeValid = e.getX() > minHorizontal && e.getX() < maxHorizontal; + boolean yRangeValid = e.getY() > minVertical && e.getY() < maxVertical; + return xRangeValid && yRangeValid; + } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java index 24ed004ff..87f746549 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java @@ -1208,7 +1208,7 @@ public class FormDesigner extends TargetComponent
implements TreeSelection } public XLayoutContainer getRootContainer(int y) { - XLayoutContainer container = y < paraHeight - formArea.getVerticalValue() ? paraComponent : rootComponent; + XLayoutContainer container = y < paraHeight - formArea.getVerticalValue() / scale ? paraComponent : rootComponent; if (container == null) { container = rootComponent; }