You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kwmf/kowmfreadprivate.h

363 lines
13 KiB

/* This file is part of the KDE libraries
* Copyright (c) 1998 Stefan Taferner
* 2001/2003 thierry lorthiois (lorthioist@wanadoo.fr)
* With the help of WMF documentation by Caolan Mc Namara
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef _KOWMFREADPRIVATE_H_
#define _KOWMFREADPRIVATE_H_
#include <tqpen.h>
#include <tqcolor.h>
#include <tqfont.h>
#include <tqrect.h>
#include <tqregion.h>
#include <tqbuffer.h>
#include <tqstring.h>
#include "kowmfstruct.h"
#include "kowmfstack.h"
class KoWmfRead;
/**
* KoWmfReadPrivate allows to read WMF files
*
*/
class KoWmfReadPrivate
{
public:
KoWmfReadPrivate();
virtual ~KoWmfReadPrivate();
/**
* Load WMF file. Returns true on success.
*/
bool load( const TQByteArray& array );
/**
* Plays a metafile in @p readKwmf and returns true on success.
* To draw on a device you have to inherit the class ReadKwmf
*/
bool play( KoWmfRead* readKwmf );
/* Metafile painter methods */
/// set window origin
void setWindowOrg( TQ_UINT32 size, TQDataStream& stream );
/// set window extents
void setWindowExt( TQ_UINT32 size, TQDataStream& stream );
/// scale window extents
void ScaleWindowExt( TQ_UINT32, TQDataStream& stream );
/// offset in window origin
void OffsetWindowOrg( TQ_UINT32, TQDataStream& stream );
/****************** Drawing *******************/
/// draw line to coord
void lineTo( TQ_UINT32 size, TQDataStream& stream );
/// move pen to coord
void moveTo( TQ_UINT32 size, TQDataStream& stream );
/// draw ellipse
void ellipse( TQ_UINT32 size, TQDataStream& stream );
/// draw polygon
void polygon( TQ_UINT32 size, TQDataStream& stream );
/// draw a list of polygons
void polyPolygon( TQ_UINT32 size, TQDataStream& stream );
/// draw series of lines
void polyline( TQ_UINT32 size, TQDataStream& stream );
/// draw a rectangle
void rectangle( TQ_UINT32 size, TQDataStream& stream );
/// draw round rectangle
void roundRect( TQ_UINT32 size, TQDataStream& stream );
/// draw arc
void arc( TQ_UINT32 size, TQDataStream& stream );
/// draw chord
void chord( TQ_UINT32 size, TQDataStream& stream );
/// draw pie
void pie( TQ_UINT32 size, TQDataStream& stream );
/// set polygon fill mode
void setPolyFillMode( TQ_UINT32 size, TQDataStream& stream );
/// set background pen color
void setBkColor( TQ_UINT32 size, TQDataStream& stream );
/// set background pen mode
void setBkMode( TQ_UINT32 size, TQDataStream& stream );
/// set a pixel
void setPixel( TQ_UINT32 size, TQDataStream& stream );
/// set raster operation mode
void setRop( TQ_UINT32 size, TQDataStream& stream );
/// save device context */
void saveDC( TQ_UINT32 size, TQDataStream& stream );
/// restore device context
void restoreDC( TQ_UINT32 size, TQDataStream& stream );
/// clipping region is the intersection of this region and the original region
void intersectClipRect( TQ_UINT32 size, TQDataStream& stream );
/// delete a clipping rectangle of the original region
void excludeClipRect( TQ_UINT32 size, TQDataStream& stream );
/****************** Text *******************/
/// set text color
void setTextColor( TQ_UINT32 size, TQDataStream& stream );
/// set text alignment
void setTextAlign( TQ_UINT32 size, TQDataStream& stream );
/// draw text
void textOut( TQ_UINT32 size, TQDataStream& stream );
void extTextOut( TQ_UINT32 size, TQDataStream& stream );
/****************** Bitmap *******************/
void SetStretchBltMode( TQ_UINT32, TQDataStream& stream );
/// copies a DIB into a dest location
void dibBitBlt( TQ_UINT32 size, TQDataStream& stream );
/// stretches a DIB into a dest location
void dibStretchBlt( TQ_UINT32 size, TQDataStream& stream );
void stretchDib( TQ_UINT32 size, TQDataStream& stream );
/// create a pattern brush
void dibCreatePatternBrush( TQ_UINT32 size, TQDataStream& stream );
/****************** Object handle *******************/
/// activate object handle
void selectObject( TQ_UINT32 size, TQDataStream& stream );
/// free object handle
void deleteObject( TQ_UINT32 size, TQDataStream& stream );
/// create an empty object in the object list
void createEmptyObject();
/// create a logical brush
void createBrushIndirect( TQ_UINT32 size, TQDataStream& stream );
/// create a logical pen
void createPenIndirect( TQ_UINT32 size, TQDataStream& stream );
/// create a logical font
void createFontIndirect( TQ_UINT32 size, TQDataStream& stream );
/****************** misc *******************/
/// end of meta file
void end( TQ_UINT32, TQDataStream& stream );
/** Calculate header checksum */
static TQ_UINT16 calcCheckSum( WmfPlaceableHeader* );
// function unimplemented
void notyet( TQ_UINT32, TQDataStream& stream );
void region( TQ_UINT32, TQDataStream& stream );
void palette( TQ_UINT32, TQDataStream& stream );
void escape( TQ_UINT32, TQDataStream& stream );
void setRelAbs( TQ_UINT32, TQDataStream& stream );
void setMapMode( TQ_UINT32, TQDataStream& stream );
void extFloodFill( TQ_UINT32, TQDataStream& stream );
void startDoc( TQ_UINT32, TQDataStream& stream );
void startPage( TQ_UINT32, TQDataStream& stream );
void endDoc( TQ_UINT32, TQDataStream& stream );
void endPage( TQ_UINT32, TQDataStream& stream );
void resetDC( TQ_UINT32, TQDataStream& stream );
void bitBlt( TQ_UINT32, TQDataStream& stream );
void setDibToDev( TQ_UINT32, TQDataStream& stream );
void createBrush( TQ_UINT32, TQDataStream& stream );
void createPatternBrush( TQ_UINT32, TQDataStream& stream );
void createBitmap( TQ_UINT32, TQDataStream& stream );
void createBitmapIndirect( TQ_UINT32, TQDataStream& stream );
void createPalette( TQ_UINT32, TQDataStream& stream );
void createRegion( TQ_UINT32, TQDataStream& stream );
private:
//-----------------------------------------------------------------------------
// Utilities and conversion Wmf -> TQt
/** Handle win-object-handles */
bool addHandle( KoWmfHandle* );
void deleteHandle( int );
/** Convert TQINT16 points into TQPointArray */
void pointArray( TQDataStream& stream, TQPointArray& pa );
/** Convertion between windows color and TQColor */
TQColor qtColor( TQ_UINT32 color ) const
{ return TQColor( color & 0xFF, (color>>8) & 0xFF, (color>>16) & 0xFF ); }
/** Convert (x1,y1) and (x2, y2) positions in angle and angleLength */
void xyToAngle( int xStart, int yStart, int xEnd, int yEnd, int& angle, int& aLength );
/** Convert windows rasterOp in QT rasterOp */
TQt::RasterOp winToTQtRaster( TQ_UINT16 param ) const;
TQt::RasterOp winToTQtRaster( TQ_UINT32 param ) const;
/** Converts DIB to BMP */
bool dibToBmp( TQImage& bmp, TQDataStream& stream, TQ_UINT32 size);
public:
// state of the WMF
bool mValid;
bool mStandard;
bool mPlaceable;
bool mEnhanced;
/// bounding rectangle
TQRect mBBox; // placeable file : this is the header
// standard file : this is the value in setWindowOrg and setWindowExt
/// number of points per inch for the default size
int mDpi;
/// number of functions to draw (==0 for all)
int mNbrFunc;
private:
// the output
KoWmfRead *mReadWmf;
// current coordinate != mBBox
TQRect mWindow;
// current state of the drawing
TQColor mTextColor;
TQ_UINT16 mTextAlign;
int mTextRotation;
bool mWinding;
// memory allocation for WMF file
TQBuffer* mBuffer;
int mOffsetFirstRecord;
// stack of object handle
KoWmfHandle** mObjHandleTab;
// number of object on the stack
int mNbrObject;
bool mStackOverflow;
};
/**
* static data
*/
static const struct KoWmfFunc {
void ( KoWmfReadPrivate::*method )( TQ_UINT32, TQDataStream& );
} koWmfFunc[] = {
{ &KoWmfReadPrivate::end }, // 0
{ &KoWmfReadPrivate::setBkColor }, // 1
{ &KoWmfReadPrivate::setBkMode }, // 2
{ &KoWmfReadPrivate::setMapMode }, // 3
{ &KoWmfReadPrivate::setRop }, // 4
{ &KoWmfReadPrivate::setRelAbs }, // 5
{ &KoWmfReadPrivate::setPolyFillMode }, // 6
{ &KoWmfReadPrivate::SetStretchBltMode }, // 7
{ &KoWmfReadPrivate::notyet }, // 8
{ &KoWmfReadPrivate::setTextColor }, // 9
{ &KoWmfReadPrivate::ScaleWindowExt }, // 10
{ &KoWmfReadPrivate::setWindowOrg }, // 11
{ &KoWmfReadPrivate::setWindowExt }, // 12
{ &KoWmfReadPrivate::notyet }, // 13
{ &KoWmfReadPrivate::notyet }, // 14
{ &KoWmfReadPrivate::OffsetWindowOrg }, // 15
{ &KoWmfReadPrivate::notyet }, // 16
{ &KoWmfReadPrivate::notyet }, // 17
{ &KoWmfReadPrivate::notyet }, // 18
{ &KoWmfReadPrivate::lineTo }, // 19
{ &KoWmfReadPrivate::moveTo }, // 20
{ &KoWmfReadPrivate::excludeClipRect }, // 21
{ &KoWmfReadPrivate::intersectClipRect }, // 22
{ &KoWmfReadPrivate::arc }, // 23
{ &KoWmfReadPrivate::ellipse }, // 24
{ &KoWmfReadPrivate::notyet }, // 25
{ &KoWmfReadPrivate::pie }, // 26
{ &KoWmfReadPrivate::rectangle }, // 27
{ &KoWmfReadPrivate::roundRect }, // 28
{ &KoWmfReadPrivate::notyet }, // 29
{ &KoWmfReadPrivate::saveDC }, // 30
{ &KoWmfReadPrivate::setPixel }, // 31
{ &KoWmfReadPrivate::notyet }, // 32
{ &KoWmfReadPrivate::textOut }, // 33
{ &KoWmfReadPrivate::bitBlt }, // 34
{ &KoWmfReadPrivate::notyet }, // 35
{ &KoWmfReadPrivate::polygon }, // 36
{ &KoWmfReadPrivate::polyline }, // 37
{ &KoWmfReadPrivate::escape }, // 38
{ &KoWmfReadPrivate::restoreDC }, // 39
{ &KoWmfReadPrivate::region }, // 40
{ &KoWmfReadPrivate::region }, // 41
{ &KoWmfReadPrivate::region }, // 42
{ &KoWmfReadPrivate::region }, // 43
{ &KoWmfReadPrivate::region }, // 44
{ &KoWmfReadPrivate::selectObject }, // 45
{ &KoWmfReadPrivate::setTextAlign }, // 46
{ 0 }, // 47
{ &KoWmfReadPrivate::chord }, // 48
{ &KoWmfReadPrivate::notyet }, // 49
{ &KoWmfReadPrivate::extTextOut }, // 50
{ &KoWmfReadPrivate::setDibToDev }, // 51
{ &KoWmfReadPrivate::palette }, // 52
{ &KoWmfReadPrivate::palette }, // 53
{ &KoWmfReadPrivate::palette }, // 54
{ &KoWmfReadPrivate::palette }, // 55
{ &KoWmfReadPrivate::polyPolygon }, // 56
{ &KoWmfReadPrivate::palette }, // 57
{ 0 }, // 58
{ 0 }, // 59
{ 0 }, // 60
{ 0 }, // 61
{ 0 }, // 62
{ 0 }, // 63
{ &KoWmfReadPrivate::dibBitBlt }, // 64
{ &KoWmfReadPrivate::dibStretchBlt }, // 65
{ &KoWmfReadPrivate::dibCreatePatternBrush }, // 66
{ &KoWmfReadPrivate::stretchDib }, // 67
{ 0 }, // 68
{ 0 }, // 69
{ 0 }, // 70
{ 0 }, // 71
{ &KoWmfReadPrivate::extFloodFill }, // 72
{ 0 }, // 73
{ 0 }, // 74
{ 0 }, // 75
{ &KoWmfReadPrivate::resetDC }, // 76
{ &KoWmfReadPrivate::startDoc }, // 77
{ 0 }, // 78
{ &KoWmfReadPrivate::startPage }, // 79
{ &KoWmfReadPrivate::endPage }, // 80
{ 0 }, // 81
{ 0 }, // 82
{ 0 }, // 83
{ 0 }, // 84
{ 0 }, // 85
{ 0 }, // 86
{ 0 }, // 87
{ 0 }, // 88
{ 0 }, // 89
{ 0 }, // 90
{ 0 }, // 91
{ 0 }, // 92
{ 0 }, // 93
{ &KoWmfReadPrivate::endDoc }, // 94
{ 0 }, // 95
// 0x5F last function until 0xF0
{ &KoWmfReadPrivate::deleteObject }, // 96
{ 0 }, // 97
{ 0 }, // 98
{ 0 }, // 99
{ 0 }, // 100
{ 0 }, // 101
{ 0 }, // 102
{ &KoWmfReadPrivate::createPalette }, // 103
{ &KoWmfReadPrivate::createBrush }, // 104
{ &KoWmfReadPrivate::createPatternBrush }, // 105
{ &KoWmfReadPrivate::createPenIndirect }, // 106
{ &KoWmfReadPrivate::createFontIndirect }, // 107
{ &KoWmfReadPrivate::createBrushIndirect }, //108
{ &KoWmfReadPrivate::createBitmapIndirect }, //109
{ &KoWmfReadPrivate::createBitmap }, // 110
{ &KoWmfReadPrivate::createRegion } // 111
};
#endif