--- qt-everywhere-opensource-src-4.6.3/src/gui/painting/qimagescale.cpp 2010-06-02 04:03:15.000000000 +0200 +++ qt-fixed/src/gui/painting/qimagescale.cpp 2010-09-07 00:20:00.914452999 +0200 @@ -151,8 +151,8 @@ int sw, int sh, int dh) { unsigned int **p; - int i, j = 0; - int val, inc, rv = 0; + int i, j = 0, rv = 0; + quint64 val, inc; if(dh < 0){ dh = -dh; @@ -162,9 +162,9 @@ int up = qAbs(dh) >= sh; val = up ? 0x8000 * sh / dh - 0x8000 : 0; - inc = (sh << 16) / dh; + inc = (((quint64)sh) << 16) / dh; for(i = 0; i < dh; i++){ - p[j++] = src + qMax(0, val >> 16) * sw; + p[j++] = src + (int)(val >> 16) * sw; val += inc; } if(rv){ @@ -179,8 +179,8 @@ int* QImageScale::qimageCalcXPoints(int sw, int dw) { - int *p, i, j = 0; - int val, inc, rv = 0; + int *p, i, j = 0, rv = 0; + quint64 val, inc; if(dw < 0){ dw = -dw; @@ -190,9 +190,9 @@ int up = qAbs(dw) >= sw; val = up ? 0x8000 * sw / dw - 0x8000 : 0; - inc = (sw << 16) / dw; + inc = (((quint64)sw) << 16) / dw; for(i = 0; i < dw; i++){ - p[j++] = qMax(0, val >> 16); + p[j++] = val >> 16; val += inc; } @@ -218,10 +218,10 @@ /* scaling up */ if(up){ - int val, inc; + quint64 val, inc; val = 0x8000 * s / d - 0x8000; - inc = (s << 16) / d; + inc = (((quint64)s) << 16) / d; for(i = 0; i < d; i++){ int pos = val >> 16; if (pos < 0) @@ -235,9 +235,10 @@ } /* scaling down */ else{ - int val, inc, ap, Cp; + quint64 val, inc; + int ap, Cp; val = 0; - inc = (s << 16) / d; + inc = (((quint64)s) << 16) / d; Cp = ((d << 14) / s) + 1; for(i = 0; i < d; i++){ ap = ((0x100 - ((val >> 8) & 0xff)) * Cp) >> 8;