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>
42 #define UCHAR unsigned char
55 friend SvStream
& operator>>(SvStream
& rIStream
, DtHdType
& rDtHd
);
56 friend void DtHdOverSeek(SvStream
& rInp
);
61 PointType Size
; // 0.00mm...819.175mm (Papiergr��e)
62 INT16 RandL
; // links Rand auf
63 INT16 RandR
; // rechts dem Papier
64 INT16 RandO
; // oben Rand auf
65 INT16 RandU
; // unten dem Papier
66 BYTE PColor
; // Future Use
67 BYTE PIntens
; // erst recht Future use
68 // BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
75 UINT32 Next
; // N�chste Seite
76 UINT32 nList
; // Objektdaten, erster Record
77 UINT32 ListEnd
; // Objektdaten, letzter Record
78 Seitenformat Paper
; // Papierdaten
79 BOOL BorderClip
; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
80 BYTE StdPg
; // welche Standardseite einblenden ?
81 PointType U
; // Nullpunkt
82 INT16 HlpLnH
[20]; // Hilfslinien
86 UCHAR PgName
[32]; // Seitenname
87 friend SvStream
& operator>>(SvStream
& rIStream
, PageType
& rPage
);
91 enum ObjArtType
{ObjStrk
,ObjRect
,ObjPoly
,ObjCirc
,ObjSpln
,
92 ObjText
,ObjGrup
,ObjBmap
,ObjVirt
,ObjTxtX
,ObjMaxi
};
95 BYTE LFarbe
; // [Index]
96 BYTE LBFarbe
; // [Index]
98 BYTE LMuster
; // [Index] inkl. Transparenz
99 INT16 LMSize
; // [Koeffizient/100]
100 INT16 LDicke
; // Strichst�rke
104 BYTE FFarbe
; // [Index]
105 BYTE FBFarbe
; // [Index]
109 UINT16 FMuster
; // [Index] inkl. Invers, Transparenz
112 #define ObjTextTypeSize 64
115 ObjLineType L
; // Text-Outline (future)
116 ObjAreaType F
; // Text innen
117 UINT16 FontLo
,FontHi
;// z.B. 92500 (CG Times), zweigeteilt wegen DWordAllign in TextType.
118 UINT16 Grad
; // 0.5..32767.5 Pt - bei 1000 Pt sollte aber schlu� sein
119 UINT16 Breite
; // 1..65535% bitte nicht mehr als 500%
120 BYTE Justify
; // 2 Bit Vert (Hi), 3 Bit Hor (Lo)
121 BYTE Kapit
; // 1..255%
122 UINT16 Schnitt
; // 8 Flags
123 UINT16 LnFeed
; // 1..32767% vom max. Schriftgrad der Zeile
124 UINT16 Slant
; // Kursivwinkel 0.00..89.99� default 15.00� doppelt Breit angesehen)
125 BYTE ZAbst
; // Zeichenabstand 0..255% (0=auf der Stelle; 100=normal; 200=Zeichen wird als
126 INT8 ChrVPos
; // Zeichen V-Position default 0= on Baseline, 10= 5Pt drunter (-64..63�)
127 ObjLineType ShdL
; // Schatten-Outline (neu 2.0)
128 ObjAreaType ShdF
; // Schatten-innen (neu 2.0)
129 PointType ShdVers
; // Schattenversatz Max.300.00%
130 BOOL ShdAbs
; // True-> Schattenversatz ist absolut statt relativ zum Schriftgrad
131 BOOL NoSpc
; // True-> kein Zwischenraum (f�r BackArea)
132 ObjAreaType BackF
; // Hintergrundfl�che
134 void SetFont(UINT32 FontID
);
137 class Obj0Type
{ // SuperClass f�r Apple-VMT
139 virtual void Draw(OutputDevice
& rOut
);
140 virtual ~Obj0Type() {}
143 #define ObjkSize 20 /* eigentlich 21. Wg. Allignment ist Flags jedoch verschoben worden*/
144 class ObjkType
: public Obj0Type
{ // Grundkomponenten aller Stardraw-Objekte
148 UINT16 MemSize
; // in Bytes
149 PointType ObjMin
; // XY-Minimum des Objekts
150 PointType ObjMax
; // XY-Maximum des Objekts
153 // BYTE Flags; // (Schummel f�r Allignment unter NT)
154 friend SvStream
& operator>>(SvStream
& rIStream
, ObjkType
& rObjk
);
155 friend BOOL
ObjOverSeek(SvStream
& rInp
, ObjkType
& rObjk
);
156 virtual void Draw(OutputDevice
& rOut
);
161 class StrkType
: public ObjkType
{
163 BYTE Flags
; // (Schummel f�r Allignment unter NT)
164 BYTE LEnden
; // Linienenden
166 PointType Pos1
; // Anfangspunkt
167 PointType Pos2
; // Endpunkt
168 friend SvStream
& operator>>(SvStream
& rIStream
, StrkType
& rStrk
);
169 virtual void Draw(OutputDevice
& rOut
);
174 class RectType
: public ObjkType
{
176 BYTE Flags
; // (Schummel f�r Allignment unter NT)
180 PointType Pos1
; // LO-Ecke = Bezugspunkt
181 PointType Pos2
; // R-Ecke
182 INT16 Radius
; // Eckenradius
183 UINT16 DrehWink
; // 315...<45
184 UINT16 Slant
; // >270...<90
185 friend SvStream
& operator>>(SvStream
& rIStream
, RectType
& rRect
);
186 virtual void Draw(OutputDevice
& rOut
);
191 class PolyType
: public ObjkType
{ // identisch mit Spline !
193 BYTE Flags
; // (Schummel f�r Allignment unter NT)
194 BYTE LEnden
; // nur f�r Polyline
196 ObjAreaType F
; // nicht f�r Polyline
199 UINT32 SD_EckP
; // Zeiger auf die Eckpunkte (StarDraw)
200 PointType
* EckP
; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
201 friend SvStream
& operator>>(SvStream
& rIStream
, PolyType
& rPoly
);
202 virtual void Draw(OutputDevice
& rOut
);
204 #define PolyClosBit 0x01 // Unterarten von Poly: 0: PolyLine 1: Polygon
208 class SplnType
: public ObjkType
{ // identisch mit Poly !
210 BYTE Flags
; // (Schummel f�r Allignment unter NT)
211 BYTE LEnden
; // nur f�r nSpline
213 ObjAreaType F
; // nicht f�r nSpline
216 UINT32 SD_EckP
; // Zeiger auf die Eckpunkte (StarDraw)
217 PointType
* EckP
; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
218 friend SvStream
& operator>>(SvStream
& rIStream
, SplnType
& rSpln
);
219 virtual void Draw(OutputDevice
& rOut
);
221 // Unterarten von Spline: siehe Poly
225 class CircType
: public ObjkType
{
227 BYTE Flags
; // (Schummel f�r Allignment unter NT)
228 BYTE LEnden
; // nur Bogen (Kr & El)
230 ObjAreaType F
; // nicht f�r Bogen (Kr & El)
231 PointType Center
; // Mittelpunkt
232 PointType Radius
; // Radius
233 UINT16 DrehWink
; // nur Ellipse
234 UINT16 StartWink
; // � nicht f�r Vollkreis
235 UINT16 RelWink
; // � und Vollellipse
236 friend SvStream
& operator>>(SvStream
& rIStream
, CircType
& rCirc
);
237 virtual void Draw(OutputDevice
& rOut
);
239 #define CircFull 0x00 /* Unterarten von Kreis: 0: Kreis */
240 #define CircSect 0x01 /* 1: Kreissektor */
241 #define CircAbsn 0x02 /* 2: Kreisabschnitt */
242 #define CircArc 0x03 /* 3: Kreisbogen */
246 class TextType
: public ObjkType
{
248 BYTE Flags
; // (Schummel f�r Allignment unter NT)
249 BYTE Reserve
; // f�r Word Allign
250 ObjTextType T
; // 64 Bytes << DWord-Allign bei FontID erforderlich
251 PointType Pos1
; // Bezugspunkt (ObenLinks)
252 PointType Pos2
; // (untenRechts)
253 INT16 TopOfs
; // Von Oberkante bis Textbegin (future f�r vJustify)
254 UINT16 DrehWink
; // 0...<360
255 UINT16 BoxSlant
; // >270...<90 (nur Box)
256 UINT16 BufSize
; // Gr��e von Buf f�r Load, Save, Copy und so
257 UINT16 BufLo
,BufHi
;// (UCHAR*) Zeiger auf den Textbuffer << ShortArr, weil sonst DWord-Allign erforderlich
258 UINT16 ExtLo
,ExtHi
;// (Ptr) Text �ber mehrere Rahmen << ShortArr, weil sonst DWord-Allign erforderlich
259 PointType FitSize
; // Ursprungsgr��e f�r Fit2Size
260 INT16 FitBreit
; // Breite zum formatieren bei Fit2Size
261 UCHAR
* Buffer
; // Diese Variable wird nicht durch Lesen von Disk gef�llt, sondern explizit!
262 friend SvStream
& operator>>(SvStream
& rIStream
, TextType
& rText
);
263 virtual void Draw(OutputDevice
& rOut
);
265 #define TextOutlBit 0x01 /* 1=Sourcecode f�r Outliner (wird von DrawObjekt() ignoriert) */
266 #define TextFitSBit 0x02 /* Bit1: 1=Text-FitToSize, auch Outliner (2.0) */
267 #define TextFitZBit 0x08 /* Bit3: 1=Fit2Size Zeilenweise (2.0) */
268 #define TextDrftBit 0x04 /* Bit2: 1=DraftDraw (2.0) */
269 #define TextFitBits (TextFitSBit | TextFitZBit)
272 enum GrafStat
{NoGraf
,Pic
,Pcx
,Hpgl
,Img
,Msp
,Tiff
,Dxf
,Lot
,Usr
,Sgf
};
275 class BmapType
: public ObjkType
{
277 BYTE Flags
; // (Schummel f�r Allignment unter NT)
279 ObjAreaType F
; // Farbe und Muster der 1-Plane Bitmap
282 UINT16 DrehWink
; // 315...<45 (Future)
283 UINT16 Slant
; // >270...<90 (Future)
284 UCHAR Filename
[80]; // Pfad
285 PointType PixSize
; // Gr��e in Pixel (0 bei Vektor)
286 GrafStat Format
; // siehe GpmDef.Pas
287 BYTE nPlanes
; // Anzahl der Bitplanes (0 bei Vektor)
288 BOOL RawOut
; // als Raw ausgeben ?
289 BOOL InvOut
; // invertiert ausgeben ?
290 BOOL LightOut
; // aufhellen? (SD20)
291 BYTE GrfFlg
; // (SD20) 0=nSGF 1=Pcx 2=Hpgl 4=Raw $FF=Undef(f�r Fix in DrawBmp)
293 INetURLObject aFltPath
; // F�r GraphicFilter
294 friend SvStream
& operator>>(SvStream
& rIStream
, BmapType
& rBmap
);
295 virtual void Draw(OutputDevice
& rOut
);
296 void SetPaths( const INetURLObject rFltPath
);
301 class GrupType
: public ObjkType
{
303 BYTE Flags
; // (Schummel f�r Allignment unter NT)
304 UCHAR Name
[13]; // Name der Gruppe
305 UINT16 SbLo
,SbHi
; // (Ptr) Gruppenliste << ShortArr, weil sonst DWord Allign erforderlich
306 UINT16 UpLo
,UpHi
; // (Ptr) Vaterliste << ShortArr, weil sonst DWord Allign erforderlich
307 UINT16 ChartSize
; // Speicherbedarf der Diagrammstruktur Struktur
308 UINT32 ChartPtr
; // Diagrammstruktur
309 UINT32
GetSubPtr(); // hier nur zum Checken, ob Sublist evtl. leer ist.
310 friend SvStream
& operator>>(SvStream
& rIStream
, GrupType
& rGrup
);
311 // virtual void Draw(OutputDevice& rOut);
315 void SetLine(ObjLineType
& rLine
, OutputDevice
& rOut
);
316 void SetArea(ObjAreaType
& rArea
, OutputDevice
& rOut
);
317 Color
Sgv2SvFarbe(BYTE nFrb1
, BYTE nFrb2
, BYTE nInts
);
318 void RotatePoint(PointType
& P
, INT16 cx
, INT16 cy
, double sn
, double cs
);
319 void RotatePoint(Point
& P
, INT16 cx
, INT16 cy
, double sn
, double cs
);
320 INT16
iMulDiv(INT16 a
, INT16 Mul
, INT16 Div
);
321 UINT16
MulDiv(UINT16 a
, UINT16 Mul
, UINT16 Div
);
326 SgfFontOne
* Next
; // Zeiger f�r Listenverkettung
335 String SVFName
; // z.B. "Times New Roman" = 15 Chars
336 USHORT SVWidth
; // Durchschnittliche Zeichenbreite in %
338 void ReadOne( ByteString
& ID
, ByteString
& Dsc
);
343 String FNam
; // vollst�ndiger Filename des Inifiles
344 SgfFontOne
* pList
; // Listenanfang
345 SgfFontOne
* Last
; // Listenende
346 UINT32 LastID
; // f�r schnelleren Zugriff bei Wiederholungen
347 SgfFontOne
* LastLn
; // f�r schnelleren Zugriff bei Wiederholungen
351 void AssignFN(const String
& rFName
);
354 SgfFontOne
* GetFontDesc(UINT32 ID
);
359 #endif //_SGVMAIN_HXX