Subversion Repositories Scribus

Rev

Rev 512 | Rev 943 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
68 Franz 1
#ifndef SVGPLUG_H
2
#define SVGPLUG_H
3
 
4
#include <qdom.h>
5
#include <qptrstack.h>
6
#include "scribus.h"
7
#include "vgradient.h"
8
 
9
/** Calls the Plugin with the main Application window as parent
10
  * and the main Application Class as parameter */
11
extern "C" void Run(QWidget *d, ScribusApp *plug);
12
/** Returns the Name of the Plugin.
13
  * This name appears in the relevant Menue-Entrys */
14
extern "C" QString Name();
15
/** Returns the Type of the Plugin.
16
  * 1 = the Plugin is a normal Plugin, which appears in the Extras Menue
17
  * 2 = the Plugins is a import Plugin, which appears in the Import Menue
18
  * 3 = the Plugins is a export Plugin, which appears in the Export Menue */
19
extern "C" int Type();
512 fschmid 20
extern "C" int ID();
68 Franz 21
 
22
class GradientHelper
23
{
24
public:
25
        GradientHelper()
26
                {
27
                Type = 1;
28
                Color1 = "Black";
29
                Color2 = "Black";
296 Franz 30
                CSpace = false;
302 Franz 31
                matrix = QWMatrix();
68 Franz 32
                }
33
        int Type;
34
        QString Color1;
35
        QString Color2;
36
        VGradient       gradient;
292 Franz 37
        double X1;
38
        double Y1;
39
        double X2;
40
        double Y2;
296 Franz 41
        bool CSpace;
302 Franz 42
        QWMatrix        matrix;
68 Franz 43
        };
44
 
45
class SvgStyle
46
{
47
public:
48
        SvgStyle()
49
                {
50
                LWidth = 1.0;
51
                Transparency = 0.0;
52
                TranspStroke = 0.0;
53
                StrokeCol = "None";
54
                FillCol = "Black";
55
                CurCol = "None";
56
                Gradient = 0;
57
                GCol1 = "Black";
58
                GCol2 = "Black";
292 Franz 59
                GX1 = 0;
60
                GY1 = 0;
61
                GX2 = 0;
62
                GY2 = 0;
68 Franz 63
                GradCo = VGradient(VGradient::linear);
296 Franz 64
                CSpace = false;
68 Franz 65
                Family = "";
66
                FontSize = 12;
67
                matrix = QWMatrix();
302 Franz 68
                matrixg = QWMatrix();
68 Franz 69
                PLineArt = Qt::SolidLine;
70
                PLineJoin = Qt::MiterJoin;
71
                PLineEnd = Qt::FlatCap;
72
                InherCol = false;
73
                dashOffset = 0;
74
                dashArray.clear();
75
                }
76
        QWMatrix        matrix;
302 Franz 77
        QWMatrix        matrixg;
80 Franz 78
        double LWidth;
68 Franz 79
        Qt::PenStyle PLineArt;
80
        Qt::PenJoinStyle PLineJoin;
81
        Qt::PenCapStyle PLineEnd;
82
        QString StrokeCol;
83
        QString FillCol;
84
        QString CurCol;
85
        QString GCol1;
86
        QString GCol2;
292 Franz 87
        double GX1;
88
        double GY1;
89
        double GX2;
90
        double GY2;
68 Franz 91
        int Gradient;
92
        VGradient       GradCo;
296 Franz 93
        bool CSpace;
68 Franz 94
        int FontSize;
95
        QString Family;
80 Franz 96
        double Transparency;
97
        double TranspStroke;
68 Franz 98
        bool InherCol;
80 Franz 99
        double dashOffset;
100
        QValueList<double> dashArray;
68 Franz 101
};
102
 
103
class SVGPlug : public QObject
104
{
105
        Q_OBJECT
106
 
107
public:
456 fschmid 108
        SVGPlug( ScribusApp *plug, QString fName );
68 Franz 109
        ~SVGPlug();
110
        void convert();
111
        void addGraphicContext();
112
        void setupTransform( const QDomElement &e );
113
        void parseGroup(const QDomElement &e);
705 fschmid 114
        double fromPercentage( const QString &s );
115
        void getDefaultUnit(const QString &unit);
68 Franz 116
        double parseUnit(const QString &unit);
117
        QWMatrix parseTransform(const QString &transform);
118
        const char * getCoord( const char *ptr, double &number );
119
        bool parseSVG( const QString &s, FPointArray *ite );
120
        void calculateArc(FPointArray *ite, bool relative, double &curx, double &cury, double angle, double x, double y, double r1, double r2, bool largeArcFlag, bool sweepFlag);
121
        void svgClosePath(FPointArray *i);
456 fschmid 122
        void svgMoveTo(double x1, double y1);
68 Franz 123
        void svgLineTo(FPointArray *i, double x1, double y1);
124
        void svgCurveToCubic(FPointArray *i, double x1, double y1, double x2, double y2, double x3, double y3);
125
        QColor parseColorN( const QString &rgbColor );
126
        QString parseColor( const QString &s );
127
        void parsePA( SvgStyle *obj, const QString &command, const QString &params );
128
        void parseStyle( SvgStyle *obj, const QDomElement &e );
129
        void parseColorStops(GradientHelper *gradient, const QDomElement &e);
130
        void parseGradient( const QDomElement &e );
296 Franz 131
        FPoint GetMaxClipO(FPointArray Clip);
132
        FPoint GetMinClipO(FPointArray Clip);
215 Franz 133
        QPtrList<PageItem> parseText(double x, double y, const QDomElement &e);
68 Franz 134
 
135
        ScribusDoc* Doku;
136
        ScribusApp* Prog;
137
        QDomDocument inpdoc;
705 fschmid 138
        double CurrX, CurrY, StartX, StartY, Conversion;
68 Franz 139
        int PathLen;
140
        QPtrList<PageItem> Elements;
141
        QPtrStack<SvgStyle>     m_gc;
142
        QMap<QString, GradientHelper>   m_gradients;
143
        bool FirstM, WasM, PathClosed;
144
};
145
 
146
#endif
147