package org.archstudio.bna.things.shapes; import java.awt.Dimension; import java.awt.Shape; import java.awt.geom.Point2D; import org.archstudio.bna.IThingListener; import org.archstudio.bna.ThingEvent; import org.archstudio.bna.utils.BNAUtils; import org.archstudio.sysutils.SystemUtils; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; @NonNullByDefault public class EndpointThing extends EndpointThingBase { public EndpointThing(@Nullable Object id) { super(id); updateProperties(); addThingListener(new IThingListener() { @Override public void thingChanged(ThingEvent thingEvent) { if (isShapeModifyingKey(thingEvent.getPropertyName())) { updateProperties(); } } }); } protected void updateProperties() { Point2D anchor = getAnchorPoint(); Dimension size = getSize(); int x = SystemUtils.round(anchor.getX() - (double) size.width / 2); int y = SystemUtils.round(anchor.getY() - (double) size.height / 2); setBoundingBox(new Rectangle(x, y, size.width, size.height)); } @Override public Point getReferencePoint() { return BNAUtils.toPoint(getAnchorPoint()); } @Override public void setReferencePoint(Point value) { setAnchorPoint(BNAUtils.toPoint2D(value)); } @Override public boolean shouldIncrementRotatingOffset() { return isSelected(); } @Override public Shape getStickyShape() { return BNAUtils.toRectangle2D(getBoundingBox()); } }