}
var pattern = new TilingPattern(IR, color, this.ctx, this.objs);
} else if (IR[0] == 'RadialAxial' || IR[0] == 'Dummy') {
- var pattern = Pattern.shadingFromIR(this.ctx, IR);
+ var pattern = Pattern.shadingFromIR(IR);
} else {
error('Unkown IR type ' + IR[0]);
}
var ctx = this.ctx;
this.save();
- ctx.fillStyle = Pattern.shadingFromIR(ctx, patternIR);
+ var pattern = Pattern.shadingFromIR(patternIR);
+ ctx.fillStyle = pattern.getPattern(ctx);
var inv = ctx.mozCurrentTransformInverse;
if (inv) {
else if (typeNum == SHADING_PATTERN) {
var shading = xref.fetchIfRef(dict.get('Shading'));
var matrix = dict.get('Matrix');
- var pattern = Pattern.parseShading(shading, matrix, xref, res,
- null /*ctx*/);
+ var pattern = Pattern.parseShading(shading, matrix, xref,
+ res);
args = pattern.getIR();
} else {
error('Unkown PatternType ' + typeNum);
if (!shading)
error('No shading object found');
- var shadingFill = Pattern.parseShading(shading, null, xref, res,
- null);
+ var shadingFill = Pattern.parseShading(shading, null, xref, res);
var patternIR = shadingFill.getIR();
args = [patternIR];
fn = 'shadingFill';
}
};
- Pattern.shadingFromIR = function pattern_shadingFromIR(ctx, raw) {
- return Shadings[raw[0]].fromIR(ctx, raw);
+ Pattern.shadingFromIR = function pattern_shadingFromIR(raw) {
+ return Shadings[raw[0]].fromIR(raw);
};
- Pattern.parseShading = function pattern_shading(shading, matrix, xref,
- res, ctx) {
+ Pattern.parseShading = function pattern_shading(shading, matrix, xref, res) {
var dict = isStream(shading) ? shading.dict : shading;
var type = dict.get('ShadingType');
case PatternType.AXIAL:
case PatternType.RADIAL:
// Both radial and axial shadings are handled by RadialAxial shading.
- return new Shadings.RadialAxial(dict, matrix, xref, res, ctx);
+ return new Shadings.RadialAxial(dict, matrix, xref, res);
default:
return new Shadings.Dummy();
}
this.colorStops = colorStops;
}
- RadialAxial.fromIR = function radialAxialShadingGetIR(ctx, raw) {
+ RadialAxial.fromIR = function radialAxialShadingGetIR(raw) {
var type = raw[1];
var colorStops = raw[2];
var p0 = raw[3];
var p1 = raw[4];
var r0 = raw[5];
var r1 = raw[6];
-
- var curMatrix = ctx.mozCurrentTransform;
- if (curMatrix) {
- var userMatrix = ctx.mozCurrentTransformInverse;
-
- p0 = Util.applyTransform(p0, curMatrix);
- p0 = Util.applyTransform(p0, userMatrix);
-
- p1 = Util.applyTransform(p1, curMatrix);
- p1 = Util.applyTransform(p1, userMatrix);
- }
-
- var grad;
- if (type == PatternType.AXIAL)
- grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
- else if (type == PatternType.RADIAL)
- grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
-
- for (var i = 0, ii = colorStops.length; i < ii; ++i) {
- var c = colorStops[i];
- grad.addColorStop(c[0], c[1]);
- }
- return grad;
+ return {
+ type: 'Pattern',
+ getPattern: function(ctx) {
+ var curMatrix = ctx.mozCurrentTransform;
+ if (curMatrix) {
+ var userMatrix = ctx.mozCurrentTransformInverse;
+
+ p0 = Util.applyTransform(p0, curMatrix);
+ p0 = Util.applyTransform(p0, userMatrix);
+
+ p1 = Util.applyTransform(p1, curMatrix);
+ p1 = Util.applyTransform(p1, userMatrix);
+ }
+
+ var grad;
+ if (type == PatternType.AXIAL)
+ grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
+ else if (type == PatternType.RADIAL)
+ grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
+
+ for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+ var c = colorStops[i];
+ grad.addColorStop(c[0], c[1]);
+ }
+ return grad;
+ }
+ };
};
RadialAxial.prototype = {