]> git.parisson.com Git - pdf.js.git/commitdiff
removed Fonts class
authorsbarman <sbarman@L3CWZ5T.(none)>
Wed, 20 Jul 2011 23:42:51 +0000 (16:42 -0700)
committersbarman <sbarman@L3CWZ5T.(none)>
Wed, 20 Jul 2011 23:42:51 +0000 (16:42 -0700)
fonts.js
pdf.js

index 607e2aab93241a8187fa6420152f30cf98dd25d4..94b93b0da0f7df0cde68fd2c79588e75e1a32689 100755 (executable)
--- a/fonts.js
+++ b/fonts.js
@@ -21,17 +21,13 @@ var kMaxWaitForFontFace = 1000;
  *      http://cgit.freedesktop.org/poppler/poppler/tree/poppler/GfxFont.cc#n65
  */
 
-var Fonts = (function Fonts() {
+var FontMeasure = (function FontMeasure() {
   var kScalePrecision = 40;
-  var fonts = [];
 
-  if (!isWorker) {
-    var ctx = document.createElement('canvas').getContext('2d');
-    ctx.scale(1 / kScalePrecision, 1);
-  }
+  var ctx = document.createElement('canvas').getContext('2d');
+  ctx.scale(1 / kScalePrecision, 1);
 
-  var fontCount = 0;
-  
+  /*
   function FontInfo(name, data, properties) {
     this.name = name;
     this.data = data;
@@ -40,28 +36,14 @@ var Fonts = (function Fonts() {
     this.loading = true;
     this.sizes = [];
   }
+*/
 
   var current;
   var measureCache;
 
   return {
-    registerFont: function fonts_registerFont(fontName, data, properties) {
-      var font = new FontInfo(fontName, data, properties);
-      fonts.push(font);
-      return font.id;
-    },
-    blacklistFont: function fonts_blacklistFont(fontName) {
-      var id = registerFont(fontName, null, {});
-      markLoaded(fontName);
-      return id;
-    },
-    lookupById: function fonts_lookupById(id) {
-      return fonts[id];
-    },
-    setActive: function fonts_setActive(fontName, fontObj, size) {
-      // |current| can be null is fontName is a built-in font
-      // (e.g. "sans-serif")
-      if (fontObj && (current = fonts[fontObj.id])) {
+    setActive: function fonts_setActive(font, size) {
+      if (current = font) {
         var sizes = current.sizes;
         if (!(measureCache = sizes[size]))
           measureCache = sizes[size] = Object.create(null);
@@ -69,10 +51,12 @@ var Fonts = (function Fonts() {
         measureCache = null
       }
 
-      ctx.font = (size * kScalePrecision) + 'px "' + fontName + '"';
+      ctx.font = (size * kScalePrecision) + 'px "' + font.loadedName + '"';
     },
     measureText: function fonts_measureText(text) {
       var width;
+      // something is wrong with the caching, it is messing up page 12 in
+      // the tracemonkey paper
       if (measureCache && (width = measureCache[text]))
         return width;
       width = ctx.measureText(text).width / kScalePrecision;
@@ -88,9 +72,9 @@ var FontLoader = {
 
   bind: function(fonts, callback) {
     function checkFontsLoaded() {
-      for (var i = 0; i < allIds.length; i++) {
-        var id = allIds[i];
-        if (Fonts.lookupById(id).loading) {
+      for (var i = 0; i < objs.length; i++) {
+        var fontObj = objs[i];
+        if (fontObj.loading) {
           return false;
         }
       }
@@ -102,18 +86,17 @@ var FontLoader = {
       return true;
     }
 
-    var allIds = [];
-    var rules = [], names = [], ids = [];
+    var rules = [], names = [], objs = [];
 
     for (var i = 0; i < fonts.length; i++) {
       var font = fonts[i];
 
       var obj = new Font(font.name, font.file, font.properties);
-      font.fontDict.fontObj = obj;
-      allIds.push(obj.id);
+      obj.loading = true;
+      objs.push(obj);
 
       var str = '';
-      var data = Fonts.lookupById(obj.id).data;
+      var data = obj.data;
       var length = data.length;
       for (var j = 0; j < length; j++)
         str += String.fromCharCode(data[j]);
@@ -122,13 +105,12 @@ var FontLoader = {
       if (rule) {
         rules.push(rule);
         names.push(obj.loadedName);
-        ids.push(obj.id);
       }
     }
 
     this.listeningForFontLoad = false;
     if (!isWorker && rules.length) {
-      FontLoader.prepareFontLoadEvent(rules, names, ids);
+      FontLoader.prepareFontLoadEvent(rules, names, objs);
     }
     
     if (!checkFontsLoaded()) {
@@ -136,14 +118,14 @@ var FontLoader = {
         'pdfjsFontLoad', checkFontsLoaded, false);
     }
 
-    return;
+    return objs;
   },
   // Set things up so that at least one pdfjsFontLoad event is
   // dispatched when all the @font-face |rules| for |names| have been
   // loaded in a subdocument.  It's expected that the load of |rules|
   // has already started in this (outer) document, so that they should
   // be ordered before the load in the subdocument.
-  prepareFontLoadEvent: function(rules, names, ids) {
+  prepareFontLoadEvent: function(rules, names, objs) {
       /** Hack begin */
       // There's no event when a font has finished downloading so the
       // following code is a dirty hack to 'guess' when a font is
@@ -184,8 +166,8 @@ var FontLoader = {
           'message',
           function(e) {
             var fontNames = JSON.parse(e.data);
-            for (var i = 0; i < fontNames.length; ++i) {
-              var font = Fonts.lookupById(fontNames[i].substring(7) | 0);
+            for (var i = 0; i < objs.length; ++i) {
+              var font = objs[i];
               font.loading = false;
             }
             var evt = document.createEvent('Events');
@@ -381,8 +363,7 @@ var Font = (function() {
     // If the font is to be ignored, register it like an already loaded font
     // to avoid the cost of waiting for it be be loaded by the platform.
     if (properties.ignore) {
-      this.id = Fonts.blacklistFont(name);
-      this.loadedName = 'pdfFont' + this.id;
+      this.loadedName = 'Arial';
       return;
     }
 
@@ -412,11 +393,15 @@ var Font = (function() {
     }
     this.data = data;
     this.type = properties.type;
-    this.id = Fonts.registerFont(name, data, properties);
-    this.loadedName = 'pdfFont' + this.id;
+    this.loadedName = getUniqueName();
     this.compositeFont = properties.compositeFont;
   };
 
+  var numFonts = 0;
+  function getUniqueName() {
+    return 'pdfFont' + numFonts++;
+  }
+
   function stringToArray(str) {
     var array = [];
     for (var i = 0; i < str.length; ++i)
@@ -746,6 +731,7 @@ var Font = (function() {
     font: null,
     mimetype: null,
     encoding: null,
+    sizes: [],
 
     checkAndRepair: function font_checkAndRepair(name, font, properties) {
       function readTableEntry(file) {
diff --git a/pdf.js b/pdf.js
index 64e830f5dd1bea728eaee2c39d8f7c3fce94cd2f..51426dce73d09d4690987e3c5190d7765e033456 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -2982,7 +2982,7 @@ var Page = (function() {
       this.compile(gfx, fonts);
       stats.compile = Date.now();
 
-      FontLoader.bind(
+      var fontObjs = FontLoader.bind(
         fonts,
         function() {
           stats.fonts = Date.now();
@@ -2999,6 +2999,9 @@ var Page = (function() {
             continuation(exc);
           });
         });
+
+      for (var i = 0, ii = fonts.length; i < ii; ++i)
+        fonts[i].fontDict.fontObj = fontObjs[i];
     },
 
 
@@ -4093,7 +4096,7 @@ var CanvasGraphics = (function() {
         this.ctx.$setFont(fontName, size);
       } else {
         this.ctx.font = size + 'px "' + fontName + '"';
-        Fonts.setActive(fontName, fontObj, size);
+        FontMeasure.setActive(fontObj, size);
       }
     },
     setTextRenderingMode: function(mode) {
@@ -4145,7 +4148,7 @@ var CanvasGraphics = (function() {
           text = font.charsToUnicode(text);
         }
         ctx.fillText(text, 0, 0);
-        current.x += Fonts.measureText(text);
+        current.x += FontMeasure.measureText(text);
       }
 
       this.ctx.restore();