Scribus
Open source desktop publishing at your fingertips
importxar.h
1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 /***************************************************************************
8  importxar.h - description
9  -------------------
10  begin : Wed Nov 25 2009
11  copyright : (C) 2009 by Franz Schmid
12  email : Franz.Schmid@altmuehlnet.de
13  ***************************************************************************/
14 
15 #ifndef IMPORTXAR_H
16 #define IMPORTXAR_H
17 
18 
19 #include "pluginapi.h"
20 #include "commonstrings.h"
21 #include "pageitem.h"
22 #include "sccolor.h"
23 #include "fpointarray.h"
24 #include <QList>
25 #include <QTransform>
26 #include <QMultiMap>
27 #include <QtGlobal>
28 #include <QObject>
29 #include <QString>
30 #include <QRect>
31 #include <QStack>
32 
33 class MultiProgressDialog;
34 class ScribusDoc;
35 class Selection;
37 
38 class XarStyle
39 {
40 public:
41  XarStyle() :
42  dashOffset(0),
43  FontFamily(""),
44  FontSize(16.0),
45  LineHeight(15.0),
46  LineWidth(0.0),
47  LineWidth2(0.0),
48  FontStretch(1.0),
49  FontKerning(0.0),
50  FontBold(false),
51  FontUnderline(false),
52  FontItalic(false),
53  TextAlignment(0),
54  TextLeftIndent(0),
55  FillCol(CommonStrings::None),
56  fillRule(true),
57  FillGradient(VGradient::linear),
58  StrokeGradient(VGradient::linear),
59  MaskGradient(VGradient::linear),
60  FillGradientType(0),
61  StrokeGradientType(0),
62  GradFillX1(0),
63  GradFillX2(0),
64  GradFillY1(0),
65  GradFillY2(0),
66  GrScale(1),
67  GrSkew(0),
68  GradStrokeX1(0),
69  GradStrokeX2(0),
70  GradStrokeY1(0),
71  GradStrokeY2(0),
72  GradMask(0),
73  GradMaskX1(0),
74  GradMaskX2(0),
75  GradMaskY1(0),
76  GradMaskY2(0),
77  GradMaskScale(1),
78  GradMaskSkew(0),
79  LWidth(0.5),
80  PLineArt(Qt::SolidLine),
81  PLineEnd(Qt::FlatCap),
82  PLineJoin(Qt::BevelJoin),
83  StrokeCol("Black"),
84  FillOpacity(0.0),
85  FillBlend(0),
86  StrokeOpacity(0.0),
87  StrokeBlend(0),
88  clipPath(),
89  fillPattern(""),
90  patternScaleX(1),
91  patternScaleY(1),
92  patternOffsetX(0),
93  patternOffsetY(0),
94  patternRotation(0),
95  patternSkewX(0),
96  patternSkewY(0),
97  maskPattern(""),
98  patternMaskScaleX(1),
99  patternMaskScaleY(1),
100  patternMaskOffsetX(0),
101  patternMaskOffsetY(0),
102  patternMaskRotation(0),
103  patternMaskSkewX(0),
104  patternMaskSkewY(0),
105  strokePattern(""),
106  patternScaleXS(1),
107  patternScaleYS(1),
108  patternOffsetXS(0),
109  patternOffsetYS(0),
110  patternRotationS(0),
111  patternSkewXS(0),
112  patternSkewYS(0),
113  patternSpace(0),
114  patternStrokePath(false),
115  GrControl1(FPoint()),
116  GrControl2(FPoint()),
117  GrControl3(FPoint()),
118  GrControl4(FPoint()),
119  GrControl5(FPoint()),
120  GrColorP1(""),
121  GrColorP2(""),
122  GrColorP3(""),
123  GrColorP4(""),
124  GrCol1transp(1.0),
125  GrCol2transp(1.0),
126  GrCol3transp(1.0),
127  GrCol4transp(1.0),
128  GrCol1Shade(100),
129  GrCol2Shade(100),
130  GrCol3Shade(100),
131  GrCol4Shade(100),
132  Elements()
133  {
134  }
135  QVector<double> dashArray;
136  double dashOffset;
137  QString FontFamily;
138  double FontSize;
139  double LineHeight;
140  double LineWidth;
141  double LineWidth2;
142  double FontStretch;
143  double FontKerning;
144  bool FontBold;
145  bool FontUnderline;
146  bool FontItalic;
147  int TextAlignment;
148  double TextLeftIndent;
149  QString FillCol;
150  bool fillRule;
151  VGradient FillGradient;
152  VGradient StrokeGradient;
153  VGradient MaskGradient;
154  int FillGradientType;
155  int StrokeGradientType;
156  double GradFillX1;
157  double GradFillX2;
158  double GradFillY1;
159  double GradFillY2;
160  double GrScale;
161  double GrSkew;
162  double GradStrokeX1;
163  double GradStrokeX2;
164  double GradStrokeY1;
165  double GradStrokeY2;
166  int GradMask;
167  double GradMaskX1;
168  double GradMaskX2;
169  double GradMaskY1;
170  double GradMaskY2;
171  double GradMaskScale;
172  double GradMaskSkew;
173  double LWidth;
174  Qt::PenStyle PLineArt;
175  Qt::PenCapStyle PLineEnd;
176  Qt::PenJoinStyle PLineJoin;
177  QString StrokeCol;
178  double FillOpacity;
179  int FillBlend;
180  double StrokeOpacity;
181  int StrokeBlend;
182  FPointArray clipPath;
183  QString fillPattern;
184  double patternScaleX;
185  double patternScaleY;
186  double patternOffsetX;
187  double patternOffsetY;
188  double patternRotation;
189  double patternSkewX;
190  double patternSkewY;
191  QString maskPattern;
192  double patternMaskScaleX;
193  double patternMaskScaleY;
194  double patternMaskOffsetX;
195  double patternMaskOffsetY;
196  double patternMaskRotation;
197  double patternMaskSkewX;
198  double patternMaskSkewY;
199  QString strokePattern;
200  double patternScaleXS;
201  double patternScaleYS;
202  double patternOffsetXS;
203  double patternOffsetYS;
204  double patternRotationS;
205  double patternSkewXS;
206  double patternSkewYS;
207  double patternSpace;
208  bool patternStrokePath;
209  FPoint GrControl1;
210  FPoint GrControl2;
211  FPoint GrControl3;
212  FPoint GrControl4;
213  FPoint GrControl5;
214  QString GrColorP1;
215  QString GrColorP2;
216  QString GrColorP3;
217  QString GrColorP4;
218  double GrCol1transp;
219  double GrCol2transp;
220  double GrCol3transp;
221  double GrCol4transp;
222  int GrCol1Shade;
223  int GrCol2Shade;
224  int GrCol3Shade;
225  int GrCol4Shade;
226  QList<PageItem*> Elements;
227 };
228 
230 class XarPlug : public QObject
231 {
232  Q_OBJECT
233 
234 public:
244  XarPlug( ScribusDoc* doc, int flags );
245  ~XarPlug();
246 
257  bool import(QString fn, const TransactionSettings& trSettings, int flags, bool showProgress = true);
258  QImage readThumbnail(QString fn);
259  bool readColors(const QString& fileName, ColorList & colors);
260 
261 private:
262  void parseHeader(QString fName, double &x, double &y, double &b, double &h);
263  bool convert(QString fn);
264  void parseXar(QDataStream &ts);
265  void handleTags(quint32 tag, quint32 dataLen, QDataStream &ts);
266  void createGuideLine(QDataStream &ts);
267  void handleTextFontSize(QDataStream &ts);
268  void defineTextFontFace(QDataStream &ts, quint32 dataLen);
269  void handleTextFont(QDataStream &ts);
270  void handleTextString(QDataStream &ts, quint32 dataLen);
271  void handleTextChar(QDataStream &ts);
272  void handleTextWrap(QDataStream &ts);
273  void handleTextIndent(QDataStream &ts);
274  void handleLineInfo(QDataStream &ts);
275  void handleTextAlignment(quint32 tag);
276  void handleTextTracking(QDataStream &ts);
277  void handleTextKerning(QDataStream &ts);
278  void handleTextAspectRatio(QDataStream &ts);
279  void handleTextBaseline(QDataStream &ts);
280  void startTextLine();
281  void endTextLine();
282  void startSimpleText(QDataStream &ts, quint32 dataLen);
283  void startComplexText(QDataStream &ts, quint32 dataLen);
284  void startSimplePathText(QDataStream &ts, quint32 dataLen, int type);
285  void startComplexPathText(QDataStream &ts, quint32 dataLen, int type);
286  void handleFillRule(QDataStream &ts);
287  void handleLineEnd(QDataStream &ts);
288  void handleLineJoin(QDataStream &ts);
289  void handleQuickShapeSimple(QDataStream &ts, quint32 dataLen);
290  void handleFlatFillTransparency(QDataStream &ts);
291  void handleSimpleGradientTransparency(QDataStream &ts, quint32 dataLen, bool linear);
292  void handleSimpleGradientTransparencySkewed(QDataStream &ts, quint32 dataLen);
293  void handleEllipticalGradientTransparency(QDataStream &ts, quint32 dataLen);
294  void handleBitmapTransparency(QDataStream &ts, quint32 dataLen);
295  int convertBlendMode(int val);
296  void handleSimpleGradientElliptical(QDataStream &ts, quint32 dataLen);
297  void handleMultiGradientElliptical(QDataStream &ts);
298  void handleMultiGradientSkewed(QDataStream &ts);
299  void handleMultiGradient(QDataStream &ts, bool linear);
300  void handleSimpleGradientSkewed(QDataStream &ts, quint32 dataLen);
301  void handleSimpleGradient(QDataStream &ts, quint32 dataLen, bool linear);
302  void handleMultiDiamondGradient(QDataStream &ts);
303  void handleSimpleDiamondGradient(QDataStream &ts, quint32 dataLen);
304  void handleFourColorGradient(QDataStream &ts);
305  void handleBitmapFill(QDataStream &ts, quint32 dataLen);
306  void handleContoneBitmapFill(QDataStream &ts, quint32 dataLen);
307  void handleBitmap(QDataStream &ts);
308  void defineBitmap(QDataStream &ts, quint32 dataLen, quint32 tag);
309  void handleLineColor(QDataStream &ts);
310  void handleLineWidth(QDataStream &ts);
311  void handleFlatLineTransparency(QDataStream &ts);
312  void handleFlatFill(QDataStream &ts);
313  void createRectangleItem(QDataStream &ts, bool ellipse = false);
314  void createSimilarItem(QDataStream &ts);
315  void createPolylineItem(int type);
316  void createPolygonItem(int type);
317  void handleBrushItem(QDataStream &ts);
318  void createBrushItem(QDataStream &ts);
319  void createGroupItem();
320  void createClipItem();
321  void finishClip();
322  void finishItem(int z);
323  bool handlePathRel(QDataStream &ts, quint32 len);
324  void handleLayerInfo(QDataStream &ts);
325  void handleSpreadInfo(QDataStream &ts);
326  void handleFirstPage(QDataStream &ts);
327  void handlePage(QDataStream &ts);
328  void handleComplexColor(QDataStream &ts);
329  void handleColorRGB(QDataStream &ts);
330  double decodeColorComponent(quint32 data);
331  double decodeFixed16(quint32 data);
332  void readCoords(QDataStream &ts, double &x, double &y);
333  void addToAtomic(quint32 dataLen, QDataStream &ts);
334  void addGraphicContext();
335  void popGraphicContext();
336 
337  int importerFlags;
338  int recordCounter;
339  int currentLayer;
340  int pathTextType;
341  int pathGcStackIndex;
342  double baseX, baseY;
343  double docWidth;
344  double docHeight;
345  int pagecount;
346  double TextX;
347  double TextY;
348  double textRotation;
349  double textSkew;
350  bool firstLayer;
351  bool interactive;
352  bool cancel;
353  bool inTextLine;
354  bool inTextBlock;
355  bool isPathText;
356  bool recordPath;
357  QTransform textMatrix;
358  struct XarColor
359  {
360  quint32 colorType;
361  quint32 colorModel;
362  quint32 colorRef;
363  double component1;
364  double component2;
365  double component3;
366  double component4;
367  QString name;
368  };
369  struct XarGroup
370  {
371  int index;
372  int gcStackDepth;
373  bool clipping;
374  bool isBrush;
375  quint32 idNr;
376  PageItem* groupItem;
377  };
378  struct XarText
379  {
380  QString FontFamily;
381  QString itemText;
382  double FontSize;
383  double FontStretch;
384  double FontKerning;
385  bool FontBold;
386  bool FontUnderline;
387  bool FontItalic;
388  QString FillCol;
389  VGradient FillGradient;
390  VGradient StrokeGradient;
391  VGradient MaskGradient;
392  int FillGradientType;
393  int StrokeGradientType;
394  double GradFillX1;
395  double GradFillX2;
396  double GradFillY1;
397  double GradFillY2;
398  double GrScale;
399  double GrSkew;
400  FPoint GrControl1;
401  FPoint GrControl2;
402  FPoint GrControl3;
403  FPoint GrControl4;
404  FPoint GrControl5;
405  QString GrColorP1;
406  QString GrColorP2;
407  QString GrColorP3;
408  QString GrColorP4;
409  double GrCol1transp;
410  double GrCol2transp;
411  double GrCol3transp;
412  double GrCol4transp;
413  int GrCol1Shade;
414  int GrCol2Shade;
415  int GrCol3Shade;
416  int GrCol4Shade;
417  double GradStrokeX1;
418  double GradStrokeX2;
419  double GradStrokeY1;
420  double GradStrokeY2;
421  int GradMask;
422  double GradMaskX1;
423  double GradMaskX2;
424  double GradMaskY1;
425  double GradMaskY2;
426  double GradMaskScale;
427  double GradMaskSkew;
428  double LWidth;
429  Qt::PenStyle PLineArt;
430  Qt::PenCapStyle PLineEnd;
431  Qt::PenJoinStyle PLineJoin;
432  QString StrokeCol;
433  double FillOpacity;
434  int FillBlend;
435  double StrokeOpacity;
436  int StrokeBlend;
437  QString fillPattern;
438  double patternScaleX;
439  double patternScaleY;
440  double patternOffsetX;
441  double patternOffsetY;
442  double patternRotation;
443  double patternSkewX;
444  double patternSkewY;
445  QString maskPattern;
446  double patternMaskScaleX;
447  double patternMaskScaleY;
448  double patternMaskOffsetX;
449  double patternMaskOffsetY;
450  double patternMaskRotation;
451  double patternMaskSkewX;
452  double patternMaskSkewY;
453  };
454  struct XarTextLine
455  {
456  QList<XarText> textData;
457  };
458 
459  QByteArray imageData;
460  QList<PageItem*> Elements;
461  QList<quint32> atomicTags;
462  QList<quint32> ignoreableTags;
463  QList<XarText> textData;
464  QList<XarTextLine> textLines;
465  QMap<qint32, XarColor> XarColorMap;
466  QMap<qint32, PageItem*> pathMap;
467  QMap<quint32, QString> brushRef;
468  QMap<QString, QString> patternMap;
469  QMap<quint32, QString> patternRef;
470  QMap<quint32, QString> fontRef;
471  QStack<XarGroup> groupStack;
472  QStack<XarStyle*> m_gc;
473  QString activeLayer;
474  QStringList importedColors;
475  QStringList importedPatterns;
476  FPointArray clipCoords;
477  FPointArray Coords;
478  FPointArray textPath;
479  MultiProgressDialog * progressDialog;
480  ScribusDoc* m_Doc;
481  Selection* tmpSel;
482 
483 public slots:
484  void cancelRequested() { cancel = true; }
485 };
486 
487 #endif
XarPlug(ScribusDoc *doc, int flags)
Create the Xar importer window.
Definition: importxar.cpp:64
Xar (Xara) importer plugin.
Definition: importxar.h:230
Definition: vgradient.h:78
Definition: sccolor.h:155
A point with floating point precision.
Definition: fpoint.h:43
the Document Class
Definition: scribusdoc.h:90
Definition: importxar.h:38
Definition: undomanager.h:52
Definition: multiprogressdialog.h:44
Definition: pageitem.h:92
Definition: fpointarray.h:42
Definition: selection.h:34