From f616f0ad109fa1af0e5536973433ff184f2583df Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Fri, 23 Jan 2026 23:42:15 +0100 Subject: [PATCH 1/6] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a39c758..b558695 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ch.fritteli.a-maze-r maze-generator - 0.4.0 + 0.4.1-SNAPSHOT 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 - v0.4.0 + HEAD From 5ef58373491a3c3ef9393115800bf893d8a635be Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 24 Jan 2026 00:02:55 +0100 Subject: [PATCH 2/6] Use java25 as build image and really switch to main branch. --- .drone.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index 86a075d..62e1b0f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,26 +3,26 @@ type: docker name: default steps: - name: build - image: maven:3.9-eclipse-temurin-21 + image: maven:3.9-eclipse-temurin-25 commands: - mvn clean install -DskipTests=true -Dmaven.javadoc.skip=true -B -V when: ref: include: - - refs/head/master + - refs/head/main - refs/head/feature/** - refs/tags/** - name: test - image: maven:3.9-eclipse-temurin-21 + image: maven:3.9-eclipse-temurin-25 commands: - mvn test -B when: branch: include: - - master + - main - feature/* - name: deploy - image: maven:3.9-eclipse-temurin-21 + image: maven:3.9-eclipse-temurin-25 environment: REPO_TOKEN: from_secret: repo-token @@ -32,7 +32,7 @@ steps: - mvn -s maven-settings.xml deploy -DskipTests=true when: branch: - - master + - main event: exclude: - pull_request From cae42211577c7088c179aa978eef150bb514ca29 Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 24 Jan 2026 00:07:55 +0100 Subject: [PATCH 3/6] Disable automatic deployment. --- .drone.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.drone.yml b/.drone.yml index 62e1b0f..8e96831 100644 --- a/.drone.yml +++ b/.drone.yml @@ -21,18 +21,18 @@ steps: include: - main - 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-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 From b89b87d7e9161ac557c08917fd69a526d604fa43 Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 24 Jan 2026 04:40:42 +0100 Subject: [PATCH 4/6] PDF output: always create a DIN A4 page. That is the ONLY same format. --- .../generator/renderer/pdf/Generator.java | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) 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 6d44efa..3fdfc48 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,7 +5,6 @@ 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; @@ -20,18 +19,31 @@ 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( @@ -41,8 +53,8 @@ class Generator { this.maze.getAlgorithm() )); pdDocument.setDocumentInformation(info); - final PDPage puzzlePage = new PDPage(new PDRectangle(pageWidth, pageHeight)); - final PDPage solutionPage = new PDPage(new PDRectangle(pageWidth, pageHeight)); + final PDPage puzzlePage = new PDPage(REFERENCE_PAGE); + final PDPage solutionPage = new PDPage(REFERENCE_PAGE); pdDocument.addPage(puzzlePage); pdDocument.addPage(solutionPage); try (final PDPageContentStream puzzlePageContentStream = new PDPageContentStream(pdDocument, puzzlePage); @@ -75,7 +87,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(0f, 0f); + Coordinate coordinate = new Coordinate(0, 0); // Draw the TOP borders of all tiles. for (int y = 0; y < this.maze.getHeight(); y++) { boolean isPainting = false; @@ -248,11 +260,15 @@ class Generator { @Value private class Coordinate { - float x; float y; - public Coordinate(final float x, final 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) { this.x = x; this.y = y; } @@ -262,7 +278,7 @@ class Generator { } private float calcX(final int x) { - return x * PDFRenderer.SCALE + PDFRenderer.MARGIN; + return x * Generator.this.stepSize + Generator.MARGIN; } public Coordinate withY(final int y) { @@ -270,7 +286,7 @@ class Generator { } private float calcY(final int y) { - return (Generator.this.maze.getHeight() - y) * PDFRenderer.SCALE + PDFRenderer.MARGIN; + return (Generator.this.maze.getHeight() - y) * Generator.this.stepSize + Generator.MARGIN; } } @@ -286,11 +302,11 @@ class Generator { } private float calcX(final int x) { - return x * PDFRenderer.SCALE + PDFRenderer.SCALE / 2 + PDFRenderer.MARGIN; + return x * Generator.this.stepSize + Generator.this.stepSize / 2 + Generator.MARGIN; } private float calcY(final int y) { - return (Generator.this.maze.getHeight() - y) * PDFRenderer.SCALE - PDFRenderer.SCALE / 2 + PDFRenderer.MARGIN; + return (Generator.this.maze.getHeight() - y) * Generator.this.stepSize - Generator.this.stepSize / 2 + Generator.MARGIN; } } } From fedac0bb72cc156ba855fcf15cbe29f6ff1ebd2f Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 24 Jan 2026 04:41:02 +0100 Subject: [PATCH 5/6] [maven-release-plugin] prepare release v0.5.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b558695..505f0b9 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ch.fritteli.a-maze-r maze-generator - 0.4.1-SNAPSHOT + 0.5.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.5.0 From 2f9c3d6d50a041b44dd6b7b38ee37a754a361ebf Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Sat, 24 Jan 2026 04:41:05 +0100 Subject: [PATCH 6/6] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 505f0b9..3ccfe2e 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ch.fritteli.a-maze-r maze-generator - 0.5.0 + 0.5.1-SNAPSHOT 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 - v0.5.0 + HEAD