From a1b4afc57d2b97e678b63a9567a8f6b19c763a99 Mon Sep 17 00:00:00 2001 From: David Schnur Date: Sat, 30 Mar 2013 20:49:47 -0400 Subject: [PATCH] A better fix for the font-size 'smaller' problem. This resolves #991, replacing the earlier temporary patch. It takes advantage of the fact that line-height can take the form of a unit-less integer, in which case it mirrors the font-size, even when it is something abstract, like 'smaller'. We can then read the dummy element's height to learn the effective font-size. --- jquery.flot.canvas.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/jquery.flot.canvas.js b/jquery.flot.canvas.js index 05bbb4f..171f463 100644 --- a/jquery.flot.canvas.js +++ b/jquery.flot.canvas.js @@ -217,21 +217,24 @@ browser, but needs to redraw with canvas text when exporting as an image. // If the font was provided as CSS, create a div with those // classes and examine it to generate a canvas font spec. + // Note the trick of using a line-height of 1, without units; + // this sets it equal to the font-size, even if the font-size + // is something abstract, like 'smaller'. This enables us to + // read the real font-size via the element's height, working + // around browsers that return the literal 'smaller' value. + if (typeof font !== "object") { - var element = $("
").html(text) + var element = $("
 
") .addClass(typeof font === "string" ? font : null) - .css({ - position: "absolute", - top: -9999 - }) + .css({ position: "absolute", padding: 0, 'line-height': 1 }) .appendTo(this.getTextLayer(layer)); font = { style: element.css("font-style"), variant: element.css("font-variant"), weight: element.css("font-weight"), - size: parseInt(element.css("font-size"), 10) || 13, + size: element.height(), family: element.css("font-family"), color: element.css("color") };