diff --git a/fonts.js b/fonts.js index 6aed3ee97..793ba99ef 100644 --- a/fonts.js +++ b/fonts.js @@ -3,6 +3,8 @@ "use strict"; +var isWorker = (typeof window == "undefined"); + /** * Maximum file size of the font. */ @@ -36,9 +38,12 @@ var kDisableFonts = false; var Fonts = (function () { var kScalePrecision = 40; - var fonts = Object.create(null); - var ctx = document.createElement("canvas").getContext("2d"); - ctx.scale(1 / kScalePrecision, 1); + var fonts = Object.create(null); + + if (!isWorker) { + var ctx = document.createElement("canvas").getContext("2d"); + ctx.scale(1 / kScalePrecision, 1); + } function Font(name, data, properties) { this.name = name; @@ -120,8 +125,6 @@ var Fonts = (function () { var FontLoader = { bind: function(fonts, callback) { - var worker = (typeof window == "undefined"); - function checkFontsLoaded() { for (var i = 0; i < fonts.length; i++) { var font = fonts[i]; @@ -149,7 +152,7 @@ var FontLoader = { for (var j = 0; j < length; j++) str += String.fromCharCode(data[j]); - var rule = worker ? obj.bindWorker(str) : obj.bindDOM(str); + var rule = isWorker ? obj.bindWorker(str) : obj.bindDOM(str); if (rule) { rules.push(rule); names.push(font.name); @@ -157,7 +160,7 @@ var FontLoader = { } } - if (!worker && rules.length) { + if (!isWorker && rules.length) { FontLoader.prepareFontLoadEvent(rules, names); } diff --git a/worker/client.js b/worker/client.js index 73fb12f09..fd98b857e 100644 --- a/worker/client.js +++ b/worker/client.js @@ -59,14 +59,15 @@ FontWorker.prototype = { "fonts": function(data) { // console.log("got processed fonts from worker", Object.keys(data)); for (name in data) { - // Update the - Fonts[name].properties = { + // Update the encoding property. + var font = Fonts.lookup(name); + font.properties = { encoding: data[name].encoding } - + // Call `Font.prototype.bindDOM` to make the font get loaded on the page. Font.prototype.bindDOM.call( - Fonts[name], + font, data[name].str, // IsLoadedCallback. this.$handleFontLoadedCallback @@ -84,19 +85,9 @@ FontWorker.prototype = { continue; } - // Store only the data on Fonts that is needed later on, such that we - // hold track on as lease memory as possible. - Fonts[font.name] = { - name: font.name, - mimetype: font.mimetype, - // This is set later on the worker replay. For some fonts, the encoding - // is calculated during the conversion process happening on the worker - // and therefore is not available right now. - // properties: { - // encoding: font.properties.encoding - // }, - cache: Object.create(null) - }; + // Register the font but don't pass in any real data. The idea is to + // store as less data as possible to reduce memory usage. + Fonts.registerFont(font.name, Object.create(null), Object.create(null)); // Mark this font to be handled later. notLoaded.push(font);