mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-02 09:58:19 +00:00
Merge pull request #515 from matthew16550/preserveAspectRatio
Fix preserveAspectRatio regression caused in #511
This commit is contained in:
commit
b2b0d49f61
@ -46,17 +46,20 @@ import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainImageBuilder;
|
|||||||
// This class doesnt feel like a wonderful idea, just a stepping stone towards something
|
// This class doesnt feel like a wonderful idea, just a stepping stone towards something
|
||||||
public abstract class PlainDiagram extends AbstractPSystem {
|
public abstract class PlainDiagram extends AbstractPSystem {
|
||||||
|
|
||||||
|
public ImageBuilder createImageBuilder(FileFormatOption fileFormatOption) throws IOException {
|
||||||
|
final UDrawable drawable = getRootDrawable(fileFormatOption);
|
||||||
|
|
||||||
|
return plainImageBuilder(drawable, fileFormatOption)
|
||||||
|
.margin(getDefaultMargins())
|
||||||
|
.metadata(fileFormatOption.isWithMetadata() ? getMetadata() : null)
|
||||||
|
.seed(seed());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
final UDrawable drawable = getRootDrawable(fileFormatOption);
|
final ImageBuilder builder = createImageBuilder(fileFormatOption);
|
||||||
|
|
||||||
final ImageBuilder builder = plainImageBuilder(drawable, fileFormatOption)
|
|
||||||
.margin(getDefaultMargins())
|
|
||||||
.metadata(fileFormatOption.isWithMetadata() ? getMetadata() : null)
|
|
||||||
.seed(seed());
|
|
||||||
|
|
||||||
return adjustImageBuilder(builder).write(os);
|
return adjustImageBuilder(builder).write(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +89,9 @@ import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException;
|
|||||||
|
|
||||||
public class SkinParam implements ISkinParam {
|
public class SkinParam implements ISkinParam {
|
||||||
|
|
||||||
|
// TODO not clear whether SkinParam or ImageBuilder is responsible for defaults
|
||||||
|
public static final String DEFAULT_PRESERVE_ASPECT_RATIO = "none";
|
||||||
|
|
||||||
// private String skin = "debug.skin";
|
// private String skin = "debug.skin";
|
||||||
|
|
||||||
private String skin = "plantuml.skin";
|
private String skin = "plantuml.skin";
|
||||||
@ -1056,7 +1059,7 @@ public class SkinParam implements ISkinParam {
|
|||||||
public String getPreserveAspectRatio() {
|
public String getPreserveAspectRatio() {
|
||||||
final String value = getValue("preserveaspectratio");
|
final String value = getValue("preserveaspectratio");
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return "none";
|
return DEFAULT_PRESERVE_ASPECT_RATIO;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -105,6 +105,8 @@ import net.sourceforge.plantuml.ugraphic.tikz.UGraphicTikz;
|
|||||||
import net.sourceforge.plantuml.ugraphic.txt.UGraphicTxt;
|
import net.sourceforge.plantuml.ugraphic.txt.UGraphicTxt;
|
||||||
import net.sourceforge.plantuml.ugraphic.visio.UGraphicVdx;
|
import net.sourceforge.plantuml.ugraphic.visio.UGraphicVdx;
|
||||||
|
|
||||||
|
import static net.sourceforge.plantuml.SkinParam.DEFAULT_PRESERVE_ASPECT_RATIO;
|
||||||
|
|
||||||
public class ImageBuilder {
|
public class ImageBuilder {
|
||||||
|
|
||||||
private Animation animation;
|
private Animation animation;
|
||||||
@ -152,6 +154,7 @@ public class ImageBuilder {
|
|||||||
private ImageBuilder(UDrawable drawable, FileFormatOption fileFormatOption) {
|
private ImageBuilder(UDrawable drawable, FileFormatOption fileFormatOption) {
|
||||||
this.udrawable = drawable;
|
this.udrawable = drawable;
|
||||||
this.fileFormatOption = fileFormatOption;
|
this.fileFormatOption = fileFormatOption;
|
||||||
|
this.preserveAspectRatio = calculatePreserveAspectRatio(fileFormatOption, null);
|
||||||
|
|
||||||
if (drawable instanceof TextBlockBackcolored) {
|
if (drawable instanceof TextBlockBackcolored) {
|
||||||
backcolor = ((TextBlockBackcolored) drawable).getBackcolor();
|
backcolor = ((TextBlockBackcolored) drawable).getBackcolor();
|
||||||
@ -187,6 +190,10 @@ public class ImageBuilder {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPreserveAspectRatio() {
|
||||||
|
return preserveAspectRatio;
|
||||||
|
}
|
||||||
|
|
||||||
public ImageBuilder randomPixel() {
|
public ImageBuilder randomPixel() {
|
||||||
this.randomPixel = true;
|
this.randomPixel = true;
|
||||||
return this;
|
return this;
|
||||||
@ -222,8 +229,7 @@ public class ImageBuilder {
|
|||||||
lengthAdjust = skinParam.getlengthAdjust();
|
lengthAdjust = skinParam.getlengthAdjust();
|
||||||
margin = calculateMargin(diagram);
|
margin = calculateMargin(diagram);
|
||||||
metadata = fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null;
|
metadata = fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null;
|
||||||
preserveAspectRatio = (fileFormatOption.getPreserveAspectRatio() != null)
|
preserveAspectRatio = calculatePreserveAspectRatio(fileFormatOption, skinParam);
|
||||||
? fileFormatOption.getPreserveAspectRatio() : skinParam.getPreserveAspectRatio();
|
|
||||||
scale = diagram.getScale();
|
scale = diagram.getScale();
|
||||||
seed = diagram.seed();
|
seed = diagram.seed();
|
||||||
svgCharSizeHack = skinParam;
|
svgCharSizeHack = skinParam;
|
||||||
@ -516,6 +522,16 @@ public class ImageBuilder {
|
|||||||
return diagram.getDefaultMargins();
|
return diagram.getDefaultMargins();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String calculatePreserveAspectRatio(FileFormatOption fileFormatOption, ISkinParam skinParam) {
|
||||||
|
if (fileFormatOption.getPreserveAspectRatio() != null) {
|
||||||
|
return fileFormatOption.getPreserveAspectRatio();
|
||||||
|
} else if (skinParam != null) {
|
||||||
|
return skinParam.getPreserveAspectRatio();
|
||||||
|
} else {
|
||||||
|
return DEFAULT_PRESERVE_ASPECT_RATIO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ImageDataSimple createImageData(Dimension2D dim) {
|
private ImageDataSimple createImageData(Dimension2D dim) {
|
||||||
return new ImageDataSimple(dim, status);
|
return new ImageDataSimple(dim, status);
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.mindmap.IdeaShape;
|
import net.sourceforge.plantuml.mindmap.IdeaShape;
|
||||||
import net.sourceforge.plantuml.style.NoStyleAvailableException;
|
import net.sourceforge.plantuml.style.NoStyleAvailableException;
|
||||||
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
|
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.ImageBuilder;
|
||||||
import net.sourceforge.plantuml.ugraphic.MinMax;
|
import net.sourceforge.plantuml.ugraphic.MinMax;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||||
@ -73,11 +74,17 @@ public class WBSDiagram extends UmlDiagram {
|
|||||||
super(UmlDiagramType.WBS);
|
super(UmlDiagramType.WBS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ImageBuilder createImageBuilder(FileFormatOption fileFormatOption) {
|
||||||
|
// TODO index should not be -1 here but we currently dont use it anyway,
|
||||||
|
// the real value we need is "index" in exportDiagramInternal()
|
||||||
|
return styledImageBuilder(this, getTextBlock(), -1, fileFormatOption);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
return styledImageBuilder(this, getTextBlock(), index, fileFormatOption)
|
return createImageBuilder(fileFormatOption)
|
||||||
.write(os);
|
.write(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
57
test/net/sourceforge/plantuml/ugraphic/ImageBuilderTest.java
Normal file
57
test/net/sourceforge/plantuml/ugraphic/ImageBuilderTest.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package net.sourceforge.plantuml.ugraphic;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.FileFormatOption;
|
||||||
|
import net.sourceforge.plantuml.PlainDiagram;
|
||||||
|
import net.sourceforge.plantuml.creole.legacy.PSystemCreole;
|
||||||
|
import net.sourceforge.plantuml.wbs.WBSDiagram;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.CsvSource;
|
||||||
|
|
||||||
|
import static net.sourceforge.plantuml.FileFormat.DEBUG;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ImageBuilderTest {
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@CsvSource(
|
||||||
|
value = {
|
||||||
|
// inFileFormatOption Expected
|
||||||
|
" NULL, none",
|
||||||
|
" foo, foo",
|
||||||
|
},
|
||||||
|
nullValues = {"NULL"}
|
||||||
|
)
|
||||||
|
public void test_preserveAspectRatio_plainDiagram(String inFileFormatOption, String expected) throws Exception {
|
||||||
|
final PlainDiagram diagram = new PSystemCreole();
|
||||||
|
FileFormatOption fileFormatOption = new FileFormatOption(DEBUG);
|
||||||
|
|
||||||
|
if (inFileFormatOption != null) fileFormatOption = fileFormatOption.withPreserveAspectRatio(inFileFormatOption);
|
||||||
|
|
||||||
|
final ImageBuilder builder = diagram.createImageBuilder(fileFormatOption);
|
||||||
|
|
||||||
|
assertThat(builder.getPreserveAspectRatio()).isEqualTo(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@CsvSource(
|
||||||
|
value = {
|
||||||
|
// inSkinParam inFileFormatOption Expected
|
||||||
|
" NULL, NULL, none",
|
||||||
|
" foo, NULL, foo",
|
||||||
|
" NULL, bar, bar",
|
||||||
|
" foo, bar, bar",
|
||||||
|
},
|
||||||
|
nullValues = {"NULL"}
|
||||||
|
)
|
||||||
|
public void test_preserveAspectRatio_styledDiagram(String inSkinParam, String inFileFormatOption, String expected) {
|
||||||
|
final WBSDiagram diagram = new WBSDiagram();
|
||||||
|
FileFormatOption fileFormatOption = new FileFormatOption(DEBUG);
|
||||||
|
|
||||||
|
if (inSkinParam != null) diagram.setParam("preserveAspectRatio", inSkinParam);
|
||||||
|
if (inFileFormatOption != null) fileFormatOption = fileFormatOption.withPreserveAspectRatio(inFileFormatOption);
|
||||||
|
|
||||||
|
final ImageBuilder builder = diagram.createImageBuilder(fileFormatOption);
|
||||||
|
|
||||||
|
assertThat(builder.getPreserveAspectRatio()).isEqualTo(expected);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user