[Pkg-javascript-commits] [pdf.js] 152/204: Use Font Loading API if available
David Prévot
taffit at moszumanska.debian.org
Sat Oct 25 18:50:45 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository pdf.js.
commit d0845df971b1462c361c9a3dd8cfd42d1b03a632
Author: Rob Wu <rob at robwu.nl>
Date: Tue Sep 30 21:24:31 2014 +0200
Use Font Loading API if available
http://dev.w3.org/csswg/css-font-loading/
---
src/display/font_loader.js | 65 +++++++++++++++++++++++++++++++++++++++++-----
web/debugger.js | 11 ++++++--
2 files changed, 67 insertions(+), 9 deletions(-)
diff --git a/src/display/font_loader.js b/src/display/font_loader.js
index a7deaaf..6d2b8a8 100644
--- a/src/display/font_loader.js
+++ b/src/display/font_loader.js
@@ -15,7 +15,7 @@
* limitations under the License.
*/
/* globals PDFJS, shadow, isWorker, assert, warn, bytesToString, string32,
- globalScope */
+ globalScope, FontFace, Promise */
'use strict';
@@ -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() {
@@ -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];
@@ -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();
@@ -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;
diff --git a/web/debugger.js b/web/debugger.js
index 81da232..a9d173b 100644
--- a/web/debugger.js
+++ b/web/debugger.js
@@ -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 = '';
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git
More information about the Pkg-javascript-commits
mailing list