summaryrefslogtreecommitdiffstats
path: root/src/sp-gradient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-gradient.cpp')
-rw-r--r--src/sp-gradient.cpp21
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));
}
}
}