Index: /home/diedenrezi/eclipse/InkscapeSVN/src/libnr/nr-compose-transform.cpp =================================================================== --- /home/diedenrezi/eclipse/InkscapeSVN/src/libnr/nr-compose-transform.cpp (revision 22177) +++ /home/diedenrezi/eclipse/InkscapeSVN/src/libnr/nr-compose-transform.cpp (working copy) @@ -168,10 +168,10 @@ static void nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (unsigned char *px, int w, int h, int rs, const unsigned char *spx, int sw, int sh, int srs, - const long *FFd2s, unsigned int alpha) + const double *FFd2s, unsigned int alpha) { unsigned char *d0; - int FFsx0, FFsy0; + double FFsx0, FFsy0; int x, y; d0 = px; @@ -180,15 +180,15 @@ for (y = 0; y < h; y++) { unsigned char *d; - long FFsx, FFsy; + double FFsx, FFsy; d = d0; FFsx = FFsx0; FFsy = FFsy0; for (x = 0; x < w; x++) { long sx, sy; - sx = FFsx >> FBITS; + sx = long(FFsx+0.5); if ((sx >= 0) && (sx < sw)) { - sy = FFsy >> FBITS; + sy = long(FFsy+0.5); if ((sy >= 0) && (sy < sh)) { const unsigned char *s; unsigned int a; @@ -302,6 +302,7 @@ { int dbits; long FFd2s[6]; + double d2s_floating[6]; int i; if (alpha == 0) return; @@ -310,6 +311,7 @@ for (i = 0; i < 6; i++) { FFd2s[i] = (long) (d2s[i] * (1 << FBITS) + 0.5); + d2s_floating[i] = d2s[i]; } if (dbits == 0) { @@ -320,7 +322,7 @@ return; } #endif - nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (px, w, h, rs, spx, sw, sh, srs, FFd2s, alpha); + nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (px, w, h, rs, spx, sw, sh, srs, d2s_floating, alpha); } else { int xsize, ysize; long FFs_x_x_S, FFs_x_y_S, FFs_y_x_S, FFs_y_y_S;