update dev300-m58
[ooovba.git] / svtools / source / filter.vcl / wmf / wmfwr.hxx
blob79011838c23f7c7d51fd253ae71f083511627ad5
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: wmfwr.hxx,v $
10 * $Revision: 1.14 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _WMFWR_HXX
32 #define _WMFWR_HXX
34 #include <tools/bigint.hxx>
35 #include <tools/debug.hxx>
36 #include <vcl/metaact.hxx>
37 #include <vcl/graph.hxx>
38 #include <vcl/gdimtf.hxx>
39 #include <vcl/virdev.hxx>
40 #include <svtools/fltcall.hxx>
42 // -----------------------------------------------------------------------------
44 #define MAXOBJECTHANDLES 16
46 // -----------------------------------------------------------------------------
48 struct WMFWriterAttrStackMember
50 struct WMFWriterAttrStackMember * pSucc;
51 Color aLineColor;
52 Color aFillColor;
53 Color aTextColor;
54 LineInfo aLineInfo;
55 TextAlign eTextAlign;
56 RasterOp eRasterOp;
57 Font aFont;
58 MapMode aMapMode;
59 Region aClipRegion;
60 sal_uInt16 nFlags;
63 // -------------
64 // - WMFWriter -
65 // -------------
67 class StarSymbolToMSMultiFont;
68 class WMFWriter
70 private:
72 BOOL bStatus;
74 ULONG nLastPercent; // Mit welcher Zahl pCallback zuletzt aufgerufen wurde.
75 FilterConfigItem* pFilterConfigItem;
77 com::sun::star::uno::Reference< com::sun::star::task::XStatusIndicator > xStatusIndicator;
79 SvStream* pWMF;
80 VirtualDevice* pVirDev;
81 StarSymbolToMSMultiFont *pConvert;
82 MapMode aTargetMapMode;
83 Size aTargetSize;
84 USHORT nTargetDivisor;
86 ULONG nMetafileHeaderPos;
87 sal_uInt32 nMaxRecordSize; // in Worten
88 ULONG nActRecordPos;
90 // Aktuelle Attribute im Quell-Metafile:
91 Color aSrcLineColor;
92 Color aSrcFillColor;
93 Color aSrcTextColor;
94 LineInfo aSrcLineInfo;
95 RasterOp eSrcRasterOp;
96 FontAlign eSrcTextAlign;
97 Font aSrcFont;
98 MapMode aSrcMapMode;
99 BOOL bSrcIsClipping;
100 Region aSrcClipRegion;
101 WMFWriterAttrStackMember * pAttrStack;
103 UINT32 eSrcHorTextAlign;
105 // Aktuelle Attribute im Ziel-Metafile:
106 Color aDstLineColor;
107 Color aDstFillColor;
108 Color aDstTextColor;
109 LineInfo aDstLineInfo;
110 RasterOp eDstROP2;
111 FontAlign eDstTextAlign;
112 Font aDstFont;
114 UINT32 eDstHorTextAlign;
116 BOOL bDstIsClipping; // ???: derzeit unberuecksichtigt
117 Region aDstClipRegion; // ???: derzeit unberuecksichtigt
118 BOOL bHandleAllocated[MAXOBJECTHANDLES]; // Welche Handles vergeben sind
119 USHORT nDstPenHandle,nDstFontHandle,nDstBrushHandle; // Welche Handles die jeweiligen
120 // Selected-Objects besitzen
121 // 0xffff = keines:
123 // Damit nicht bei jeder Operation alle Attribute verglichen werden muessen:
125 ULONG nNumberOfActions; // Anzahl der Actions im GDIMetafile
126 ULONG nNumberOfBitmaps; // Anzahl der Bitmaps
127 ULONG nWrittenActions; // Anzahl der bereits verarbeiteten Actions beim Schreiben der Orders
128 ULONG nWrittenBitmaps; // Anzahl der bereits geschriebenen Bitmaps
129 ULONG nActBitmapPercent; // Wieviel Prozent die naechste Bitmap schon geschrieben ist.
131 void MayCallback();
132 // Berechnet anhand der obigen 5 Parameter eine Prozentzahl
133 // und macht dann ggf. einen Callback. Setzt bStatus auf FALSE wenn User abbrechen
134 // moechte.
136 void CountActionsAndBitmaps(const GDIMetaFile & rMTF);
137 // Zaehlt die Bitmaps und Actions (nNumberOfActions und nNumberOfBitmaps muessen
138 // zu Anfang auf 0 gesetzt werden, weil diese Methode rekursiv ist)
140 void WritePointXY(const Point & rPoint);
141 void WritePointYX(const Point & rPoint);
142 sal_Int32 ScaleWidth( sal_Int32 nDX );
143 void WriteSize(const Size & rSize);
144 void WriteHeightWidth(const Size & rSize);
145 void WriteRectangle(const Rectangle & rRect);
146 void WriteColor(const Color & rColor);
148 void WriteRecordHeader(sal_uInt32 nSizeWords, sal_uInt16 nType);
149 // nSizeWords ist die Groesse des gesammten Records in Anzahl Worte.
150 // Wenn nSizeWords unbekannt ist, dann 0 einsetzen (siehe UpdateRecordHeader()).
152 void UpdateRecordHeader();
153 // berichtig die Groesse des Records nach dem Schreiben der Parameter, wenn
154 // nSizeWords bei Aufruf von WriteRecordHeader(..) unbekannt war.
155 // fuegt ggf. noch ein BYTE 0 ein damit Anzahl Bytes immer gerade.
157 void WMFRecord_Arc(const Rectangle & rRect, const Point & rStartPt, const Point & rEndPt);
158 void WMFRecord_Chord(const Rectangle & rRect, const Point & rStartPt, const Point & rEndPt);
159 void WMFRecord_CreateBrushIndirect(const Color& rColor);
160 void WMFRecord_CreateFontIndirect(const Font & rFont);
161 void WMFRecord_CreatePenIndirect(const Color& rColor, const LineInfo& rLineInfo );
162 void WMFRecord_DeleteObject(USHORT nObjectHandle);
163 void WMFRecord_Ellipse(const Rectangle & rRect);
164 void WMFRecord_Escape( sal_uInt32 nEsc, sal_uInt32 nLen, const sal_Int8* pData );
165 sal_Bool WMFRecord_Escape_Unicode( const Point& rPoint, const String& rStr, const sal_Int32 * pDXAry );
166 void WMFRecord_ExtTextOut(const Point & rPoint, const String & rString, const sal_Int32 * pDXAry);
168 void TrueExtTextOut(const Point & rPoint, const String & rString,
169 const ByteString & rByteString, const sal_Int32 * pDXAry);
170 void TrueTextOut(const Point & rPoint, const ByteString& rString);
171 void WMFRecord_LineTo(const Point & rPoint);
172 void WMFRecord_MoveTo(const Point & rPoint);
173 void WMFRecord_Pie(const Rectangle & rRect, const Point & rStartPt, const Point & rEndPt);
174 void WMFRecord_Polygon(const Polygon & rPoly);
175 void WMFRecord_PolyLine(const Polygon & rPoly);
176 void WMFRecord_PolyPolygon(const PolyPolygon & rPolyPoly);
177 void WMFRecord_Rectangle(const Rectangle & rRect);
178 void WMFRecord_RestoreDC();
179 void WMFRecord_RoundRect(const Rectangle & rRect, long nHorzRound, long nVertRound);
180 void WMFRecord_SaveDC();
181 void WMFRecord_SelectObject(USHORT nObjectHandle);
182 void WMFRecord_SetBkColor(const Color & rColor);
183 void WMFRecord_SetBkMode(BOOL bTransparent);
184 void WMFRecord_SetStretchBltMode();
185 void WMFRecord_SetPixel(const Point & rPoint, const Color & rColor);
186 void WMFRecord_SetROP2(RasterOp eROP);
187 void WMFRecord_SetTextAlign(FontAlign eFontAlign, UINT32 eHorTextAlign);
188 void WMFRecord_SetTextColor(const Color & rColor);
189 void WMFRecord_SetWindowExt(const Size & rSize);
190 void WMFRecord_SetWindowOrg(const Point & rPoint);
191 void WMFRecord_StretchDIB(const Point & rPoint, const Size & rSize, const Bitmap & rBitmap, sal_uInt32 nROP = 0UL );
192 void WMFRecord_TextOut(const Point & rPoint, const String & rString);
193 void WMFRecord_EndOfFile();
194 void WMFRecord_IntersectClipRect( const Rectangle& rRect);
196 USHORT AllocHandle();
197 void FreeHandle(USHORT nObjectHandle);
198 void CreateSelectDeletePen( const Color& rColor, const LineInfo& rLineInfo );
199 void CreateSelectDeleteFont(const Font & rFont);
200 void CreateSelectDeleteBrush(const Color& rColor);
202 void SetLineAndFillAttr();
203 void SetAllAttr();
205 void WriteRecords(const GDIMetaFile & rMTF);
207 void WriteHeader(const GDIMetaFile & rMTF, BOOL bPlaceable);
208 void UpdateHeader();
210 USHORT CalcSaveTargetMapMode(MapMode& rMapMode, const Size& rPrefSize);
212 public:
214 WMFWriter() {}
216 BOOL WriteWMF(const GDIMetaFile & rMTF, SvStream & rTargetStream, FilterConfigItem* pFilterConfigItem, BOOL bPlaceable=TRUE);
219 #endif