aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorZufu Liu <unknown>2025-12-22 09:03:18 +1100
committerZufu Liu <unknown>2025-12-22 09:03:18 +1100
commit6fbec94e04de1fe14351adb42564bfd17ceed2b2 (patch)
treebd26b4913dfac34439966112811161829bb3a661
parent65de8b15b50c6d365b1eef14daaeb64736430d34 (diff)
downloadscintilla-mirror-6fbec94e04de1fe14351adb42564bfd17ceed2b2.tar.gz
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.
-rw-r--r--src/ViewStyle.cxx4
1 files 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;