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,6 +68,9 @@ var parseFont = exports.parseFont = function(str){
// Invalid // Invalid
if (!captures) return; if (!captures) return;
// Cached
if (cache[str]) return cache[str];
// Populate font object // Populate font object
font.weight = captures[1] || 'normal'; font.weight = captures[1] || 'normal';
font.style = captures[2] || 'normal'; font.style = captures[2] || 'normal';
@ -75,7 +78,24 @@ var parseFont = exports.parseFont = function(str){
font.unit = captures[4]; font.unit = captures[4];
font.family = captures[5]; font.family = captures[5];
return font; // 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 cache[str] = font;
}; };
/** /**
@ -186,30 +206,8 @@ Context2d.prototype.__defineGetter__('strokeStyle', function(){
Context2d.prototype.__defineSetter__('font', function(val){ Context2d.prototype.__defineSetter__('font', function(val){
if ('string' == typeof val) { if ('string' == typeof val) {
var font; var font;
if (font = cache[val] || parseFont(val)) { if (font = parseFont(val)) {
this.lastFontString = 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( this.setFont(
font.weight font.weight
, font.style , font.style

6
test/canvas.test.js

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

Loading…
Cancel
Save