Added qunit tests for text-shadow

This commit is contained in:
Guerric Sloan
2013-06-18 23:47:08 -07:00
parent e1573f8aed
commit f49e147b2f
4 changed files with 75 additions and 17 deletions

View File

@ -20,6 +20,33 @@ _html2canvas.Util.trimText = (function(isNative){
};
})( String.prototype.trim );
(function() {
// TODO: support all possible length values
var TEXT_SHADOW_PROPERTY = /((rgba|rgb)\([^\)]+\)(\s-?\d+px){0,})/g;
var TEXT_SHADOW_VALUES = /(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;
_html2canvas.Util.parseTextShadows = function (value) {
if (value === 'none') {
return [];
}
// find multiple shadow declarations
var shadows = value.match(TEXT_SHADOW_PROPERTY),
results = [];
for (var i = 0; i < shadows.length; i++) {
var s = shadows[i].match(TEXT_SHADOW_VALUES);
results.push({
color: s[0],
offsetX: s[1] ? s[1].replace('px', '') : 0,
offsetY: s[2] ? s[2].replace('px', '') : 0,
blur: s[3] ? s[3].replace('px', '') : 0
});
}
return results;
};
})();
_html2canvas.Util.parseBackgroundImage = function (value) {
var whitespace = ' \r\n\t',
method, definition, prefix, prefix_i, block, results = [],

View File

@ -75,8 +75,6 @@ _html2canvas.Parse = function (images, options) {
}
}
var TEXT_SHADOW_PROPERTY = /((rgba|rgb)\([^\)]+\)(\s-?\d+px){0,})/g;
var TEXT_SHADOW_VALUES = /(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;
function setTextVariables(ctx, el, text_decoration, color) {
var align = false,
bold = getCSS(el, "fontWeight"),
@ -98,21 +96,14 @@ _html2canvas.Parse = function (images, options) {
ctx.setVariable("textAlign", (align) ? "right" : "left");
if (shadow !== "none") {
var shadows = _html2canvas.Util.parseTextShadows(shadow);
// find multiple shadow declarations
var shadows = shadow.match(TEXT_SHADOW_PROPERTY);
// we'll only support one shadow for now
var s = shadows[0].match(TEXT_SHADOW_VALUES),
sX = s[1] ? s[1].replace('px', '') : 0,
sY = s[2] ? s[2].replace('px', '') : 0,
blur = s[3] ? s[3].replace('px', '') : 0;
// apply the text shadow
ctx.setVariable("shadowColor", s[0]);
ctx.setVariable("shadowOffsetX", sX);
ctx.setVariable("shadowOffsetY", sY);
ctx.setVariable("shadowBlur", blur);
// TODO: support multiple text shadows
// apply the first text shadow
ctx.setVariable("shadowColor", shadows[0].color);
ctx.setVariable("shadowOffsetX", shadows[0].offsetX);
ctx.setVariable("shadowOffsetY", shadows[0].offsetY);
ctx.setVariable("shadowBlur", shadows[0].blur);
}
if (text_decoration !== "none"){