diff --git a/skin/plantuml.skin b/skin/plantuml.skin index ba90f4322..f851a3336 100644 --- a/skin/plantuml.skin +++ b/skin/plantuml.skin @@ -489,11 +489,11 @@ root { HyperLinkColor blue FontColor white LineColor #e7e7e7 - BackGroundColor #303030 + BackGroundColor #313139 } document { - BackGroundColor black + BackGroundColor #1B1B1B header { FontColor #7 } diff --git a/src/net/atmp/ImageBuilder.java b/src/net/atmp/ImageBuilder.java index 2e272bb45..2113afcde 100644 --- a/src/net/atmp/ImageBuilder.java +++ b/src/net/atmp/ImageBuilder.java @@ -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; } diff --git a/src/net/sourceforge/plantuml/AnnotatedBuilder.java b/src/net/sourceforge/plantuml/AnnotatedBuilder.java index da7eddd72..05580b57c 100644 --- a/src/net/sourceforge/plantuml/AnnotatedBuilder.java +++ b/src/net/sourceforge/plantuml/AnnotatedBuilder.java @@ -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(), diff --git a/src/net/sourceforge/plantuml/AnnotatedWorker.java b/src/net/sourceforge/plantuml/AnnotatedWorker.java index f807d00c5..e229b5774 100644 --- a/src/net/sourceforge/plantuml/AnnotatedWorker.java +++ b/src/net/sourceforge/plantuml/AnnotatedWorker.java @@ -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) { diff --git a/src/net/sourceforge/plantuml/SourceStringReader.java b/src/net/sourceforge/plantuml/SourceStringReader.java index faab5b986..aaeae43b9 100644 --- a/src/net/sourceforge/plantuml/SourceStringReader.java +++ b/src/net/sourceforge/plantuml/SourceStringReader.java @@ -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); diff --git a/src/net/sourceforge/plantuml/UmlDiagram.java b/src/net/sourceforge/plantuml/UmlDiagram.java index 1d563ae47..8bd0ec10a 100644 --- a/src/net/sourceforge/plantuml/UmlDiagram.java +++ b/src/net/sourceforge/plantuml/UmlDiagram.java @@ -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() { diff --git a/src/net/sourceforge/plantuml/board/BoardDiagram.java b/src/net/sourceforge/plantuml/board/BoardDiagram.java index 41a58b720..266c7cb8f 100644 --- a/src/net/sourceforge/plantuml/board/BoardDiagram.java +++ b/src/net/sourceforge/plantuml/board/BoardDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/bpm/BpmElement.java b/src/net/sourceforge/plantuml/bpm/BpmElement.java index e0165d4b6..9a8652fb7 100644 --- a/src/net/sourceforge/plantuml/bpm/BpmElement.java +++ b/src/net/sourceforge/plantuml/bpm/BpmElement.java @@ -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); diff --git a/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java b/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java index e8be67131..700563cb7 100644 --- a/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java +++ b/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java @@ -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; + } + } diff --git a/src/net/sourceforge/plantuml/decoration/symbol/USymbolFolder.java b/src/net/sourceforge/plantuml/decoration/symbol/USymbolFolder.java index 285e45821..8ddf3b224 100644 --- a/src/net/sourceforge/plantuml/decoration/symbol/USymbolFolder.java +++ b/src/net/sourceforge/plantuml/decoration/symbol/USymbolFolder.java @@ -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(); + } + }; + + } }; } diff --git a/src/net/sourceforge/plantuml/donors/PSystemDonors.java b/src/net/sourceforge/plantuml/donors/PSystemDonors.java index b083e3d28..ca58e8f47 100644 --- a/src/net/sourceforge/plantuml/donors/PSystemDonors.java +++ b/src/net/sourceforge/plantuml/donors/PSystemDonors.java @@ -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 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("Special thanks to our sponsors and donors !")); header.drawU(ug); final StringBounder stringBounder = ug.getStringBounder(); diff --git a/src/net/sourceforge/plantuml/ebnf/PSystemEbnf.java b/src/net/sourceforge/plantuml/ebnf/PSystemEbnf.java index 2423ab577..9604c7f74 100644 --- a/src/net/sourceforge/plantuml/ebnf/PSystemEbnf.java +++ b/src/net/sourceforge/plantuml/ebnf/PSystemEbnf.java @@ -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()); diff --git a/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java b/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java index 71e11b2e6..aed61b070 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java @@ -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); diff --git a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java index 8134a3622..8e6d51f5d 100644 --- a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java +++ b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java @@ -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, diff --git a/src/net/sourceforge/plantuml/emoji/PSystemListEmoji.java b/src/net/sourceforge/plantuml/emoji/PSystemListEmoji.java index 2c050ee9a..0c46020a2 100644 --- a/src/net/sourceforge/plantuml/emoji/PSystemListEmoji.java +++ b/src/net/sourceforge/plantuml/emoji/PSystemListEmoji.java @@ -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("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("\"\":" + shortcut + ": \"\""); } - 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())); diff --git a/src/net/sourceforge/plantuml/error/PSystemError.java b/src/net/sourceforge/plantuml/error/PSystemError.java index ef1bd966e..a1ecc6068 100644 --- a/src/net/sourceforge/plantuml/error/PSystemError.java +++ b/src/net/sourceforge/plantuml/error/PSystemError.java @@ -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("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); } diff --git a/src/net/sourceforge/plantuml/flowdiagram/FlowDiagram.java b/src/net/sourceforge/plantuml/flowdiagram/FlowDiagram.java index 3e3d5d460..865804e10 100644 --- a/src/net/sourceforge/plantuml/flowdiagram/FlowDiagram.java +++ b/src/net/sourceforge/plantuml/flowdiagram/FlowDiagram.java @@ -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; + } } diff --git a/src/net/sourceforge/plantuml/font/Roboto-Black.ttf b/src/net/sourceforge/plantuml/font/Roboto-Black.ttf new file mode 100644 index 000000000..173c0af21 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Black.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-BlackItalic.ttf b/src/net/sourceforge/plantuml/font/Roboto-BlackItalic.ttf new file mode 100644 index 000000000..d83820bb3 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-BlackItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Bold.ttf b/src/net/sourceforge/plantuml/font/Roboto-Bold.ttf new file mode 100644 index 000000000..9f9f52046 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Bold.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-BoldItalic.ttf b/src/net/sourceforge/plantuml/font/Roboto-BoldItalic.ttf new file mode 100644 index 000000000..2ac2b3628 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-BoldItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Italic.ttf b/src/net/sourceforge/plantuml/font/Roboto-Italic.ttf new file mode 100644 index 000000000..fd33698b7 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Italic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Light.ttf b/src/net/sourceforge/plantuml/font/Roboto-Light.ttf new file mode 100644 index 000000000..8b1e7e128 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Light.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-LightItalic.ttf b/src/net/sourceforge/plantuml/font/Roboto-LightItalic.ttf new file mode 100644 index 000000000..0cdfdfa80 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-LightItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Medium.ttf b/src/net/sourceforge/plantuml/font/Roboto-Medium.ttf new file mode 100644 index 000000000..307e1ba88 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Medium.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-MediumItalic.ttf b/src/net/sourceforge/plantuml/font/Roboto-MediumItalic.ttf new file mode 100644 index 000000000..236938335 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-MediumItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Regular.ttf b/src/net/sourceforge/plantuml/font/Roboto-Regular.ttf new file mode 100644 index 000000000..54a284dca Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Regular.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-Thin.ttf b/src/net/sourceforge/plantuml/font/Roboto-Thin.ttf new file mode 100644 index 000000000..72f9c314b Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-Thin.ttf differ diff --git a/src/net/sourceforge/plantuml/font/Roboto-ThinItalic.ttf b/src/net/sourceforge/plantuml/font/Roboto-ThinItalic.ttf new file mode 100644 index 000000000..e062ef675 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/Roboto-ThinItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-Bold.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-Bold.ttf new file mode 100644 index 000000000..6acb497a5 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-Bold.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-BoldItalic.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-BoldItalic.ttf new file mode 100644 index 000000000..2f42ebf79 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-BoldItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-Italic.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-Italic.ttf new file mode 100644 index 000000000..4b667918c Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-Italic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-Light.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-Light.ttf new file mode 100644 index 000000000..2b7ebd938 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-Light.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-LightItalic.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-LightItalic.ttf new file mode 100644 index 000000000..12188fb9e Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-LightItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-Medium.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-Medium.ttf new file mode 100644 index 000000000..3201ec2bf Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-Medium.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-MediumItalic.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-MediumItalic.ttf new file mode 100644 index 000000000..5333e77f4 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-MediumItalic.ttf differ diff --git a/src/net/sourceforge/plantuml/font/RobotoCondensed-Regular.ttf b/src/net/sourceforge/plantuml/font/RobotoCondensed-Regular.ttf new file mode 100644 index 000000000..f793267a6 Binary files /dev/null and b/src/net/sourceforge/plantuml/font/RobotoCondensed-Regular.ttf differ diff --git a/src/net/sourceforge/plantuml/gitlog/GitDiagram.java b/src/net/sourceforge/plantuml/gitlog/GitDiagram.java index 33efd62d7..b355612cf 100644 --- a/src/net/sourceforge/plantuml/gitlog/GitDiagram.java +++ b/src/net/sourceforge/plantuml/gitlog/GitDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java b/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java index 645d1c816..7aabbed27 100644 --- a/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java +++ b/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/jsondiagram/TextBlockJson.java b/src/net/sourceforge/plantuml/jsondiagram/TextBlockJson.java index 61ef7f14a..df75e494a 100644 --- a/src/net/sourceforge/plantuml/jsondiagram/TextBlockJson.java +++ b/src/net/sourceforge/plantuml/jsondiagram/TextBlockJson.java @@ -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 lines = new ArrayList<>(); diff --git a/src/net/sourceforge/plantuml/klimt/compress/PiecewiseAffineOnXorYBuilder.java b/src/net/sourceforge/plantuml/klimt/compress/PiecewiseAffineOnXorYBuilder.java index ff05d0a71..acb62dd87 100644 --- a/src/net/sourceforge/plantuml/klimt/compress/PiecewiseAffineOnXorYBuilder.java +++ b/src/net/sourceforge/plantuml/klimt/compress/PiecewiseAffineOnXorYBuilder.java @@ -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; diff --git a/src/net/sourceforge/plantuml/klimt/drawing/AbstractUGraphic.java b/src/net/sourceforge/plantuml/klimt/drawing/AbstractUGraphic.java index aed5ec39a..ede055ee4 100644 --- a/src/net/sourceforge/plantuml/klimt/drawing/AbstractUGraphic.java +++ b/src/net/sourceforge/plantuml/klimt/drawing/AbstractUGraphic.java @@ -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 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 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()); } } diff --git a/src/net/sourceforge/plantuml/klimt/drawing/tikz/UGraphicTikz.java b/src/net/sourceforge/plantuml/klimt/drawing/tikz/UGraphicTikz.java index 2bfb466a8..bd8832290 100644 --- a/src/net/sourceforge/plantuml/klimt/drawing/tikz/UGraphicTikz.java +++ b/src/net/sourceforge/plantuml/klimt/drawing/tikz/UGraphicTikz.java @@ -107,9 +107,9 @@ public class UGraphicTikz extends AbstractUGraphic implements Clip @Override public boolean matchesProperty(String propertyName) { - if ("SPECIALTXT".equalsIgnoreCase(propertyName)) { + if ("SPECIALTXT".equalsIgnoreCase(propertyName)) return true; - } + return false; } diff --git a/src/net/sourceforge/plantuml/svek/TextBlockBackcolored.java b/src/net/sourceforge/plantuml/klimt/geom/MagneticBorder.java similarity index 82% rename from src/net/sourceforge/plantuml/svek/TextBlockBackcolored.java rename to src/net/sourceforge/plantuml/klimt/geom/MagneticBorder.java index 646ed9943..f701ee07f 100644 --- a/src/net/sourceforge/plantuml/svek/TextBlockBackcolored.java +++ b/src/net/sourceforge/plantuml/klimt/geom/MagneticBorder.java @@ -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); -} \ No newline at end of file +} diff --git a/src/net/sourceforge/plantuml/klimt/geom/MagneticBorderNone.java b/src/net/sourceforge/plantuml/klimt/geom/MagneticBorderNone.java new file mode 100644 index 000000000..3db682370 --- /dev/null +++ b/src/net/sourceforge/plantuml/klimt/geom/MagneticBorderNone.java @@ -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(); + } + +} diff --git a/src/net/sourceforge/plantuml/klimt/geom/ClusterPosition.java b/src/net/sourceforge/plantuml/klimt/geom/RectangleArea.java similarity index 65% rename from src/net/sourceforge/plantuml/klimt/geom/ClusterPosition.java rename to src/net/sourceforge/plantuml/klimt/geom/RectangleArea.java index 2be99ef58..9e363b821 100644 --- a/src/net/sourceforge/plantuml/klimt/geom/ClusterPosition.java +++ b/src/net/sourceforge/plantuml/klimt/geom/RectangleArea.java @@ -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()); diff --git a/src/net/sourceforge/plantuml/klimt/shape/AbstractTextBlock.java b/src/net/sourceforge/plantuml/klimt/shape/AbstractTextBlock.java index 0f845b54a..87e89f95d 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/AbstractTextBlock.java +++ b/src/net/sourceforge/plantuml/klimt/shape/AbstractTextBlock.java @@ -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; + } + } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/klimt/shape/DotPath.java b/src/net/sourceforge/plantuml/klimt/shape/DotPath.java index ffbfb3de8..790205ae2 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/DotPath.java +++ b/src/net/sourceforge/plantuml/klimt/shape/DotPath.java @@ -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; diff --git a/src/net/sourceforge/plantuml/klimt/shape/GraphicStrings.java b/src/net/sourceforge/plantuml/klimt/shape/GraphicStrings.java index 71ee0c83a..e2992a22d 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/GraphicStrings.java +++ b/src/net/sourceforge/plantuml/klimt/shape/GraphicStrings.java @@ -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 strings) { + public static TextBlock createGreenOnBlackMonospaced(List strings) { return new GraphicStrings(strings, monospaced14(HColors.GREEN), HColors.BLACK, null, null, CreoleMode.SIMPLE_LINE); } - public static TextBlockBackcolored createBlackOnWhite(List strings) { + public static TextBlock createBlackOnWhite(List strings) { return new GraphicStrings(strings, sansSerif12(HColors.BLACK), HColors.WHITE, null, null, CreoleMode.FULL); } - public static TextBlockBackcolored createBlackOnWhiteMonospaced(List strings) { + public static TextBlock createBlackOnWhiteMonospaced(List strings) { return new GraphicStrings(strings, monospaced14(HColors.BLACK), HColors.WHITE, null, null, CreoleMode.FULL); } - public static TextBlockBackcolored createBlackOnWhite(List strings, BufferedImage image, - GraphicPosition position) { + public static TextBlock createBlackOnWhite(List strings, BufferedImage image, GraphicPosition position) { return new GraphicStrings(strings, sansSerif12(HColors.BLACK), HColors.WHITE, image, position, CreoleMode.FULL_BUT_UNDERSCORE); } diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlock.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlock.java index 2164c9d9b..a1c229a5e 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlock.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlock.java @@ -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(); + } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlockRecentred.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlockRecentred.java index f204697c5..215f1c172 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlockRecentred.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlockRecentred.java @@ -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(); } } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlockTitle.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlockTitle.java index 1ff9fb928..96dd83803 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlockTitle.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlockTitle.java @@ -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(); + } + } diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlockUtils.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlockUtils.java index 405abb1c3..3c0bb9c43 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlockUtils.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlockUtils.java @@ -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; - } - }; } diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlockVertical2.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlockVertical2.java index 50417b20c..5af54d89e 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlockVertical2.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlockVertical2.java @@ -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) { diff --git a/src/net/sourceforge/plantuml/klimt/shape/TextBlockWithUrl.java b/src/net/sourceforge/plantuml/klimt/shape/TextBlockWithUrl.java index 57ce5be80..e02d10e12 100644 --- a/src/net/sourceforge/plantuml/klimt/shape/TextBlockWithUrl.java +++ b/src/net/sourceforge/plantuml/klimt/shape/TextBlockWithUrl.java @@ -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(); + } + } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java b/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java index 220b15f58..4283c44dd 100644 --- a/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java +++ b/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java @@ -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)); } diff --git a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java index b563219f0..d1981b833 100644 --- a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java +++ b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java index eb67293d4..691506763 100644 --- a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java +++ b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java @@ -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; - } - }; } diff --git a/src/net/sourceforge/plantuml/nwdiag/next/GridTextBlockSimple.java b/src/net/sourceforge/plantuml/nwdiag/next/GridTextBlockSimple.java index 97e210173..54468d832 100644 --- a/src/net/sourceforge/plantuml/nwdiag/next/GridTextBlockSimple.java +++ b/src/net/sourceforge/plantuml/nwdiag/next/GridTextBlockSimple.java @@ -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; + } + } diff --git a/src/net/sourceforge/plantuml/project/GanttDiagram.java b/src/net/sourceforge/plantuml/project/GanttDiagram.java index 3be4001ae..00a71b848 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagram.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/regexdiagram/PSystemRegex.java b/src/net/sourceforge/plantuml/regexdiagram/PSystemRegex.java index 44f96ca3f..7a79788a3 100644 --- a/src/net/sourceforge/plantuml/regexdiagram/PSystemRegex.java +++ b/src/net/sourceforge/plantuml/regexdiagram/PSystemRegex.java @@ -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(); diff --git a/src/net/sourceforge/plantuml/salt/PSystemSalt.java b/src/net/sourceforge/plantuml/salt/PSystemSalt.java index f61f847af..be3c0922a 100644 --- a/src/net/sourceforge/plantuml/salt/PSystemSalt.java +++ b/src/net/sourceforge/plantuml/salt/PSystemSalt.java @@ -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(); } diff --git a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java index c7fbfeac4..1b9522251 100644 --- a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java +++ b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java @@ -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; diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java index bf000022d..50bee13cb 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java @@ -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(); - } - }; } diff --git a/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java b/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java index 194df1945..325ebecd0 100644 --- a/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java +++ b/src/net/sourceforge/plantuml/svek/AbstractEntityImage.java @@ -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; diff --git a/src/net/sourceforge/plantuml/svek/Cluster.java b/src/net/sourceforge/plantuml/svek/Cluster.java index 48efc3d80..5b7fa8ce6 100644 --- a/src/net/sourceforge/plantuml/svek/Cluster.java +++ b/src/net/sourceforge/plantuml/svek/Cluster.java @@ -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 insides = new ArrayList<>(); + final Collection insides = new ArrayList<>(); final List 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; diff --git a/src/net/sourceforge/plantuml/svek/ClusterDecoration.java b/src/net/sourceforge/plantuml/svek/ClusterDecoration.java index ba576a3cf..63dab2bc6 100644 --- a/src/net/sourceforge/plantuml/svek/ClusterDecoration.java +++ b/src/net/sourceforge/plantuml/svek/ClusterDecoration.java @@ -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())); } } diff --git a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java index 8190c9d5e..d12725591 100644 --- a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java +++ b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java @@ -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()); diff --git a/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java b/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java index d6ce940fa..0a1d96915 100644 --- a/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java +++ b/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java @@ -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) { diff --git a/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java b/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java index b8f4c8b70..39dc20219 100644 --- a/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java +++ b/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java @@ -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; diff --git a/src/net/sourceforge/plantuml/svek/DotStringFactory.java b/src/net/sourceforge/plantuml/svek/DotStringFactory.java index 18672f3b8..845292af1 100644 --- a/src/net/sourceforge/plantuml/svek/DotStringFactory.java +++ b/src/net/sourceforge/plantuml/svek/DotStringFactory.java @@ -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) { diff --git a/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java b/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java index 297ba91da..feb9d0e21 100644 --- a/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java +++ b/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java @@ -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(); } diff --git a/src/net/sourceforge/plantuml/svek/FrontierCalculator.java b/src/net/sourceforge/plantuml/svek/FrontierCalculator.java index 8c7d31888..f0281d7cc 100644 --- a/src/net/sourceforge/plantuml/svek/FrontierCalculator.java +++ b/src/net/sourceforge/plantuml/svek/FrontierCalculator.java @@ -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 insides, - Collection points) { + public FrontierCalculator(RectangleArea initial, Collection insides, Collection 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; } diff --git a/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java b/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java index 864cbc98e..4551ff012 100644 --- a/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java +++ b/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java @@ -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 diff --git a/src/net/sourceforge/plantuml/svek/IEntityImage.java b/src/net/sourceforge/plantuml/svek/IEntityImage.java index 3c861cbb6..1799420e6 100644 --- a/src/net/sourceforge/plantuml/svek/IEntityImage.java +++ b/src/net/sourceforge/plantuml/svek/IEntityImage.java @@ -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(); + } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/svek/SvekLine.java b/src/net/sourceforge/plantuml/svek/SvekLine.java index a637f94e2..55867be90 100644 --- a/src/net/sourceforge/plantuml/svek/SvekLine.java +++ b/src/net/sourceforge/plantuml/svek/SvekLine.java @@ -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 square = getSquare(xConstraint, yConstraint); - final Set bez = dotPath.sample(); + final Set 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 supplementaryColors, UStroke stroke) { + List 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; diff --git a/src/net/sourceforge/plantuml/svek/SvekNode.java b/src/net/sourceforge/plantuml/svek/SvekNode.java index 545eec7f9..81f875413 100644 --- a/src/net/sourceforge/plantuml/svek/SvekNode.java +++ b/src/net/sourceforge/plantuml/svek/SvekNode.java @@ -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 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(); +// } +// }; + } + } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java index e2dd9218c..87579b7ba 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java @@ -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(); + } } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java index 68b58a754..63b6133dc 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java @@ -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); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java index 633845894..02c99721a 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java @@ -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), diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java b/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java index a246a0512..914ba575b 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java @@ -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(); } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java index 63f8eb185..c53b1b0f7 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java @@ -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(); } diff --git a/src/net/sourceforge/plantuml/swing/ImageWindow.java b/src/net/sourceforge/plantuml/swing/ImageWindow.java index cd7143702..272129ea6 100644 --- a/src/net/sourceforge/plantuml/swing/ImageWindow.java +++ b/src/net/sourceforge/plantuml/swing/ImageWindow.java @@ -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); diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java index 62a2fde36..0847489b3 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java @@ -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; - } }; } diff --git a/src/net/sourceforge/plantuml/version/PSystemLicense.java b/src/net/sourceforge/plantuml/version/PSystemLicense.java index 066adb96d..ca16c28f5 100644 --- a/src/net/sourceforge/plantuml/version/PSystemLicense.java +++ b/src/net/sourceforge/plantuml/version/PSystemLicense.java @@ -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 strings) { + private TextBlock getGraphicStrings(List 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 strings = new ArrayList<>(); strings.addAll(License.getCurrent().getText1(licenseInfo)); strings.addAll(License.getCurrent().getText2(licenseInfo)); diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index 9f7c6d349..8200244f7 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -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() { diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java index a2ce3338f..6d3e03663 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java @@ -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; } }; } diff --git a/src/net/sourceforge/plantuml/wire/WireDiagram.java b/src/net/sourceforge/plantuml/wire/WireDiagram.java index 0e0663c55..5d31fd9ca 100644 --- a/src/net/sourceforge/plantuml/wire/WireDiagram.java +++ b/src/net/sourceforge/plantuml/wire/WireDiagram.java @@ -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; - } }; }