]> git.parisson.com Git - pdf.js.git/commitdiff
backout font measurement change, it is breaking tests
authorAndreas Gal <andreas.gal@gmail.com>
Sat, 9 Jul 2011 01:51:20 +0000 (18:51 -0700)
committerAndreas Gal <andreas.gal@gmail.com>
Sat, 9 Jul 2011 01:51:20 +0000 (18:51 -0700)
fonts.js
pdf.js

index ec89b3a5863822f79f64581a8c26c9e7c53431f0..5b020e8992c82d6bfca9e0036e852ae37b10bd63 100755 (executable)
--- a/fonts.js
+++ b/fonts.js
@@ -22,7 +22,14 @@ var kMaxWaitForFontFace = 1000;
  */
 
 var Fonts = (function Fonts() {
+  var kScalePrecision = 40;
   var fonts = [];
+
+  if (!isWorker) {
+    var ctx = document.createElement('canvas').getContext('2d');
+    ctx.scale(1 / kScalePrecision, 1);
+  }
+
   var fontCount = 0;
   
   function FontInfo(name, data, properties) {
@@ -35,6 +42,7 @@ var Fonts = (function Fonts() {
   }
 
   var current;
+  var measureCache;
 
   return {
     registerFont: function fonts_registerFont(fontName, data, properties) {
@@ -49,6 +57,28 @@ var Fonts = (function Fonts() {
     },
     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])) {
+        var sizes = current.sizes;
+        if (!(measureCache = sizes[size]))
+          measureCache = sizes[size] = Object.create(null);
+      } else {
+        measureCache = null
+      }
+
+      ctx.font = (size * kScalePrecision) + 'px "' + fontName + '"';
+    },
+    measureText: function fonts_measureText(text) {
+      var width;
+      if (measureCache && (width = measureCache[text]))
+        return width;
+      width = ctx.measureText(text).width / kScalePrecision;
+      if (measureCache)
+        measureCache[text] = width;
+      return width;
     }
   };
 })();
@@ -334,14 +364,6 @@ function getUnicodeRangeFor(value) {
   return -1;
 }
 
-var MeasureText = {
-  currentCache: null,
-  currentFont: null,
-  currentSize: 0,
-  ctx: null,
-  sizes: Object.create(null)
-};
-
 /**
  * 'Font' is the class the outside world should use, it encapsulate all the font
  * decoding logics whatever type it is (assuming the font type is supported).
@@ -351,8 +373,6 @@ var MeasureText = {
  *   type1Font.bind();
  */
 var Font = (function() {
-  var kScalePrecision = 40;
-
   var constructor = function font_constructor(name, file, properties) {
     this.name = name;
     this.textMatrix = properties.textMatrix || IDENTITY_MATRIX;
@@ -1090,7 +1110,7 @@ var Font = (function() {
       return rule;
     },
 
-    charsToUnicode: function fonts_charsToUnicode(chars) {
+    charsToUnicode: function fonts_chars2Unicode(chars) {
       var charsCache = this.charsCache;
 
       // if we translated this string before, just grab it from the cache
@@ -1128,32 +1148,6 @@ var Font = (function() {
 
       // Enter the translated string into the cache
       return charsCache[chars] = str;
-    },
-
-    measureText: function fonts_measureText(text, size) {
-      if (MeasureText.currentFont != this ||
-          MeasureText.currentSize != size) {
-        var ctx = MeasureText.ctx;
-        if (!ctx) {
-          ctx = MeasureText.ctx = document.createElement('canvas').getContext('2d');
-          ctx.scale(1 / kScalePrecision, 1);
-        }
-        ctx.font = (size * kScalePrecision) + 'px "' + this.loadedName + '"';
-        MeasureText.currentFont = this;
-        MeasureText.currentSize = size;
-        var cache = MeasureText.sizes[size];
-        if (!cache)
-          cache = MeasureText.sizes[size] = Object.create(null);
-        MeasureText.currentCache = cache;
-      }
-
-      var key = size + "$" + text;
-      var width = MeasureText.currentCache[key];
-      if (width)
-        return width;
-      var ctx = MeasureText.ctx;
-      width = ctx.measureText(text).width / kScalePrecision;
-      return MeasureText.currentCache[key] = width;
     }
   };
 
diff --git a/pdf.js b/pdf.js
index b38bc4eec34baf8368a06025884ea5d7d8da20d8..a40adbec7f4dbcaab24b691b52e7778b6552d270 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -3972,6 +3972,7 @@ var CanvasGraphics = (function() {
         this.ctx.$setFont(fontName, size);
       } else {
         this.ctx.font = size + 'px "' + fontName + '"';
+        Fonts.setActive(fontName, fontObj, size);
       }
     },
     setTextRenderingMode: function(mode) {
@@ -4017,14 +4018,16 @@ var CanvasGraphics = (function() {
         ctx.$showText(current.y, text);
       } else {
         ctx.translate(current.x, -1 * current.y);
-        var font = current.font;
-        ctx.transform.apply(ctx, font.textMatrix);
-        text = font.charsToUnicode(text);
+        var font = this.current.font;
+        if (font) {
+          ctx.transform.apply(ctx, font.textMatrix);
+          text = font.charsToUnicode(text);
+        }
         ctx.fillText(text, 0, 0);
-        current.x += font.measureText(text, current.fontSize);
+        current.x += Fonts.measureText(text);
       }
 
-      ctx.restore();
+      this.ctx.restore();
     },
     showSpacedText: function(arr) {
       for (var i = 0; i < arr.length; ++i) {