Changed linear gradients
This commit is contained in:
parent
da845ec5e6
commit
01d5e5579c
43
pdf.js
43
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 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) {
|
getRadialShading: function(sh, cs) {
|
||||||
var coordsArr = sh.get('Coords');
|
var coordsArr = sh.get('Coords');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user