[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