Subversion Repositories Scribus

Rev

Rev 705 | Rev 976 | 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;
943 fschmid 28
                typeValid = false;
296 Franz 29
                CSpace = false;
943 fschmid 30
                cspaceValid = false;
31
                X1 = 0;
32
                x1Valid = false;
33
                X2 = 1;
34
                x2Valid = false;
35
                Y1 = 0;
36
                y1Valid = false;
37
                Y2 = 1;
38
                y2Valid = false;
39
                gradient = VGradient(VGradient::linear);
40
                gradientValid = false;
302 Franz 41
                matrix = QWMatrix();
943 fschmid 42
                matrixValid = false;
43
                reference = "";
68 Franz 44
                }
45
        int Type;
943 fschmid 46
        bool typeValid;
47
        QString reference;
48
        VGradient gradient;
49
        bool gradientValid;
292 Franz 50
        double X1;
943 fschmid 51
        bool x1Valid;
292 Franz 52
        double Y1;
943 fschmid 53
        bool y1Valid;
292 Franz 54
        double X2;
943 fschmid 55
        bool x2Valid;
292 Franz 56
        double Y2;
943 fschmid 57
        bool y2Valid;
296 Franz 58
        bool CSpace;
943 fschmid 59
        bool cspaceValid;
302 Franz 60
        QWMatrix        matrix;
943 fschmid 61
        bool matrixValid;
68 Franz 62
        };
63
 
64
class SvgStyle
65
{
66
public:
67
        SvgStyle()
68
                {
69
                LWidth = 1.0;
70
                Transparency = 0.0;
71
                TranspStroke = 0.0;
72
                StrokeCol = "None";
73
                FillCol = "Black";
74
                CurCol = "None";
75
                Gradient = 0;
76
                GCol1 = "Black";
77
                GCol2 = "Black";
292 Franz 78
                GX1 = 0;
79
                GY1 = 0;
80
                GX2 = 0;
81
                GY2 = 0;
68 Franz 82
                GradCo = VGradient(VGradient::linear);
296 Franz 83
                CSpace = false;
68 Franz 84
                Family = "";
85
                FontSize = 12;
86
                matrix = QWMatrix();
302 Franz 87
                matrixg = QWMatrix();
68 Franz 88
                PLineArt = Qt::SolidLine;
89
                PLineJoin = Qt::MiterJoin;
90
                PLineEnd = Qt::FlatCap;
91
                InherCol = false;
92
                dashOffset = 0;
93
                dashArray.clear();
94
                }
95
        QWMatrix        matrix;
302 Franz 96
        QWMatrix        matrixg;
80 Franz 97
        double LWidth;
68 Franz 98
        Qt::PenStyle PLineArt;
99
        Qt::PenJoinStyle PLineJoin;
100
        Qt::PenCapStyle PLineEnd;
101
        QString StrokeCol;
102
        QString FillCol;
103
        QString CurCol;
104
        QString GCol1;
105
        QString GCol2;
292 Franz 106
        double GX1;
107
        double GY1;
108
        double GX2;
109
        double GY2;
68 Franz 110
        int Gradient;
111
        VGradient       GradCo;
296 Franz 112
        bool CSpace;
68 Franz 113
        int FontSize;
114
        QString Family;
80 Franz 115
        double Transparency;
116
        double TranspStroke;
68 Franz 117
        bool InherCol;
80 Franz 118
        double dashOffset;
119
        QValueList<double> dashArray;
68 Franz 120
};
121
 
122
class SVGPlug : public QObject
123
{
124
        Q_OBJECT
125
 
126
public:
456 fschmid 127
        SVGPlug( ScribusApp *plug, QString fName );
68 Franz 128
        ~SVGPlug();
129
        void convert();
130
        void addGraphicContext();
131
        void setupTransform( const QDomElement &e );
132
        void parseGroup(const QDomElement &e);
705 fschmid 133
        double fromPercentage( const QString &s );
134
        void getDefaultUnit(const QString &unit);
68 Franz 135
        double parseUnit(const QString &unit);
136
        QWMatrix parseTransform(const QString &transform);
137
        const char * getCoord( const char *ptr, double &number );
138
        bool parseSVG( const QString &s, FPointArray *ite );
139
        void calculateArc(FPointArray *ite, bool relative, double &curx, double &cury, double angle, double x, double y, double r1, double r2, bool largeArcFlag, bool sweepFlag);
140
        void svgClosePath(FPointArray *i);
456 fschmid 141
        void svgMoveTo(double x1, double y1);
68 Franz 142
        void svgLineTo(FPointArray *i, double x1, double y1);
143
        void svgCurveToCubic(FPointArray *i, double x1, double y1, double x2, double y2, double x3, double y3);
144
        QColor parseColorN( const QString &rgbColor );
145
        QString parseColor( const QString &s );
146
        void parsePA( SvgStyle *obj, const QString &command, const QString &params );
147
        void parseStyle( SvgStyle *obj, const QDomElement &e );
148
        void parseColorStops(GradientHelper *gradient, const QDomElement &e);
149
        void parseGradient( const QDomElement &e );
296 Franz 150
        FPoint GetMaxClipO(FPointArray Clip);
151
        FPoint GetMinClipO(FPointArray Clip);
215 Franz 152
        QPtrList<PageItem> parseText(double x, double y, const QDomElement &e);
68 Franz 153
 
154
        ScribusDoc* Doku;
155
        ScribusApp* Prog;
156
        QDomDocument inpdoc;
705 fschmid 157
        double CurrX, CurrY, StartX, StartY, Conversion;
68 Franz 158
        int PathLen;
159
        QPtrList<PageItem> Elements;
160
        QPtrStack<SvgStyle>     m_gc;
161
        QMap<QString, GradientHelper>   m_gradients;
162
        bool FirstM, WasM, PathClosed;
163
};
164
 
165
#endif
166