diff --git a/.drone.yml b/.drone.yml index 8e96831..86a075d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,36 +3,36 @@ type: docker name: default steps: - name: build - image: maven:3.9-eclipse-temurin-25 + image: maven:3.9-eclipse-temurin-21 commands: - mvn clean install -DskipTests=true -Dmaven.javadoc.skip=true -B -V when: ref: include: - - refs/head/main + - refs/head/master - refs/head/feature/** - refs/tags/** - name: test - image: maven:3.9-eclipse-temurin-25 + image: maven:3.9-eclipse-temurin-21 commands: - mvn test -B when: branch: include: - - main + - master - feature/* -# - name: deploy -# image: maven:3.9-eclipse-temurin-25 -# environment: -# REPO_TOKEN: -# from_secret: repo-token -# REPO_TOKEN_OSSRH: -# from_secret: repo-token-ossrh -# commands: -# - mvn -s maven-settings.xml deploy -DskipTests=true -# when: -# branch: -# - main -# event: -# exclude: -# - pull_request + - name: deploy + image: maven:3.9-eclipse-temurin-21 + environment: + REPO_TOKEN: + from_secret: repo-token + REPO_TOKEN_OSSRH: + from_secret: repo-token-ossrh + commands: + - mvn -s maven-settings.xml deploy -DskipTests=true + when: + branch: + - master + event: + exclude: + - pull_request diff --git a/pom.xml b/pom.xml index 3ccfe2e..a39c758 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ch.fritteli.a-maze-r maze-generator - 0.5.1-SNAPSHOT + 0.4.0 A-Maze-R Generator A-Maze-R, The Maze Generator. It is a library for generating mazes in various output formats. @@ -44,7 +44,7 @@ scm:git:https://gittr.ch/java/maze-generator.git scm:git:ssh://git@gittr.ch/java/maze-generator.git https://gittr.ch/java/maze-generator - HEAD + v0.4.0 diff --git a/src/main/java/ch/fritteli/maze/generator/renderer/pdf/Generator.java b/src/main/java/ch/fritteli/maze/generator/renderer/pdf/Generator.java index 3fdfc48..6d44efa 100644 --- a/src/main/java/ch/fritteli/maze/generator/renderer/pdf/Generator.java +++ b/src/main/java/ch/fritteli/maze/generator/renderer/pdf/Generator.java @@ -5,6 +5,7 @@ import ch.fritteli.maze.generator.model.Maze; import ch.fritteli.maze.generator.model.Position; import ch.fritteli.maze.generator.model.Tile; import io.vavr.control.Option; +import lombok.RequiredArgsConstructor; import lombok.Value; import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; @@ -19,31 +20,18 @@ import java.awt.*; import java.io.ByteArrayOutputStream; import java.io.IOException; +@RequiredArgsConstructor @Slf4j class Generator { - private static final PDRectangle REFERENCE_PAGE = PDRectangle.A4; - private static final int DPI = 72; - private static final double CM_PER_INCH = 2.54; - private static final double DOT_PER_CM = DPI / CM_PER_INCH; - // 1.5cm margin on each side of the page - private static final float MARGIN = (float) (1.5 * DOT_PER_CM); @NonNull private final Maze maze; - private final float stepSize; - - Generator(@NonNull final Maze maze) { - this.maze = maze; - - final float usableWidth = REFERENCE_PAGE.getWidth() - 2 * MARGIN; - final float usableHeight = REFERENCE_PAGE.getHeight() - 2 * MARGIN; - final float stepWidth = usableWidth / maze.getWidth(); - final float stepHeight = usableHeight / maze.getHeight(); - this.stepSize = Math.min(stepWidth, stepHeight); - } @NonNull public ByteArrayOutputStream generate() { + final float pageWidth = this.maze.getWidth() * PDFRenderer.SCALE + 2 * PDFRenderer.MARGIN; + final float pageHeight = this.maze.getHeight() * PDFRenderer.SCALE + 2 * PDFRenderer.MARGIN; + final PDDocument pdDocument = new PDDocument(); final PDDocumentInformation info = new PDDocumentInformation(); info.setTitle("Maze %sx%s, ID %s (%s)".formatted( @@ -53,8 +41,8 @@ class Generator { this.maze.getAlgorithm() )); pdDocument.setDocumentInformation(info); - final PDPage puzzlePage = new PDPage(REFERENCE_PAGE); - final PDPage solutionPage = new PDPage(REFERENCE_PAGE); + final PDPage puzzlePage = new PDPage(new PDRectangle(pageWidth, pageHeight)); + final PDPage solutionPage = new PDPage(new PDRectangle(pageWidth, pageHeight)); pdDocument.addPage(puzzlePage); pdDocument.addPage(solutionPage); try (final PDPageContentStream puzzlePageContentStream = new PDPageContentStream(pdDocument, puzzlePage); @@ -87,7 +75,7 @@ class Generator { private void drawHorizontalLines(@NonNull final PDPageContentStream... contentStreams) throws IOException { // PDF has the origin in the lower left corner. We want it in the upper left corner, hence some magic is required. - Coordinate coordinate = new Coordinate(0, 0); + Coordinate coordinate = new Coordinate(0f, 0f); // Draw the TOP borders of all tiles. for (int y = 0; y < this.maze.getHeight(); y++) { boolean isPainting = false; @@ -260,15 +248,11 @@ class Generator { @Value private class Coordinate { + float x; float y; - public Coordinate(final int x, final int y) { - this.x = this.calcX(x); - this.y = this.calcY(y); - } - - private Coordinate(final float x, final float y) { + public Coordinate(final float x, final float y) { this.x = x; this.y = y; } @@ -278,7 +262,7 @@ class Generator { } private float calcX(final int x) { - return x * Generator.this.stepSize + Generator.MARGIN; + return x * PDFRenderer.SCALE + PDFRenderer.MARGIN; } public Coordinate withY(final int y) { @@ -286,7 +270,7 @@ class Generator { } private float calcY(final int y) { - return (Generator.this.maze.getHeight() - y) * Generator.this.stepSize + Generator.MARGIN; + return (Generator.this.maze.getHeight() - y) * PDFRenderer.SCALE + PDFRenderer.MARGIN; } } @@ -302,11 +286,11 @@ class Generator { } private float calcX(final int x) { - return x * Generator.this.stepSize + Generator.this.stepSize / 2 + Generator.MARGIN; + return x * PDFRenderer.SCALE + PDFRenderer.SCALE / 2 + PDFRenderer.MARGIN; } private float calcY(final int y) { - return (Generator.this.maze.getHeight() - y) * Generator.this.stepSize - Generator.this.stepSize / 2 + Generator.MARGIN; + return (Generator.this.maze.getHeight() - y) * PDFRenderer.SCALE - PDFRenderer.SCALE / 2 + PDFRenderer.MARGIN; } } }