Browse Source

back out bad font measurement changes

Chris Jones 14 years ago
parent
commit
671dd3b0e8
  1. 32
      fonts.js
  2. 26
      pdf.js

32
fonts.js

@ -22,7 +22,14 @@ var kMaxWaitForFontFace = 1000;
*/ */
var Fonts = (function Fonts() { var Fonts = (function Fonts() {
var kScalePrecision = 40;
var fonts = []; var fonts = [];
if (!isWorker) {
var ctx = document.createElement('canvas').getContext('2d');
ctx.scale(1 / kScalePrecision, 1);
}
var fontCount = 0; var fontCount = 0;
function FontInfo(name, data, properties) { function FontInfo(name, data, properties) {
@ -35,6 +42,7 @@ var Fonts = (function Fonts() {
} }
var current; var current;
var measureCache;
return { return {
registerFont: function fonts_registerFont(fontName, data, properties) { registerFont: function fonts_registerFont(fontName, data, properties) {
@ -49,6 +57,28 @@ var Fonts = (function Fonts() {
}, },
lookupById: function fonts_lookupById(id) { lookupById: function fonts_lookupById(id) {
return fonts[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;
} }
}; };
})(); })();
@ -1080,7 +1110,7 @@ var Font = (function() {
return rule; return rule;
}, },
charsToUnicode: function fonts_charsToUnicode(chars) { charsToUnicode: function fonts_chars2Unicode(chars) {
var charsCache = this.charsCache; var charsCache = this.charsCache;
// if we translated this string before, just grab it from the cache // if we translated this string before, just grab it from the cache

26
pdf.js

@ -3972,6 +3972,7 @@ var CanvasGraphics = (function() {
this.ctx.$setFont(fontName, size); this.ctx.$setFont(fontName, size);
} else { } else {
this.ctx.font = size + 'px "' + fontName + '"'; this.ctx.font = size + 'px "' + fontName + '"';
Fonts.setActive(fontName, fontObj, size);
} }
}, },
setTextRenderingMode: function(mode) { setTextRenderingMode: function(mode) {
@ -4009,25 +4010,24 @@ var CanvasGraphics = (function() {
var ctx = this.ctx; var ctx = this.ctx;
var current = this.current; var current = this.current;
ctx.save();
ctx.transform.apply(ctx, current.textMatrix);
ctx.scale(1, -1);
if (this.ctx.$showText) { if (this.ctx.$showText) {
ctx.$showText(current.y, text); ctx.$showText(current.y, text);
} else { } else {
ctx.save();
ctx.transform.apply(ctx, current.textMatrix);
ctx.scale(1, -1);
ctx.translate(current.x, -1 * current.y); ctx.translate(current.x, -1 * current.y);
var font = this.current.font;
var font = current.font; if (font) {
ctx.transform.apply(ctx, font.textMatrix); ctx.transform.apply(ctx, font.textMatrix);
text = font.charsToUnicode(text);
text = font.charsToUnicode(text); }
ctx.fillText(text, 0, 0); ctx.fillText(text, 0, 0);
current.x += ctx.measureText(text).width; current.x += Fonts.measureText(text);
ctx.restore();
} }
this.ctx.restore();
}, },
showSpacedText: function(arr) { showSpacedText: function(arr) {
for (var i = 0; i < arr.length; ++i) { for (var i = 0; i < arr.length; ++i) {

Loading…
Cancel
Save