LCOV - code coverage report
Current view: top level - libreoffice/svtools/source/inc - sgvmain.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 7 12 58.3 %
Date: 2012-12-27 Functions: 12 31 38.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10