22#include <tqfileinfo.h>
26#include <tqpointarray.h>
27#include <tqdatastream.h>
30#include "kowmfreadprivate.h"
34KoWmfReadPrivate::KoWmfReadPrivate()
46KoWmfReadPrivate::~KoWmfReadPrivate()
48 if ( mObjHandleTab != 0 ) {
49 for ( int i=0 ; i < mNbrObject ; i++ ) {
50 if ( mObjHandleTab[i] != 0 )
51 delete mObjHandleTab[i];
53 delete[] mObjHandleTab;
71 mBuffer = new TQBuffer( array );
72 mBuffer->open( IO_ReadOnly );
75 WmfEnhMetaHeader eheader;
77 WmfPlaceableHeader pheader;
78 unsigned short checksum;
81 TQDataStream st( mBuffer );
82 st.setByteOrder( TQDataStream::LittleEndian );
83 mStackOverflow = mWinding = false;
84 mTextAlign = mTextRotation = 0;
85 mTextColor = TQt::black;
93 if ( pheader.key==( TQ_UINT32 )APMHEADER_KEY ) {
101 st >> pheader.reserved;
102 st >> pheader.checksum;
104 if ( pheader.checksum!=checksum ) {
107 st >> header.fileType;
108 st >> header.headerSize;
109 st >> header.version;
110 st >> header.fileSize;
111 st >> header.numOfObjects;
112 st >> header.maxRecordSize;
113 st >> header.numOfParameters;
114 mNbrObject = header.numOfObjects;
115 mBBox.setLeft( pheader.left );
116 mBBox.setTop( pheader.top );
117 mBBox.setRight( pheader.right );
118 mBBox.setBottom( pheader.bottom );
124 filePos = mBuffer->at();
125 st >> eheader.recordType;
126 st >> eheader.recordSize;
127 st >> eheader.boundsLeft;
128 st >> eheader.boundsTop;
129 st >> eheader.boundsRight;
130 st >> eheader.boundsBottom;
131 st >> eheader.frameLeft;
132 st >> eheader.frameTop;
133 st >> eheader.frameRight;
134 st >> eheader.frameBottom;
135 st >> eheader.signature;
136 if ( eheader.signature==ENHMETA_SIGNATURE ) {
138 st >> eheader.version;
140 st >> eheader.numOfRecords;
141 st >> eheader.numHandles;
142 st >> eheader.reserved;
143 st >> eheader.sizeOfDescription;
144 st >> eheader.offsetOfDescription;
145 st >> eheader.numPaletteEntries;
146 st >> eheader.widthDevicePixels;
147 st >> eheader.heightDevicePixels;
148 st >> eheader.widthDeviceMM;
149 st >> eheader.heightDeviceMM;
154 mBuffer->at( filePos );
155 st >> header.fileType;
156 st >> header.headerSize;
157 st >> header.version;
158 st >> header.fileSize;
159 st >> header.numOfObjects;
160 st >> header.maxRecordSize;
161 st >> header.numOfParameters;
162 mNbrObject = header.numOfObjects;
165 mOffsetFirstRecord = mBuffer->at();
168 if ( ((header.headerSize == 9) && (header.numOfParameters == 0)) || (mPlaceable) ) {
173 kdDebug() << "KoWmfReadPrivate : incorrect file format !" << endl;
177 if ( (mValid) && (mStandard) ) {
178 TQ_UINT16 numFunction = 1;
180 bool firstOrg= true, firstExt= true;
183 while ( numFunction ) {
184 filePos = mBuffer->at();
185 st >> size >> numFunction;
188 kdDebug() << "KoWmfReadPrivate : incorrect file!" << endl;
194 if ( numFunction == 11 ) {
200 mBBox.setLeft( left );
204 if ( left < mBBox.left() ) mBBox.setLeft( left );
208 if ( numFunction == 12 ) {
209 TQ_INT16 width, height;
211 st >> height >> width;
212 if ( width < 0 ) width = -width;
213 if ( height < 0 ) height = -height;
216 mBBox.setWidth( width );
217 mBBox.setHeight( height );
220 if ( width > mBBox.width() ) mBBox.setWidth( width );
221 if ( height > mBBox.height() ) mBBox.setHeight( height );
224 mBuffer->at( filePos + (size<<1) );
236 kdDebug() << "KoWmfReadPrivate::play : invalid WMF file" << endl;
242 kdDebug() << "Standard : " << mBBox.left() << " " << mBBox.top() << " " << mBBox.width() << " " << mBBox.height() << endl;
245 kdDebug() << "DPI : " << mDpi << " : " << mBBox.left() << " " << mBBox.top() << " " << mBBox.width() << " " << mBBox.height() << endl;
247 kdDebug() << "mm : " << mBBox.width()*25.4/ mDpi << " " << mBBox.height()*25.4/ mDpi << endl;
249 kdDebug() << mValid << " " << mStandard << " " << mPlaceable << endl;
254 for ( int i=0; i < mNbrObject ; i++ ) {
255 mObjHandleTab[ i ] = 0;
258 TQ_UINT16 numFunction;
263 TQDataStream st( mBuffer );
264 st.setByteOrder( TQDataStream::LittleEndian );
268 if ( mReadWmf->begin() ) {
270 mBuffer->at( mOffsetFirstRecord );
274 while ( ( numFunction ) && ( !mStackOverflow ) ) {
275 bufferOffset = mBuffer->at();
276 st >> size >> numFunction;
283 if ( numFunction > 0x5F ) {
286 if ( (numFunction > 111) || (koWmfFunc[ numFunction ].method == 0) ) {
288 kdDebug() << "KoWmfReadPrivate::paint : BROKEN WMF file" << endl;
297 int offBuff = mBuffer->at();
300 kdDebug() << j << " : " << numFunction << " : ";
301 for ( TQ_UINT16 i=0 ; i < (size-3) ; i++ ) {
303 kdDebug() << param << " ";
306 mBuffer->at( offBuff );
315 (this->*koWmfFunc[ numFunction ].method)( size, st );
317 mBuffer->at( bufferOffset + (size<<1) );
323 for ( int i=0 ; i < mNbrObject ; i++ ) {
324 if ( mObjHandleTab[ i ] != 0 )
325 delete mObjHandleTab[ i ];
327 delete[] mObjHandleTab;
341 stream >> top >> left;
342 mReadWmf->setWindowOrg( left, top );
343 mWindow.setLeft( left );
344 mWindow.setTop( top );
353 TQ_INT16 width, height;
356 stream >> height >> width;
357 mReadWmf->setWindowExt( width, height );
358 mWindow.setWidth( width );
359 mWindow.setHeight( height );
366 TQ_INT16 offTop, offLeft;
368 stream >> offTop >> offLeft;
369 mReadWmf->setWindowOrg( mWindow.left() + offLeft, mWindow.top() + offTop );
370 mWindow.setLeft( mWindow.left() + offLeft );
371 mWindow.setTop( mWindow.top() + offTop );
377 TQ_INT16 width, height;
378 TQ_INT16 heightDenom, heightNum, widthDenom, widthNum;
380 stream >> heightDenom >> heightNum >> widthDenom >> widthNum;
382 if ( ( widthDenom != 0 ) && ( heightDenom != 0 ) ) {
383 width = (mWindow.width() * widthNum) / widthDenom;
384 height = (mWindow.height() * heightNum) / heightDenom;
385 mReadWmf->setWindowExt( width, height );
386 mWindow.setWidth( width );
387 mWindow.setHeight( height );
400 stream >> top >> left;
401 mReadWmf->lineTo( left, top );
409 stream >> top >> left;
410 mReadWmf->moveTo( left, top );
416 TQ_INT16 top, left, right, bottom;
418 stream >> bottom >> right >> top >> left;
419 mReadWmf->drawEllipse( left, top, right-left, bottom-top );
429 TQPointArray pa( num );
431 pointArray( stream, pa );
432 mReadWmf->drawPolygon( pa, mWinding );
438 TQ_UINT16 numberPoly;
440 TQPtrList<TQPointArray> listPa;
442 stream >> numberPoly;
444 listPa.setAutoDelete( true );
445 for ( int i=0 ; i < numberPoly ; i++ ) {
447 listPa.append( new TQPointArray( sizePoly ) );
452 for ( pa = listPa.first() ; pa ; pa = listPa.next() ) {
453 pointArray( stream, *pa );
457 mReadWmf->drawPolyPolygon( listPa, mWinding );
467 TQPointArray pa( num );
469 pointArray( stream, pa );
470 mReadWmf->drawPolyline( pa );
476 TQ_INT16 top, left, right, bottom;
478 stream >> bottom >> right >> top >> left;
479 mReadWmf->drawRect( left, top, right-left, bottom-top );
485 int xRnd = 0, yRnd = 0;
486 TQ_UINT16 widthCorner, heightCorner;
487 TQ_INT16 top, left, right, bottom;
489 stream >> heightCorner >> widthCorner;
490 stream >> bottom >> right >> top >> left;
493 if ( (right - left) != 0 )
494 xRnd = (widthCorner * 100) / (right - left);
495 if ( (bottom - top) != 0 )
496 yRnd = (heightCorner * 100) / (bottom - top);
498 mReadWmf->drawRoundRect( left, top, right-left, bottom-top, xRnd, yRnd );
504 int xCenter, yCenter, angleStart, aLength;
505 TQ_INT16 topEnd, leftEnd, topStart, leftStart;
506 TQ_INT16 top, left, right, bottom;
508 stream >> topEnd >> leftEnd >> topStart >> leftStart;
509 stream >> bottom >> right >> top >> left;
511 xCenter = left + ((right-left) / 2);
512 yCenter = top + ((bottom-top) / 2);
513 xyToAngle ( leftStart-xCenter, yCenter-topStart, leftEnd-xCenter, yCenter-topEnd, angleStart, aLength );
515 mReadWmf->drawArc( left, top, right-left, bottom-top, angleStart, aLength);
521 int xCenter, yCenter, angleStart, aLength;
522 TQ_INT16 topEnd, leftEnd, topStart, leftStart;
523 TQ_INT16 top, left, right, bottom;
525 stream >> topEnd >> leftEnd >> topStart >> leftStart;
526 stream >> bottom >> right >> top >> left;
528 xCenter = left + ((right-left) / 2);
529 yCenter = top + ((bottom-top) / 2);
530 xyToAngle ( leftStart-xCenter, yCenter-topStart, leftEnd-xCenter, yCenter-topEnd, angleStart, aLength );
532 mReadWmf->drawChord( left, top, right-left, bottom-top, angleStart, aLength);
538 int xCenter, yCenter, angleStart, aLength;
539 TQ_INT16 topEnd, leftEnd, topStart, leftStart;
540 TQ_INT16 top, left, right, bottom;
542 stream >> topEnd >> leftEnd >> topStart >> leftStart;
543 stream >> bottom >> right >> top >> left;
545 xCenter = left + ((right-left) / 2);
546 yCenter = top + ((bottom-top) / 2);
547 xyToAngle ( leftStart-xCenter, yCenter-topStart, leftEnd-xCenter, yCenter-topEnd, angleStart, aLength );
549 mReadWmf->drawPie( left, top, right-left, bottom-top, angleStart, aLength);
558 mWinding = (winding != 0);
567 mReadWmf->setBackgroundColor( qtColor( color ) );
577 mReadWmf->setBackgroundMode( TQt::TransparentMode );
579 mReadWmf->setBackgroundMode( TQt::OpaqueMode );
588 stream >> color >> top >> left;
590 TQPen oldPen = mReadWmf->pen();
592 pen.setColor( qtColor( color ) );
593 mReadWmf->setPen( pen );
594 mReadWmf->moveTo( left, top );
595 mReadWmf->lineTo( left, top );
596 mReadWmf->setPen( oldPen );
605 mReadWmf->setRasterOp( winToTQtRaster( rop ) );
620 for ( int i=0; i > num ; i-- )
627 TQ_INT16 top, left, right, bottom;
629 stream >> bottom >> right >> top >> left;
631 TQRegion region = mReadWmf->clipRegion();
632 TQRegion newRegion( left, top, right-left, bottom-top );
633 if ( region.isEmpty() ) {
637 region = region.intersect( newRegion );
640 mReadWmf->setClipRegion( region );
646 TQ_INT16 top, left, right, bottom;
648 stream >> bottom >> right >> top >> left;
650 TQRegion region = mReadWmf->clipRegion();
651 TQRegion newRegion( left, top, right-left, bottom-top );
652 if ( region.isEmpty() ) {
656 region = region.subtract( newRegion );
659 mReadWmf->setClipRegion( region );
671 mTextColor = qtColor( color );
677 stream >> mTextAlign;
684 kdDebug() << "textOut : unimplemented " << endl;
689void KoWmfReadPrivate::extTextOut( TQ_UINT32 , TQDataStream& )
692 kdDebug() << "extTextOut : unimplemented " << endl;
701void KoWmfReadPrivate::SetStretchBltMode( TQ_UINT32, TQDataStream& )
704 kdDebug() << "SetStretchBltMode : unimplemented " << endl;
712 TQ_INT16 topSrc, leftSrc, widthSrc, heightSrc;
713 TQ_INT16 topDst, leftDst;
716 stream >> topSrc >> leftSrc >> heightSrc >> widthSrc;
717 stream >> topDst >> leftDst;
722 if ( dibToBmp( bmpSrc, stream, (size - 11) * 2 ) ) {
723 mReadWmf->setRasterOp( winToTQtRaster( raster ) );
726 if ( widthSrc < 0 ) {
728 TQWMatrix m( -1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F );
729 mReadWmf->setWorldMatrix( m, true );
731 if ( heightSrc < 0 ) {
733 TQWMatrix m( 1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F );
734 mReadWmf->setWorldMatrix( m, true );
736 mReadWmf->drawImage( leftDst, topDst, bmpSrc, leftSrc, topSrc, widthSrc, heightSrc );
741 kdDebug() << "KoWmfReadPrivate::dibBitBlt without image not implemented " << endl;
749 TQ_INT16 topSrc, leftSrc, widthSrc, heightSrc;
750 TQ_INT16 topDst, leftDst, widthDst, heightDst;
754 stream >> heightSrc >> widthSrc >> topSrc >> leftSrc;
755 stream >> heightDst >> widthDst >> topDst >> leftDst;
757 if ( dibToBmp( bmpSrc, stream, (size - 13) * 2 ) ) {
758 mReadWmf->setRasterOp( winToTQtRaster( raster ) );
761 if ( widthDst < 0 ) {
763 TQWMatrix m( -1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F );
764 mReadWmf->setWorldMatrix( m, true );
766 if ( heightDst < 0 ) {
768 TQWMatrix m( 1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F );
769 mReadWmf->setWorldMatrix( m, true );
771 bmpSrc = bmpSrc.copy( leftSrc, topSrc, widthSrc, heightSrc );
775 mReadWmf->drawImage( leftDst, topDst, bmpSrc );
781void KoWmfReadPrivate::stretchDib( TQ_UINT32 size, TQDataStream& stream )
784 TQ_INT16 arg, topSrc, leftSrc, widthSrc, heightSrc;
785 TQ_INT16 topDst, leftDst, widthDst, heightDst;
788 stream >> raster >> arg;
789 stream >> heightSrc >> widthSrc >> topSrc >> leftSrc;
790 stream >> heightDst >> widthDst >> topDst >> leftDst;
792 if ( dibToBmp( bmpSrc, stream, (size - 14) * 2 ) ) {
793 mReadWmf->setRasterOp( winToTQtRaster( raster ) );
796 if ( widthDst < 0 ) {
798 TQWMatrix m( -1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F );
799 mReadWmf->setWorldMatrix( m, true );
801 if ( heightDst < 0 ) {
803 TQWMatrix m( 1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F );
804 mReadWmf->setWorldMatrix( m, true );
806 bmpSrc = bmpSrc.copy( leftSrc, topSrc, widthSrc, heightSrc );
809 mReadWmf->drawImage( leftDst, topDst, bmpSrc );
817 KoWmfPatternBrushHandle* handle = new KoWmfPatternBrushHandle;
819 if ( addHandle( handle ) ) {
824 if ( dibToBmp( bmpSrc, stream, (size - 5) * 2 ) ) {
825 handle->image = bmpSrc;
826 handle->brush.setPixmap( handle->image );
829 kdDebug() << "KoWmfReadPrivate::dibCreatePatternBrush : incorrect DIB image" << endl;
843 if ( (idx < mNbrObject) && (mObjHandleTab[ idx ] != 0) )
844 mObjHandleTab[ idx ]->apply( mReadWmf );
846 kdDebug() << "KoWmfReadPrivate::selectObject : selection of an empty object" << endl;
862 KoWmfPenHandle* handle = new KoWmfPenHandle;
870 TQt::BrushStyle style;
873 KoWmfBrushHandle* handle = new KoWmfBrushHandle;
875 if ( addHandle( handle ) ) {
876 stream >> sty >> color >> arg2;
880 style = koWmfHatchedStyleBrush[ arg2 ];
883 kdDebug() << "KoWmfReadPrivate::createBrushIndirect: invalid hatched brush " << arg2 << endl;
884 style = TQt::SolidPattern;
889 style = koWmfStyleBrush[ sty ];
891 kdDebug() << "KoWmfReadPrivate::createBrushIndirect: invalid brush " << sty << endl;
892 style = TQt::SolidPattern;
895 handle->brush.setStyle( style );
896 handle->brush.setColor( qtColor( color ) );
904 TQt::PenStyle penStyle;
906 TQ_UINT16 style, width, arg;
908 KoWmfPenHandle* handle = new KoWmfPenHandle;
910 if ( addHandle( handle ) ) {
911 stream >> style >> width >> arg >> color;
914 penStyle=koWmfStylePen[ style ];
916 kdDebug() << "KoWmfReadPrivate::createPenIndirect: invalid pen " << style << endl;
917 penStyle = TQt::SolidLine;
920 handle->pen.setStyle( penStyle );
921 handle->pen.setColor( qtColor( color ) );
922 handle->pen.setCapStyle( TQt::RoundCap );
923 handle->pen.setWidth( width );
930 TQ_INT16 pointSize, rotation;
931 TQ_UINT16 weight, property, fixedPitch, arg;
933 KoWmfFontHandle* handle = new KoWmfFontHandle;
935 if ( addHandle( handle ) ) {
936 stream >> pointSize >> arg;
937 stream >> rotation >> arg;
938 stream >> weight >> property >> arg >> arg;
939 stream >> fixedPitch;
943 mTextRotation = -rotation / 10;
944 handle->font.setFixedPitch( ((fixedPitch & 0x01) == 0) );
947 handle->font.setPointSize( TQABS(pointSize) - 2 );
948 handle->font.setWeight( (weight >> 3) );
949 handle->font.setItalic( (property & 0x01) );
950 handle->font.setUnderline( (property & 0x100) );
953 int maxChar = (size-12) * 2;
954 char* nameFont = new char[maxChar];
955 stream.readRawBytes( nameFont, maxChar );
956 handle->font.setFamily( nameFont );
972 TQ_UINT16 wResult, i;
975 wResult = *( lpWord = ( TQ_UINT16* )( apmfh ) );
977 for( i=1; i<=9; i++ )
979 wResult ^= lpWord[ i ];
985void KoWmfReadPrivate::notyet( TQ_UINT32, TQDataStream& )
988 kdDebug() << "unimplemented " << endl;
992void KoWmfReadPrivate::region( TQ_UINT32, TQDataStream& )
995 kdDebug() << "region : unimplemented " << endl;
999void KoWmfReadPrivate::palette( TQ_UINT32, TQDataStream& )
1002 kdDebug() << "palette : unimplemented " << endl;
1006void KoWmfReadPrivate::escape( TQ_UINT32, TQDataStream& )
1009 kdDebug() << "escape : unimplemented " << endl;
1013void KoWmfReadPrivate::setRelAbs( TQ_UINT32, TQDataStream& )
1016 kdDebug() << "setRelAbs : unimplemented " << endl;
1020void KoWmfReadPrivate::setMapMode( TQ_UINT32, TQDataStream& )
1023 kdDebug() << "setMapMode : unimplemented " << endl;
1027void KoWmfReadPrivate::extFloodFill( TQ_UINT32, TQDataStream& )
1030 kdDebug() << "extFloodFill : unimplemented " << endl;
1034void KoWmfReadPrivate::startDoc( TQ_UINT32, TQDataStream& )
1037 kdDebug() << "startDoc : unimplemented " << endl;
1041void KoWmfReadPrivate::startPage( TQ_UINT32, TQDataStream& )
1044 kdDebug() << "startPage : unimplemented " << endl;
1048void KoWmfReadPrivate::endDoc( TQ_UINT32, TQDataStream& )
1051 kdDebug() << "endDoc : unimplemented " << endl;
1055void KoWmfReadPrivate::endPage( TQ_UINT32, TQDataStream& )
1058 kdDebug() << "endPage : unimplemented " << endl;
1062void KoWmfReadPrivate::resetDC( TQ_UINT32, TQDataStream& )
1065 kdDebug() << "resetDC : unimplemented " << endl;
1069void KoWmfReadPrivate::bitBlt( TQ_UINT32, TQDataStream& )
1072 kdDebug() << "bitBlt : unimplemented " << endl;
1076void KoWmfReadPrivate::setDibToDev( TQ_UINT32, TQDataStream& )
1079 kdDebug() << "setDibToDev : unimplemented " << endl;
1083void KoWmfReadPrivate::createBrush( TQ_UINT32, TQDataStream& )
1086 kdDebug() << "createBrush : unimplemented " << endl;
1090void KoWmfReadPrivate::createPatternBrush( TQ_UINT32, TQDataStream& )
1093 kdDebug() << "createPatternBrush : unimplemented " << endl;
1097void KoWmfReadPrivate::createBitmap( TQ_UINT32, TQDataStream& )
1100 kdDebug() << "createBitmap : unimplemented " << endl;
1104void KoWmfReadPrivate::createBitmapIndirect( TQ_UINT32, TQDataStream& )
1108 kdDebug() << "createBitmapIndirect : unimplemented " << endl;
1112void KoWmfReadPrivate::createPalette( TQ_UINT32, TQDataStream& )
1116 kdDebug() << "createPalette : unimplemented " << endl;
1120void KoWmfReadPrivate::createRegion( TQ_UINT32, TQDataStream& )
1124 kdDebug() << "createRegion : unimplemented " << endl;
1133bool KoWmfReadPrivate::addHandle( KoWmfHandle* handle )
1137 for ( idx=0; idx < mNbrObject ; idx++ ) {
1138 if ( mObjHandleTab[ idx ] == 0 ) break;
1141 if ( idx < mNbrObject ) {
1142 mObjHandleTab[ idx ] = handle;
1147 mStackOverflow = true;
1148 kdDebug() << "KoWmfReadPrivate::addHandle : stack overflow = broken file !" << endl;
1154void KoWmfReadPrivate::deleteHandle( int idx )
1156 if ( (idx < mNbrObject) && (mObjHandleTab[idx] != 0) ) {
1157 delete mObjHandleTab[ idx ];
1158 mObjHandleTab[ idx ] = 0;
1161 kdDebug() << "KoWmfReadPrivate::deletehandle() : bad index number" << endl;
1166void KoWmfReadPrivate::pointArray( TQDataStream& stream, TQPointArray& pa )
1171 for ( i=0, max=pa.size() ; i < max ; i++ ) {
1172 stream >> left >> top;
1173 pa.setPoint( i, left, top );
1178void KoWmfReadPrivate::xyToAngle( int xStart, int yStart, int xEnd, int yEnd, int& angleStart, int& angleLength )
1180 double aStart, aLength;
1182 aStart = atan2( yStart, xStart );
1183 aLength = atan2( yEnd, xEnd ) - aStart;
1185 angleStart = (int)((aStart * 2880) / 3.14166);
1186 angleLength = (int)((aLength * 2880) / 3.14166);
1187 if ( angleLength < 0 ) angleLength = 5760 + angleLength;
1191TQt::RasterOp KoWmfReadPrivate::winToTQtRaster( TQ_UINT16 param ) const
1194 return koWmfOpTab16[ param ];
1196 return TQt::CopyROP;
1200TQt::RasterOp KoWmfReadPrivate::winToTQtRaster( TQ_UINT32 param ) const
1209 for ( i=0 ; i < 15 ; i++ ) {
1210 if ( koWmfOpTab32[ i ].winRasterOp == param ) break;
1214 return koWmfOpTab32[ i ].qtRasterOp;
1216 return TQt::CopyROP;
1220bool KoWmfReadPrivate::dibToBmp( TQImage& bmp, TQDataStream& stream, TQ_UINT32 size )
1222 typedef struct _BMPFILEHEADER {
1225 TQ_UINT16 bmReserved1;
1226 TQ_UINT16 bmReserved2;
1227 TQ_UINT32 bmOffBits;
1230 int sizeBmp = size + 14;
1232 TQByteArray pattern( sizeBmp );
1234 stream.readRawBytes( &pattern[ 14 ], size );
1237 BMPFILEHEADER* bmpHeader;
1238 bmpHeader = (BMPFILEHEADER*)(pattern.data());
1239 bmpHeader->bmType = 0x4D42;
1240 bmpHeader->bmSize = sizeBmp;
1243 if ( !bmp.loadFromData( pattern, "BMP" ) ) {
1244 kdDebug() << "KoWmfReadPrivate::dibToBmp: invalid bitmap " << endl;
WMF file allows manipulation on a stack of object.
void arc(TQ_UINT32 size, TQDataStream &stream) draw arc
TQRect mBBox bounding rectangle
void createEmptyObject() create an empty object in the object list
void setPixel(TQ_UINT32 size, TQDataStream &stream) set a pixel
bool load(const TQByteArray &array) Load WMF file.
void ellipse(TQ_UINT32 size, TQDataStream &stream) draw ellipse
void moveTo(TQ_UINT32 size, TQDataStream &stream) move pen to coord
void createFontIndirect(TQ_UINT32 size, TQDataStream &stream) create a logical font
int mDpi number of points per inch for the default size
void saveDC(TQ_UINT32 size, TQDataStream &stream) save device context */
void roundRect(TQ_UINT32 size, TQDataStream &stream) draw round rectangle
void dibCreatePatternBrush(TQ_UINT32 size, TQDataStream &stream) create a pattern brush
int mNbrFunc number of functions to draw (==0 for all)
static TQ_UINT16 calcCheckSum(WmfPlaceableHeader *) Calculate header checksum.
void createBrushIndirect(TQ_UINT32 size, TQDataStream &stream) create a logical brush
void rectangle(TQ_UINT32 size, TQDataStream &stream) draw a rectangle
void dibStretchBlt(TQ_UINT32 size, TQDataStream &stream) stretches a DIB into a dest location
void chord(TQ_UINT32 size, TQDataStream &stream) draw chord
void polyline(TQ_UINT32 size, TQDataStream &stream) draw series of lines
void polygon(TQ_UINT32 size, TQDataStream &stream) draw polygon
void excludeClipRect(TQ_UINT32 size, TQDataStream &stream) delete a clipping rectangle of the original region
void end(TQ_UINT32, TQDataStream &stream) end of meta file
void pie(TQ_UINT32 size, TQDataStream &stream) draw pie
void deleteObject(TQ_UINT32 size, TQDataStream &stream) free object handle
void lineTo(TQ_UINT32 size, TQDataStream &stream) draw line to coord
void createPenIndirect(TQ_UINT32 size, TQDataStream &stream) create a logical pen
bool play(KoWmfRead *readKwmf) Plays a metafile in readKwmf and returns true on success.
void selectObject(TQ_UINT32 size, TQDataStream &stream) activate object handle
void restoreDC(TQ_UINT32 size, TQDataStream &stream) restore device context
void textOut(TQ_UINT32 size, TQDataStream &stream) draw text
void OffsetWindowOrg(TQ_UINT32, TQDataStream &stream) offset in window origin
void setWindowExt(TQ_UINT32 size, TQDataStream &stream) set window extents
void dibBitBlt(TQ_UINT32 size, TQDataStream &stream) copies a DIB into a dest location
void ScaleWindowExt(TQ_UINT32, TQDataStream &stream) scale window extents
void setTextAlign(TQ_UINT32 size, TQDataStream &stream) set text alignment
void setPolyFillMode(TQ_UINT32 size, TQDataStream &stream) set polygon fill mode
void polyPolygon(TQ_UINT32 size, TQDataStream &stream) draw a list of polygons
void setTextColor(TQ_UINT32 size, TQDataStream &stream) set text color
void setWindowOrg(TQ_UINT32 size, TQDataStream &stream) set window origin
void setBkColor(TQ_UINT32 size, TQDataStream &stream) set background pen color
void setRop(TQ_UINT32 size, TQDataStream &stream) set raster operation mode
void intersectClipRect(TQ_UINT32 size, TQDataStream &stream) clipping region is the intersection of this region and the original region
void setBkMode(TQ_UINT32 size, TQDataStream &stream) set background pen mode
KoWmfRead allows the redirection of the actions stored in a WMF file.
|