Use Font Loading API if available
http://dev.w3.org/csswg/css-font-loading/
This commit is contained in:
parent
6a230af332
commit
d0845df971
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
/* globals PDFJS, shadow, isWorker, assert, warn, bytesToString, string32,
|
/* globals PDFJS, shadow, isWorker, assert, warn, bytesToString, string32,
|
||||||
globalScope */
|
globalScope, FontFace, Promise */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
@ -40,6 +40,12 @@ var FontLoader = {
|
|||||||
if (styleElement) {
|
if (styleElement) {
|
||||||
styleElement.parentNode.removeChild(styleElement);
|
styleElement.parentNode.removeChild(styleElement);
|
||||||
}
|
}
|
||||||
|
//#if !(MOZCENTRAL)
|
||||||
|
this.nativeFontFaces.forEach(function(nativeFontFace) {
|
||||||
|
document.fonts.delete(nativeFontFace);
|
||||||
|
});
|
||||||
|
this.nativeFontFaces.length = 0;
|
||||||
|
//#endif
|
||||||
},
|
},
|
||||||
//#if !(MOZCENTRAL)
|
//#if !(MOZCENTRAL)
|
||||||
get loadTestFont() {
|
get loadTestFont() {
|
||||||
@ -97,10 +103,21 @@ var FontLoader = {
|
|||||||
return false;
|
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) {
|
bind: function fontLoaderBind(fonts, callback) {
|
||||||
assert(!isWorker, 'bind() shall be called from main thread');
|
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++) {
|
for (var i = 0, ii = fonts.length; i < ii; i++) {
|
||||||
var font = fonts[i];
|
var font = fonts[i];
|
||||||
|
|
||||||
@ -111,15 +128,26 @@ var FontLoader = {
|
|||||||
}
|
}
|
||||||
font.attached = true;
|
font.attached = true;
|
||||||
|
|
||||||
|
if (this.isFontLoadingAPISupported) {
|
||||||
|
var nativeFontFace = font.createNativeFontFace();
|
||||||
|
if (nativeFontFace) {
|
||||||
|
fontLoadPromises.push(nativeFontFace.loaded);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
var rule = font.bindDOM();
|
var rule = font.bindDOM();
|
||||||
if (rule) {
|
if (rule) {
|
||||||
rules.push(rule);
|
rules.push(rule);
|
||||||
fontsToLoad.push(font);
|
fontsToLoad.push(font);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var request = FontLoader.queueLoadingCallback(callback);
|
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);
|
FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request);
|
||||||
} else {
|
} else {
|
||||||
request.complete();
|
request.complete();
|
||||||
@ -284,6 +312,29 @@ var FontFaceObject = (function FontFaceObjectClosure() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FontFaceObject.prototype = {
|
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() {
|
bindDOM: function FontFaceObject_bindDOM() {
|
||||||
if (!this.data) {
|
if (!this.data) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -112,13 +112,20 @@ var FontInspector = (function FontInspectorClosure() {
|
|||||||
return moreInfo;
|
return moreInfo;
|
||||||
}
|
}
|
||||||
var moreInfo = properties(fontObj, ['name', 'type']);
|
var moreInfo = properties(fontObj, ['name', 'type']);
|
||||||
var m = /url\(['"]?([^\)"']+)/.exec(url);
|
|
||||||
var fontName = fontObj.loadedName;
|
var fontName = fontObj.loadedName;
|
||||||
var font = document.createElement('div');
|
var font = document.createElement('div');
|
||||||
var name = document.createElement('span');
|
var name = document.createElement('span');
|
||||||
name.textContent = fontName;
|
name.textContent = fontName;
|
||||||
var download = document.createElement('a');
|
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';
|
download.textContent = 'Download';
|
||||||
var logIt = document.createElement('a');
|
var logIt = document.createElement('a');
|
||||||
logIt.href = '';
|
logIt.href = '';
|
||||||
|
Loading…
Reference in New Issue
Block a user