diff options
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)); } } } |
