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; 36 class TransactionSettings; 37 38 class XarStyle 39 { 40 public: XarStyle()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 229 //! \brief Xar (Xara) importer plugin 230 class XarPlug : public QObject 231 { 232 Q_OBJECT 233 234 public: 235 /*! 236 \author Franz Schmid 237 \date 238 \brief Create the Xar importer window. 239 \param fName QString 240 \param flags combination of loadFlags 241 \param showProgress if progress must be displayed 242 \retval EPSPlug plugin 243 */ 244 XarPlug( ScribusDoc* doc, int flags ); 245 ~XarPlug(); 246 247 /*! 248 \author Franz Schmid 249 \date 250 \brief Perform import. 251 \param fn QString 252 \param trSettings undo transaction settings 253 \param flags combination of loadFlags 254 \param showProgress if progress must be displayed 255 \retval bool true if import was ok 256 */ 257 bool import(const QString& fn, const TransactionSettings& trSettings, int flags, bool showProgress = true); 258 QImage readThumbnail(const QString& fn); 259 bool readColors(const QString& fileName, ColorList & colors); 260 261 private: 262 void parseHeader(const QString& fName, double &x, double &y, double &b, double &h); 263 bool convert(const 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: cancelRequested()484 void cancelRequested() { cancel = true; } 485 }; 486 487 #endif 488