},
getAxialShading: function(sh, cs) {
var coordsArr = sh.get('Coords');
- var x0 = coordsArr[0], y0 = coordsArr[1],
- x1 = coordsArr[2], y1 = coordsArr[3];
var t0 = 0.0, t1 = 1.0;
if (sh.has('Domain')) {
error('Invalid function');
var fn = new PDFFunction(this.xref, fnObj);
- var gradient = this.ctx.createLinearGradient(x0, y0, x1, y1);
-
// 10 samples seems good enough for now, but probably won't work
// if there are sharp color changes. Ideally, we would implement
// the spec faithfully and add lossless optimizations.
var step = (t1 - t0) / 10;
var diff = t1 - t0;
+ var colorStops = [];
for (var i = t0; i <= t1; i += step) {
var color = fn.func([i]);
- var rgbColor = cs.getRgb(color);
- gradient.addColorStop((i - t0) / diff,
- this.makeCssRgb.apply(this, rgbColor));
+ var rgbColor = this.makeCssRgb.apply(this, cs.getRgb(color));
+ colorStops.push([(i - t0) / diff, rgbColor]);
}
+
+ var patternMatrix = this.ctx.mozCurrentTransform;
- return gradient;
+ return {
+ patternFn : function() {
+ var x0 = coordsArr[0], y0 = coordsArr[1];
+ var x1 = coordsArr[2], y1 = coordsArr[3];
+
+ // if the browser supports getting the tranform matrix, convert
+ // gradient coordinates from pattern space to current user space
+ if (patternMatrix) {
+ var userMatrix = this.ctx.mozCurrentTransformInverse;
+
+ var p = this.applyTransform(x0, y0, patternMatrix);
+ p = this.applyTransform(p[0], p[1], userMatrix);
+ x0 = p[0];
+ y0 = p[1];
+
+ var p = this.applyTransform(x1, y1, patternMatrix);
+ p = this.applyTransform(p[0], p[1], userMatrix);
+ x1 = p[0];
+ y1 = p[1];
+ }
+
+ var gradient =
+ this.ctx.createLinearGradient(x0, y0, x1, y1);
+ for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+ var c = colorStops[i];
+ gradient.addColorStop(c[0], c[1]);
+ }
+ return gradient;
+ }
+ }
},
getRadialShading: function(sh, cs) {
var coordsArr = sh.get('Coords');