1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _SGVMAIN_HXX 29 #define _SGVMAIN_HXX 30 31 #include <vcl/font.hxx> 32 #include <vcl/outdev.hxx> 33 #include <vcl/virdev.hxx> 34 35 36 #define UCHAR unsigned char 37 38 struct PointType { 39 sal_Int16 x; 40 sal_Int16 y; 41 }; 42 43 #define SgfDpmm 40 44 45 #define DtHdSize 256 46 class DtHdType { 47 public: 48 sal_uInt8 Reserved[256]; 49 friend SvStream& operator>>(SvStream& rIStream, DtHdType& rDtHd); 50 friend void DtHdOverSeek(SvStream& rInp); 51 }; 52 53 54 struct Seitenformat { 55 PointType Size; // 0.00mm...819.175mm (Papiergr��e) 56 sal_Int16 RandL; // links Rand auf 57 sal_Int16 RandR; // rechts dem Papier 58 sal_Int16 RandO; // oben Rand auf 59 sal_Int16 RandU; // unten dem Papier 60 sal_uInt8 PColor; // Future Use 61 sal_uInt8 PIntens; // erst recht Future use 62 // sal_Bool BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT) 63 }; 64 65 66 #define PageSize 146 67 class PageType { 68 public: 69 sal_uInt32 Next; // N�chste Seite 70 sal_uInt32 nList; // Objektdaten, erster Record 71 sal_uInt32 ListEnd; // Objektdaten, letzter Record 72 Seitenformat Paper; // Papierdaten 73 sal_Bool BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT) 74 sal_uInt8 StdPg; // welche Standardseite einblenden ? 75 PointType U; // Nullpunkt 76 sal_Int16 HlpLnH[20]; // Hilfslinien 77 sal_Int16 HlpLnV[20]; 78 sal_uInt8 LnAnzH; 79 sal_uInt8 LnAnzV; 80 UCHAR PgName[32]; // Seitenname 81 friend SvStream& operator>>(SvStream& rIStream, PageType& rPage); 82 }; 83 84 85 enum ObjArtType {ObjStrk,ObjRect,ObjPoly,ObjCirc,ObjSpln, 86 ObjText,ObjGrup,ObjBmap,ObjVirt,ObjTxtX,ObjMaxi}; 87 88 struct ObjLineType { 89 sal_uInt8 LFarbe; // [Index] 90 sal_uInt8 LBFarbe; // [Index] 91 sal_uInt8 LIntens; // [%] 92 sal_uInt8 LMuster; // [Index] inkl. Transparenz 93 sal_Int16 LMSize; // [Koeffizient/100] 94 sal_Int16 LDicke; // Strichst�rke 95 }; 96 97 struct ObjAreaType { 98 sal_uInt8 FFarbe; // [Index] 99 sal_uInt8 FBFarbe; // [Index] 100 sal_uInt8 FIntens; // [%] 101 sal_uInt8 FDummy1; // 102 sal_Int16 FDummy2; // 103 sal_uInt16 FMuster; // [Index] inkl. Invers, Transparenz 104 }; 105 106 #define ObjTextTypeSize 64 107 class ObjTextType { 108 public: 109 ObjLineType L; // Text-Outline (future) 110 ObjAreaType F; // Text innen 111 sal_uInt16 FontLo,FontHi;// z.B. 92500 (CG Times), zweigeteilt wegen DWordAllign in TextType. 112 sal_uInt16 Grad; // 0.5..32767.5 Pt - bei 1000 Pt sollte aber schlu� sein 113 sal_uInt16 Breite; // 1..65535% bitte nicht mehr als 500% 114 sal_uInt8 Justify; // 2 Bit Vert (Hi), 3 Bit Hor (Lo) 115 sal_uInt8 Kapit; // 1..255% 116 sal_uInt16 Schnitt; // 8 Flags 117 sal_uInt16 LnFeed; // 1..32767% vom max. Schriftgrad der Zeile 118 sal_uInt16 Slant; // Kursivwinkel 0.00..89.99� default 15.00� doppelt Breit angesehen) 119 sal_uInt8 ZAbst; // Zeichenabstand 0..255% (0=auf der Stelle; 100=normal; 200=Zeichen wird als 120 sal_sChar ChrVPos; // Zeichen V-Position default 0= on Baseline, 10= 5Pt drunter (-64..63�) 121 ObjLineType ShdL; // Schatten-Outline (neu 2.0) 122 ObjAreaType ShdF; // Schatten-innen (neu 2.0) 123 PointType ShdVers; // Schattenversatz Max.300.00% 124 sal_Bool ShdAbs; // True-> Schattenversatz ist absolut statt relativ zum Schriftgrad 125 sal_Bool NoSpc; // True-> kein Zwischenraum (f�r BackArea) 126 ObjAreaType BackF; // Hintergrundfl�che 127 sal_uInt32 GetFont(); 128 void SetFont(sal_uInt32 FontID); 129 }; 130 131 class Obj0Type { // SuperClass f�r Apple-VMT 132 public: 133 virtual void Draw(OutputDevice& rOut); 134 virtual ~Obj0Type() {} 135 }; 136 137 #define ObjkSize 20 /* eigentlich 21. Wg. Allignment ist Flags jedoch verschoben worden*/ 138 class ObjkType: public Obj0Type { // Grundkomponenten aller Stardraw-Objekte 139 public: 140 sal_uInt32 Last; 141 sal_uInt32 Next; 142 sal_uInt16 MemSize; // in Bytes 143 PointType ObjMin; // XY-Minimum des Objekts 144 PointType ObjMax; // XY-Maximum des Objekts 145 sal_uInt8 Art; 146 sal_uInt8 Layer; 147 // sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 148 friend SvStream& operator>>(SvStream& rIStream, ObjkType& rObjk); 149 friend sal_Bool ObjOverSeek(SvStream& rInp, ObjkType& rObjk); 150 virtual void Draw(OutputDevice& rOut); 151 }; 152 153 154 #define StrkSize 38 155 class StrkType: public ObjkType { 156 public: 157 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 158 sal_uInt8 LEnden; // Linienenden 159 ObjLineType L; 160 PointType Pos1; // Anfangspunkt 161 PointType Pos2; // Endpunkt 162 friend SvStream& operator>>(SvStream& rIStream, StrkType& rStrk); 163 virtual void Draw(OutputDevice& rOut); 164 }; 165 166 167 #define RectSize 52 168 class RectType: public ObjkType { 169 public: 170 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 171 sal_uInt8 Reserve; 172 ObjLineType L; 173 ObjAreaType F; 174 PointType Pos1; // LO-Ecke = Bezugspunkt 175 PointType Pos2; // R-Ecke 176 sal_Int16 Radius; // Eckenradius 177 sal_uInt16 DrehWink; // 315...<45 178 sal_uInt16 Slant; // >270...<90 179 friend SvStream& operator>>(SvStream& rIStream, RectType& rRect); 180 virtual void Draw(OutputDevice& rOut); 181 }; 182 183 184 #define PolySize 44 185 class PolyType: public ObjkType { // identisch mit Spline ! 186 public: 187 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 188 sal_uInt8 LEnden; // nur f�r Polyline 189 ObjLineType L; 190 ObjAreaType F; // nicht f�r Polyline 191 sal_uInt8 nPoints; 192 sal_uInt8 Reserve; 193 sal_uInt32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw) 194 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!)) 195 friend SvStream& operator>>(SvStream& rIStream, PolyType& rPoly); 196 virtual void Draw(OutputDevice& rOut); 197 }; 198 #define PolyClosBit 0x01 // Unterarten von Poly: 0: PolyLine 1: Polygon 199 200 201 #define SplnSize 44 202 class SplnType: public ObjkType { // identisch mit Poly ! 203 public: 204 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 205 sal_uInt8 LEnden; // nur f�r nSpline 206 ObjLineType L; 207 ObjAreaType F; // nicht f�r nSpline 208 sal_uInt8 nPoints; 209 sal_uInt8 Reserve; 210 sal_uInt32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw) 211 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!)) 212 friend SvStream& operator>>(SvStream& rIStream, SplnType& rSpln); 213 virtual void Draw(OutputDevice& rOut); 214 }; 215 // Unterarten von Spline: siehe Poly 216 217 218 #define CircSize 52 219 class CircType: public ObjkType { 220 public: 221 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 222 sal_uInt8 LEnden; // nur Bogen (Kr & El) 223 ObjLineType L; 224 ObjAreaType F; // nicht f�r Bogen (Kr & El) 225 PointType Center; // Mittelpunkt 226 PointType Radius; // Radius 227 sal_uInt16 DrehWink; // nur Ellipse 228 sal_uInt16 StartWink; // � nicht f�r Vollkreis 229 sal_uInt16 RelWink; // � und Vollellipse 230 friend SvStream& operator>>(SvStream& rIStream, CircType& rCirc); 231 virtual void Draw(OutputDevice& rOut); 232 }; 233 #define CircFull 0x00 /* Unterarten von Kreis: 0: Kreis */ 234 #define CircSect 0x01 /* 1: Kreissektor */ 235 #define CircAbsn 0x02 /* 2: Kreisabschnitt */ 236 #define CircArc 0x03 /* 3: Kreisbogen */ 237 238 239 #define TextSize 116 240 class TextType: public ObjkType { 241 public: 242 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 243 sal_uInt8 Reserve; // f�r Word Allign 244 ObjTextType T; // 64 Bytes << DWord-Allign bei FontID erforderlich 245 PointType Pos1; // Bezugspunkt (ObenLinks) 246 PointType Pos2; // (untenRechts) 247 sal_Int16 TopOfs; // Von Oberkante bis Textbegin (future f�r vJustify) 248 sal_uInt16 DrehWink; // 0...<360 249 sal_uInt16 BoxSlant; // >270...<90 (nur Box) 250 sal_uInt16 BufSize; // Gr��e von Buf f�r Load, Save, Copy und so 251 sal_uInt16 BufLo,BufHi;// (UCHAR*) Zeiger auf den Textbuffer << ShortArr, weil sonst DWord-Allign erforderlich 252 sal_uInt16 ExtLo,ExtHi;// (Ptr) Text �ber mehrere Rahmen << ShortArr, weil sonst DWord-Allign erforderlich 253 PointType FitSize; // Ursprungsgr��e f�r Fit2Size 254 sal_Int16 FitBreit; // Breite zum formatieren bei Fit2Size 255 UCHAR* Buffer; // Diese Variable wird nicht durch Lesen von Disk gef�llt, sondern explizit! 256 friend SvStream& operator>>(SvStream& rIStream, TextType& rText); 257 virtual void Draw(OutputDevice& rOut); 258 }; 259 #define TextOutlBit 0x01 /* 1=Sourcecode f�r Outliner (wird von DrawObjekt() ignoriert) */ 260 #define TextFitSBit 0x02 /* Bit1: 1=Text-FitToSize, auch Outliner (2.0) */ 261 #define TextFitZBit 0x08 /* Bit3: 1=Fit2Size Zeilenweise (2.0) */ 262 #define TextDrftBit 0x04 /* Bit2: 1=DraftDraw (2.0) */ 263 #define TextFitBits (TextFitSBit | TextFitZBit) 264 265 266 enum GrafStat {NoGraf,Pic,Pcx,Hpgl,Img,Msp,Tiff,Dxf,Lot,Usr,Sgf}; 267 268 #define BmapSize 132 269 class BmapType: public ObjkType { 270 public: 271 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 272 sal_uInt8 Reserve; 273 ObjAreaType F; // Farbe und Muster der 1-Plane Bitmap 274 PointType Pos1; 275 PointType Pos2; 276 sal_uInt16 DrehWink; // 315...<45 (Future) 277 sal_uInt16 Slant; // >270...<90 (Future) 278 UCHAR Filename[80]; // Pfad 279 PointType PixSize; // Gr��e in Pixel (0 bei Vektor) 280 GrafStat Format; // siehe GpmDef.Pas 281 sal_uInt8 nPlanes; // Anzahl der Bitplanes (0 bei Vektor) 282 sal_Bool RawOut; // als Raw ausgeben ? 283 sal_Bool InvOut; // invertiert ausgeben ? 284 sal_Bool LightOut; // aufhellen? (SD20) 285 sal_uInt8 GrfFlg; // (SD20) 0=nSGF 1=Pcx 2=Hpgl 4=Raw $FF=Undef(f�r Fix in DrawBmp) 286 287 INetURLObject aFltPath; // F�r GraphicFilter 288 friend SvStream& operator>>(SvStream& rIStream, BmapType& rBmap); 289 virtual void Draw(OutputDevice& rOut); 290 void SetPaths( const INetURLObject rFltPath ); 291 }; 292 293 294 #define GrupSize 48 295 class GrupType: public ObjkType { 296 public: 297 sal_uInt8 Flags; // (Schummel f�r Allignment unter NT) 298 UCHAR Name[13]; // Name der Gruppe 299 sal_uInt16 SbLo,SbHi; // (Ptr) Gruppenliste << ShortArr, weil sonst DWord Allign erforderlich 300 sal_uInt16 UpLo,UpHi; // (Ptr) Vaterliste << ShortArr, weil sonst DWord Allign erforderlich 301 sal_uInt16 ChartSize; // Speicherbedarf der Diagrammstruktur Struktur 302 sal_uInt32 ChartPtr; // Diagrammstruktur 303 sal_uInt32 GetSubPtr(); // hier nur zum Checken, ob Sublist evtl. leer ist. 304 friend SvStream& operator>>(SvStream& rIStream, GrupType& rGrup); 305 // virtual void Draw(OutputDevice& rOut); 306 }; 307 308 309 void SetLine(ObjLineType& rLine, OutputDevice& rOut); 310 void SetArea(ObjAreaType& rArea, OutputDevice& rOut); 311 Color Sgv2SvFarbe(sal_uInt8 nFrb1, sal_uInt8 nFrb2, sal_uInt8 nInts); 312 void RotatePoint(PointType& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs); 313 void RotatePoint(Point& P, sal_Int16 cx, sal_Int16 cy, double sn, double cs); 314 sal_Int16 iMulDiv(sal_Int16 a, sal_Int16 Mul, sal_Int16 Div); 315 sal_uInt16 MulDiv(sal_uInt16 a, sal_uInt16 Mul, sal_uInt16 Div); 316 317 318 class SgfFontOne { 319 public: 320 SgfFontOne* Next; // Zeiger f�r Listenverkettung 321 sal_uInt32 IFID; 322 sal_Bool Bold; 323 sal_Bool Ital; 324 sal_Bool Sans; 325 sal_Bool Serf; 326 sal_Bool Fixd; 327 FontFamily SVFamil; 328 CharSet SVChSet; 329 String SVFName; // z.B. "Times New Roman" = 15 Chars 330 sal_uInt16 SVWidth; // Durchschnittliche Zeichenbreite in % 331 SgfFontOne(); 332 void ReadOne( ByteString& ID, ByteString& Dsc); 333 }; 334 335 class SgfFontLst { 336 public: 337 String FNam; // vollst�ndiger Filename des Inifiles 338 SgfFontOne* pList; // Listenanfang 339 SgfFontOne* Last; // Listenende 340 sal_uInt32 LastID; // f�r schnelleren Zugriff bei Wiederholungen 341 SgfFontOne* LastLn; // f�r schnelleren Zugriff bei Wiederholungen 342 sal_Bool Tried; 343 SgfFontLst(); 344 ~SgfFontLst(); 345 void AssignFN(const String& rFName); 346 void ReadList(); 347 void RausList(); 348 SgfFontOne* GetFontDesc(sal_uInt32 ID); 349 }; 350 351 #endif //_SGVMAIN_HXX 352 353 354