From 8892166ea3951e90531bb0533a723df8195f5494 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Sun, 30 Jul 2017 23:34:14 +0300 Subject: [PATCH] Fix non-/closed subpath start and end of rendering logic. --- .../main/java/com/horcrux/svg/TSpanShadowNode.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/TSpanShadowNode.java b/android/src/main/java/com/horcrux/svg/TSpanShadowNode.java index 92febff7..8960ae4c 100644 --- a/android/src/main/java/com/horcrux/svg/TSpanShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/TSpanShadowNode.java @@ -98,10 +98,12 @@ class TSpanShadowNode extends TextShadowNode { double distance = 0; PathMeasure pm = null; + boolean isClosed = false; final boolean hasTextPath = textPath != null; if (hasTextPath) { pm = new PathMeasure(textPath.getPath(), false); distance = pm.getLength(); + isClosed = pm.isClosed(); if (distance == 0) { return path; } @@ -141,10 +143,10 @@ class TSpanShadowNode extends TextShadowNode { double offset = getTextAnchorOffset(textAnchor, textMeasure); int side = 1; - double endOfRendering = 0; double startOfRendering = 0; - boolean sharpMidLine = false; + double endOfRendering = distance; final double fontSize = gc.getFontSize(); + boolean sharpMidLine = false; if (hasTextPath) { sharpMidLine = textPath.getMidLine() == TextPathMidLine.sharp; /* @@ -208,9 +210,11 @@ class TSpanShadowNode extends TextShadowNode { */ final double absoluteStartOffset = getAbsoluteStartOffset(textPath.getStartOffset(), distance, fontSize); offset += absoluteStartOffset; - final double halfPathDistance = distance / 2; - startOfRendering = absoluteStartOffset + (textAnchor == TextAnchor.middle ? -halfPathDistance : 0); - endOfRendering = startOfRendering + distance; + if (isClosed) { + final double halfPathDistance = distance / 2; + startOfRendering = absoluteStartOffset + (textAnchor == TextAnchor.middle ? -halfPathDistance : 0); + endOfRendering = startOfRendering + distance; + } /* TextPathSpacing spacing = textPath.getSpacing(); if (spacing == TextPathSpacing.auto) {