backout font measurement change, it is breaking tests

This commit is contained in:
Andreas Gal 2011-07-08 18:51:20 -07:00
parent 5bf4fcba9b
commit f2a4756c77
2 changed files with 39 additions and 42 deletions

View File

@ -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;
}
};

13
pdf.js
View File

@ -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) {