diff --git a/src/main/java/de/neemann/digital/draw/shapes/custom/svg/Context.java b/src/main/java/de/neemann/digital/draw/shapes/custom/svg/Context.java index 28bdd8839..a160a54dd 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/custom/svg/Context.java +++ b/src/main/java/de/neemann/digital/draw/shapes/custom/svg/Context.java @@ -40,11 +40,16 @@ class Context { private float strokeOpacity; private float thickness; private float fontSize; + private float pixelPerMM; private String textAnchor; private boolean fillRuleEvenOdd; private HashMap classesMap; Context() { + this(72 / 25.4f * 4 / 3); // 72 DPI per default + } + + Context(float pixelsPerMM) { parent = null; tr = Transform.IDENTITY; thickness = 1; @@ -53,6 +58,7 @@ class Context { fill = Color.BLACK; fillOpacity = 1; strokeOpacity = 1; + this.pixelPerMM = pixelsPerMM; } private Context(Context parent) { @@ -66,6 +72,7 @@ class Context { fontSize = parent.fontSize; textAnchor = parent.textAnchor; fillRuleEvenOdd = parent.fillRuleEvenOdd; + pixelPerMM = parent.pixelPerMM; } Context(Context parent, Element element) throws SvgException { @@ -260,6 +267,12 @@ class Context { return 16 * s; case "px": return s; + case "mm": + return s * c.pixelPerMM; + case "cm": + return 10 * s * c.pixelPerMM; + case "in": + return 25.4f * s * c.pixelPerMM; default: return c.getFontSize(); } diff --git a/src/test/java/de/neemann/digital/draw/shapes/custom/svg/ContextTest.java b/src/test/java/de/neemann/digital/draw/shapes/custom/svg/ContextTest.java index b87cc95ce..bee7dfbda 100644 --- a/src/test/java/de/neemann/digital/draw/shapes/custom/svg/ContextTest.java +++ b/src/test/java/de/neemann/digital/draw/shapes/custom/svg/ContextTest.java @@ -43,6 +43,9 @@ public class ContextTest extends TestCase { assertEquals(10, Context.readStyle(new Context(), "font-size:10px").getFontSize(), 1e-4); assertEquals(20, Context.readStyle(new Context(), "font-size:10;font-size:2em").getFontSize(), 1e-4); assertEquals(15, Context.readStyle(new Context(), "font-size:10;font-size:150%").getFontSize(), 1e-4); + assertEquals(96, Context.readStyle(new Context(), "font-size:25.4mm").getFontSize(), 1e-4); + assertEquals(96, Context.readStyle(new Context(), "font-size:2.54cm").getFontSize(), 1e-4); + assertEquals(96, Context.readStyle(new Context(), "font-size:1in").getFontSize(), 1e-4); } } \ No newline at end of file