--- Last.fm-1.0.3-src/src/imagefader.cpp 2005-08-25 18:37:09.000000000 +0300 +++ Last.fm-1.0.3-src/src/imagefader.cpp 2005-08-27 12:19:59.000000000 +0300 @@ -39,29 +39,27 @@ const int sw = m_dst.width(); const int sh = m_dst.height(); - const int bpl = m_dst.bytesPerLine(); switch(m_dst.depth()) { case 32: { - uchar *mixed_data = m_tmp.bits(); - const uchar *back_data = m_src.bits(); - const uchar *front_data = m_dst.bits(); - for (int sy = 0; sy < sh; sy++) { - quint32* mixed = (quint32*)mixed_data; - const quint32* back = (const quint32*)back_data; - const quint32* front = (const quint32*)front_data; for (int sx = 0; sx < sw; sx++) { - quint32 bp = back[sx]; - quint32 fp = front[sx]; - - mixed[sx] = qRgb((qRed(bp)*ia + qRed(fp)*a)>>8, - (qGreen(bp)*ia + qGreen(fp)*a)>>8, - (qBlue(bp)*ia + qBlue(fp)*a)>>8); + if(!m_src.valid(sx, sy)) { + qDebug() << "Source image borked, giving up fade effect."; + m_fadeTimer->stop(); + emit fadeProgress( QPixmap::fromImage( m_dst ) ); + return; + } + QRgb bp = m_src.pixel(sx, sy); + QRgb fp = m_dst.pixel(sx, sy); + + m_tmp.setPixel(sx, sy, + qRgb( (qRed(bp)*ia + qRed(fp)*a)>>8, + (qGreen(bp)*ia + qGreen(fp)*a)>>8, + (qBlue(bp)*ia + qBlue(fp)*a)>>8 + ) + ); } - mixed_data += bpl; - back_data += bpl; - front_data += bpl; } } default: