diff options
| author | Jasper van de Gronde <jasper.vandegronde@gmail.com> | 2009-03-31 20:41:47 +0000 |
|---|---|---|
| committer | jaspervdg <jaspervdg@users.sourceforge.net> | 2009-03-31 20:41:47 +0000 |
| commit | 52ba7a652f9e84425f328719fe6fba138361b4b3 (patch) | |
| tree | a64e7aa1d3e0f345b65ce73a4cfa45896634427f /src/sp-gradient.cpp | |
| parent | More sensitive selection of snap target when snapping guides to objects with ... (diff) | |
| download | inkscape-52ba7a652f9e84425f328719fe6fba138361b4b3.tar.gz inkscape-52ba7a652f9e84425f328719fe6fba138361b4b3.zip | |
Fix for helperfns_read_vector (which could go on trying to read numbers for ever) and some quality improvements to gradient rendering and feComponentTransfer handling.
(bzr r7599)
Diffstat (limited to 'src/sp-gradient.cpp')
| -rw-r--r-- | src/sp-gradient.cpp | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 5c973cf0d..3abb91690 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -30,6 +30,7 @@ #include <sigc++/adaptors/bind.h> #include "libnr/nr-gradient.h" +#include "libnr/nr-pixops.h" #include "svg/svg.h" #include "svg/svg-color.h" #include "svg/css-ostringstream.h" @@ -1098,23 +1099,11 @@ sp_gradient_ensure_colors(SPGradient *gr) gint o0 = (gint) floor(gr->vector.stops[i].offset * (NCOLORS - 0.001)); gint o1 = (gint) floor(gr->vector.stops[i + 1].offset * (NCOLORS - 0.001)); if (o1 > o0) { - gint dr = ((r1 - r0) << 16) / (o1 - o0); - gint dg = ((g1 - g0) << 16) / (o1 - o0); - gint db = ((b1 - b0) << 16) / (o1 - o0); - gint da = ((a1 - a0) << 16) / (o1 - o0); - gint r = r0 << 16; - gint g = g0 << 16; - gint b = b0 << 16; - gint a = a0 << 16; for (int j = o0; j < o1 + 1; j++) { - gr->color[4 * j] = r >> 16; - gr->color[4 * j + 1] = g >> 16; - gr->color[4 * j + 2] = b >> 16; - gr->color[4 * j + 3] = a >> 16; - r += dr; - g += dg; - b += db; - a += da; + gr->color[4 * j + 0] = r0 + DIV_ROUND((j-o0)*(r1-r0),(o1-o0)); + gr->color[4 * j + 1] = g0 + DIV_ROUND((j-o0)*(g1-g0),(o1-o0)); + gr->color[4 * j + 2] = b0 + DIV_ROUND((j-o0)*(b1-b0),(o1-o0)); + gr->color[4 * j + 3] = a0 + DIV_ROUND((j-o0)*(a1-a0),(o1-o0)); } } } |
