Fonts.js: Add isLoadedCallback and add hack known from worker/client.js

This commit is contained in:
Julian Viereck 2011-06-28 09:50:53 +02:00
parent 1ac7064cad
commit 519fb435c3

View File

@ -779,9 +779,18 @@ var Font = (function () {
}); });
}, },
bindDOM: function font_bindDom(data) { bindDOM: function font_bindDom(data, callback) {
var fontName = this.name; var fontName = this.name;
// Just adding the font-face to the DOM doesn't make it load. It
// seems it's loaded once Gecko notices it's used. Therefore,
// add a div on the page using the loaded font.
var div = document.createElement("div");
var style = 'font-family:"' + name +
'";position: absolute;top:-99999;left:-99999;z-index:-99999';
div.setAttribute("style", style);
document.body.appendChild(div);
/** Hack begin */ /** Hack begin */
// Actually there is not event when a font has finished downloading so // Actually there is not event when a font has finished downloading so
// the following code are a dirty hack to 'guess' when a font is ready // the following code are a dirty hack to 'guess' when a font is ready
@ -801,15 +810,19 @@ var Font = (function () {
// For some reasons the font has not loaded, so mark it loaded for the // For some reasons the font has not loaded, so mark it loaded for the
// page to proceed but cry // page to proceed but cry
if ((Date.now() - this.start) >= kMaxWaitForFontFace) { if (textWidth == ctx.measureText(testString).width) {
window.clearInterval(interval); if ((Date.now() - this.start) < kMaxWaitForFontFace) {
Fonts[fontName].loading = false; return;
warn("Is " + fontName + " loaded?"); } else {
this.start = 0; warn("Is " + fontName + " loaded?");
} else if (textWidth != ctx.measureText(testString).width) { }
window.clearInterval(interval); }
Fonts[fontName].loading = false;
this.start = 0; window.clearInterval(interval);
Fonts[fontName].loading = false;
this.start = 0;
if (callback) {
callback();
} }
}, 30, this); }, 30, this);