From 6fbec94e04de1fe14351adb42564bfd17ceed2b2 Mon Sep 17 00:00:00 2001 From: Zufu Liu Date: Mon, 22 Dec 2025 09:03:18 +1100 Subject: Feature [feature-requests:#1571]. Improve determination of monospace. Use minimum width of ASCII graphic characters instead of font's reported average character width to determine reasonable epsilon for equality of all graphic character widths. Case reported where average character width was inaccurate. --- src/ViewStyle.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index f553bc825..361b71d25 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -93,9 +93,9 @@ void FontRealised::Realise(Surface &surface, int zoomLevel, Technology technolog const XYPOSITION maxWidth = *std::max_element(positions.begin(), positions.end()); const XYPOSITION minWidth = *std::min_element(positions.begin(), positions.end()); const XYPOSITION variance = maxWidth - minWidth; - const XYPOSITION scaledVariance = variance / measurements.aveCharWidth; constexpr XYPOSITION monospaceWidthEpsilon = 0.000001; // May need tweaking if monospace fonts vary more - measurements.monospaceASCII = scaledVariance < monospaceWidthEpsilon; + const XYPOSITION scaledVariance = monospaceWidthEpsilon * minWidth; + measurements.monospaceASCII = variance < scaledVariance; measurements.monospaceCharacterWidth = minWidth; } else { measurements.monospaceASCII = false; -- cgit v1.2.3