poppler/CurlPDFDocBuilder.cc | 2 - poppler/Gfx.cc | 71 ++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 38 deletions(-)
New commits: commit 6a17cc89eda52f08cbacbf9bfaaeda22cf041e82 Author: Thomas Freitag <[email protected]> Date: Mon Nov 22 19:20:56 2010 +0000 Improve rendering of radial shadings Improves the duck rendering in bug 22098 diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc index 825d98c..6b80e90 100644 --- a/poppler/Gfx.cc +++ b/poppler/Gfx.cc @@ -2733,6 +2733,27 @@ void Gfx::doAxialShFill(GfxAxialShading *shading) { } } +static inline void getShadingColorRadialHelper(double t0, double t1, double t, GfxRadialShading *shading, GfxColor *color) +{ + if (t0 < t1) { + if (t < t0) { + shading->getColor(t0, color); + } else if (t > t1) { + shading->getColor(t1, color); + } else { + shading->getColor(t, color); + } + } else { + if (t > t0) { + shading->getColor(t0, color); + } else if (t < t1) { + shading->getColor(t1, color); + } else { + shading->getColor(t, color); + } + } +} + void Gfx::doRadialShFill(GfxRadialShading *shading) { double xMin, yMin, xMax, yMax; double x0, y0, r0, x1, y1, r1, t0, t1; @@ -2885,13 +2906,7 @@ void Gfx::doRadialShFill(GfxRadialShading *shading) { xa = x0 + sa * (x1 - x0); ya = y0 + sa * (y1 - y0); ra = r0 + sa * (r1 - r0); - if (ta < t0) { - shading->getColor(t0, &colorA); - } else if (ta > t1) { - shading->getColor(t1, &colorA); - } else { - shading->getColor(ta, &colorA); - } + getShadingColorRadialHelper(t0, t1, ta, shading, &colorA); needExtend = !out->radialShadedSupportExtend(state, shading); @@ -2907,42 +2922,24 @@ void Gfx::doRadialShFill(GfxRadialShading *shading) { ib = radialMaxSplits; sb = sMax; tb = t0 + sb * (t1 - t0); - if (tb < t0) { - shading->getColor(t0, &colorB); - } else if (tb > t1) { - shading->getColor(t1, &colorB); - } else { - shading->getColor(tb, &colorB); - } + getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); while (ib - ia > 1) { if (isSameGfxColor(colorB, colorA, nComps, radialColorDelta) && ib < radialMaxSplits) { - // The shading is not necessarily lineal so having two points with the - // same color does not mean all the areas in between have the same color too - // Do another bisection to be a bit more sure we are not doing something wrong - GfxColor colorC; - int ic = (ia + ib) / 2; - double sc = sMin + ((double)ic / (double)radialMaxSplits) * (sMax - sMin); - double tc = t0 + sc * (t1 - t0); - if (tc < t0) { - shading->getColor(t0, &colorC); - } else if (tc > t1) { - shading->getColor(t1, &colorC); - } else { - shading->getColor(tc, &colorC); - } - if (isSameGfxColor(colorC, colorA, nComps, radialColorDelta)) - break; + // The shading is not necessarily lineal so having two points with the + // same color does not mean all the areas in between have the same color too + // Do another bisection to be a bit more sure we are not doing something wrong + GfxColor colorC; + int ic = (ia + ib) / 2; + double sc = sMin + ((double)ic / (double)radialMaxSplits) * (sMax - sMin); + double tc = t0 + sc * (t1 - t0); + getShadingColorRadialHelper(t0, t1, tc, shading, &colorC); + if (isSameGfxColor(colorC, colorA, nComps, radialColorDelta)) + break; } ib = (ia + ib) / 2; sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); tb = t0 + sb * (t1 - t0); - if (tb < t0) { - shading->getColor(t0, &colorB); - } else if (tb > t1) { - shading->getColor(t1, &colorB); - } else { - shading->getColor(tb, &colorB); - } + getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); } // compute center and radius of the circle commit 9093adede4f9ad6fb2962dcefcb09c1d8c357715 Author: Albert Astals Cid <[email protected]> Date: Sun Nov 21 23:49:12 2010 +0000 pedantic ; diff --git a/poppler/CurlPDFDocBuilder.cc b/poppler/CurlPDFDocBuilder.cc index 948cd7a..5b02b14 100644 --- a/poppler/CurlPDFDocBuilder.cc +++ b/poppler/CurlPDFDocBuilder.cc @@ -43,5 +43,5 @@ GBool CurlPDFDocBuilder::supports(const GooString &uri) } else { return gFalse; } -}; +} _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
