Code

fix 1243587 and misc fixes
[inkscape.git] / src / display / nr-gradient-gpl.cpp
index 54a33cfdb6a6e758a750926b5b50758170cd460d..e3ee033259ae2032c10b3094e05dac85148d3a7f 100644 (file)
@@ -200,11 +200,11 @@ nr_lgradient_render_R8G8B8A8N (NRLGradientRenderer *lgr, unsigned char *px, int
                                d[2] = s[2];
                                d[3] = 255;
                        } else if (s[3] != 0) {
-                               ca = NR_A7(s[3],d[3]);
-                               d[0] = NR_COMPOSENNN_A7 (s[0], s[3], d[0], d[3], ca);
-                               d[1] = NR_COMPOSENNN_A7 (s[1], s[3], d[1], d[3], ca);
-                               d[2] = NR_COMPOSENNN_A7 (s[2], s[3], d[2], d[3], ca);
-                               d[3] = NR_PREMUL_SINGLE(ca);
+                               ca = NR_COMPOSEA_112(s[3],d[3]);
+                               d[0] = NR_COMPOSENNN_111121 (s[0], s[3], d[0], d[3], ca);
+                               d[1] = NR_COMPOSENNN_111121 (s[1], s[3], d[1], d[3], ca);
+                               d[2] = NR_COMPOSENNN_111121 (s[2], s[3], d[2], d[3], ca);
+                               d[3] = NR_NORMALIZE_21(ca);
                        }
                        d += 4;
                        pos += lgr->dx;
@@ -242,9 +242,9 @@ nr_lgradient_render_R8G8B8 (NRLGradientRenderer *lgr, unsigned char *px, int x0,
                        }
                        /* Full composition */
                        s = lgr->vector + 4 * idx;
-                       d[0] = NR_COMPOSEN11 (s[0], s[3], d[0]);
-                       d[1] = NR_COMPOSEN11 (s[1], s[3], d[1]);
-                       d[2] = NR_COMPOSEN11 (s[2], s[3], d[2]);
+                       d[0] = NR_COMPOSEN11_1111 (s[0], s[3], d[0]);
+                       d[1] = NR_COMPOSEN11_1111 (s[1], s[3], d[1]);
+                       d[2] = NR_COMPOSEN11_1111 (s[2], s[3], d[2]);
                        d += 3;
                        pos += lgr->dx;
                }
@@ -271,6 +271,7 @@ nr_lgradient_render_generic (NRLGradientRenderer *lgr, NRPixBlock *pb)
                                  (unsigned char *) lgr->vector,
                                  4 * NR_GRADIENT_VECTOR_LENGTH,
                                  0, 0);
+    spb.visible_area = pb->visible_area; 
        bpp = (pb->mode == NR_PIXBLOCK_MODE_A8) ? 1 : (pb->mode == NR_PIXBLOCK_MODE_R8G8B8) ? 3 : 4;
 
        for (y = 0; y < height; y++) {