diff options
Diffstat (limited to 'x11/kdelibs3/patches/patch-dc')
-rw-r--r-- | x11/kdelibs3/patches/patch-dc | 420 |
1 files changed, 404 insertions, 16 deletions
diff --git a/x11/kdelibs3/patches/patch-dc b/x11/kdelibs3/patches/patch-dc index c57455d5dff..7ba59ede123 100644 --- a/x11/kdelibs3/patches/patch-dc +++ b/x11/kdelibs3/patches/patch-dc @@ -1,44 +1,432 @@ -$NetBSD: patch-dc,v 1.1.2.2 2005/04/16 19:47:33 salo Exp $ +$NetBSD: patch-dc,v 1.1.2.3 2005/05/01 22:06:21 salo Exp $ ---- kimgio/pcx.cpp.orig 2003-10-26 11:54:06.000000000 +0100 -+++ kimgio/pcx.cpp 2005-04-13 23:29:10.000000000 +0200 -@@ -134,7 +134,8 @@ +--- kimgio/pcx.cpp.orig 2003-10-26 23:54:06.000000000 +1300 ++++ kimgio/pcx.cpp +@@ -1,5 +1,5 @@ + /* This file is part of the KDE project +- Copyright (C) 2002-2003 Nadeem Hasan <nhasan@kde.org> ++ Copyright (C) 2002-2005 Nadeem Hasan <nhasan@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public +@@ -44,6 +44,11 @@ static QDataStream &operator>>( QDataStr + s >> ph.HScreenSize; + s >> ph.VScreenSize; + ++ // Skip the rest of the header ++ Q_UINT8 byte; ++ while ( s.device()->at() < 128 ) ++ s >> byte; ++ + return s; + } + +@@ -85,25 +90,22 @@ static QDataStream &operator<<( QDataStr + return s; + } + +-static PCXHEADER header; +-static QImage img; +-static Q_UINT16 w, h; +- +-void PCXHEADER::reset() ++PCXHEADER::PCXHEADER() + { ++ // Initialize all data to zero + QByteArray dummy( 128 ); + dummy.fill( 0 ); + QDataStream s( dummy, IO_ReadOnly ); + s >> *this; + } + +-static void readLine( QDataStream &s, QByteArray &buf ) ++static void readLine( QDataStream &s, QByteArray &buf, const PCXHEADER &header ) + { + Q_UINT32 i=0; + Q_UINT32 size = buf.size(); + Q_UINT8 byte, count; + +- if ( header.Encoding == 1 ) ++ if ( header.isCompressed() ) + { + // Uncompress the image data + while ( i < size ) +@@ -130,13 +132,14 @@ static void readLine( QDataStream &s, QB + } + } + +-static void readImage1( QDataStream &s ) ++static void readImage1( QImage &img, QDataStream &s, const PCXHEADER &header ) { QByteArray buf( header.BytesPerLine ); - img.create( w, h, 1, 2, QImage::BigEndian ); -+ if( !img.create( w, h, 1, 2, QImage::BigEndian )) ++ if(!img.create( header.width(), header.height(), 1, 2, QImage::BigEndian )) + return; - for ( int y=0; y<h; ++y ) +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) { -@@ -160,7 +161,8 @@ + if ( s.atEnd() ) + { +@@ -144,10 +147,11 @@ static void readImage1( QDataStream &s ) + return; + } + +- readLine( s, buf ); +- +- for ( int x=0; x<header.BytesPerLine; ++x ) +- *( img.scanLine( y )+x ) = buf[ x ]; ++ readLine( s, buf, header ); ++ uchar *p = img.scanLine( y ); ++ unsigned int bpl = QMIN((header.width()+7)/8, header.BytesPerLine); ++ for ( unsigned int x=0; x< bpl; ++x ) ++ p[ x ] = buf[x]; + } + + // Set the color palette +@@ -155,14 +159,15 @@ static void readImage1( QDataStream &s ) + img.setColor( 1, qRgb( 255, 255, 255 ) ); + } + +-static void readImage4( QDataStream &s ) ++static void readImage4( QImage &img, QDataStream &s, const PCXHEADER &header ) + { QByteArray buf( header.BytesPerLine*4 ); - QByteArray pixbuf( w ); +- QByteArray pixbuf( w ); ++ QByteArray pixbuf( header.width() ); - img.create( w, h, 8, 16, QImage::IgnoreEndian ); -+ if( !img.create( w, h, 8, 16, QImage::IgnoreEndian )) ++ if(!img.create( header.width(), header.height(), 8, 16 )) + return; - for ( int y=0; y<h; ++y ) +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) { -@@ -196,7 +198,8 @@ + if ( s.atEnd() ) + { +@@ -171,20 +176,19 @@ static void readImage4( QDataStream &s ) + } + + pixbuf.fill( 0 ); +- readLine( s, buf ); ++ readLine( s, buf, header ); + + for ( int i=0; i<4; i++ ) + { + Q_UINT32 offset = i*header.BytesPerLine; +- for ( int x=0; x<w; ++x ) ++ for ( unsigned int x=0; x<header.width(); ++x ) + if ( buf[ offset + ( x/8 ) ] & ( 128 >> ( x%8 ) ) ) + pixbuf[ x ] += ( 1 << i ); + } + + uchar *p = img.scanLine( y ); +- +- for ( int x=0; x<w; ++x ) +- *p++ = pixbuf[ x ]; ++ for ( unsigned int x=0; x<header.width(); ++x ) ++ p[ x ] = pixbuf[ x ]; + } + + // Read the palette +@@ -192,13 +196,14 @@ static void readImage4( QDataStream &s ) + img.setColor( i, header.ColorMap.color( i ) ); + } + +-static void readImage8( QDataStream &s ) ++static void readImage8( QImage &img, QDataStream &s, const PCXHEADER &header ) { QByteArray buf( header.BytesPerLine ); - img.create( w, h, 8, 256, QImage::IgnoreEndian ); -+ if( !img.create( w, h, 8, 256, QImage::IgnoreEndian )) ++ if(!img.create( header.width(), header.height(), 8, 256 )) + return; - for ( int y=0; y<h; ++y ) +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) { -@@ -236,7 +239,8 @@ + if ( s.atEnd() ) + { +@@ -206,19 +211,19 @@ static void readImage8( QDataStream &s ) + return; + } + +- readLine( s, buf ); ++ readLine( s, buf, header ); + + uchar *p = img.scanLine( y ); +- +- for ( int x=0; x<header.BytesPerLine; ++x ) +- *p++ = buf[ x ]; ++ unsigned int bpl = QMIN(header.BytesPerLine, header.width()); ++ for ( unsigned int x=0; x<bpl; ++x ) ++ p[ x ] = buf[ x ]; + } + + Q_UINT8 flag; + s >> flag; +- kdDebug() << "Flag: " << flag << endl; ++ kdDebug( 399 ) << "Palette Flag: " << flag << endl; + +- if ( flag == 12 && header.Version == 5 ) ++ if ( flag == 12 && ( header.Version == 5 || header.Version == 2 ) ) + { + // Read the palette + Q_UINT8 r, g, b; +@@ -230,15 +235,16 @@ static void readImage8( QDataStream &s ) + } + } + +-static void readImage24( QDataStream &s ) ++static void readImage24( QImage &img, QDataStream &s, const PCXHEADER &header ) + { + QByteArray r_buf( header.BytesPerLine ); QByteArray g_buf( header.BytesPerLine ); QByteArray b_buf( header.BytesPerLine ); - img.create( w, h, 32 ); -+ if( !img.create( w, h, 32 )) ++ if(!img.create( header.width(), header.height(), 32 )) + return; - for ( int y=0; y<h; ++y ) +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) + { + if ( s.atEnd() ) + { +@@ -246,14 +252,13 @@ static void readImage24( QDataStream &s + return; + } + +- readLine( s, r_buf ); +- readLine( s, g_buf ); +- readLine( s, b_buf ); ++ readLine( s, r_buf, header ); ++ readLine( s, g_buf, header ); ++ readLine( s, b_buf, header ); + + uint *p = ( uint * )img.scanLine( y ); +- +- for ( int x=0; x<header.BytesPerLine; ++x ) +- *p++ = qRgb( r_buf[ x ], g_buf[ x ], b_buf[ x ] ); ++ for ( unsigned int x=0; x<header.width(); ++x ) ++ p[ x ] = qRgb( r_buf[ x ], g_buf[ x ], b_buf[ x ] ); + } + } + +@@ -268,6 +273,8 @@ void kimgio_pcx_read( QImageIO *io ) + return; + } + ++ PCXHEADER header; ++ + s >> header; + + if ( header.Manufacturer != 10 || s.atEnd()) +@@ -276,10 +283,8 @@ void kimgio_pcx_read( QImageIO *io ) + return; + } + +- w = ( header.XMax-header.XMin ) + 1; +- h = ( header.YMax-header.YMin ) + 1; +- +- img.reset(); ++ int w = header.width(); ++ int h = header.height(); + + kdDebug( 399 ) << "Manufacturer: " << header.Manufacturer << endl; + kdDebug( 399 ) << "Version: " << header.Version << endl; +@@ -288,30 +293,27 @@ void kimgio_pcx_read( QImageIO *io ) + kdDebug( 399 ) << "Width: " << w << endl; + kdDebug( 399 ) << "Height: " << h << endl; + kdDebug( 399 ) << "Window: " << header.XMin << "," << header.XMax << "," +- << header.YMin << "," << header.YMax << endl; ++ << header.YMin << "," << header.YMax << endl; + kdDebug( 399 ) << "BytesPerLine: " << header.BytesPerLine << endl; + kdDebug( 399 ) << "NPlanes: " << header.NPlanes << endl; + +- // Skip the rest of the header +- Q_UINT8 byte; +- while ( s.device()->at() < 128 ) +- s >> byte; ++ QImage img; + + if ( header.Bpp == 1 && header.NPlanes == 1 ) { +- readImage1( s ); ++ readImage1( img, s, header ); + } + else if ( header.Bpp == 1 && header.NPlanes == 4 ) + { +- readImage4( s ); ++ readImage4( img, s, header ); + } + else if ( header.Bpp == 8 && header.NPlanes == 1 ) + { +- readImage8( s ); ++ readImage8( img, s, header ); + } + else if ( header.Bpp == 8 && header.NPlanes == 3 ) + { +- readImage24( s ); ++ readImage24( img, s, header ); + } + + kdDebug( 399 ) << "Image Bytes: " << img.numBytes() << endl; +@@ -359,7 +361,7 @@ static void writeLine( QDataStream &s, Q + } + } + +-static void writeImage1( QDataStream &s ) ++static void writeImage1( QImage &img, QDataStream &s, PCXHEADER &header ) + { + img = img.convertBitOrder( QImage::BigEndian ); + +@@ -367,29 +369,27 @@ static void writeImage1( QDataStream &s + header.NPlanes = 1; + header.BytesPerLine = img.bytesPerLine(); + +- header.ColorMap.setColor( 0, qRgb( 0, 0, 0 ) ); +- header.ColorMap.setColor( 1, qRgb( 255, 255, 255 ) ); +- + s << header; + + QByteArray buf( header.BytesPerLine ); + +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) + { + Q_UINT8 *p = img.scanLine( y ); + ++ // Invert as QImage uses reverse palette for monochrome images? + for ( int i=0; i<header.BytesPerLine; ++i ) +- buf[ i ] = p[ i ]; ++ buf[ i ] = ~p[ i ]; + + writeLine( s, buf ); + } + } + +-static void writeImage4( QDataStream &s ) ++static void writeImage4( QImage &img, QDataStream &s, PCXHEADER &header ) + { + header.Bpp = 1; + header.NPlanes = 4; +- header.BytesPerLine = w/8; ++ header.BytesPerLine = header.width()/8; + + for ( int i=0; i<16; ++i ) + header.ColorMap.setColor( i, img.color( i ) ); +@@ -401,14 +401,14 @@ static void writeImage4( QDataStream &s + for ( int i=0; i<4; ++i ) + buf[ i ].resize( header.BytesPerLine ); + +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) + { + Q_UINT8 *p = img.scanLine( y ); + + for ( int i=0; i<4; ++i ) + buf[ i ].fill( 0 ); + +- for ( int x=0; x<w; ++x ) ++ for ( unsigned int x=0; x<header.width(); ++x ) + { + for ( int i=0; i<4; ++i ) + if ( *( p+x ) & ( 1 << i ) ) +@@ -420,7 +420,7 @@ static void writeImage4( QDataStream &s + } + } + +-static void writeImage8( QDataStream &s ) ++static void writeImage8( QImage &img, QDataStream &s, PCXHEADER &header ) + { + header.Bpp = 8; + header.NPlanes = 1; +@@ -430,7 +430,7 @@ static void writeImage8( QDataStream &s + + QByteArray buf( header.BytesPerLine ); + +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) + { + Q_UINT8 *p = img.scanLine( y ); + +@@ -449,23 +449,23 @@ static void writeImage8( QDataStream &s + s << RGB( img.color( i ) ); + } + +-static void writeImage24( QDataStream &s ) ++static void writeImage24( QImage &img, QDataStream &s, PCXHEADER &header ) + { + header.Bpp = 8; + header.NPlanes = 3; +- header.BytesPerLine = w; ++ header.BytesPerLine = header.width(); + + s << header; + +- QByteArray r_buf( w ); +- QByteArray g_buf( w ); +- QByteArray b_buf( w ); ++ QByteArray r_buf( header.width() ); ++ QByteArray g_buf( header.width() ); ++ QByteArray b_buf( header.width() ); + +- for ( int y=0; y<h; ++y ) ++ for ( int y=0; y<header.height(); ++y ) + { + uint *p = ( uint * )img.scanLine( y ); + +- for ( int x=0; x<w; ++x ) ++ for ( unsigned int x=0; x<header.width(); ++x ) + { + QRgb rgb = *p++; + r_buf[ x ] = qRed( rgb ); +@@ -484,10 +484,10 @@ void kimgio_pcx_write( QImageIO *io ) + QDataStream s( io->ioDevice() ); + s.setByteOrder( QDataStream::LittleEndian ); + +- img = io->image(); ++ QImage img = io->image(); + +- w = img.width(); +- h = img.height(); ++ int w = img.width(); ++ int h = img.height(); + + kdDebug( 399 ) << "Width: " << w << endl; + kdDebug( 399 ) << "Height: " << h << endl; +@@ -495,6 +495,8 @@ void kimgio_pcx_write( QImageIO *io ) + kdDebug( 399 ) << "BytesPerLine: " << img.bytesPerLine() << endl; + kdDebug( 399 ) << "Num Colors: " << img.numColors() << endl; + ++ PCXHEADER header; ++ + header.Manufacturer = 10; + header.Version = 5; + header.Encoding = 1; +@@ -509,19 +511,19 @@ void kimgio_pcx_write( QImageIO *io ) + + if ( img.depth() == 1 ) + { +- writeImage1( s ); ++ writeImage1( img, s, header ); + } + else if ( img.depth() == 8 && img.numColors() <= 16 ) + { +- writeImage4( s ); ++ writeImage4( img, s, header ); + } + else if ( img.depth() == 8 ) + { +- writeImage8( s ); ++ writeImage8( img, s, header ); + } + else if ( img.depth() == 32 ) + { +- writeImage24( s ); ++ writeImage24( img, s, header ); + } + + io->setStatus( 0 ); |