From 4c26979c372b64e2538c5149eb9bdfc6618a9943 Mon Sep 17 00:00:00 2001 From: Yvan Lussaud Date: Fri, 27 Oct 2023 10:30:01 +0200 Subject: [PATCH] Fixed #506 Add a fitAll() service that call fit() on all MImages of a MElement. --- .../m2doc/services/ImageServices.java | 61 ++++++++++++++++++ .../resources/dh1.gif | Bin 0 -> 36592 bytes .../tests/services/MImageTestServices.java | 45 +++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 tests/org.obeonetwork.m2doc.tests/resources/dh1.gif create mode 100644 tests/org.obeonetwork.m2doc.tests/src/org/obeonetwork/m2doc/tests/services/MImageTestServices.java diff --git a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/services/ImageServices.java b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/services/ImageServices.java index c1271b865..304e45848 100644 --- a/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/services/ImageServices.java +++ b/plugins/org.obeonetwork.m2doc/src/org/obeonetwork/m2doc/services/ImageServices.java @@ -16,6 +16,8 @@ import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.eclipse.acceleo.annotations.api.documentation.Documentation; import org.eclipse.acceleo.annotations.api.documentation.Example; @@ -23,7 +25,13 @@ import org.eclipse.acceleo.annotations.api.documentation.ServiceProvider; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.URIConverter; +import org.obeonetwork.m2doc.element.MElement; import org.obeonetwork.m2doc.element.MImage; +import org.obeonetwork.m2doc.element.MList; +import org.obeonetwork.m2doc.element.MParagraph; +import org.obeonetwork.m2doc.element.MTable; +import org.obeonetwork.m2doc.element.MTable.MCell; +import org.obeonetwork.m2doc.element.MTable.MRow; import org.obeonetwork.m2doc.element.PictureType; import org.obeonetwork.m2doc.element.impl.MImageAWTImpl; import org.obeonetwork.m2doc.element.impl.MImageImpl; @@ -323,4 +331,57 @@ public MImage rotate(MImage image, Integer angle) throws IOException { return new MImageAWTImpl(rotated, image.getURI()); } + // @formatter:off + @Documentation( + value = "Fits all Images of the given MElement in the given rectangle width and height.", + params = { + @Param(name = "element", value = "The MElement"), + @Param(name = "width", value = "The width to fit"), + @Param(name = "height", value = "The height to fit"), + @Param(name = "zoomIn", value = "The image will be zoomed in if smaller"), + }, + result = "the MElement with resized images", + examples = { + @Example(expression = "myImage.fitAll(200, 300, false)", result = "will fit all images in a rectangle (width=200, height=300) if the original image size is smaller it will not be zoomed in"), + } + ) + // @formatter:on + public MElement fitAll(MElement element, Integer width, Integer height, boolean zoomIn) { + final MElement res; + + if (element instanceof MList) { + final List newElements = new ArrayList<>(); + for (MElement e : (MList) element) { + newElements.add(fitAll(e, width, height, zoomIn)); + } + ((MList) element).clear(); + ((MList) element).addAll(newElements); + res = element; + } else if (element instanceof MParagraph) { + final MElement newContent = fitAll(((MParagraph) element).getContents(), width, height, zoomIn); + if (newContent != ((MParagraph) element).getContents()) { + ((MParagraph) element).setContents(newContent); + } + res = element; + } else if (element instanceof MTable) { + for (MRow row : ((MTable) element).getRows()) { + for (MCell cell : row.getCells()) { + final MElement newContent = fitAll(cell.getContents(), width, height, zoomIn); + if (newContent != cell.getContents()) { + cell.setContents(newContent); + } + } + } + res = element; + } else if (element instanceof MImage) { + final MImage image = (MImage) element; + fit(image, width, height, zoomIn); + res = image; + } else { + res = element; + } + + return res; + } + } diff --git a/tests/org.obeonetwork.m2doc.tests/resources/dh1.gif b/tests/org.obeonetwork.m2doc.tests/resources/dh1.gif new file mode 100644 index 0000000000000000000000000000000000000000..6de1205cf8cd8949d390393f140a855960f2b3cd GIT binary patch literal 36592 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 Lussaud + */ +public class MImageTestServices { + + public MElement getMElements(Object object) { + final MList res = new MListImpl(); + + final MParagraphImpl paragraph1 = new MParagraphImpl(new MTextImpl("Some text", null), null); + res.add(paragraph1); + final MImage image = new MImageImpl(URIConverter.INSTANCE, URI.createURI("resources/dh1.gif")); + final MParagraphImpl paragraph2 = new MParagraphImpl(image, null); + res.add(paragraph2); + final MParagraphImpl paragraph3 = new MParagraphImpl(new MTextImpl("More text", null), null); + res.add(paragraph3); + + return res; + } + +}