package com.baselet.element.elementnew.uml; import com.baselet.control.basics.geom.Rectangle; import com.baselet.control.enums.ElementId; import com.baselet.diagram.draw.DrawHandler; import com.baselet.element.NewGridElement; import com.baselet.element.facet.PropertiesParserState; import com.baselet.element.facet.Settings; import com.baselet.element.settings.SettingsAutoresize; import com.baselet.element.sticking.StickingPolygon; import com.baselet.element.sticking.polygon.StickingPolygonGenerator; public class Interface extends NewGridElement { private static final int TOP_DISTANCE = 10; private static final int CIRCLE_SIZE = 20; private final StickingPolygonGenerator interfacePolygonGenerator = new StickingPolygonGenerator() { @Override public StickingPolygon generateStickingBorder(Rectangle rect) { StickingPolygon p = new StickingPolygon(rect.x, rect.y); p.addRectangle(circleRect()); return p; } }; @Override public ElementId getId() { return ElementId.UMLInterface; } @Override protected void drawCommonContent(PropertiesParserState state) { DrawHandler drawer = state.getDrawer(); state.getBuffer().setTopMin(TOP_DISTANCE + CIRCLE_SIZE);// space reserved for the top circle Rectangle circleRect = circleRect(); drawer.drawCircle(circleRect.x + CIRCLE_SIZE * 0.5, circleRect.y + CIRCLE_SIZE * 0.5, CIRCLE_SIZE * 0.5); state.setStickingPolygonGenerator(interfacePolygonGenerator); } private Rectangle circleRect() { int middlePos = (int) (getRealSize().getWidth() * 0.5 - CIRCLE_SIZE * 0.5); return new Rectangle(middlePos, TOP_DISTANCE, CIRCLE_SIZE, CIRCLE_SIZE); } @Override protected Settings createSettings() { return new SettingsAutoresize(); } }