*/
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) {
}
var current;
- var measureCache;
return {
registerFont: function fonts_registerFont(fontName, data, properties) {
},
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;
}
};
})();
return rule;
},
- charsToUnicode: function fonts_chars2Unicode(chars) {
+ charsToUnicode: function fonts_charsToUnicode(chars) {
var charsCache = this.charsCache;
// if we translated this string before, just grab it from the cache
this.ctx.$setFont(fontName, size);
} else {
this.ctx.font = size + 'px "' + fontName + '"';
- Fonts.setActive(fontName, fontObj, size);
}
},
setTextRenderingMode: function(mode) {
var ctx = this.ctx;
var current = this.current;
- ctx.save();
- ctx.transform.apply(ctx, current.textMatrix);
- ctx.scale(1, -1);
-
if (this.ctx.$showText) {
ctx.$showText(current.y, text);
} else {
+ ctx.save();
+
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.scale(1, -1);
ctx.translate(current.x, -1 * current.y);
- var font = this.current.font;
- if (font) {
- ctx.transform.apply(ctx, font.textMatrix);
- text = font.charsToUnicode(text);
- }
+
+ var font = current.font;
+ ctx.transform.apply(ctx, font.textMatrix);
+
+ text = font.charsToUnicode(text);
+
ctx.fillText(text, 0, 0);
- current.x += Fonts.measureText(text);
- }
+ current.x += ctx.measureText(text).width;
- this.ctx.restore();
+ ctx.restore();
+ }
},
showSpacedText: function(arr) {
for (var i = 0; i < arr.length; ++i) {