package com.baselet.element.sequence_aio.facet; import com.baselet.control.basics.Line1D; import com.baselet.control.basics.geom.PointDouble; import com.baselet.control.enums.AlignHorizontal; import com.baselet.control.enums.AlignVertical; import com.baselet.diagram.draw.DrawHandler; import com.baselet.diagram.draw.TextSplitter; public class TextOnLifeline implements LifelineOccurrence { /** the minimum width, to avoid splitting text with very short words e.g. print "I am I" in one line instead of 3*/ private static final double MIN_WIDTH = 50; private final String[] lines; /** * * @param text the text, lines need to be separated by \n */ public TextOnLifeline(String text) { super(); lines = text.split("\n"); } @Override public Line1D draw(DrawHandler drawHandler, PointDouble topLeft, PointDouble size) { double height = TextSplitter.getSplitStringHeight(lines, size.x, drawHandler); double topY = topLeft.y + (size.y - height) / 2; Line1D interruptedLifeline = new Line1D(topY, topY + height); TextSplitter.drawText(drawHandler, lines, topLeft.x, topY, size.x, height, AlignHorizontal.CENTER, AlignVertical.CENTER); return interruptedLifeline; } @Override public double getMinWidth(DrawHandler drawHandler) { return Math.max(MIN_WIDTH, TextSplitter.getTextMinWidth(lines, drawHandler)); } @Override public double getAdditionalYHeight(DrawHandler drawHandler, PointDouble size) { return TextSplitter.getSplitStringHeight(lines, size.x, drawHandler) - size.y; } }