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;
}
}
}