1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: sgvmain.hxx,v $
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 ************************************************************************/
34 #include <vcl/font.hxx>
35 #include <vcl/outdev.hxx>
36 #include <vcl/virdev.hxx>
39 #define UCHAR unsigned char
52 friend SvStream
& operator>>(SvStream
& rIStream
, DtHdType
& rDtHd
);
53 friend void DtHdOverSeek(SvStream
& rInp
);
58 PointType Size
; // 0.00mm...819.175mm (Papiergr��e)
59 INT16 RandL
; // links Rand auf
60 INT16 RandR
; // rechts dem Papier
61 INT16 RandO
; // oben Rand auf
62 INT16 RandU
; // unten dem Papier
63 BYTE PColor
; // Future Use
64 BYTE PIntens
; // erst recht Future use
65 // BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
72 UINT32 Next
; // N�chste Seite
73 UINT32 nList
; // Objektdaten, erster Record
74 UINT32 ListEnd
; // Objektdaten, letzter Record
75 Seitenformat Paper
; // Papierdaten
76 BOOL BorderClip
; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
77 BYTE StdPg
; // welche Standardseite einblenden ?
78 PointType U
; // Nullpunkt
79 INT16 HlpLnH
[20]; // Hilfslinien
83 UCHAR PgName
[32]; // Seitenname
84 friend SvStream
& operator>>(SvStream
& rIStream
, PageType
& rPage
);
88 enum ObjArtType
{ObjStrk
,ObjRect
,ObjPoly
,ObjCirc
,ObjSpln
,
89 ObjText
,ObjGrup
,ObjBmap
,ObjVirt
,ObjTxtX
,ObjMaxi
};
92 BYTE LFarbe
; // [Index]
93 BYTE LBFarbe
; // [Index]
95 BYTE LMuster
; // [Index] inkl. Transparenz
96 INT16 LMSize
; // [Koeffizient/100]
97 INT16 LDicke
; // Strichst�rke
101 BYTE FFarbe
; // [Index]
102 BYTE FBFarbe
; // [Index]
106 UINT16 FMuster
; // [Index] inkl. Invers, Transparenz
109 #define ObjTextTypeSize 64
112 ObjLineType L
; // Text-Outline (future)
113 ObjAreaType F
; // Text innen
114 UINT16 FontLo
,FontHi
;// z.B. 92500 (CG Times), zweigeteilt wegen DWordAllign in TextType.
115 UINT16 Grad
; // 0.5..32767.5 Pt - bei 1000 Pt sollte aber schlu� sein
116 UINT16 Breite
; // 1..65535% bitte nicht mehr als 500%
117 BYTE Justify
; // 2 Bit Vert (Hi), 3 Bit Hor (Lo)
118 BYTE Kapit
; // 1..255%
119 UINT16 Schnitt
; // 8 Flags
120 UINT16 LnFeed
; // 1..32767% vom max. Schriftgrad der Zeile
121 UINT16 Slant
; // Kursivwinkel 0.00..89.99� default 15.00� doppelt Breit angesehen)
122 BYTE ZAbst
; // Zeichenabstand 0..255% (0=auf der Stelle; 100=normal; 200=Zeichen wird als
123 INT8 ChrVPos
; // Zeichen V-Position default 0= on Baseline, 10= 5Pt drunter (-64..63�)
124 ObjLineType ShdL
; // Schatten-Outline (neu 2.0)
125 ObjAreaType ShdF
; // Schatten-innen (neu 2.0)
126 PointType ShdVers
; // Schattenversatz Max.300.00%
127 BOOL ShdAbs
; // True-> Schattenversatz ist absolut statt relativ zum Schriftgrad
128 BOOL NoSpc
; // True-> kein Zwischenraum (f�r BackArea)
129 ObjAreaType BackF
; // Hintergrundfl�che
131 void SetFont(UINT32 FontID
);
134 class Obj0Type
{ // SuperClass f�r Apple-VMT
136 virtual void Draw(OutputDevice
& rOut
);
137 virtual ~Obj0Type() {}
140 #define ObjkSize 20 /* eigentlich 21. Wg. Allignment ist Flags jedoch verschoben worden*/
141 class ObjkType
: public Obj0Type
{ // Grundkomponenten aller Stardraw-Objekte
145 UINT16 MemSize
; // in Bytes
146 PointType ObjMin
; // XY-Minimum des Objekts
147 PointType ObjMax
; // XY-Maximum des Objekts
150 // BYTE Flags; // (Schummel f�r Allignment unter NT)
151 friend SvStream
& operator>>(SvStream
& rIStream
, ObjkType
& rObjk
);
152 friend BOOL
ObjOverSeek(SvStream
& rInp
, ObjkType
& rObjk
);
153 virtual void Draw(OutputDevice
& rOut
);
158 class StrkType
: public ObjkType
{
160 BYTE Flags
; // (Schummel f�r Allignment unter NT)
161 BYTE LEnden
; // Linienenden
163 PointType Pos1
; // Anfangspunkt
164 PointType Pos2
; // Endpunkt
165 friend SvStream
& operator>>(SvStream
& rIStream
, StrkType
& rStrk
);
166 virtual void Draw(OutputDevice
& rOut
);
171 class RectType
: public ObjkType
{
173 BYTE Flags
; // (Schummel f�r Allignment unter NT)
177 PointType Pos1
; // LO-Ecke = Bezugspunkt
178 PointType Pos2
; // R-Ecke
179 INT16 Radius
; // Eckenradius
180 UINT16 DrehWink
; // 315...<45
181 UINT16 Slant
; // >270...<90
182 friend SvStream
& operator>>(SvStream
& rIStream
, RectType
& rRect
);
183 virtual void Draw(OutputDevice
& rOut
);
188 class PolyType
: public ObjkType
{ // identisch mit Spline !
190 BYTE Flags
; // (Schummel f�r Allignment unter NT)
191 BYTE LEnden
; // nur f�r Polyline
193 ObjAreaType F
; // nicht f�r Polyline
196 UINT32 SD_EckP
; // Zeiger auf die Eckpunkte (StarDraw)
197 PointType
* EckP
; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
198 friend SvStream
& operator>>(SvStream
& rIStream
, PolyType
& rPoly
);
199 virtual void Draw(OutputDevice
& rOut
);
201 #define PolyClosBit 0x01 // Unterarten von Poly: 0: PolyLine 1: Polygon
205 class SplnType
: public ObjkType
{ // identisch mit Poly !
207 BYTE Flags
; // (Schummel f�r Allignment unter NT)
208 BYTE LEnden
; // nur f�r nSpline
210 ObjAreaType F
; // nicht f�r nSpline
213 UINT32 SD_EckP
; // Zeiger auf die Eckpunkte (StarDraw)
214 PointType
* EckP
; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
215 friend SvStream
& operator>>(SvStream
& rIStream
, SplnType
& rSpln
);
216 virtual void Draw(OutputDevice
& rOut
);
218 // Unterarten von Spline: siehe Poly
222 class CircType
: public ObjkType
{
224 BYTE Flags
; // (Schummel f�r Allignment unter NT)
225 BYTE LEnden
; // nur Bogen (Kr & El)
227 ObjAreaType F
; // nicht f�r Bogen (Kr & El)
228 PointType Center
; // Mittelpunkt
229 PointType Radius
; // Radius
230 UINT16 DrehWink
; // nur Ellipse
231 UINT16 StartWink
; // � nicht f�r Vollkreis
232 UINT16 RelWink
; // � und Vollellipse
233 friend SvStream
& operator>>(SvStream
& rIStream
, CircType
& rCirc
);
234 virtual void Draw(OutputDevice
& rOut
);
236 #define CircFull 0x00 /* Unterarten von Kreis: 0: Kreis */
237 #define CircSect 0x01 /* 1: Kreissektor */
238 #define CircAbsn 0x02 /* 2: Kreisabschnitt */
239 #define CircArc 0x03 /* 3: Kreisbogen */
243 class TextType
: public ObjkType
{
245 BYTE Flags
; // (Schummel f�r Allignment unter NT)
246 BYTE Reserve
; // f�r Word Allign
247 ObjTextType T
; // 64 Bytes << DWord-Allign bei FontID erforderlich
248 PointType Pos1
; // Bezugspunkt (ObenLinks)
249 PointType Pos2
; // (untenRechts)
250 INT16 TopOfs
; // Von Oberkante bis Textbegin (future f�r vJustify)
251 UINT16 DrehWink
; // 0...<360
252 UINT16 BoxSlant
; // >270...<90 (nur Box)
253 UINT16 BufSize
; // Gr��e von Buf f�r Load, Save, Copy und so
254 UINT16 BufLo
,BufHi
;// (UCHAR*) Zeiger auf den Textbuffer << ShortArr, weil sonst DWord-Allign erforderlich
255 UINT16 ExtLo
,ExtHi
;// (Ptr) Text �ber mehrere Rahmen << ShortArr, weil sonst DWord-Allign erforderlich
256 PointType FitSize
; // Ursprungsgr��e f�r Fit2Size
257 INT16 FitBreit
; // Breite zum formatieren bei Fit2Size
258 UCHAR
* Buffer
; // Diese Variable wird nicht durch Lesen von Disk gef�llt, sondern explizit!
259 friend SvStream
& operator>>(SvStream
& rIStream
, TextType
& rText
);
260 virtual void Draw(OutputDevice
& rOut
);
262 #define TextOutlBit 0x01 /* 1=Sourcecode f�r Outliner (wird von DrawObjekt() ignoriert) */
263 #define TextFitSBit 0x02 /* Bit1: 1=Text-FitToSize, auch Outliner (2.0) */
264 #define TextFitZBit 0x08 /* Bit3: 1=Fit2Size Zeilenweise (2.0) */
265 #define TextDrftBit 0x04 /* Bit2: 1=DraftDraw (2.0) */
266 #define TextFitBits (TextFitSBit | TextFitZBit)
269 enum GrafStat
{NoGraf
,Pic
,Pcx
,Hpgl
,Img
,Msp
,Tiff
,Dxf
,Lot
,Usr
,Sgf
};
272 class BmapType
: public ObjkType
{
274 BYTE Flags
; // (Schummel f�r Allignment unter NT)
276 ObjAreaType F
; // Farbe und Muster der 1-Plane Bitmap
279 UINT16 DrehWink
; // 315...<45 (Future)
280 UINT16 Slant
; // >270...<90 (Future)
281 UCHAR Filename
[80]; // Pfad
282 PointType PixSize
; // Gr��e in Pixel (0 bei Vektor)
283 GrafStat Format
; // siehe GpmDef.Pas
284 BYTE nPlanes
; // Anzahl der Bitplanes (0 bei Vektor)
285 BOOL RawOut
; // als Raw ausgeben ?
286 BOOL InvOut
; // invertiert ausgeben ?
287 BOOL LightOut
; // aufhellen? (SD20)
288 BYTE GrfFlg
; // (SD20) 0=nSGF 1=Pcx 2=Hpgl 4=Raw $FF=Undef(f�r Fix in DrawBmp)
290 INetURLObject aFltPath
; // F�r GraphicFilter
291 friend SvStream
& operator>>(SvStream
& rIStream
, BmapType
& rBmap
);
292 virtual void Draw(OutputDevice
& rOut
);
293 void SetPaths( const INetURLObject rFltPath
);
298 class GrupType
: public ObjkType
{
300 BYTE Flags
; // (Schummel f�r Allignment unter NT)
301 UCHAR Name
[13]; // Name der Gruppe
302 UINT16 SbLo
,SbHi
; // (Ptr) Gruppenliste << ShortArr, weil sonst DWord Allign erforderlich
303 UINT16 UpLo
,UpHi
; // (Ptr) Vaterliste << ShortArr, weil sonst DWord Allign erforderlich
304 UINT16 ChartSize
; // Speicherbedarf der Diagrammstruktur Struktur
305 UINT32 ChartPtr
; // Diagrammstruktur
306 UINT32
GetSubPtr(); // hier nur zum Checken, ob Sublist evtl. leer ist.
307 friend SvStream
& operator>>(SvStream
& rIStream
, GrupType
& rGrup
);
308 // virtual void Draw(OutputDevice& rOut);
312 void SetLine(ObjLineType
& rLine
, OutputDevice
& rOut
);
313 void SetArea(ObjAreaType
& rArea
, OutputDevice
& rOut
);
314 Color
Sgv2SvFarbe(BYTE nFrb1
, BYTE nFrb2
, BYTE nInts
);
315 void RotatePoint(PointType
& P
, INT16 cx
, INT16 cy
, double sn
, double cs
);
316 void RotatePoint(Point
& P
, INT16 cx
, INT16 cy
, double sn
, double cs
);
317 INT16
iMulDiv(INT16 a
, INT16 Mul
, INT16 Div
);
318 UINT16
MulDiv(UINT16 a
, UINT16 Mul
, UINT16 Div
);
323 SgfFontOne
* Next
; // Zeiger f�r Listenverkettung
332 String SVFName
; // z.B. "Times New Roman" = 15 Chars
333 USHORT SVWidth
; // Durchschnittliche Zeichenbreite in %
335 void ReadOne( ByteString
& ID
, ByteString
& Dsc
);
340 String FNam
; // vollst�ndiger Filename des Inifiles
341 SgfFontOne
* pList
; // Listenanfang
342 SgfFontOne
* Last
; // Listenende
343 UINT32 LastID
; // f�r schnelleren Zugriff bei Wiederholungen
344 SgfFontOne
* LastLn
; // f�r schnelleren Zugriff bei Wiederholungen
348 void AssignFN(const String
& rFName
);
351 SgfFontOne
* GetFontDesc(UINT32 ID
);
354 #endif //_SGVMAIN_HXX