From 6369f2b728cf54e937a3fa25deac2b4aba8d305b Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 23 Jan 2017 12:00:59 +0100 Subject: [PATCH] Fix char width reading on Firefox --- .../editor/browser/config/charWidthReader.ts | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/browser/config/charWidthReader.ts b/src/vs/editor/browser/config/charWidthReader.ts index cdfbcaa3653..43ae0cac092 100644 --- a/src/vs/editor/browser/config/charWidthReader.ts +++ b/src/vs/editor/browser/config/charWidthReader.ts @@ -204,22 +204,30 @@ class CanvasCharWidthReader implements ICharWidthReader { } } +function readCharWidthsFromDom(bareFontInfo: BareFontInfo, requests: CharWidthRequest[]): void { + let reader = new DomCharWidthReader(bareFontInfo, requests); + reader.read(); +} + +function readCharWidthsFromCanvas(bareFontInfo: BareFontInfo, requests: CharWidthRequest[]): void { + let reader = new CanvasCharWidthReader(bareFontInfo, requests); + reader.read(); +} + export function readCharWidths(bareFontInfo: BareFontInfo, requests: CharWidthRequest[]): void { - // In IE11, it appears that ctx.measureText() always returns integer results. - if (browser.isIE) { - let reader = new DomCharWidthReader(bareFontInfo, requests); - reader.read(); + // In IE11 and Firefox, it appears that ctx.measureText() always returns integer results. + // In Edge, ctx.measureText() gives floating point results, but they don't make any sense. + if (browser.isIE || browser.isFirefox) { + readCharWidthsFromDom(bareFontInfo, requests); return; } // On Linux, it appears that ctx.measureText() is unaffected by the browser zoom (which is correct), // but the char widths at rendering time are affected by the browser zoom (which is unexpected) if (platform.isLinux) { - let reader = new DomCharWidthReader(bareFontInfo, requests); - reader.read(); + readCharWidthsFromDom(bareFontInfo, requests); return; } - let reader = new CanvasCharWidthReader(bareFontInfo, requests); - reader.read(); + readCharWidthsFromCanvas(bareFontInfo, requests); } -- GitLab