We run into a bug in ths class XYLayoutEditPolicy with zoom != 1. In the method getConstraintFor(), the same rectangle changes the both x and y value (+1 or -1) after the
following two operations
child.getFigure().translateToAbsolute(rect);
child.getFigure().translateToRelative(rect);
This problem appears when we move the graphic element by
keyborad with ctrl+arrow (you can test it with our last plugin:
eclipseuml_1.1.9.20030320).
The solution is to define the precision Rectangle class as
precisionPoint (attached in this email) and change a bit of this method as
following:
protected Object
getConstraintFor(
ChangeBoundsRequest request,
GraphicalEditPart child)
{
Rectangle bounds = child.getFigure().getBounds();
PrecisionRectangle rect = new PrecisionRectangle(bounds);
child.getFigure().translateToAbsolute(rect);
// original code:
// rect =
request.getTransformedRectangle(rect);
{
rect.translate(request.getMoveDelta());
Dimension sizeDelta = request.getSizeDelta();
rect.width += sizeDelta.width;
rect.height+= sizeDelta.height;
}
child.getFigure().translateToRelative(rect);
rect.translate(getLayoutOrigin().getNegated());
if
(RequestConstants.REQ_MOVE_CHILDREN.equals(request.getType()))
{
Rectangle cons = (Rectangle) getCurrentConstraintFor(child);
rect.setSize(cons.width, cons.height);
}
if
(RequestConstants.REQ_RESIZE_CHILDREN.equals(request.getType()))
{
Dimension minSize = getMinimumSizeFor(child);
if (rect.width
< minSize.width)
rect.width = minSize.width;
if (rect.height
< minSize.height)
rect.height = minSize.height;
}
return
getConstraintFor(rect.getCopy());
}
Please let me know if you need more
precision
julien
omondo
|