Browse Source

Fixed font size growing issue after successive calls. Closes #70

v1.x
Tj Holowaychuk 14 years ago
parent
commit
c10bbcb872
  1. 46
      lib/context2d.js
  2. 6
      test/canvas.test.js

46
lib/context2d.js

@ -68,14 +68,34 @@ var parseFont = exports.parseFont = function(str){
// Invalid
if (!captures) return;
// Cached
if (cache[str]) return cache[str];
// Populate font object
font.weight = captures[1] || 'normal';
font.style = captures[2] || 'normal';
font.size = parseFloat(captures[3]);
font.unit = captures[4];
font.family = captures[5];
// TODO: dpi
// TODO: remaining unit conversion
switch (font.unit) {
case 'pt':
font.size /= .75;
break;
case 'in':
font.size *= 96;
break;
case 'mm':
font.size *= 96.0 / 25.4;
break;
case 'cm':
font.size *= 96.0 / 2.54;
break;
}
return font;
return cache[str] = font;
};
/**
@ -186,30 +206,8 @@ Context2d.prototype.__defineGetter__('strokeStyle', function(){
Context2d.prototype.__defineSetter__('font', function(val){
if ('string' == typeof val) {
var font;
if (font = cache[val] || parseFont(val)) {
if (font = parseFont(val)) {
this.lastFontString = val;
// TODO: dpi
// TODO: remaining unit conversion
switch (font.unit) {
case 'pt':
font.size /= .75;
break;
case 'in':
font.size *= 96;
break;
case 'mm':
font.size *= 96.0 / 25.4;
break;
case 'cm':
font.size *= 96.0 / 2.54;
break;
}
// Cache font object
cache[val] = font;
// Set font
this.setFont(
font.weight
, font.style

6
test/canvas.test.js

@ -23,13 +23,13 @@ module.exports = {
'20px Arial'
, { size: 20, unit: 'px', family: 'Arial' }
, '20pt Arial'
, { size: 20, unit: 'pt', family: 'Arial' }
, { size: 26.666666666666668, unit: 'pt', family: 'Arial' }
, '20.5pt Arial'
, { size: 20.5, unit: 'pt', family: 'Arial' }
, { size: 27.333333333333332, unit: 'pt', family: 'Arial' }
, '20% Arial'
, { size: 20, unit: '%', family: 'Arial' }
, '20mm Arial'
, { size: 20, unit: 'mm', family: 'Arial' }
, { size: 75.59055118110237, unit: 'mm', family: 'Arial' }
, '20px serif'
, { size: 20, unit: 'px', family: 'serif' }
, '20px sans-serif'

Loading…
Cancel
Save