package com.baselet.element.facet.specific; import com.baselet.diagram.draw.DrawHandler; import com.baselet.diagram.draw.DrawHandler.Layer; import com.baselet.diagram.draw.helper.ColorOwn; import com.baselet.element.facet.KeyValueFacet; import com.baselet.element.facet.PropertiesParserState; public class SubStateSymbolFacet extends KeyValueFacet { public static final SubStateSymbolFacet INSTANCE = new SubStateSymbolFacet(); private SubStateSymbolFacet() {} private enum SubStateSymbolEnum { SUBSTATE } @Override public KeyValue getKeyValue() { return new KeyValue("symbol", new ValueInfo(SubStateSymbolEnum.SUBSTATE, "draw a substate symbol in the lower right corner")); } private static final int DIST_RIGHT = 15; private static final int DIST_BOTTOM = 5; @Override public void handleValue(String value, PropertiesParserState state) { DrawHandler drawer = state.getDrawer(); drawer.setLayer(Layer.Foreground); // should be always on top of background ColorOwn prevBackgroundColor = drawer.getBackgroundColor(); drawer.setBackgroundColor(ColorOwn.TRANSPARENT); SubStateSymbolEnum symbol = SubStateSymbolEnum.valueOf(value.toUpperCase()); final double w = state.getGridElementSize().getWidth(); final double h = state.getGridElementSize().getHeight(); if (symbol == SubStateSymbolEnum.SUBSTATE) { double cW = drawer.getFontSize() * 1.6; double cH = cW * 0.4; double cR = cW * 0.15; double connectorW = cH; drawer.drawRectangleRound(w - DIST_RIGHT - cW, h - DIST_BOTTOM - cH, cW, cH, cR); drawer.drawRectangleRound(w - DIST_RIGHT - cW - cW - connectorW, h - DIST_BOTTOM - cH, cW, cH, cR); drawer.drawLine(w - DIST_RIGHT - cW - connectorW, h - DIST_BOTTOM - cH / 2, w - DIST_RIGHT - cW, h - DIST_BOTTOM - cH / 2); drawer.setLayer(Layer.Background); drawer.setBackgroundColor(prevBackgroundColor); } } }