Merge pull request #7676 from ahocevar/font-check

Check fonts against two reference fonts
This commit is contained in:
Andreas Hocevar
2018-01-08 12:50:04 +01:00
committed by GitHub
+15 -11
View File
@@ -125,22 +125,26 @@ _ol_render_canvas_.checkFont = (function() {
var retries = 60; var retries = 60;
var checked = _ol_render_canvas_.checkedFonts_; var checked = _ol_render_canvas_.checkedFonts_;
var labelCache = _ol_render_canvas_.labelCache; var labelCache = _ol_render_canvas_.labelCache;
var font = '32px monospace'; var size = '32px ';
var referenceFonts = ['monospace', 'serif'];
var len = referenceFonts.length;
var text = 'wmytzilWMYTZIL@#/&?$%10'; var text = 'wmytzilWMYTZIL@#/&?$%10';
var interval, referenceWidth; var interval, referenceWidth;
function isAvailable(fontFamily) { function isAvailable(font) {
var context = _ol_render_canvas_.getMeasureContext(); var context = _ol_render_canvas_.getMeasureContext();
context.font = font;
referenceWidth = context.measureText(text).width;
var available = true; var available = true;
if (fontFamily != 'monospace') { for (var i = 0; i < len; ++i) {
context.font = '32px ' + fontFamily + ',monospace'; var referenceFont = referenceFonts[i];
var width = context.measureText(text).width; context.font = size + referenceFont;
// If width and referenceWidth are the same, then the 'monospace' referenceWidth = context.measureText(text).width;
// fallback was used instead of the font we wanted, so the font is not if (font != referenceFont) {
// available. context.font = size + font + ',' + referenceFont;
available = width != referenceWidth; var width = context.measureText(text).width;
// If width and referenceWidth are the same, then the fallback was used
// instead of the font we wanted, so the font is not available.
available = available && width != referenceWidth;
}
} }
return available; return available;
} }