summaryrefslogtreecommitdiff
path: root/x11/kdelibs3/patches/patch-dc
diff options
context:
space:
mode:
Diffstat (limited to 'x11/kdelibs3/patches/patch-dc')
-rw-r--r--x11/kdelibs3/patches/patch-dc420
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 );