From 52ba7a652f9e84425f328719fe6fba138361b4b3 Mon Sep 17 00:00:00 2001 From: Jasper van de Gronde Date: Tue, 31 Mar 2009 20:41:47 +0000 Subject: 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) --- src/sp-gradient.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'src/sp-gradient.cpp') 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 #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)); } } } -- cgit v1.2.3