1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-12-22 10:59:01 +00:00

Version 1.2023.2

This commit is contained in:
Arnaud Roques 2023-02-26 19:51:17 +01:00
parent d55ae31b68
commit 52664342f6
88 changed files with 640 additions and 524 deletions

View File

@ -489,11 +489,11 @@ root {
HyperLinkColor blue
FontColor white
LineColor #e7e7e7
BackGroundColor #303030
BackGroundColor #313139
}
document {
BackGroundColor black
BackGroundColor #1B1B1B
header {
FontColor #7
}

View File

@ -107,7 +107,6 @@ import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.text.SvgCharSizeHack;
import net.sourceforge.plantuml.url.CMapData;
import net.sourceforge.plantuml.url.Url;
@ -175,8 +174,8 @@ public class ImageBuilder {
public ImageBuilder drawable(UDrawable drawable) {
this.udrawable = drawable;
if (backcolor == null && drawable instanceof TextBlockBackcolored)
backcolor = ((TextBlockBackcolored) drawable).getBackcolor();
if (backcolor == null && drawable instanceof TextBlock)
backcolor = ((TextBlock) drawable).getBackcolor();
return this;
}

View File

@ -51,6 +51,7 @@ import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.BigFrame;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
@ -60,7 +61,6 @@ import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.DecorateEntityImage;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class AnnotatedBuilder {
@ -125,17 +125,13 @@ public class AnnotatedBuilder {
final TextBlock frame = new BigFrame(title, width, height, symbolContext);
return new TextBlockBackcolored() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
frame.drawU(ug.apply(margin.getTranslate()));
original.drawU(ug.apply(margin.getTranslate().compose(padding.getTranslate().compose(delta))));
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
final XRectangle2D rect = original.getInnerPosition(member, stringBounder, strategy);
return new XRectangle2D(dx + rect.getX() + margin.getLeft() + padding.getLeft(),

View File

@ -41,7 +41,6 @@ import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.svek.DecorateEntityImage;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class AnnotatedWorker {
@ -58,13 +57,13 @@ public class AnnotatedWorker {
this.builder = builder;
}
public TextBlockBackcolored addAdd(TextBlock result) {
public TextBlock addAdd(TextBlock result) {
result = builder.decoreWithFrame(result);
result = addLegend(result);
result = addTitle(result);
result = addCaption(result);
result = builder.addHeaderAndFooter(result);
return (TextBlockBackcolored) result;
return (TextBlock) result;
}
public TextBlock addLegend(TextBlock original) {

View File

@ -51,9 +51,9 @@ import net.sourceforge.plantuml.core.Diagram;
import net.sourceforge.plantuml.core.DiagramDescription;
import net.sourceforge.plantuml.core.ImageData;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.preproc.Defines;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.Log;
public class SourceStringReader {
@ -230,7 +230,7 @@ public class SourceStringReader {
}
public ImageData noStartumlFound(OutputStream os, FileFormatOption fileFormatOption) throws IOException {
final TextBlockBackcolored error = GraphicStrings.createForError(Arrays.asList("No @startuml/@enduml found"),
final TextBlock error = GraphicStrings.createForError(Arrays.asList("No @startuml/@enduml found"),
fileFormatOption.isUseRedForError());
return plainImageBuilder(error, fileFormatOption).write(os);

View File

@ -70,6 +70,7 @@ import net.sourceforge.plantuml.klimt.font.FontParam;
import net.sourceforge.plantuml.klimt.geom.GraphicPosition;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.UImage;
import net.sourceforge.plantuml.log.Logme;
@ -82,7 +83,6 @@ import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.style.NoStyleAvailableException;
import net.sourceforge.plantuml.svek.EmptySvgException;
import net.sourceforge.plantuml.svek.GraphvizCrash;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.Log;
import net.sourceforge.plantuml.version.Version;
@ -188,7 +188,7 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot
// ::done
final BufferedImage im = im2;
final TextBlockBackcolored graphicStrings = GraphicStrings.createBlackOnWhite(strings, IconLoader.getRandom(),
final TextBlock graphicStrings = GraphicStrings.createBlackOnWhite(strings, IconLoader.getRandom(),
GraphicPosition.BACKGROUND_CORNER_TOP_RIGHT);
final UDrawable drawable = (im == null) ? graphicStrings : new UDrawable() {

View File

@ -40,7 +40,6 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -49,16 +48,14 @@ import net.sourceforge.plantuml.core.ImageData;
import net.sourceforge.plantuml.core.UmlSource;
import net.sourceforge.plantuml.klimt.UStroke;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.ULine;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class BoardDiagram extends UmlDiagram {
@ -80,31 +77,19 @@ public class BoardDiagram extends UmlDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawMe(ug);
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
final double width = 200;
final double height = 200;
return new XDimension2D(width, height);
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -51,6 +51,7 @@ import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.ULine;
import net.sourceforge.plantuml.skin.ColorParam;
@ -94,7 +95,7 @@ public class BpmElement extends AbstractConnectorPuzzle implements ConnectorPuzz
public TextBlock toTextBlock(ISkinParam skinParam) {
final TextBlock raw = toTextBlockInternal(skinParam);
return new TextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
raw.drawU(ug);

View File

@ -37,9 +37,12 @@ package net.sourceforge.plantuml.bpm;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -122,4 +125,14 @@ public class ConnectorPuzzleEmpty extends AbstractConnectorPuzzle implements Pla
return null;
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorderNone();
}
@Override
public HColor getBackcolor() {
return null;
}
}

View File

@ -45,6 +45,7 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.drawing.UGraphicStencil;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
@ -81,16 +82,11 @@ public class USymbolFolder extends USymbol {
return sname;
}
private void drawFolder(UGraphic ug, double width, double height, XDimension2D dimTitle, double shadowing,
private void drawFolder(UGraphic ug, double width, double height, XDimension2D dimName, double shadowing,
double roundCorner) {
final double wtitle;
if (dimTitle.getWidth() == 0) {
wtitle = Math.max(30, width / 4);
} else {
wtitle = dimTitle.getWidth() + marginTitleX1 + marginTitleX2;
}
final double htitle = getHTitle(dimTitle);
final double wtitle = getWTitle(width, dimName);
final double htitle = getHTitle(dimName);
final Shadowable shape;
if (roundCorner == 0) {
@ -128,13 +124,22 @@ public class USymbolFolder extends USymbol {
ug.apply(UTranslate.dy(htitle)).draw(ULine.hline(wtitle + marginTitleX3));
}
private double getWTitle(double width, XDimension2D dimTitle) {
final double wtitle;
if (dimTitle.getWidth() == 0)
wtitle = Math.max(30, width / 4);
else
wtitle = dimTitle.getWidth() + marginTitleX1 + marginTitleX2;
return wtitle;
}
private double getHTitle(XDimension2D dimTitle) {
final double htitle;
if (dimTitle.getWidth() == 0) {
if (dimTitle.getWidth() == 0)
htitle = 10;
} else {
else
htitle = dimTitle.getHeight() + marginTitleY1 + marginTitleY2;
}
return htitle;
}
@ -157,9 +162,9 @@ public class USymbolFolder extends USymbol {
symbolContext.getRoundCorner());
final Margin margin = getMargin();
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, HorizontalAlignment.CENTER);
if (showTitle) {
if (showTitle)
name.drawU(ug.apply(new UTranslate(4, 3)));
}
tb.drawU(ug.apply(new UTranslate(margin.getX1(), margin.getY1() + dimName.getHeight())));
}
@ -173,6 +178,35 @@ public class USymbolFolder extends USymbol {
final XDimension2D dimStereo = stereotype.calculateDimension(stringBounder);
return getMargin().addDimension(dimName.mergeTB(dimStereo, dimLabel));
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorder() {
@Override
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position) {
final XDimension2D dim = calculateDimension(stringBounder);
final XDimension2D dimName = getDimName(stringBounder);
final double wtitle = getWTitle(dim.getWidth(), dimName);
final double htitle = getHTitle(dimName);
if (position.getX() >= wtitle && position.getY() >= 0 && position.getY() <= htitle)
return new UTranslate(0, htitle);
if (position.getY() <= 0 && position.getX() >= wtitle + marginTitleX3)
return new UTranslate(0, htitle);
if (position.getY() <= 0 && position.getX() >= wtitle - marginTitleX3) {
final double delta = position.getX() - (wtitle - marginTitleX3);
final double how = delta / (2 * marginTitleX3);
return new UTranslate(0, htitle * how);
}
return new UTranslate();
}
};
}
};
}

View File

@ -62,7 +62,6 @@ import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.UImage;
import net.sourceforge.plantuml.log.Logme;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.text.BackSlash;
import net.sourceforge.plantuml.version.PSystemVersion;
@ -111,7 +110,7 @@ public class PSystemDonors extends PlainDiagram {
final List<TextBlock> cols = getCols(getDonors(), COLS, FREE_LINES);
return new UDrawable() {
public void drawU(UGraphic ug) {
final TextBlockBackcolored header = GraphicStrings
final TextBlock header = GraphicStrings
.createBlackOnWhite(Arrays.asList("<b>Special thanks to our sponsors and donors !"));
header.drawU(ug);
final StringBounder stringBounder = ug.getStringBounder();

View File

@ -57,7 +57,6 @@ import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.BlocLines;
import net.sourceforge.plantuml.utils.CharInspector;
@ -102,7 +101,7 @@ public class PSystemEbnf extends TitledDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
protected TextBlock getTextBlock() {
if (expressions.size() == 0) {
final Style style = ETile.getStyleSignature().getMergedStyle(getSkinParam().getCurrentStyleBuilder());
final FontConfiguration fc = style.getFontConfiguration(getSkinParam().getIHtmlColorSet());

View File

@ -45,8 +45,8 @@ import net.sourceforge.plantuml.core.DiagramDescription;
import net.sourceforge.plantuml.core.UmlSource;
import net.sourceforge.plantuml.klimt.geom.GraphicPosition;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.version.PSystemVersion;
public class PSystemWelcome extends PlainDiagram {
@ -84,7 +84,7 @@ public class PSystemWelcome extends PlainDiagram {
return getGraphicStrings();
}
public TextBlockBackcolored getGraphicStrings() {
public TextBlock getGraphicStrings() {
if (position != null)
return GraphicStrings.createBlackOnWhite(strings, PSystemVersion.getPlantumlImage(), position);

View File

@ -105,9 +105,9 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.FontParam;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
@ -130,7 +130,6 @@ import net.sourceforge.plantuml.svek.GeneralImageBuilder;
import net.sourceforge.plantuml.svek.GraphvizCrash;
import net.sourceforge.plantuml.svek.IEntityImage;
import net.sourceforge.plantuml.svek.PackageStyle;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
/*
* Some notes:
@ -209,7 +208,7 @@ public class CucaDiagramFileMakerElk implements CucaDiagramFileMaker {
}
// The Drawing class does the real drawing
class Drawing extends AbstractTextBlock implements TextBlockBackcolored {
class Drawing extends AbstractTextBlock {
// min and max of all coord
private final MinMax minMax;
@ -273,9 +272,9 @@ public class CucaDiagramFileMakerElk implements CucaDiagramFileMaker {
final TextBlock ztitle = getTitleBlock(group);
final TextBlock zstereo = TextBlockUtils.empty(0, 0);
final ClusterPosition clusterPosition = new ClusterPosition(0, 0, elkNode.getWidth(), elkNode.getHeight());
final RectangleArea rectangleArea = new RectangleArea(0, 0, elkNode.getWidth(), elkNode.getHeight());
final ClusterDecoration decoration = new ClusterDecoration(packageStyle, group.getUSymbol(), ztitle,
zstereo, clusterPosition, stroke);
zstereo, rectangleArea, stroke);
final HColor borderColor = HColors.BLACK;
decoration.drawU(ug.apply(new UTranslate(corner)), backColor, borderColor, shadowing, roundCorner,

View File

@ -48,8 +48,8 @@ import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class PSystemListEmoji extends PlainDiagram {
// ::remove file when CORE
@ -60,7 +60,7 @@ public class PSystemListEmoji extends PlainDiagram {
protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException {
return new UDrawable() {
public void drawU(UGraphic ug) {
final TextBlockBackcolored header = GraphicStrings
final TextBlock header = GraphicStrings
.createBlackOnWhite(Arrays.asList("<b><size:16>Emoji available on Unicode Block " + text,
"(Blocks available: 26, 27, 1F3, 1F4, 1F5, 1F6, 1F9)"));
header.drawU(ug);
@ -92,7 +92,7 @@ public class PSystemListEmoji extends PlainDiagram {
sb.append("\"\"<U+003C>:" + shortcut + ":<U+003E> \"\"");
}
final TextBlockBackcolored tmp = GraphicStrings.createBlackOnWhite(Arrays.asList(sb.toString()));
final TextBlock tmp = GraphicStrings.createBlackOnWhite(Arrays.asList(sb.toString()));
tmp.drawU(ug);
ug = ug.apply(UTranslate.dy(tmp.calculateDimension(stringBounder).getHeight()));

View File

@ -45,7 +45,6 @@ import java.util.Collections;
import java.util.List;
import net.atmp.ImageBuilder;
import net.atmp.InnerStrategy;
import net.atmp.PixelImage;
import net.sourceforge.plantuml.ErrorUml;
import net.sourceforge.plantuml.FileFormat;
@ -76,7 +75,7 @@ import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockRaw;
@ -86,7 +85,6 @@ import net.sourceforge.plantuml.klimt.shape.UImage;
import net.sourceforge.plantuml.klimt.sprite.SpriteContainerEmpty;
import net.sourceforge.plantuml.security.SecurityUtils;
import net.sourceforge.plantuml.svek.GraphvizCrash;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.text.BackSlash;
import net.sourceforge.plantuml.text.StringLocated;
import net.sourceforge.plantuml.utils.LineLocation;
@ -144,7 +142,7 @@ public abstract class PSystemError extends PlainDiagram {
return sb.toString();
}
private TextBlockBackcolored getGraphicalFormatted() {
private TextBlock getGraphicalFormatted() {
final FontConfiguration fc0 = GraphicStrings.sansSerif14(HColors.BLACK).bold();
final FontConfiguration fc1 = GraphicStrings.sansSerif14(HColors.MY_GREEN).bold();
final FontConfiguration fc2 = GraphicStrings.sansSerif14(HColors.RED).bold();
@ -247,7 +245,7 @@ public abstract class PSystemError extends PlainDiagram {
@Override
protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException {
final TextBlockBackcolored result = getGraphicalFormatted();
final TextBlock result = getGraphicalFormatted();
TextBlock udrawable;
if (getSource().getTotalLineCountLessThan5()) {
@ -291,12 +289,12 @@ public abstract class PSystemError extends PlainDiagram {
return full.subList(full.size() - 1, full.size());
}
private TextBlockBackcolored getWelcome() throws IOException {
private TextBlock getWelcome() throws IOException {
return new PSystemWelcome(getSource(), GraphicPosition.BACKGROUND_CORNER_TOP_RIGHT).getGraphicStrings();
}
private TextBlock addWelcome(final TextBlockBackcolored result) throws IOException {
final TextBlockBackcolored welcome = getWelcome();
private TextBlock addWelcome(final TextBlock result) throws IOException {
final TextBlock welcome = getWelcome();
return TextBlockUtils.mergeTB(welcome, result, HorizontalAlignment.LEFT);
}
@ -353,7 +351,7 @@ public abstract class PSystemError extends PlainDiagram {
}
// ::done
private TextBlockBackcolored getMessageDedication() {
private TextBlock getMessageDedication() {
final HColorSimple backColor = (HColorSimple) HColorSet.instance().getColorOrWhite("#eae2c9");
// ::comment when CORE
@ -382,7 +380,7 @@ public abstract class PSystemError extends PlainDiagram {
}
private TextBlockBackcolored getMessageAdopt() {
private TextBlock getMessageAdopt() {
final HColor backColor = HColorSet.instance().getColorOrWhite("#eff4d2");
final Display disp = Display.create("<b>Adopt-a-Word and put your message here!", " ",
@ -398,7 +396,7 @@ public abstract class PSystemError extends PlainDiagram {
}
private TextBlockBackcolored getMessagePatreon() {
private TextBlock getMessagePatreon() {
final UImage message = new UImage(
new PixelImage(PSystemVersion.getTime01(), AffineTransformType.TYPE_BILINEAR));
final Color back = new Color(message.getImage(1).getRGB(0, 0));
@ -424,7 +422,7 @@ public abstract class PSystemError extends PlainDiagram {
imHeight = Math.max(message.getHeight(), qrcode.getHeight() * scale + 10);
}
// ::done
return new TextBlockBackcolored() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
// ::comment when CORE
@ -441,10 +439,6 @@ public abstract class PSystemError extends PlainDiagram {
// ::done
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return new XDimension2D(imWidth + 1, imHeight + 1);
}
@ -460,7 +454,7 @@ public abstract class PSystemError extends PlainDiagram {
}
private TextBlockBackcolored getMessageLiberapay() {
private TextBlock getMessageLiberapay() {
final UImage message = new UImage(
new PixelImage(PSystemVersion.getTime15(), AffineTransformType.TYPE_BILINEAR));
final Color back = new Color(message.getImage(1).getRGB(0, 0));
@ -487,7 +481,7 @@ public abstract class PSystemError extends PlainDiagram {
}
// ::done
return new TextBlockBackcolored() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
// ::comment when CORE
@ -504,10 +498,6 @@ public abstract class PSystemError extends PlainDiagram {
// ::done
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return new XDimension2D(imWidth + 1, imHeight + 1);
}

View File

@ -58,9 +58,12 @@ import net.sourceforge.plantuml.golem.TileGeometry;
import net.sourceforge.plantuml.golem.TilesField;
import net.sourceforge.plantuml.klimt.UShape;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
@ -229,4 +232,14 @@ public class FlowDiagram extends UmlDiagram implements TextBlock {
protected TextBlock getTextBlock() {
return this;
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorderNone();
}
@Override
public HColor getBackcolor() {
return null;
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -38,20 +38,17 @@ import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.core.DiagramDescription;
import net.sourceforge.plantuml.core.ImageData;
import net.sourceforge.plantuml.core.UmlSource;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class GitDiagram extends UmlDiagram {
@ -87,28 +84,17 @@ public class GitDiagram extends UmlDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawInternal(ug);
}
public MinMax getMinMax(StringBounder stringBounder) {
return null;
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return null;
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -38,7 +38,6 @@ import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.ScaleSimple;
import net.sourceforge.plantuml.TitledDiagram;
@ -47,7 +46,6 @@ import net.sourceforge.plantuml.core.ImageData;
import net.sourceforge.plantuml.core.UmlSource;
import net.sourceforge.plantuml.json.JsonArray;
import net.sourceforge.plantuml.json.JsonValue;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.drawing.hand.UGraphicHandwritten;
@ -55,13 +53,11 @@ import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.font.UFont;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.yaml.Highlighted;
public class JsonDiagram extends TitledDiagram {
@ -117,28 +113,16 @@ public class JsonDiagram extends TitledDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawInternal(ug);
}
public MinMax getMinMax(StringBounder stringBounder) {
return null;
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return TextBlockUtils.getMinMax(getTextBlock(), stringBounder, true).getDimension();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -66,11 +66,10 @@ import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleBuilder;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.yaml.Highlighted;
//See TextBlockMap
public class TextBlockJson extends AbstractTextBlock implements TextBlockBackcolored {
public class TextBlockJson extends AbstractTextBlock {
private final List<Line> lines = new ArrayList<>();

View File

@ -43,9 +43,8 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class PiecewiseAffineOnXorYBuilder extends AbstractTextBlock implements TextBlock, TextBlockBackcolored {
public class PiecewiseAffineOnXorYBuilder extends AbstractTextBlock {
private final TextBlock textBlock;
private final CompressionMode mode;

View File

@ -47,6 +47,7 @@ import net.sourceforge.plantuml.klimt.UPath;
import net.sourceforge.plantuml.klimt.UShape;
import net.sourceforge.plantuml.klimt.color.ColorMapper;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.legacy.AtomText;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.MinMaxMutable;
@ -142,6 +143,10 @@ public abstract class AbstractUGraphic<O> extends AbstractCommonUGraphic {
}
private void updateMinMax(UShape shape) {
if (matchesProperty("SPECIALTXT") && shape instanceof AtomText) {
return;
}
final double x = getTranslate().getDx();
final double y = getTranslate().getDy();
if (shape instanceof UText) {
@ -179,8 +184,7 @@ public abstract class AbstractUGraphic<O> extends AbstractCommonUGraphic {
} else if (shape instanceof UPixel) {
addPoint(x, y);
} else {
System.err.println("ERROR ignoring " + shape.getClass().getName());
// throw new UnsupportedOperationException(shape.getClass().getName());
throw new UnsupportedOperationException(shape.getClass().getName());
}
}

View File

@ -107,9 +107,9 @@ public class UGraphicTikz extends AbstractUGraphic<TikzGraphics> implements Clip
@Override
public boolean matchesProperty(String propertyName) {
if ("SPECIALTXT".equalsIgnoreCase(propertyName)) {
if ("SPECIALTXT".equalsIgnoreCase(propertyName))
return true;
}
return false;
}

View File

@ -33,13 +33,13 @@
*
*
*/
package net.sourceforge.plantuml.svek;
package net.sourceforge.plantuml.klimt.geom;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.font.StringBounder;
public interface TextBlockBackcolored extends TextBlock {
public interface MagneticBorder {
HColor getBackcolor();
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position);
}
}

View File

@ -0,0 +1,48 @@
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.klimt.geom;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.font.StringBounder;
public class MagneticBorderNone implements MagneticBorder {
@Override
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position) {
return new UTranslate();
}
}

View File

@ -37,26 +37,26 @@ package net.sourceforge.plantuml.klimt.geom;
import net.sourceforge.plantuml.klimt.UTranslate;
public class ClusterPosition {
public class RectangleArea {
private final double minX;
private final double minY;
private final double maxX;
private final double maxY;
public ClusterPosition(double minX, double minY, double maxX, double maxY) {
public RectangleArea(double minX, double minY, double maxX, double maxY) {
this.minX = minX;
this.minY = minY;
this.maxX = maxX;
this.maxY = maxY;
}
public ClusterPosition(XPoint2D min, XPoint2D max) {
public RectangleArea(XPoint2D min, XPoint2D max) {
this(min.x, min.y, max.x, max.y);
}
public ClusterPosition move(double deltaX, double deltaY) {
return new ClusterPosition(minX + deltaX, minY + deltaY, maxX + deltaX, maxY + deltaY);
public RectangleArea move(double deltaX, double deltaY) {
return new RectangleArea(minX + deltaX, minY + deltaY, maxX + deltaX, maxY + deltaY);
}
public double getWidth() {
@ -71,15 +71,15 @@ public class ClusterPosition {
return x >= minX && x < maxX && y >= minY && y < maxY;
}
public ClusterPosition merge(ClusterPosition other) {
return new ClusterPosition(Math.min(this.minX, other.minX), Math.min(this.minY, other.minY),
public RectangleArea merge(RectangleArea other) {
return new RectangleArea(Math.min(this.minX, other.minX), Math.min(this.minY, other.minY),
Math.max(this.maxX, other.maxX), Math.max(this.maxY, other.maxY));
}
public ClusterPosition merge(XPoint2D point) {
public RectangleArea merge(XPoint2D point) {
final double x = point.getX();
final double y = point.getY();
return new ClusterPosition(Math.min(this.minX, x), Math.min(this.minY, y), Math.max(this.maxX, x),
return new RectangleArea(Math.min(this.minX, x), Math.min(this.minY, y), Math.max(this.maxX, x),
Math.max(this.maxY, y));
}
@ -135,58 +135,58 @@ public class ClusterPosition {
return new XPoint2D((minX + maxX) / 2, (minY + maxY) / 2);
}
public ClusterPosition withMinX(double d) {
return new ClusterPosition(d, minY, maxX, maxY);
public RectangleArea withMinX(double d) {
return new RectangleArea(d, minY, maxX, maxY);
}
public ClusterPosition withMaxX(double d) {
return new ClusterPosition(minX, minY, d, maxY);
public RectangleArea withMaxX(double d) {
return new RectangleArea(minX, minY, d, maxY);
}
public ClusterPosition addMaxX(double d) {
return new ClusterPosition(minX, minY, maxX + d, maxY);
public RectangleArea addMaxX(double d) {
return new RectangleArea(minX, minY, maxX + d, maxY);
}
public ClusterPosition addMaxY(double d) {
return new ClusterPosition(minX, minY, maxX, maxY + d);
public RectangleArea addMaxY(double d) {
return new RectangleArea(minX, minY, maxX, maxY + d);
}
public ClusterPosition addMinX(double d) {
return new ClusterPosition(minX + d, minY, maxX, maxY);
public RectangleArea addMinX(double d) {
return new RectangleArea(minX + d, minY, maxX, maxY);
}
public ClusterPosition addMinY(double d) {
return new ClusterPosition(minX, minY + d, maxX, maxY);
public RectangleArea addMinY(double d) {
return new RectangleArea(minX, minY + d, maxX, maxY);
}
public ClusterPosition withMinY(double d) {
return new ClusterPosition(minX, d, maxX, maxY);
public RectangleArea withMinY(double d) {
return new RectangleArea(minX, d, maxX, maxY);
}
public ClusterPosition withMaxY(double d) {
return new ClusterPosition(minX, minY, maxX, d);
public RectangleArea withMaxY(double d) {
return new RectangleArea(minX, minY, maxX, d);
}
public XPoint2D getProjectionOnFrontier(XPoint2D pt) {
final double x = pt.getX();
final double y = pt.getY();
if (x > maxX && y >= minY && y <= maxY)
return new XPoint2D(maxX - 1, y);
// public XPoint2D getProjectionOnFrontier(XPoint2D pt) {
// final double x = pt.getX();
// final double y = pt.getY();
// if (x > maxX && y >= minY && y <= maxY)
// return new XPoint2D(maxX - 1, y);
//
// if (x < minX && y >= minY && y <= maxY)
// return new XPoint2D(minX + 1, y);
//
// if (y > maxY && x >= minX && x <= maxX)
// return new XPoint2D(x, maxY - 1);
//
// if (y < minY && x >= minX && x <= maxX)
// return new XPoint2D(x, minY + 1);
//
// return new XPoint2D(x, y);
// }
if (x < minX && y >= minY && y <= maxY)
return new XPoint2D(minX + 1, y);
if (y > maxY && x >= minX && x <= maxX)
return new XPoint2D(x, maxY - 1);
if (y < minY && x >= minX && x <= maxX)
return new XPoint2D(x, minY + 1);
return new XPoint2D(x, y);
}
public ClusterPosition delta(double m1, double m2) {
return new ClusterPosition(minX, minY, maxX + m1, maxY + m2);
public RectangleArea delta(double m1, double m2) {
return new RectangleArea(minX, minY, maxX + m1, maxY + m2);
}
public XDimension2D getDimension() {
@ -197,12 +197,12 @@ public class ClusterPosition {
return new UTranslate(getMinX(), getMinY());
}
public boolean isPointJustUpper(XPoint2D pt) {
if (pt.getX() >= minX && pt.getX() <= maxX && pt.getY() <= minY) {
return true;
}
return false;
}
// public boolean isPointJustUpper(XPoint2D pt) {
// if (pt.getX() >= minX && pt.getX() <= maxX && pt.getY() <= minY) {
// return true;
// }
// return false;
// }
public Side getClosestSide(XPoint2D pt) {
final double distNorth = Math.abs(minY - pt.getY());

View File

@ -36,7 +36,10 @@
package net.sourceforge.plantuml.klimt.shape;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -51,4 +54,15 @@ public abstract class AbstractTextBlock implements TextBlock {
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException(getClass().toString());
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorderNone();
}
@Override
public HColor getBackcolor() {
return null;
}
}

View File

@ -49,8 +49,9 @@ import java.util.Set;
import net.sourceforge.plantuml.klimt.UPath;
import net.sourceforge.plantuml.klimt.UShape;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.geom.BezierUtils;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.EnsureVisible;
import net.sourceforge.plantuml.klimt.geom.MinFinder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
@ -193,6 +194,14 @@ public class DotPath implements UShape, Moveable {
beziers.get(0).ctrly1 = y;
}
public void moveStartPoint(UTranslate move) {
moveStartPoint(move.getDx(), move.getDy());
}
public void moveEndPoint(UTranslate move) {
moveEndPoint(move.getDx(), move.getDy());
}
public void moveStartPoint(double dx, double dy) {
beziers.get(0).x1 += dx;
beziers.get(0).y1 += dy;
@ -400,7 +409,7 @@ public class DotPath implements UShape, Moveable {
return Collections.unmodifiableList(beziers);
}
public DotPath simulateCompound(ClusterPosition head, ClusterPosition tail) {
public DotPath simulateCompound(RectangleArea head, RectangleArea tail) {
if (head == null && tail == null)
return this;

View File

@ -57,7 +57,6 @@ import net.sourceforge.plantuml.klimt.sprite.SpriteContainerEmpty;
import net.sourceforge.plantuml.svek.IEntityImage;
import net.sourceforge.plantuml.svek.Margins;
import net.sourceforge.plantuml.svek.ShapeType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class GraphicStrings extends AbstractTextBlock implements IEntityImage {
@ -97,21 +96,20 @@ public class GraphicStrings extends AbstractTextBlock implements IEntityImage {
return HColors.BLACK;
}
public static TextBlockBackcolored createGreenOnBlackMonospaced(List<String> strings) {
public static TextBlock createGreenOnBlackMonospaced(List<String> strings) {
return new GraphicStrings(strings, monospaced14(HColors.GREEN), HColors.BLACK, null, null,
CreoleMode.SIMPLE_LINE);
}
public static TextBlockBackcolored createBlackOnWhite(List<String> strings) {
public static TextBlock createBlackOnWhite(List<String> strings) {
return new GraphicStrings(strings, sansSerif12(HColors.BLACK), HColors.WHITE, null, null, CreoleMode.FULL);
}
public static TextBlockBackcolored createBlackOnWhiteMonospaced(List<String> strings) {
public static TextBlock createBlackOnWhiteMonospaced(List<String> strings) {
return new GraphicStrings(strings, monospaced14(HColors.BLACK), HColors.WHITE, null, null, CreoleMode.FULL);
}
public static TextBlockBackcolored createBlackOnWhite(List<String> strings, BufferedImage image,
GraphicPosition position) {
public static TextBlock createBlackOnWhite(List<String> strings, BufferedImage image, GraphicPosition position) {
return new GraphicStrings(strings, sansSerif12(HColors.BLACK), HColors.WHITE, image, position,
CreoleMode.FULL_BUT_UNDERSCORE);
}

View File

@ -37,7 +37,9 @@ package net.sourceforge.plantuml.klimt.shape;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.UShape;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -50,4 +52,8 @@ public interface TextBlock extends UDrawable, UShape {
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy);
public MagneticBorder getMagneticBorder();
public HColor getBackcolor();
}

View File

@ -41,9 +41,8 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class TextBlockRecentred extends AbstractTextBlock implements TextBlockBackcolored {
public class TextBlockRecentred extends AbstractTextBlock {
private final TextBlock textBlock;
@ -80,10 +79,7 @@ public class TextBlockRecentred extends AbstractTextBlock implements TextBlockBa
}
public HColor getBackcolor() {
if (textBlock instanceof TextBlockBackcolored) {
return ((TextBlockBackcolored) textBlock).getBackcolor();
}
return null;
return textBlock.getBackcolor();
}
}

View File

@ -38,14 +38,17 @@ package net.sourceforge.plantuml.klimt.shape;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.LineBreakStrategy;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.CreoleMode;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.style.ISkinSimple;
@ -83,4 +86,20 @@ public class TextBlockTitle implements TextBlock {
return null;
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorder() {
@Override
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position) {
return textBlock.getMagneticBorder().getForceAt(stringBounder, position.move(-outMargin, 0));
}
};
}
@Override
public HColor getBackcolor() {
return textBlock.getBackcolor();
}
}

View File

@ -42,6 +42,7 @@ import net.sourceforge.plantuml.klimt.drawing.LimitFinder;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.Positionable;
import net.sourceforge.plantuml.klimt.geom.PositionableImpl;
@ -50,7 +51,6 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class TextBlockUtils {
@ -176,11 +176,19 @@ public class TextBlockUtils {
return null;
}
public MagneticBorder getMagneticBorder() {
return bloc.getMagneticBorder();
}
public HColor getBackcolor() {
return bloc.getBackcolor();
}
};
}
public static TextBlockBackcolored addBackcolor(final TextBlock text, final HColor backColor) {
return new TextBlockBackcolored() {
public static TextBlock addBackcolor(final TextBlock text, final HColor backColor) {
return new TextBlock() {
public void drawU(UGraphic ug) {
text.drawU(ug);
}
@ -200,11 +208,15 @@ public class TextBlockUtils {
public HColor getBackcolor() {
return backColor;
}
public MagneticBorder getMagneticBorder() {
return text.getMagneticBorder();
}
};
}
public static TextBlock fromUImage(final UImage image) {
return new TextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
ug.draw(image);
@ -218,10 +230,6 @@ public class TextBlockUtils {
return MinMax.fromMax(image.getWidth(), image.getHeight());
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
};
}

View File

@ -47,7 +47,6 @@ import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.svek.Ports;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.svek.WithPorts;
public class TextBlockVertical2 extends AbstractTextBlock implements TextBlock, WithPorts {
@ -100,13 +99,12 @@ public class TextBlockVertical2 extends AbstractTextBlock implements TextBlock,
for (TextBlock block : blocks) {
final XDimension2D dimb = block.calculateDimension(ug.getStringBounder());
if (block instanceof TextBlockBackcolored) {
final HColor back = ((TextBlockBackcolored) block).getBackcolor();
if (back != null && back.isTransparent() == false)
ug.apply(UTranslate.dy(y)).apply(back).apply(back.bg())
.draw(new URectangle(dimtotal.getWidth(), dimb.getHeight()));
}
final HColor back = block.getBackcolor();
if (back != null && back.isTransparent() == false)
ug.apply(UTranslate.dy(y)).apply(back).apply(back.bg())
.draw(new URectangle(dimtotal.getWidth(), dimb.getHeight()));
if (horizontalAlignment == HorizontalAlignment.LEFT) {
block.drawU(ug.apply(UTranslate.dy(y)));
} else if (horizontalAlignment == HorizontalAlignment.CENTER) {

View File

@ -36,8 +36,10 @@
package net.sourceforge.plantuml.klimt.shape;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -49,9 +51,9 @@ public class TextBlockWithUrl implements TextBlock {
private final Url url;
public static TextBlock withUrl(TextBlock block, Url url) {
if (url == null) {
if (url == null)
return block;
}
return new TextBlockWithUrl(block, url);
}
@ -79,4 +81,14 @@ public class TextBlockWithUrl implements TextBlock {
return block.getInnerPosition(member, stringBounder, strategy);
}
@Override
public MagneticBorder getMagneticBorder() {
return block.getMagneticBorder();
}
@Override
public HColor getBackcolor() {
return block.getBackcolor();
}
}

View File

@ -54,10 +54,10 @@ import net.sourceforge.plantuml.klimt.AffineTransformType;
import net.sourceforge.plantuml.klimt.MutableImage;
import net.sourceforge.plantuml.klimt.drawing.eps.EpsGraphics;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UImageSvg;
import net.sourceforge.plantuml.log.Logme;
import net.sourceforge.plantuml.security.SImageIO;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.Log;
public class ScientificEquationSafe {
@ -133,7 +133,7 @@ public class ScientificEquationSafe {
Logme.error(e);
}
private TextBlockBackcolored getRollback() {
private TextBlock getRollback() {
return GraphicStrings.createBlackOnWhiteMonospaced(Arrays.asList(formula));
}

View File

@ -40,7 +40,6 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -52,13 +51,12 @@ import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.Rankdir;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.skin.SkinParam;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.Direction;
public class MindMapDiagram extends UmlDiagram {
@ -89,8 +87,8 @@ public class MindMapDiagram extends UmlDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
for (MindMap mindmap : mindmaps) {
@ -100,10 +98,6 @@ public class MindMapDiagram extends UmlDiagram {
}
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
double width = 0;
double height = 0;
@ -115,13 +109,6 @@ public class MindMapDiagram extends UmlDiagram {
return new XDimension2D(width, height);
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -44,7 +44,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -58,9 +57,8 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
@ -80,7 +78,6 @@ import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleBuilder;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class NwDiagram extends UmlDiagram {
@ -263,28 +260,16 @@ public class NwDiagram extends UmlDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawMe(ug);
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return getTotalDimension(stringBounder);
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -36,8 +36,11 @@ package net.sourceforge.plantuml.nwdiag.next;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -126,4 +129,14 @@ public class GridTextBlockSimple implements TextBlock {
return skinParam;
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorderNone();
}
@Override
public HColor getBackcolor() {
return null;
}
}

View File

@ -51,7 +51,6 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.TitledDiagram;
@ -68,9 +67,8 @@ import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.URectangle;
@ -115,7 +113,6 @@ import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.GraphvizCrash;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprite {
@ -211,7 +208,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
return getTextBlock(stringBounder);
}
private TextBlockBackcolored getTextBlock(StringBounder stringBounder) {
private TextBlock getTextBlock(StringBounder stringBounder) {
if (printStart == null) {
initMinMax();
} else {
@ -220,7 +217,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
}
final TimeHeader timeHeader = getTimeHeader();
initTaskAndResourceDraws(timeHeader.getTimeScale(), timeHeader.getFullHeaderHeight(), stringBounder);
return new TextBlockBackcolored() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
try {
@ -279,10 +276,6 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
return width;
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return new XDimension2D(getTitlesColumnWidth(stringBounder) + getBarsColumnWidth(timeHeader),
getTotalHeight(timeHeader));
@ -294,13 +287,6 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
return xmax - xmin;
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -71,7 +71,6 @@ import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.BlocLines;
import net.sourceforge.plantuml.utils.CharInspector;
@ -127,7 +126,7 @@ public class PSystemRegex extends TitledDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
protected TextBlock getTextBlock() {
// while (stack.size() > 1)
// concatenation();
final ETile peekFirst = stack.peekFirst();

View File

@ -42,7 +42,6 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.ScaleSimple;
@ -61,9 +60,8 @@ import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.sprite.Sprite;
import net.sourceforge.plantuml.log.Logme;
@ -89,7 +87,6 @@ import net.sourceforge.plantuml.salt.factory.ElementFactoryTextField;
import net.sourceforge.plantuml.salt.factory.ElementFactoryTree;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.BlocLines;
import net.sourceforge.plantuml.utils.Log;
@ -137,8 +134,8 @@ public class PSystemSalt extends TitledDiagram implements WithSprite {
return getTextBlock(salt, size);
}
private TextBlockBackcolored getTextBlock(final Element salt, final XDimension2D size) {
return new TextBlockBackcolored() {
private TextBlock getTextBlock(final Element salt, final XDimension2D size) {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
ug = ug.apply(getBlack());
@ -150,14 +147,6 @@ public class PSystemSalt extends TitledDiagram implements WithSprite {
return size;
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public HColor getBackcolor() {
return getSkinParam().getBackgroundColor();
}

View File

@ -99,7 +99,6 @@ import net.sourceforge.plantuml.svek.GeneralImageBuilder;
import net.sourceforge.plantuml.svek.GraphvizCrash;
import net.sourceforge.plantuml.svek.IEntityImage;
import net.sourceforge.plantuml.svek.SvekNode;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import smetana.core.CString;
import smetana.core.Globals;
import smetana.core.JUtils;
@ -148,7 +147,7 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
return result;
}
class Drawing extends AbstractTextBlock implements TextBlockBackcolored {
class Drawing extends AbstractTextBlock {
private final YMirror ymirror;
private final MinMaxMutable minMax;

View File

@ -45,16 +45,14 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.klimt.UClip;
import net.sourceforge.plantuml.klimt.UStroke;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.drawing.txt.UGraphicTxt;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.sequencediagram.Doll;
import net.sourceforge.plantuml.sequencediagram.Event;
@ -245,7 +243,7 @@ public class DrawableSet {
}
TextBlock asTextBlock(final double delta, final double width, final Page page, final boolean showTail) {
return new TextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawU22(ug, delta, width, page, showTail);
@ -256,14 +254,6 @@ public class DrawableSet {
return new XDimension2D(width, height);
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
throw new UnsupportedOperationException();
}
};
}

View File

@ -40,6 +40,8 @@ import java.util.Objects;
import net.sourceforge.plantuml.abel.Entity;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.ISkinParam;

View File

@ -67,8 +67,8 @@ import net.sourceforge.plantuml.klimt.color.HColorSet;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.Moveable;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
@ -114,7 +114,7 @@ public class Cluster implements Moveable {
private XPoint2D xyNoteTop;
private XPoint2D xyNoteBottom;
private ClusterPosition clusterPosition;
private RectangleArea rectangleArea;
public void moveSvek(double deltaX, double deltaY) {
if (this.xyNoteTop != null)
@ -123,8 +123,8 @@ public class Cluster implements Moveable {
this.xyNoteBottom = this.xyNoteBottom.move(deltaX, deltaY);
if (this.xyTitle != null)
this.xyTitle = this.xyTitle.move(deltaX, deltaY);
if (this.clusterPosition != null)
this.clusterPosition = this.clusterPosition.move(deltaX, deltaY);
if (this.rectangleArea != null)
this.rectangleArea = this.rectangleArea.move(deltaX, deltaY);
}
@ -257,8 +257,8 @@ public class Cluster implements Moveable {
return clusterHeader.getTitleAndAttributeHeight();
}
public ClusterPosition getClusterPosition() {
return clusterPosition;
public RectangleArea getRectangleArea() {
return rectangleArea;
}
public void setTitlePosition(XPoint2D pos) {
@ -339,7 +339,7 @@ public class Cluster implements Moveable {
group.getUSymbol(), skinParam.getCurrentStyleBuilder(), skinParam.getIHtmlColorSet());
final ClusterDecoration decoration = new ClusterDecoration(packageStyle, group.getUSymbol(),
clusterHeader.getTitle(), clusterHeader.getStereo(), clusterPosition, stroke);
clusterHeader.getTitle(), clusterHeader.getStereo(), rectangleArea, stroke);
decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
skinParam.getStereotypeAlignment(), diagonalCorner);
@ -371,43 +371,44 @@ public class Cluster implements Moveable {
}
void manageEntryExitPoint(StringBounder stringBounder) {
final Collection<ClusterPosition> insides = new ArrayList<>();
final Collection<RectangleArea> insides = new ArrayList<>();
final List<XPoint2D> points = new ArrayList<>();
for (SvekNode sh : nodes)
if (isNormalPosition(sh))
insides.add(sh.getClusterPosition());
insides.add(sh.getRectangleArea());
else
points.add(sh.getClusterPosition().getPointCenter());
points.add(sh.getRectangleArea().getPointCenter());
for (Cluster in : children)
insides.add(in.getClusterPosition());
insides.add(in.getRectangleArea());
final FrontierCalculator frontierCalculator = new FrontierCalculator(getClusterPosition(), insides, points);
final FrontierCalculator frontierCalculator = new FrontierCalculator(getRectangleArea(), insides, points,
skinParam.getRankdir());
if (getTitleAndAttributeWidth() > 0 && getTitleAndAttributeHeight() > 0)
frontierCalculator.ensureMinWidth(getTitleAndAttributeWidth() + 10);
this.clusterPosition = frontierCalculator.getSuggestedPosition();
this.rectangleArea = frontierCalculator.getSuggestedPosition();
final double widthTitle = clusterHeader.getTitle().calculateDimension(stringBounder).getWidth();
final double minX = clusterPosition.getMinX();
final double minY = clusterPosition.getMinY();
this.xyTitle = new XPoint2D(minX + ((clusterPosition.getWidth() - widthTitle) / 2), minY + IEntityImage.MARGIN);
final double minX = rectangleArea.getMinX();
final double minY = rectangleArea.getMinY();
this.xyTitle = new XPoint2D(minX + ((rectangleArea.getWidth() - widthTitle) / 2), minY + IEntityImage.MARGIN);
}
private void drawSwinLinesState(UGraphic ug, HColor borderColor) {
clusterHeader.getTitle().drawU(ug.apply(UTranslate.dx(xyTitle.x)));
final ULine line = ULine.vline(clusterPosition.getHeight());
final ULine line = ULine.vline(rectangleArea.getHeight());
ug = ug.apply(borderColor);
ug.apply(UTranslate.dx(clusterPosition.getMinX())).draw(line);
ug.apply(UTranslate.dx(clusterPosition.getMaxX())).draw(line);
ug.apply(UTranslate.dx(rectangleArea.getMinX())).draw(line);
ug.apply(UTranslate.dx(rectangleArea.getMaxX())).draw(line);
}
// GroupPngMakerState
private void drawUState(UGraphic ug, UmlDiagramType umlDiagramType, double rounded, double shadowing) {
final XDimension2D total = clusterPosition.getDimension();
final XDimension2D total = rectangleArea.getDimension();
final double suppY = clusterHeader.getTitle().calculateDimension(ug.getStringBounder()).getHeight()
+ IEntityImage.MARGIN;
@ -438,23 +439,23 @@ public class Cluster implements Moveable {
final RoundedContainer r = new RoundedContainer(total, suppY,
attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, backColor, imgBackcolor,
stroke, rounded, shadowing);
r.drawU(ug.apply(clusterPosition.getPosition()));
r.drawU(ug.apply(rectangleArea.getPosition()));
clusterHeader.getTitle().drawU(ug.apply(new UTranslate(xyTitle)));
if (attributeHeight > 0)
attribute.drawU(ug.apply(new UTranslate(clusterPosition.getMinX() + IEntityImage.MARGIN,
clusterPosition.getMinY() + suppY + IEntityImage.MARGIN / 2.0)));
attribute.drawU(ug.apply(new UTranslate(rectangleArea.getMinX() + IEntityImage.MARGIN,
rectangleArea.getMinY() + suppY + IEntityImage.MARGIN / 2.0)));
final Stereotype stereotype = group.getStereotype();
final boolean withSymbol = stereotype != null && stereotype.isWithOOSymbol();
if (withSymbol)
EntityImageState.drawSymbol(ug.apply(borderColor), clusterPosition.getMaxX(), clusterPosition.getMaxY());
EntityImageState.drawSymbol(ug.apply(borderColor), rectangleArea.getMaxX(), rectangleArea.getMaxY());
}
public void setPosition(XPoint2D min, XPoint2D max) {
this.clusterPosition = new ClusterPosition(min, max);
this.rectangleArea = new RectangleArea(min, max);
}
// ::comment when CORE
@ -641,18 +642,18 @@ public class Cluster implements Moveable {
return backColor;
}
double checkFolderPosition(XPoint2D pt, StringBounder stringBounder) {
if (getClusterPosition().isPointJustUpper(pt)) {
final XDimension2D dimTitle = clusterHeader.getTitle().calculateDimension(stringBounder);
if (pt.getX() < getClusterPosition().getMinX() + dimTitle.getWidth())
return 0;
return getClusterPosition().getMinY() - pt.getY() + dimTitle.getHeight();
}
return 0;
}
// double checkFolderPosition(XPoint2D pt, StringBounder stringBounder) {
// if (getClusterPosition().isPointJustUpper(pt)) {
//
// final XDimension2D dimTitle = clusterHeader.getTitle().calculateDimension(stringBounder);
//
// if (pt.getX() < getClusterPosition().getMinX() + dimTitle.getWidth())
// return 0;
//
// return getClusterPosition().getMinY() - pt.getY() + dimTitle.getHeight();
// }
// return 0;
// }
public final int getColorNoteTop() {
return colorNoteTop;

View File

@ -41,7 +41,7 @@ import net.sourceforge.plantuml.klimt.Fashion;
import net.sourceforge.plantuml.klimt.UStroke;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
@ -52,14 +52,14 @@ public class ClusterDecoration {
final private TextBlock title;
final private TextBlock stereo;
final private ClusterPosition clusterPosition;
final private RectangleArea rectangleArea;
public ClusterDecoration(PackageStyle style, USymbol symbol, TextBlock title, TextBlock stereo,
ClusterPosition clusterPosition, UStroke stroke) {
RectangleArea rectangleArea, UStroke stroke) {
this.symbol = guess(symbol, style);
this.stereo = stereo;
this.title = title;
this.clusterPosition = clusterPosition;
this.rectangleArea = rectangleArea;
this.defaultStroke = stroke;
}
@ -78,8 +78,8 @@ public class ClusterDecoration {
final Fashion symbolContext = biColor.withShadow(shadowing).withStroke(defaultStroke).withCorner(roundCorner,
diagonalCorner);
symbol.asBig(title, titleAlignment, stereo, clusterPosition.getWidth(), clusterPosition.getHeight(),
symbolContext, stereoAlignment).drawU(ug.apply(clusterPosition.getPosition()));
symbol.asBig(title, titleAlignment, stereo, rectangleArea.getWidth(), rectangleArea.getHeight(),
symbolContext, stereoAlignment).drawU(ug.apply(rectangleArea.getPosition()));
}
}

View File

@ -51,6 +51,7 @@ import net.sourceforge.plantuml.dot.CucaDiagramSimplifierState;
import net.sourceforge.plantuml.dot.DotData;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.log.Logme;
import net.sourceforge.plantuml.skin.UmlDiagramType;
@ -101,7 +102,7 @@ public final class CucaDiagramFileMakerSvek implements CucaDiagramFileMaker {
if (fileFormatOption.isDebugSvek() && os instanceof NamedOutputStream)
basefile = ((NamedOutputStream) os).getBasefile();
TextBlockBackcolored result = svek2.buildImage(basefile, diagram.getDotStringSkek());
TextBlock result = svek2.buildImage(basefile, diagram.getDotStringSkek());
if (result instanceof GraphvizCrash) {
svek2 = createDotDataImageBuilder(DotMode.NO_LEFT_RIGHT_AND_XLABEL, stringBounder);
result = svek2.buildImage(basefile, diagram.getDotStringSkek());

View File

@ -48,7 +48,7 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
public class DecorateEntityImage extends AbstractTextBlock implements TextBlockBackcolored {
public class DecorateEntityImage extends AbstractTextBlock {
private final TextBlock original;
private final HorizontalAlignment horizontal1;
@ -134,10 +134,7 @@ public class DecorateEntityImage extends AbstractTextBlock implements TextBlockB
}
public HColor getBackcolor() {
if (original instanceof TextBlockBackcolored)
return ((TextBlockBackcolored) original).getBackcolor();
throw new UnsupportedOperationException();
return original.getBackcolor();
}
public XDimension2D calculateDimension(StringBounder stringBounder) {

View File

@ -42,7 +42,7 @@ import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
public class DecorateEntityImage3 extends AbstractTextBlock implements TextBlockBackcolored {
public class DecorateEntityImage3 extends AbstractTextBlock {
private final TextBlock original;
private final HColor color;

View File

@ -448,9 +448,6 @@ public class DotStringFactory implements Moveable {
for (SvekLine line : bibliotekon.allLines())
line.manageCollision(bibliotekon.allNodes());
// corner1.manage(0, 0);
// return new ClusterPosition(corner1.getMinX(), corner1.getMinY(), fullWidth, fullHeight);
// // return new ClusterPosition(0, 0, fullWidth, fullHeight);
}
private int getClusterIndex(final String svg, int colorInt) {

View File

@ -40,8 +40,10 @@ import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.UEmpty;
@ -87,6 +89,16 @@ public class EntityImageDegenerated implements IEntityImage {
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorder() {
@Override
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position) {
return orig.getMagneticBorder().getForceAt(stringBounder, position.move(delta, delta));
}
};
}
public ShapeType getShapeType() {
return orig.getShapeType();
}

View File

@ -38,19 +38,20 @@ package net.sourceforge.plantuml.svek;
import java.util.Collection;
import net.sourceforge.plantuml.abel.EntityPosition;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.Rankdir;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
public class FrontierCalculator {
private static final double DELTA = 3 * EntityPosition.RADIUS;
private ClusterPosition core;
private final ClusterPosition initial;
private RectangleArea core;
private final RectangleArea initial;
public FrontierCalculator(final ClusterPosition initial, Collection<ClusterPosition> insides,
Collection<XPoint2D> points) {
public FrontierCalculator(RectangleArea initial, Collection<RectangleArea> insides, Collection<XPoint2D> points,
Rankdir rankdir) {
this.initial = initial;
for (ClusterPosition in : insides)
for (RectangleArea in : insides)
if (core == null)
core = in;
else
@ -58,7 +59,7 @@ public class FrontierCalculator {
if (core == null) {
final XPoint2D center = initial.getPointCenter();
core = new ClusterPosition(center.getX() - 1, center.getY() - 1, center.getX() + 1, center.getY() + 1);
core = new RectangleArea(center.getX() - 1, center.getY() - 1, center.getX() + 1, center.getY() + 1);
}
for (XPoint2D p : points)
core = core.merge(p);
@ -116,11 +117,20 @@ public class FrontierCalculator {
}
}
for (XPoint2D p : points) {
if (p.getY() == core.getMinY() && (p.getX() == core.getMinX() || p.getX() == core.getMaxX()))
pushMinY = false;
if (rankdir == Rankdir.LEFT_TO_RIGHT) {
if (p.getX() == core.getMinX() && (p.getY() == core.getMinY() || p.getY() == core.getMaxY()))
pushMinX = false;
if (p.getY() == core.getMaxY() && (p.getX() == core.getMinX() || p.getX() == core.getMaxX()))
pushMaxY = false;
if (p.getX() == core.getMaxX() && (p.getY() == core.getMinY() || p.getY() == core.getMaxY()))
pushMaxX = false;
} else {
if (p.getY() == core.getMinY() && (p.getX() == core.getMinX() || p.getX() == core.getMaxX()))
pushMinY = false;
if (p.getY() == core.getMaxY() && (p.getX() == core.getMinX() || p.getX() == core.getMaxX()))
pushMaxY = false;
}
}
if (pushMaxX)
@ -137,7 +147,7 @@ public class FrontierCalculator {
}
public ClusterPosition getSuggestedPosition() {
public RectangleArea getSuggestedPosition() {
return core;
}

View File

@ -74,6 +74,8 @@ import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
@ -372,6 +374,11 @@ public final class GeneralImageBuilder {
return 0;
}
@Override
public MagneticBorder getMagneticBorder() {
return new MagneticBorderNone();
}
}
// Duplicate SvekResult / GeneralImageBuilder

View File

@ -37,8 +37,10 @@ package net.sourceforge.plantuml.svek;
import net.sourceforge.plantuml.abel.Hideable;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
public interface IEntityImage extends Hideable, TextBlockBackcolored {
public interface IEntityImage extends Hideable, TextBlock {
public static final int CORNER = 25;
public static final int MARGIN = 5;
@ -50,4 +52,6 @@ public interface IEntityImage extends Hideable, TextBlockBackcolored {
public double getOverscanX(StringBounder stringBounder);
public MagneticBorder getMagneticBorder();
}

View File

@ -56,7 +56,6 @@ import net.sourceforge.plantuml.decoration.LinkDecor;
import net.sourceforge.plantuml.decoration.LinkMiddleDecor;
import net.sourceforge.plantuml.decoration.LinkType;
import net.sourceforge.plantuml.decoration.Rainbow;
import net.sourceforge.plantuml.decoration.symbol.USymbolFolder;
import net.sourceforge.plantuml.descdiagram.command.StringWithArrow;
import net.sourceforge.plantuml.dot.DotSplines;
import net.sourceforge.plantuml.dot.GraphvizVersion;
@ -74,6 +73,7 @@ import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.BezierUtils;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.Moveable;
import net.sourceforge.plantuml.klimt.geom.PointAndAngle;
import net.sourceforge.plantuml.klimt.geom.Positionable;
@ -139,8 +139,8 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
private Positionable endHeadLabelXY;
private Positionable labelXY;
private UDrawable extremity2;
private UDrawable extremity1;
private UDrawable extremity2;
private double dx;
private double dy;
@ -490,7 +490,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
return endUid.getPrefix();
}
private UDrawable getExtremity(LinkDecor decor, PointListIterator pointListIterator, final XPoint2D center,
private UDrawable getExtremity(final XPoint2D center, LinkDecor decor, PointListIterator pointListIterator,
double angle, Cluster cluster, SvekNode nodeContact) {
final ExtremityFactory extremityFactory = decor.getExtremityFactory(backgroundColor);
@ -515,7 +515,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
final XPoint2D p2 = points.get(2);
Side side = null;
if (nodeContact != null)
side = nodeContact.getClusterPosition().getClosestSide(p1);
side = nodeContact.getRectangleArea().getClosestSide(p1);
return extremityFactory.createUDrawable(p0, p1, p2, side);
} else if (decor == LinkDecor.NONE) {
@ -570,23 +570,23 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
// if (ltail != null)
// System.err.println("Line::solveLine ltail=" + ltail.getClusterPosition());
}
dotPath = dotPath.simulateCompound(lhead == null ? null : lhead.getClusterPosition(),
ltail == null ? null : ltail.getClusterPosition());
dotPath = dotPath.simulateCompound(lhead == null ? null : lhead.getRectangleArea(),
ltail == null ? null : ltail.getRectangleArea());
final SvgResult lineSvg = fullSvg.substring(end);
PointListIterator pointListIterator = lineSvg.getPointsWithThisColor(lineColor);
final LinkType linkType = link.getType();
this.extremity1 = getExtremity(linkType.getDecor2(), pointListIterator, dotPath.getStartPoint(),
dotPath.getStartAngle() + Math.PI, ltail, bibliotekon.getNode(link.getEntity1()));
this.extremity2 = getExtremity(linkType.getDecor1(), pointListIterator, dotPath.getEndPoint(),
dotPath.getEndAngle(), lhead, bibliotekon.getNode(link.getEntity2()));
this.extremity1 = getExtremity(dotPath.getStartPoint(), linkType.getDecor2(), pointListIterator,
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1());
this.extremity2 = getExtremity(dotPath.getEndPoint(), linkType.getDecor1(), pointListIterator,
dotPath.getEndAngle(), lhead, getSvekNode2());
if (link.getEntity1().getLeafType() == LeafType.LOLLIPOP_HALF)
bibliotekon.getNode(link.getEntity1()).addImpact(dotPath.getStartAngle() + Math.PI);
getSvekNode1().addImpact(dotPath.getStartAngle() + Math.PI);
if (link.getEntity2().getLeafType() == LeafType.LOLLIPOP_HALF)
bibliotekon.getNode(link.getEntity2()).addImpact(dotPath.getEndAngle());
getSvekNode2().addImpact(dotPath.getEndAngle());
if (extremity1 instanceof Extremity && extremity2 instanceof Extremity) {
final XPoint2D p1 = ((Extremity) extremity1).somePoint();
@ -599,10 +599,10 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
final double dist2end = p2.distance(dotPath.getEndPoint());
if (dist1start > dist1end && dist2end > dist2start) {
pointListIterator = lineSvg.getPointsWithThisColor(lineColor);
this.extremity2 = getExtremity(linkType.getDecor1(), pointListIterator, dotPath.getEndPoint(),
dotPath.getEndAngle(), lhead, bibliotekon.getNode(link.getEntity2()));
this.extremity1 = getExtremity(linkType.getDecor2(), pointListIterator, dotPath.getStartPoint(),
dotPath.getStartAngle() + Math.PI, ltail, bibliotekon.getNode(link.getEntity1()));
this.extremity2 = getExtremity(dotPath.getEndPoint(), linkType.getDecor1(), pointListIterator,
dotPath.getEndAngle(), lhead, getSvekNode2());
this.extremity1 = getExtremity(dotPath.getStartPoint(), linkType.getDecor2(), pointListIterator,
dotPath.getStartAngle() + Math.PI, ltail, getSvekNode1());
}
}
@ -639,6 +639,14 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
}
private SvekNode getSvekNode2() {
return bibliotekon.getNode(link.getEntity2());
}
private SvekNode getSvekNode1() {
return bibliotekon.getNode(link.getEntity1());
}
private boolean isOpalisable() {
return dotPath.getBeziers().size() <= 1;
}
@ -679,8 +687,8 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
if (link.isAutoLinkOfAGroup()) {
final Cluster cl = bibliotekon.getCluster((Entity) link.getEntity1());
if (cl != null) {
x += cl.getClusterPosition().getWidth();
x -= dotPath.getStartPoint().getX() - cl.getClusterPosition().getMinX();
x += cl.getRectangleArea().getWidth();
x -= dotPath.getStartPoint().getX() - cl.getRectangleArea().getMinX();
}
}
@ -715,37 +723,54 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
ug = ug.apply(stroke);
// double moveEndY = 0;
DotPath todraw = dotPath;
if (link.getEntity2().isGroup() && link.getEntity2().getUSymbol() instanceof USymbolFolder) {
final Cluster endCluster = bibliotekon.getCluster((Entity) link.getEntity2());
if (endCluster != null) {
final double deltaFolderH = endCluster.checkFolderPosition(dotPath.getEndPoint(),
ug.getStringBounder());
todraw = dotPath.copy();
todraw.moveEndPoint(0, deltaFolderH);
// moveEndY = deltaFolderH;
}
DotPath todraw = dotPath.copy();
UTranslate magneticForce1 = new UTranslate();
if (getSvekNode1() != null) {
final MagneticBorder magneticBorder1 = getSvekNode1().getMagneticBorder();
magneticForce1 = magneticBorder1.getForceAt(ug.getStringBounder(), todraw.getStartPoint());
todraw.moveStartPoint(magneticForce1);
}
if (extremity1 instanceof Extremity && extremity2 instanceof Extremity) {
// http://forum.plantuml.net/9421/arrow-inversion-with-skinparam-linetype-ortho-missing-arrow
final XPoint2D p1 = ((Extremity) extremity1)
.isTooSmallSoGiveThePointCloserToThisOne(todraw.getStartPoint());
if (p1 != null)
todraw.forceStartPoint(p1.getX(), p1.getY());
final XPoint2D p2 = ((Extremity) extremity2).isTooSmallSoGiveThePointCloserToThisOne(todraw.getEndPoint());
if (p2 != null)
todraw.forceEndPoint(p2.getX(), p2.getY());
UTranslate magneticForce2 = new UTranslate();
if (getSvekNode2() != null) {
final MagneticBorder magneticBorder2 = getSvekNode2().getMagneticBorder();
magneticForce2 = magneticBorder2.getForceAt(ug.getStringBounder(), todraw.getEndPoint());
todraw.moveEndPoint(magneticForce2);
}
// final MagneticBorder magneticBorder2 = getSvekNode2().getMagneticBorder();
// if (link.getEntity2().isGroup() && link.getEntity2().getUSymbol() instanceof USymbolFolder) {
// final Cluster endCluster = bibliotekon.getCluster((Entity) link.getEntity2());
// if (endCluster != null) {
// final double deltaFolderH = endCluster.checkFolderPosition(dotPath.getEndPoint(),
// ug.getStringBounder());
// todraw = dotPath.copy();
// todraw.moveEndPoint(0, deltaFolderH);
// // moveEndY = deltaFolderH;
// }
// }
// if (extremity1 instanceof Extremity && extremity2 instanceof Extremity) {
// // http://forum.plantuml.net/9421/arrow-inversion-with-skinparam-linetype-ortho-missing-arrow
// final XPoint2D p1 = ((Extremity) extremity1)
// .isTooSmallSoGiveThePointCloserToThisOne(todraw.getStartPoint());
// if (p1 != null)
// todraw.forceStartPoint(p1.getX(), p1.getY());
//
// final XPoint2D p2 = ((Extremity) extremity2).isTooSmallSoGiveThePointCloserToThisOne(todraw.getEndPoint());
// if (p2 != null)
// todraw.forceEndPoint(p2.getX(), p2.getY());
//
// }
final String comment = link.idCommentForSvg();
final String tmp = uniq(ids, comment);
todraw.setCommentAndCodeLine(tmp, link.getCodeLine());
drawRainbow(ug.apply(new UTranslate(x, y)), color, arrowHeadColor, todraw, link.getSupplementaryColors(),
stroke);
stroke, magneticForce1, magneticForce2);
ug = ug.apply(new UStroke()).apply(color);
@ -779,7 +804,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
final double yConstraint = y + this.labelXY.getPosition().getY();
// ug.apply(new UTranslate(xConstraint, yConstraint)).draw(new URectangle(10, 10));
final List<XPoint2D> square = getSquare(xConstraint, yConstraint);
final Set<XPoint2D> bez = dotPath.sample();
final Set<XPoint2D> bez = todraw.sample();
XPoint2D minPt = null;
double minDist = Double.MAX_VALUE;
for (XPoint2D pt : square)
@ -839,14 +864,14 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
}
private void drawRainbow(UGraphic ug, HColor color, HColor headColor, DotPath todraw,
List<Colors> supplementaryColors, UStroke stroke) {
List<Colors> supplementaryColors, UStroke stroke, UTranslate magneticForce1, UTranslate magneticForce2) {
ug.draw(todraw);
final LinkType linkType = link.getType();
if (headColor.isTransparent()) {
if (this.extremity1 instanceof ExtremityArrow) {
final UGraphic ugHead = ug.apply(color).apply(stroke.onlyThickness());
((ExtremityArrow) this.extremity1).drawLineIfTransparent(ugHead);
((ExtremityArrow) this.extremity1).drawLineIfTransparent(ugHead.apply(magneticForce1));
}
} else if (this.extremity1 != null) {
UGraphic ugHead = ug.apply(headColor).apply(stroke.onlyThickness());
@ -854,13 +879,13 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
ugHead = ugHead.apply(color.bg());
else
ugHead = ugHead.apply(HColors.none().bg());
this.extremity1.drawU(ugHead);
this.extremity1.drawU(ugHead.apply(magneticForce1));
}
if (headColor.isTransparent()) {
if (this.extremity2 instanceof ExtremityArrow) {
final UGraphic ugHead = ug.apply(color).apply(stroke.onlyThickness());
((ExtremityArrow) this.extremity2).drawLineIfTransparent(ugHead);
((ExtremityArrow) this.extremity2).drawLineIfTransparent(ugHead.apply(magneticForce2));
}
} else if (this.extremity2 != null) {
UGraphic ugHead = ug.apply(headColor).apply(stroke.onlyThickness());
@ -868,7 +893,7 @@ public class SvekLine implements Moveable, Hideable, GuideLine {
ugHead = ugHead.apply(color.bg());
else
ugHead = ugHead.apply(HColors.none().bg());
this.extremity2.drawU(ugHead);
this.extremity2.drawU(ugHead.apply(magneticForce2));
}
int i = 0;

View File

@ -43,14 +43,15 @@ import net.sourceforge.plantuml.abel.EntityPosition;
import net.sourceforge.plantuml.abel.Hideable;
import net.sourceforge.plantuml.abel.Together;
import net.sourceforge.plantuml.klimt.Shadowable;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.Positionable;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.shape.UPolygon;
import net.sourceforge.plantuml.svek.image.EntityImageDescription;
import net.sourceforge.plantuml.svek.image.EntityImageLollipopInterface;
import net.sourceforge.plantuml.svek.image.EntityImagePort;
import net.sourceforge.plantuml.svek.image.EntityImageStateBorder;
@ -369,8 +370,8 @@ public class SvekNode implements Positionable, Hideable {
return getDimImage();
}
public ClusterPosition getClusterPosition() {
return new ClusterPosition(minX, minY, minX + getWidth(), minY + getHeight());
public RectangleArea getRectangleArea() {
return new RectangleArea(minX, minY, minX + getWidth(), minY + getHeight());
}
public boolean isShielded() {
@ -400,21 +401,6 @@ public class SvekNode implements Positionable, Hideable {
return new XPoint2D(minX + x, minY + y);
}
public XPoint2D projection(XPoint2D pt, StringBounder stringBounder) {
if (getType() != ShapeType.FOLDER)
return pt;
final ClusterPosition clusterPosition = new ClusterPosition(minX, minY, minX + getWidth(), minY + getHeight());
if (clusterPosition.isPointJustUpper(pt)) {
final XDimension2D dimName = ((EntityImageDescription) image).getNameDimension(stringBounder);
if (pt.getX() < minX + dimName.getWidth())
return pt;
return new XPoint2D(pt.getX(), pt.getY() + dimName.getHeight() + 4);
}
return pt;
}
public double getOverscanX(StringBounder stringBounder) {
return image.getOverscanX(stringBounder);
}
@ -427,10 +413,10 @@ public class SvekNode implements Positionable, Hideable {
if (leaf instanceof Entity == false)
return;
drawList(ug, ((Entity) leaf).getKals(Direction.DOWN));
drawList(ug, ((Entity) leaf).getKals(Direction.UP));
drawList(ug, ((Entity) leaf).getKals(Direction.LEFT));
drawList(ug, ((Entity) leaf).getKals(Direction.RIGHT));
drawList(ug, leaf.getKals(Direction.DOWN));
drawList(ug, leaf.getKals(Direction.UP));
drawList(ug, leaf.getKals(Direction.LEFT));
drawList(ug, leaf.getKals(Direction.RIGHT));
}
@ -438,8 +424,8 @@ public class SvekNode implements Positionable, Hideable {
if (leaf instanceof Entity == false)
return;
fixHoverlap(((Entity) leaf).getKals(Direction.DOWN));
fixHoverlap(((Entity) leaf).getKals(Direction.UP));
fixHoverlap(leaf.getKals(Direction.DOWN));
fixHoverlap(leaf.getKals(Direction.UP));
}
private void fixHoverlap(final List<Kal> list) {
@ -459,4 +445,46 @@ public class SvekNode implements Positionable, Hideable {
for (Kal kal : list)
kal.drawU(ug);
}
// public XPoint2D projection(XPoint2D pt, StringBounder stringBounder) {
// if (getType() != ShapeType.FOLDER)
// return pt;
//
//// final ClusterPosition clusterPosition = new ClusterPosition(minX, minY, minX + getWidth(), minY + getHeight());
//// if (clusterPosition.isPointJustUpper(pt)) {
//// final XDimension2D dimName = ((EntityImageDescription) image).getNameDimension(stringBounder);
//// if (pt.getX() < minX + dimName.getWidth())
//// return pt;
////
//// return new XPoint2D(pt.getX(), pt.getY() + dimName.getHeight() + 4);
//// }
// return pt;
//}
public MagneticBorder getMagneticBorder() {
return new MagneticBorder() {
public UTranslate getForceAt(StringBounder stringBounder, XPoint2D position) {
final MagneticBorder orig = image.getMagneticBorder();
return orig.getForceAt(stringBounder, position.move(-minX, -minY));
}
};
// return image.getMagneticBorder();
// if (getType() != ShapeType.FOLDER)
// return new MagneticBorderNone();
//
// return new MagneticBorder() {
// @Override
// public UTranslate getForceAt(XPoint2D pt) {
// if ((pt.getX() >= minX && pt.getX() <= minX + getWidth() && pt.getY() <= minY)) {
// final XDimension2D dimName = ((EntityImageDescription) image).getNameDimension(stringBounder);
// if (pt.getX() < minX + dimName.getWidth())
// return new UTranslate();
//
// return new UTranslate(0, dimName.getHeight() + 4);
// }
// return new UTranslate();
// }
// };
}
}

View File

@ -64,7 +64,10 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphicStencil;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.MagneticBorder;
import net.sourceforge.plantuml.klimt.geom.MagneticBorderNone;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
import net.sourceforge.plantuml.klimt.shape.UComment;
@ -325,4 +328,26 @@ public class EntityImageDescription extends AbstractEntityImage {
}
return 0;
}
@Override
public MagneticBorder getMagneticBorder() {
if (shapeType == ShapeType.FOLDER)
return asSmall.getMagneticBorder();
// return new MagneticBorder() {
//
// @Override
// public UTranslate getForceAt(StringBounder stringBounder, XPoint2D pt) {
// if ((pt.getX() >= 0 && pt.getX() <= 0 + calculateDimension(stringBounder).getWidth()
// && pt.getY() <= 0)) {
// final XDimension2D dimName = getNameDimension(stringBounder);
// if (pt.getX() < 0 + dimName.getWidth())
// return new UTranslate();
//
// return new UTranslate(0, dimName.getHeight() + 4);
// }
// return new UTranslate();
// }
// };
return new MagneticBorderNone();
}
}

View File

@ -49,7 +49,7 @@ import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.FontParam;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.ClusterPosition;
import net.sourceforge.plantuml.klimt.geom.RectangleArea;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
@ -149,9 +149,9 @@ public class EntityImageEmptyPackage extends AbstractEntityImage {
final double widthTotal = dimTotal.getWidth();
final double heightTotal = dimTotal.getHeight();
final ClusterPosition clusterPosition = new ClusterPosition(0, 0, widthTotal, heightTotal);
final RectangleArea rectangleArea = new RectangleArea(0, 0, widthTotal, heightTotal);
final ClusterDecoration decoration = new ClusterDecoration(getSkinParam().packageStyle(), null, desc,
stereoBlock, clusterPosition, stroke);
stereoBlock, rectangleArea, stroke);
final HorizontalAlignment horizontalAlignment = getSkinParam()
.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null);

View File

@ -206,26 +206,25 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil {
} else {
final StringBounder stringBounder = ug.getStringBounder();
DotPath path = opaleLine.getDotPath();
final UTranslate force1 = getMagneticBorder().getForceAt(stringBounder, path.getStartPoint());
final UTranslate force2 = other.getMagneticBorder().getForceAt(stringBounder, path.getEndPoint());
path.moveSvek(-node.getMinX(), -node.getMinY());
XPoint2D p1 = path.getStartPoint();
XPoint2D p2 = path.getEndPoint();
final double textWidth = getTextWidth(stringBounder);
final double textHeight = getTextHeight(stringBounder);
final XPoint2D center = new XPoint2D(textWidth / 2, textHeight / 2);
if (p1.distance(center) > p2.distance(center)) {
if (path.getStartPoint().distance(center) > path.getEndPoint().distance(center))
path = path.reverse();
p1 = path.getStartPoint();
// p2 = path.getEndPoint();
}
final Direction strategy = getOpaleStrategy(textWidth, textHeight, p1);
final XPoint2D pp1 = path.getStartPoint();
final XPoint2D pp2 = path.getEndPoint();
final XPoint2D newRefpp2 = move(pp2, node.getMinX(), node.getMinY());
final XPoint2D projection = move(other.projection(newRefpp2, stringBounder), -node.getMinX(),
-node.getMinY());
final Direction strategy = getOpaleStrategy(textWidth, textHeight, path.getStartPoint());
final XPoint2D pp1 = force1.getTranslated(path.getStartPoint());
final XPoint2D pp2 = force2.getTranslated(path.getEndPoint());
final Opale opale = new Opale(shadowing, borderColor, noteBackgroundColor, textBlock, true, getStroke());
opale.setRoundCorner(getRoundCorner());
opale.setOpale(strategy, pp1, projection);
opale.setOpale(strategy, pp1, pp2);
final UGraphic stroked = applyStroke(ug2);
opale.drawU(Colors.applyStroke(stroked, getEntity().getColors()));
}
@ -239,10 +238,6 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil {
return skinParam.getRoundCorner(CornerParam.DEFAULT, null);
}
private static XPoint2D move(XPoint2D pt, double dx, double dy) {
return new XPoint2D(pt.getX() + dx, pt.getY() + dy);
}
private void drawNormal(UGraphic ug) {
final StringBounder stringBounder = ug.getStringBounder();
final UPath polygon = Opale.getPolygonNormal(getTextWidth(stringBounder), getTextHeight(stringBounder),

View File

@ -75,7 +75,7 @@ public class EntityImagePort extends AbstractEntityImageBorder {
}
private boolean upPosition() {
final XPoint2D clusterCenter = parent.getClusterPosition().getPointCenter();
final XPoint2D clusterCenter = parent.getRectangleArea().getPointCenter();
final SvekNode node = bibliotekon.getNode(getEntity());
return node.getMinY() < clusterCenter.getY();
}

View File

@ -75,7 +75,7 @@ public class EntityImageStateBorder extends AbstractEntityImageBorder {
if (parent == null)
return false;
final XPoint2D clusterCenter = parent.getClusterPosition().getPointCenter();
final XPoint2D clusterCenter = parent.getRectangleArea().getPointCenter();
final SvekNode node = bibliotekon.getNode(getEntity());
return node.getMinY() < clusterCenter.getY();
}

View File

@ -69,10 +69,10 @@ import javax.swing.WindowConstants;
import net.atmp.ImageBuilder;
import net.sourceforge.plantuml.GeneratedImage;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.log.Logme;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.security.SImageIO;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.version.PSystemVersion;
class ImageWindow extends JFrame {
@ -334,7 +334,7 @@ class ImageWindow extends JFrame {
}
} catch (IOException ex) {
final String msg = "Error reading file: " + ex.toString();
final TextBlockBackcolored error = GraphicStrings.createForError(Arrays.asList(msg), false);
final TextBlock error = GraphicStrings.createForError(Arrays.asList(msg), false);
try {
final byte[] bytes = ImageBuilder.plainPngBuilder(error).writeByteArray();
image = SImageIO.read(bytes);

View File

@ -45,7 +45,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -59,9 +58,8 @@ import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.ULine;
import net.sourceforge.plantuml.skin.UmlDiagramType;
@ -70,7 +68,6 @@ import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
import net.sourceforge.plantuml.timingdiagram.graphic.TimeArrow;
@ -106,30 +103,19 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawInternal(ug);
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
final double withBeforeRuler = getPart1MaxWidth(stringBounder);
final double totalWith = withBeforeRuler + ruler.getWidth() + marginX1 + marginX2;
return new XDimension2D(totalWith, getHeightTotal(stringBounder));
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -48,9 +48,9 @@ import net.sourceforge.plantuml.klimt.AffineTransformType;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.UImage;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class PSystemLicense extends PlainDiagram implements UDrawable {
@ -67,7 +67,7 @@ public class PSystemLicense extends PlainDiagram implements UDrawable {
super(source);
}
private TextBlockBackcolored getGraphicStrings(List<String> strings) {
private TextBlock getGraphicStrings(List<String> strings) {
return GraphicStrings.createBlackOnWhite(strings);
}
@ -98,20 +98,20 @@ public class PSystemLicense extends PlainDiagram implements UDrawable {
strings1.addAll(License.getCurrent().getText1(licenseInfo));
strings2.addAll(License.getCurrent().getText2(licenseInfo));
final TextBlockBackcolored result1 = getGraphicStrings(strings1);
final TextBlock result1 = getGraphicStrings(strings1);
result1.drawU(ug);
ug = ug.apply(UTranslate.dy(4 + result1.calculateDimension(ug.getStringBounder()).getHeight()));
UImage im = new UImage(new PixelImage(logo, AffineTransformType.TYPE_BILINEAR));
ug.apply(UTranslate.dx(20)).draw(im);
ug = ug.apply(UTranslate.dy(im.getHeight()));
final TextBlockBackcolored result2 = getGraphicStrings(strings2);
final TextBlock result2 = getGraphicStrings(strings2);
result2.drawU(ug);
}
// ::done
}
protected TextBlockBackcolored getTextBlock(final LicenseInfo licenseInfo) {
protected TextBlock getTextBlock(final LicenseInfo licenseInfo) {
final List<String> strings = new ArrayList<>();
strings.addAll(License.getCurrent().getText1(licenseInfo));
strings.addAll(License.getCurrent().getText2(licenseInfo));

View File

@ -45,7 +45,7 @@ public class Version {
private static final int MAJOR_SEPARATOR = 1000000;
public static int version() {
return 1202301;
return 1202302;
}
public static int versionPatched() {
@ -81,7 +81,7 @@ public class Version {
}
public static int beta() {
final int beta = 7;
final int beta = 0;
return beta;
}
@ -94,7 +94,7 @@ public class Version {
}
public static long compileTime() {
return 1674997136325L;
return 1677403547300L;
}
public static String compileTimeString() {

View File

@ -42,7 +42,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -57,9 +56,9 @@ import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.AbstractCommonUGraphic;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.mindmap.IdeaShape;
import net.sourceforge.plantuml.regex.Matcher2;
import net.sourceforge.plantuml.regex.MyPattern;
@ -71,7 +70,6 @@ import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleSignatureBasic;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
import net.sourceforge.plantuml.utils.Direction;
public class WBSDiagram extends UmlDiagram {
@ -98,28 +96,15 @@ public class WBSDiagram extends UmlDiagram {
}
@Override
protected TextBlockBackcolored getTextBlock() {
return new TextBlockBackcolored() {
protected TextBlock getTextBlock() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawMe(ug);
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
return getDrawingElement().calculateDimension(stringBounder);
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}

View File

@ -40,7 +40,6 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import net.atmp.InnerStrategy;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
@ -53,12 +52,10 @@ import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XRectangle2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
public class WireDiagram extends UmlDiagram {
@ -84,29 +81,18 @@ public class WireDiagram extends UmlDiagram {
@Override
protected TextBlock getTextBlock() {
return new TextBlockBackcolored() {
return new AbstractTextBlock() {
public void drawU(UGraphic ug) {
drawMe(ug);
}
public XRectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
return null;
}
public XDimension2D calculateDimension(StringBounder stringBounder) {
// return getDrawingElement().calculateDimension(stringBounder);
throw new UnsupportedOperationException();
}
public MinMax getMinMax(StringBounder stringBounder) {
throw new UnsupportedOperationException();
}
public HColor getBackcolor() {
return null;
}
};
}