Browse Source

Changed linear gradients

sbarman 14 years ago
parent
commit
01d5e5579c
  1. 41
      pdf.js

41
pdf.js

@ -4496,8 +4496,6 @@ var CanvasGraphics = (function() {
}, },
getAxialShading: function(sh, cs) { getAxialShading: function(sh, cs) {
var coordsArr = sh.get('Coords'); 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; var t0 = 0.0, t1 = 1.0;
if (sh.has('Domain')) { if (sh.has('Domain')) {
@ -4519,22 +4517,51 @@ var CanvasGraphics = (function() {
error('Invalid function'); error('Invalid function');
var fn = new PDFFunction(this.xref, fnObj); 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 // 10 samples seems good enough for now, but probably won't work
// if there are sharp color changes. Ideally, we would implement // if there are sharp color changes. Ideally, we would implement
// the spec faithfully and add lossless optimizations. // the spec faithfully and add lossless optimizations.
var step = (t1 - t0) / 10; var step = (t1 - t0) / 10;
var diff = t1 - t0; var diff = t1 - t0;
var colorStops = [];
for (var i = t0; i <= t1; i += step) { for (var i = t0; i <= t1; i += step) {
var color = fn.func([i]); var color = fn.func([i]);
var rgbColor = cs.getRgb(color); var rgbColor = this.makeCssRgb.apply(this, cs.getRgb(color));
gradient.addColorStop((i - t0) / diff, colorStops.push([(i - t0) / diff, rgbColor]);
this.makeCssRgb.apply(this, rgbColor)); }
var patternMatrix = this.ctx.mozCurrentTransform;
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; return gradient;
}
}
}, },
getRadialShading: function(sh, cs) { getRadialShading: function(sh, cs) {
var coordsArr = sh.get('Coords'); var coordsArr = sh.get('Coords');

Loading…
Cancel
Save