56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
|
var env = require("../../core/env");
|
||
|
|
||
|
// Fix weird bug in some version of IE11 (like 11.0.9600.178**),
|
||
|
// where exception "unexpected call to method or property access"
|
||
|
// might be thrown when calling ctx.fill or ctx.stroke after a path
|
||
|
// whose area size is zero is drawn and ctx.clip() is called and
|
||
|
// shadowBlur is set. See #4572, #3112, #5777.
|
||
|
// (e.g.,
|
||
|
// ctx.moveTo(10, 10);
|
||
|
// ctx.lineTo(20, 10);
|
||
|
// ctx.closePath();
|
||
|
// ctx.clip();
|
||
|
// ctx.shadowBlur = 10;
|
||
|
// ...
|
||
|
// ctx.fill();
|
||
|
// )
|
||
|
var shadowTemp = [['shadowBlur', 0], ['shadowColor', '#000'], ['shadowOffsetX', 0], ['shadowOffsetY', 0]];
|
||
|
|
||
|
function _default(orignalBrush) {
|
||
|
// version string can be: '11.0'
|
||
|
return env.browser.ie && env.browser.version >= 11 ? function () {
|
||
|
var clipPaths = this.__clipPaths;
|
||
|
var style = this.style;
|
||
|
var modified;
|
||
|
|
||
|
if (clipPaths) {
|
||
|
for (var i = 0; i < clipPaths.length; i++) {
|
||
|
var clipPath = clipPaths[i];
|
||
|
var shape = clipPath && clipPath.shape;
|
||
|
var type = clipPath && clipPath.type;
|
||
|
|
||
|
if (shape && (type === 'sector' && shape.startAngle === shape.endAngle || type === 'rect' && (!shape.width || !shape.height))) {
|
||
|
for (var j = 0; j < shadowTemp.length; j++) {
|
||
|
// It is save to put shadowTemp static, because shadowTemp
|
||
|
// will be all modified each item brush called.
|
||
|
shadowTemp[j][2] = style[shadowTemp[j][0]];
|
||
|
style[shadowTemp[j][0]] = shadowTemp[j][1];
|
||
|
}
|
||
|
|
||
|
modified = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
orignalBrush.apply(this, arguments);
|
||
|
|
||
|
if (modified) {
|
||
|
for (var j = 0; j < shadowTemp.length; j++) {
|
||
|
style[shadowTemp[j][0]] = shadowTemp[j][2];
|
||
|
}
|
||
|
}
|
||
|
} : orignalBrush;
|
||
|
}
|
||
|
|
||
|
module.exports = _default;
|