Skip to content

Commit

Permalink
Merge pull request #11158 from janpe2/gradient-stops
Browse files Browse the repository at this point in the history
Avoid floating point inaccuracy in gradient color stops
  • Loading branch information
timvandermeij authored Sep 19, 2019
2 parents 58e5f36 + 911df23 commit 3da680c
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/core/pattern.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,12 @@ Shadings.RadialAxial = (function RadialAxialClosure() {
// 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 diff = t1 - t0;
var step = diff / 10;
const NUMBER_OF_SAMPLES = 10;
const step = (t1 - t0) / NUMBER_OF_SAMPLES;

var colorStops = this.colorStops = [];

// Protect against bad domains so we don't end up in an infinite loop below.
// Protect against bad domains.
if (t0 >= t1 || step <= 0) {
// Acrobat doesn't seem to handle these cases so we'll ignore for
// now.
Expand All @@ -158,12 +158,12 @@ Shadings.RadialAxial = (function RadialAxialClosure() {

var color = new Float32Array(cs.numComps), ratio = new Float32Array(1);
var rgbColor;
for (var i = t0; i <= t1; i += step) {
ratio[0] = i;
for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
ratio[0] = t0 + i * step;
fn(ratio, 0, color, 0);
rgbColor = cs.getRgb(color, 0);
var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
colorStops.push([(i - t0) / diff, cssColor]);
colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
}

var background = 'transparent';
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
!issue4402_reduced.pdf
!issue845r.pdf
!issue3405r.pdf
!issue7339_reduced.pdf
!issue3438.pdf
!issue2074.pdf
!scan-bad.pdf
Expand Down
Binary file added test/pdfs/issue7339_reduced.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -1872,6 +1872,12 @@
"link": true,
"type": "load"
},
{ "id": "issue7339",
"file": "pdfs/issue7339_reduced.pdf",
"md5": "7092ab6a1acc31db9d1caaa0447334a0",
"rounds": 1,
"type": "eq"
},
{ "id": "bug1142033",
"file": "pdfs/bug1142033.pdf",
"md5": "1d9afd397e89a0f52c056f449ec93daa",
Expand Down

0 comments on commit 3da680c

Please sign in to comment.