Skip to content

Commit

Permalink
Use Font Loading API if available
Browse files Browse the repository at this point in the history
  • Loading branch information
Rob--W committed Sep 30, 2014
1 parent 6a230af commit 6f0092c
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 9 deletions.
65 changes: 58 additions & 7 deletions src/display/font_loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/
/* globals PDFJS, shadow, isWorker, assert, warn, bytesToString, string32,
globalScope */
globalScope, FontFace, Promise */

'use strict';

Expand All @@ -40,6 +40,12 @@ var FontLoader = {
if (styleElement) {
styleElement.parentNode.removeChild(styleElement);
}
//#if !(MOZCENTRAL)
this.nativeFontFaces.forEach(function(nativeFontFace) {
document.fonts.delete(nativeFontFace);
});
this.nativeFontFaces.length = 0;
//#endif
},
//#if !(MOZCENTRAL)
get loadTestFont() {
Expand Down Expand Up @@ -97,10 +103,21 @@ var FontLoader = {
return false;
})(),

nativeFontFaces: [],

isFontLoadingAPISupported: !isWorker && !!document.fonts,

addNativeFontFace: function fontLoader__addNativeFontFace(nativeFontFace) {
this.nativeFontFaces.push(nativeFontFace);
document.fonts.add(nativeFontFace);
},

bind: function fontLoaderBind(fonts, callback) {
assert(!isWorker, 'bind() shall be called from main thread');

var rules = [], fontsToLoad = [];
var rules = [];
var fontsToLoad = [];
var fontLoadPromises = [];
for (var i = 0, ii = fonts.length; i < ii; i++) {
var font = fonts[i];

Expand All @@ -111,15 +128,26 @@ var FontLoader = {
}
font.attached = true;

var rule = font.bindDOM();
if (rule) {
rules.push(rule);
fontsToLoad.push(font);
if (this.isFontLoadingAPISupported) {
var nativeFontFace = font.createNativeFontFace();
if (nativeFontFace) {
fontLoadPromises.push(nativeFontFace.loaded);
}
} else {
var rule = font.bindDOM();
if (rule) {
rules.push(rule);
fontsToLoad.push(font);
}
}
}

var request = FontLoader.queueLoadingCallback(callback);
if (rules.length > 0 && !this.isSyncFontLoadingSupported) {
if (this.isFontLoadingAPISupported) {
Promise.all(fontsToLoad).then(function() {
request.complete();
});
} else if (rules.length > 0 && !this.isSyncFontLoadingSupported) {
FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request);
} else {
request.complete();
Expand Down Expand Up @@ -284,6 +312,29 @@ var FontFaceObject = (function FontFaceObjectClosure() {
}
}
FontFaceObject.prototype = {
//#if !(MOZCENTRAL)
createNativeFontFace: function FontFaceObject__createNativeFontFace() {
if (!this.data) {
return null;
}

if (PDFJS.disableFontFace) {
this.disableFontFace = true;
return null;
}

var nativeFontFace = new FontFace(this.loadedName, this.data);

FontLoader.addNativeFontFace(nativeFontFace);

if (PDFJS.pdfBug && 'FontInspector' in globalScope &&
globalScope['FontInspector'].enabled) {
globalScope['FontInspector'].fontAdded(this);
}
return nativeFontFace;
},
//#endif

bindDOM: function FontFaceObject_bindDOM() {
if (!this.data) {
return null;
Expand Down
11 changes: 9 additions & 2 deletions web/debugger.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,20 @@ var FontInspector = (function FontInspectorClosure() {
return moreInfo;
}
var moreInfo = properties(fontObj, ['name', 'type']);
var m = /url\(['"]?([^\)"']+)/.exec(url);
var fontName = fontObj.loadedName;
var font = document.createElement('div');
var name = document.createElement('span');
name.textContent = fontName;
var download = document.createElement('a');
download.href = m[1];
if (url) {
url = /url\(['"]?([^\)"']+)/.exec(url);
download.href = url[1];
} else if (fontObj.data) {
url = URL.createObjectURL(new Blob([fontObj.data], {
type: fontObj.mimeType
}));
}
download.href = url;
download.textContent = 'Download';
var logIt = document.createElement('a');
logIt.href = '';
Expand Down

0 comments on commit 6f0092c

Please sign in to comment.