annotate src/octave-svgconvert.cc @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents c23dafed5ffd
children bb9d776eafac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30376
diff changeset
3 // Copyright (C) 2017-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
30376
c23dafed5ffd maint: Use same Copyright code block in all files.
Rik <rik@octave.org>
parents: 30192
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
30376
c23dafed5ffd maint: Use same Copyright code block in all files.
Rik <rik@octave.org>
parents: 30192
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
30376
c23dafed5ffd maint: Use same Copyright code block in all files.
Rik <rik@octave.org>
parents: 30192
diff changeset
22 // <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
25
29482
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
26 #if defined (HAVE_CONFIG_H)
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
27 # include "config.h"
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
28 #endif
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
29
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
30 #include <iostream>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
31
29540
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
32 #if defined (OCTAVE_USE_WINDOWS_API)
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
33 # include <vector>
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
34 # include <locale>
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
35 # include <codecvt>
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
36 #endif
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
37
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
38 #include <QtCore>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
39 #include <QtXml>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
40
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
41 #include <QApplication>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
42 #include <QFontDatabase>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
43 #include <QImage>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
44 #include <QPainter>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
45 #include <QPrinter>
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
46 #include <QRegExp>
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
47
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
48 // Include a set of path rendering functions extracted from Qt-5.12 source
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
49 #include "octave-qsvghandler.h"
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
50
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
51 // Render to pdf
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
52 class pdfpainter : public QPainter
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
53 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
54 public:
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
55 pdfpainter (QString fname, QRectF sz)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
56 : m_printer ()
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
57 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
58 // Printer settings
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
59 m_printer.setOutputFormat (QPrinter::PdfFormat);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
60 m_printer.setFontEmbeddingEnabled (true);
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
61 m_printer.setOutputFileName (fname);
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
62 m_printer.setFullPage (true);
29482
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
63 #if defined (HAVE_QPRINTER_SETPAGESIZE)
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
64 m_printer.setPageSize (QPageSize (sz.size (), QPageSize::Point,
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
65 QString ("custom"),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
66 QPageSize::ExactMatch));
29482
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
67 #else
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
68 m_printer.setPaperSize (sz.size (), QPrinter::Point);
29482
67f1d5fc69bb avoid warning about deprecated Qprinter::setPaperSize function
John W. Eaton <jwe@octave.org>
parents: 29470
diff changeset
69 #endif
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
70
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
71 // Painter settings
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
72 begin (&m_printer);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
73 setWindow (sz.toRect ());
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
74 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
75
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
76 ~pdfpainter (void) { end (); }
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
77
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
78 private:
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
79 QPrinter m_printer;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
80 };
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
81
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
82 // String conversion functions+QVector<double> qstr2vectorf (QString str)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
83 QVector<double> qstr2vectorf (QString str)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
84 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
85 QVector<double> pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
86 QStringList coords = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
87 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 1)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
88 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
89 double pt = (*p).toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
90 pts.append (pt);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
91 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
92 return pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
93 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
94
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
95 QVector<double> qstr2vectord (QString str)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
96 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
97 QVector<double> pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
98 QStringList coords = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
99 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 1)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
100 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
101 double pt = (*p).toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
102 pts.append (pt);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
103 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
104
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
105 return pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
106 }
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
107
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
108 QVector<QPointF> qstr2ptsvector (QString str)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
109 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
110 QVector<QPointF> pts;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
111 str = str.trimmed ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
112 str.replace (" ", ",");
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
113 QStringList coords = str.split (",");
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
114 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 2)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
115 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
116 QPointF pt ((*p).toDouble (), (*(p+1)).toDouble ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
117 pts.append (pt);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
118 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
119 return pts;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
120 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
121
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
122 QVector<QPoint> qstr2ptsvectord (QString str)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
123 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
124 QVector<QPoint> pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
125 str = str.trimmed ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
126 str.replace (" ", ",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
127 QStringList coords = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
128 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 2)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
129 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
130 QPoint pt ((*p).toDouble (), (*(p+1)).toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
131 pts.append (pt);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
132 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
133 return pts;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
134 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
135
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
136 // Extract field arguments in a style-like string, e.g. "bla field(1,34,56) bla"
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
137 QString get_field (QString str, QString field)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
138 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
139 QString retval;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
140 QRegExp rx (field + "\\(([^\\)]*)\\)");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
141 int pos = 0;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
142 pos = rx.indexIn (str, pos);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
143 if (pos > -1)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
144 retval = rx.cap (1);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
145
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
146 return retval;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
147 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
148
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
149 // Polygon reconstruction class
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
150 class octave_polygon
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
151 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
152 public:
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
153 octave_polygon (void)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
154 { }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
155
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
156 octave_polygon (QPolygonF p)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
157 { m_polygons.push_back (p); }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
158
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
159 ~octave_polygon (void) { }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
160
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
161 int count (void) const
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
162 { return m_polygons.count (); }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
163
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
164 void reset (void)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
165 { m_polygons.clear (); }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
166
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
167 QList<QPolygonF> reconstruct (void)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
168 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
169 if (m_polygons.isEmpty ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
170 return QList<QPolygonF> ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
171
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
172 // Once a polygon has been merged to another, it is marked unsuded
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
173 QVector<bool> unused;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
174 for (auto it = m_polygons.begin (); it != m_polygons.end (); it++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
175 unused.push_back (false);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
176
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
177 bool tryagain = (m_polygons.count () > 1);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
178
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
179 while (tryagain)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
180 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
181 tryagain = false;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
182 for (auto ii = 0; ii < m_polygons.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
183 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
184 if (! unused[ii])
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
185 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
186 QPolygonF polygon = m_polygons[ii];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
187 for (auto jj = ii+1; jj < m_polygons.count (); jj++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
188 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
189 if (! unused[jj])
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
190 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
191 QPolygonF newpoly = mergepoly (polygon, m_polygons[jj]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
192 if (newpoly.count ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
193 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
194 polygon = newpoly;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
195 m_polygons[ii] = newpoly;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
196 unused[jj] = true;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
197 tryagain = true;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
198 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
199 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
200 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
201 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
202 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
203 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
204
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
205 // Try to remove cracks in polygons
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
206 for (auto ii = 0; ii < m_polygons.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
207 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
208 QPolygonF polygon = m_polygons[ii];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
209 tryagain = ! unused[ii];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
210
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
211 while (tryagain && polygon.count () > 4)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
212 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
213 tryagain = false;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
214 QVector<int> del;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
215
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
216 for (auto jj = 1; jj < (polygon.count () - 1); jj++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
217 if (polygon[jj-1] == polygon[jj+1])
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
218 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
219 if (! del.contains (jj))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
220 del.push_front (jj);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
221
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
222 del.push_front (jj+1);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
223 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
224
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
225 for (auto idx : del)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
226 polygon.remove (idx);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
227
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
228 if (del.count ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
229 tryagain = true;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
230 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
231 m_polygons[ii] = polygon;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
232 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
233
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
234 // FIXME: There may still be residual cracks, we should do something like
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
235 // resetloop = 2;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
236 // while (resetloop)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
237 // currface = shift (currface, 1);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
238 // if (currface(1) == currface(3))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
239 // currface([2 3]) = [];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
240 // resetloop = 2;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
241 // else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
242 // resetloop--;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
243 // endif
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
244 // endwhile
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
245
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
246 QList<QPolygonF> retval;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
247 for (int ii = 0; ii < m_polygons.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
248 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
249 QPolygonF polygon = m_polygons[ii];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
250 if (! unused[ii] && polygon.count () > 2)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
251 retval.push_back (polygon);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
252 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
253
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
254 return retval;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
255 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
256
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
257 static inline
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
258 bool eq (QPointF p1, QPointF p2)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
259 {
27277
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
260 return ((qAbs (p1.x () - p2.x ())
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
261 <= 0.00001 * qMin (qAbs (p1.x ()), qAbs (p2.x ())))
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
262 && (qAbs (p1.y () - p2.y ())
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
263 <= 0.00001 * qMin (qAbs (p1.y ()), qAbs (p2.y ()))));
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
264 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
265
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
266 static
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
267 QPolygonF mergepoly (QPolygonF poly1, QPolygonF poly2)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
268 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
269 // Close polygon contour
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
270 poly1.push_back (poly1[0]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
271 poly2.push_back (poly2[0]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
272
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
273 for (int ii = 0; ii < (poly1.size () - 1); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
274 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
275 for (int jj = 0; jj < (poly2.size () - 1); jj++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
276 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
277 bool forward = (eq (poly1[ii], poly2[jj])
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
278 && eq (poly1[ii+1], poly2[jj+1]));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
279 bool backward = ! forward && (eq (poly1[ii], poly2[jj+1])
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
280 && eq (poly1[ii+1], poly2[jj]));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
281
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
282 if (forward || backward)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
283 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
284 // Unclose contour
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
285 poly1.pop_back ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
286 poly2.pop_back ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
287
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
288 QPolygonF merged;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
289 for (int kk = 0; kk < (ii+1); kk++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
290 merged.push_back (poly1[kk]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
291
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
292 // Shift vertices and eliminate the common edge
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
293 std::rotate (poly2.begin (), poly2.begin () + jj, poly2.end ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
294 poly2.erase (poly2.begin ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
295 poly2.erase (poly2.begin ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
296
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
297 if (forward)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
298 for (int kk = poly2.size (); kk > 0; kk--)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
299 merged.push_back (poly2[kk-1]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
300 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
301 for (int kk = 0; kk < poly2.size (); kk++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
302 merged.push_back (poly2[kk]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
303
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
304 for (int kk = ii+1; kk < poly1.size (); kk++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
305 merged.push_back (poly1[kk]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
306
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
307 // Return row vector
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
308 QPolygonF out (merged.size ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
309 for (int kk = 0; kk < merged.size (); kk++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
310 out[kk] = merged[kk];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
311
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
312 return out;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
313 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
314 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
315 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
316 return QPolygonF ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
317 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
318
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
319 void add (QPolygonF p)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
320 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
321 if (m_polygons.count () == 0)
27934
49a0d90cd2a3 maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
322 m_polygons.push_back (p);
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
323 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
324 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
325 QPolygonF tmp = mergepoly (m_polygons.back (), p);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
326 if (tmp.count ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
327 m_polygons.back () = tmp;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
328 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
329 m_polygons.push_back (p);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
330 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
331 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
332
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
333 private:
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
334 QList<QPolygonF> m_polygons;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
335 };
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
336
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
337 void draw (QDomElement& parent_elt, pdfpainter& painter)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
338 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
339 QDomNodeList nodes = parent_elt.childNodes ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
340
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
341 static QString clippath_id;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
342 static QMap< QString, QVector<QPoint> > clippath;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
343
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
344 // tspan elements must have access to the font and position extracted from
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
345 // their parent text element
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
346 static QFont font;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
347 static double dx = 0, dy = 0;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
348
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
349 // Store path defined in <defs> in a map
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
350 static bool in_defs = false;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
351 static QMap< QString, QPainterPath> path_map;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
352
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
353 for (int i = 0; i < nodes.count (); i++)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
354 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
355 QDomNode node = nodes.at (i);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
356 if (! node.isElement ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
357 continue;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
358
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
359 QDomElement elt = node.toElement ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
360
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
361 if (elt.tagName () == "clipPath")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
362 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
363 clippath_id = "#" + elt.attribute ("id");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
364 draw (elt, painter);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
365 clippath_id = QString ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
366 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
367 else if (elt.tagName () == "g")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
368 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
369 QString str = elt.attribute ("font-family");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
370 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
371 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
372 // Font
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
373 font = QFont ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
374 font.setFamily (elt.attribute ("font-family"));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
375
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
376 str = elt.attribute ("font-weight");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
377 if (! str.isEmpty () && str != "normal")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
378 font.setWeight (QFont::Bold);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
379
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
380 str = elt.attribute ("font-style");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
381 if (! str.isEmpty () && str != "normal")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
382 font.setStyle (QFont::StyleItalic);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
383
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
384 str = elt.attribute ("font-size");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
385 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
386 font.setPixelSize (str.toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
387
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
388 painter.setFont (font);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
389
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
390 // Translation and rotation
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
391 painter.save ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
392 str = get_field (elt.attribute ("transform"), "translate");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
393 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
394 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
395 QStringList trans = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
396 dx = trans[0].toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
397 dy = trans[1].toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
398
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
399 str = get_field (elt.attribute ("transform"), "rotate");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
400 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
401 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
402 QStringList rot = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
403 painter.translate (dx+rot[1].toDouble (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
404 dy+rot[2].toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
405 painter.rotate (rot[0].toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
406 dx = rot[1].toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
407 dy = rot[2].toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
408 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
409 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
410 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
411 painter.translate (dx, dy);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
412 dx = 0;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
413 dy = 0;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
414 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
415 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
416
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
417 draw (elt, painter);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
418 painter.restore ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
419 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
420 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
421 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
422 bool current_clipstate = painter.hasClipping ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
423 QRegion current_clippath = painter.clipRegion ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
424
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
425 str = elt.attribute ("clip-path");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
426 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
427 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
428 QVector<QPoint> pts = clippath[get_field (str, "url")];
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
429 if (! pts.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
430 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
431 painter.setClipRegion (QRegion (QPolygon (pts)));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
432 painter.setClipping (true);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
433 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
434 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
435
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
436 // Fill color
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
437 str = get_field (elt.attribute ("fill"), "rgb");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
438 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
439 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
440 QStringList clist = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
441 painter.setBrush (QColor (clist[0].toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
442 clist[1].toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
443 clist[2].toInt ()));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
444 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
445
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
446 // Transform
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
447 str = elt.attribute ("transform");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
448 painter.save ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
449 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
450 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
451 QStringRef tf (&str);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
452 QTransform tform =
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
453 parseTransformationMatrix (tf) * painter.transform ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
454 painter.setTransform (tform);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
455 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
456
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
457 draw (elt, painter);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
458
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
459 // Restore previous clipping settings
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
460 painter.restore ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
461 painter.setClipRegion (current_clippath);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
462 painter.setClipping (current_clipstate);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
463 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
464 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
465 else if (elt.tagName () == "defs")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
466 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
467 in_defs = true;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
468 draw (elt, painter);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
469 in_defs = false;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
470 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
471 else if (elt.tagName () == "path")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
472 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
473 // Store QPainterPath for latter use
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
474 QString id = elt.attribute ("id");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
475 if (! id.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
476 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
477 QString d = elt.attribute ("d");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
478
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
479 if (! d.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
480 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
481 QStringRef data (&d);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
482 QPainterPath path;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
483 if (! parsePathDataFast (data, path))
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
484 continue; // Something went wrong, pass
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
485 else if (path.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
486 std::cout << "Empty path for data:"
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
487 << d.toStdString () << std::endl;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
488 else if (in_defs)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
489 path_map["#" + id] = path;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
490 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
491 painter.drawPath (path);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
492
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
493
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
494 if (path_map["#" + id].isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
495 std::cout << "Empty path for data:"
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
496 << d.toStdString () << std::endl;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
497 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
498 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
499 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
500 else if (elt.tagName () == "use")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
501 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
502 painter.setPen (Qt::NoPen);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
503
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
504 QString str = elt.attribute ("xlink:href");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
505 if (! str.isEmpty () && str.size () > 2)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
506 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
507 QPainterPath path = path_map[str];
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
508 if (! path.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
509 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
510 str = elt.attribute ("x");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
511 double x = elt.attribute ("x").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
512 str = elt.attribute ("y");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
513 double y = elt.attribute ("y").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
514 painter.translate (x, y);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
515 painter.drawPath (path);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
516 painter.translate (-x, -y);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
517 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
518 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
519 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
520 else if (elt.tagName () == "text")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
521 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
522 // Font
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
523 QFont saved_font (font);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
524
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
525 QString str = elt.attribute ("font-family");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
526 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
527 font.setFamily (elt.attribute ("font-family"));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
528
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
529 str = elt.attribute ("font-weight");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
530 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
531 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
532 if (str != "normal")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
533 font.setWeight (QFont::Bold);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
534 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
535 font.setWeight (QFont::Normal);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
536 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
537
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
538 str = elt.attribute ("font-style");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
539 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
540 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
541 if (str != "normal")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
542 font.setStyle (QFont::StyleItalic);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
543 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
544 font.setStyle (QFont::StyleNormal);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
545 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
546
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
547 str = elt.attribute ("font-size");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
548 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
549 font.setPixelSize (str.toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
550
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
551 painter.setFont (font);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
552
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
553 // Color is specified in rgb
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
554 str = get_field (elt.attribute ("fill"), "rgb");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
555 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
556 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
557 QStringList clist = str.split (",");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
558 painter.setPen (QColor (clist[0].toInt (), clist[1].toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
559 clist[2].toInt ()));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
560 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
561
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
562 QStringList xx = elt.attribute ("x").split (" ");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
563 int y = elt.attribute ("y").toInt ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
564 str = elt.text ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
565 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
566 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
567 int ii = 0;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
568 foreach (QString s, xx)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
569 if (ii < str.size ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
570 painter.drawText (s.toInt ()-dx, y-dy, str.at (ii++));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
571 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
572
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
573 draw (elt, painter);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
574 font = saved_font;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
575 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
576 else if (elt.tagName () == "polyline")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
577 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
578 // Color
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
579 QColor c (elt.attribute ("stroke"));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
580 QString str = elt.attribute ("stroke-opacity");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
581 if (! str.isEmpty () && str.toDouble () != 1.0
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
582 && str.toDouble () >= 0.0)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
583 c.setAlphaF (str.toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
584
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
585 QPen pen;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
586 pen.setColor (c);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
587
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
588 // Line properties
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
589 str = elt.attribute ("stroke-width");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
590 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
591 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
592 double w = str.toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
593 if (w > 0)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
594 pen.setWidthF (w);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
595 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
596
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
597 str = elt.attribute ("stroke-linecap");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
598 pen.setCapStyle (Qt::SquareCap);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
599 if (str == "round")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
600 pen.setCapStyle (Qt::RoundCap);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
601 else if (str == "butt")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
602 pen.setCapStyle (Qt::FlatCap);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
603
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
604 str = elt.attribute ("stroke-linejoin");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
605 pen.setJoinStyle (Qt::MiterJoin);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
606 if (str == "round")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
607 pen.setJoinStyle (Qt::RoundJoin);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
608 else if (str == "bevel")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
609 pen.setJoinStyle (Qt::BevelJoin);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
610
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
611 str = elt.attribute ("stroke-dasharray");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
612 pen.setStyle (Qt::SolidLine);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
613 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
614 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
615 QVector<double> pat = qstr2vectord (str);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
616 if (pat.count () != 2 || pat[1] != 0)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
617 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
618 // Express pattern in linewidth units
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
619 for (auto& p : pat)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
620 p /= pen.widthF ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
621
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
622 pen.setDashPattern (pat);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
623 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
624 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
625
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
626 painter.setPen (pen);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
627 painter.drawPolyline (qstr2ptsvector (elt.attribute ("points")));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
628 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
629 else if (elt.tagName () == "image")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
630 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
631 // Images are represented as a base64 stream of png formatted data
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
632 QString href_att = elt.attribute ("xlink:href");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
633 QString prefix ("data:image/png;base64,");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
634 QByteArray data
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
635 = QByteArray::fromBase64 (href_att.mid (prefix.length ()).toLatin1 ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
636 QImage img;
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
637 if (img.loadFromData (data, "PNG"))
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
638 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
639 QRect pos(elt.attribute ("x").toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
640 elt.attribute ("y").toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
641 elt.attribute ("width").toInt (),
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
642 elt.attribute ("height").toInt ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
643
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
644 // Translate
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
645 painter.save ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
646 QString str = get_field (elt.attribute ("transform"), "matrix");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
647 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
648 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
649 QVector<double> m = qstr2vectorf (str);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
650 QTransform tform(m[0], m[1], m[2],
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
651 m[3], m[4], m[5]);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
652 painter.setTransform (tform);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
653 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
654
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
655 painter.setRenderHint (QPainter::Antialiasing, false);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
656 painter.drawImage (pos, img);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
657 painter.setRenderHint (QPainter::Antialiasing, true);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
658 painter.restore ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
659 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
660 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
661 else if (elt.tagName () == "rect")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
662 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
663 // Color
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
664 QColor col (Qt::black);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
665 QString str = elt.attribute ("fill");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
666 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
667 col = QColor (str);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
668
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
669 // Position
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
670 double x = elt.attribute ("x").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
671 double y = elt.attribute ("y").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
672
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
673 // Size
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
674 double wd = elt.attribute ("width").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
675 double hg = elt.attribute ("height").toDouble ();
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
676
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
677 painter.setBrush (col);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
678 painter.setPen (Qt::NoPen);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
679
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
680 painter.drawRect (QRectF (x, y, wd, hg));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
681 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
682 else if (elt.tagName () == "polygon")
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
683 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
684 if (! clippath_id.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
685 clippath[clippath_id] = qstr2ptsvectord (elt.attribute ("points"));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
686 else
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
687 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
688 QString str = elt.attribute ("fill");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
689 if (! str.isEmpty ())
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
690 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
691 QColor color (str);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
692
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
693 str = elt.attribute ("fill-opacity");
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
694 if (! str.isEmpty () && str.toDouble () != 1.0
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
695 && str.toDouble () >= 0.0)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
696 color.setAlphaF (str.toDouble ());
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
697
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
698 QPolygonF p (qstr2ptsvector (elt.attribute ("points")));
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
699
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
700 if (p.count () > 2)
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
701 {
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
702 painter.setBrush (color);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
703 painter.setPen (Qt::NoPen);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
704
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
705 painter.setRenderHint (QPainter::Antialiasing, false);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
706 painter.drawPolygon (p);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
707 painter.setRenderHint (QPainter::Antialiasing, true);
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
708 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
709 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
710 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
711 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
712 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
713 }
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
714
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
715 // Append a list of reconstructed child polygons to a QDomElement and remove
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
716 // the original nodes
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
717
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
718 void replace_polygons (QDomElement& parent_elt, QList<QDomNode> orig,
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
719 QList<QPolygonF> polygons)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
720 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
721 if (! orig.count () || (orig.count () == polygons.count ()))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
722 return;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
723
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
724 QDomNode last = orig.last ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
725 for (int ii = 0; ii < polygons.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
726 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
727 QPolygonF polygon = polygons[ii];
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
728
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
729 QDomNode node = last.cloneNode ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
730
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
731 QString pts;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
732
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
733 for (int jj = 0; jj < polygon.count (); jj++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
734 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
735 pts += QString ("%1,%2 ").arg (polygon[jj].x ())
27934
49a0d90cd2a3 maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
736 .arg (polygon[jj].y ());
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
737 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
738
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
739 node.toElement ().setAttribute ("points", pts.trimmed ());
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
740
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
741 if (! last.isNull ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
742 last = parent_elt.insertAfter (node, last);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
743 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
744
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
745 for (int ii = 0; ii < orig.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
746 parent_elt.removeChild (orig.at (ii));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
747 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
748
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
749 void reconstruct_polygons (QDomElement& parent_elt)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
750 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
751 QDomNodeList nodes = parent_elt.childNodes ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
752 QColor current_color;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
753 QList<QDomNode> replaced_nodes;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
754 octave_polygon current_polygon;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
755
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
756 // Collection of child nodes to be removed and polygons to be added
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
757 QList< QPair<QList<QDomNode>,QList<QPolygonF> > > collection;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
758
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
759 for (int ii = 0; ii < nodes.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
760 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
761 QDomNode node = nodes.at (ii);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
762 if (! node.isElement ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
763 continue;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
764
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
765 QDomElement elt = node.toElement ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
766
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
767 if (elt.tagName () == "polygon")
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
768 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
769 QString str = elt.attribute ("fill");
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
770 if (! str.isEmpty ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
771 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
772 QColor color (str);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
773 str = elt.attribute ("fill-opacity");
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
774 if (! str.isEmpty ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
775 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
776 double alpha = str.toDouble ();
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
777 if (alpha != 1.0 && alpha >= 0.0)
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
778 color.setAlphaF (alpha);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
779 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
780
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
781 if (! current_polygon.count ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
782 current_color = color;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
783
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
784 if (color != current_color)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
785 {
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
786 // Reconstruct the previous series of triangles
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
787 QList<QPolygonF> polygons = current_polygon.reconstruct ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
788 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> >
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
789 (replaced_nodes, polygons));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
790
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
791 replaced_nodes.clear ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
792 current_polygon.reset ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
793
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
794 current_color = color;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
795 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
796
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
797 QPolygonF p (qstr2ptsvector (elt.attribute ("points")));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
798 current_polygon.add (p);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
799 replaced_nodes.push_back (node);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
800 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
801 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
802 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
803 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
804 if (current_polygon.count ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
805 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
806 QList<QPolygonF> polygons = current_polygon.reconstruct ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
807 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> >
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
808 (replaced_nodes, polygons));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
809 replaced_nodes.clear ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
810 current_polygon.reset ();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
811 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
812 reconstruct_polygons (elt);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
813 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
814 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
815
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
816 // Finish
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
817 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> >
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
818 (replaced_nodes, current_polygon.reconstruct ()));
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
819
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
820 for (int ii = 0; ii < collection.count (); ii++)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
821 replace_polygons (parent_elt, collection[ii].first, collection[ii].second);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
822 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
823
29540
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
824 #if defined (OCTAVE_USE_WINDOWS_API) && defined (_UNICODE)
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
825 extern "C"
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
826 int
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
827 wmain (int argc, wchar_t **wargv)
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
828 {
29540
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
829 static char **argv = new char * [argc + 1];
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
830 std::vector<std::string> argv_str;
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
831
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
832 // convert wide character strings to multibyte UTF-8 strings
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
833 std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> wchar_conv;
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
834 for (int i_arg = 0; i_arg < argc; i_arg++)
30192
8c8031be8072 Windows: Don't get pointers to C strings while vector is still unstable.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29540
diff changeset
835 argv_str.push_back (wchar_conv.to_bytes (wargv[i_arg]));
8c8031be8072 Windows: Don't get pointers to C strings while vector is still unstable.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29540
diff changeset
836
8c8031be8072 Windows: Don't get pointers to C strings while vector is still unstable.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29540
diff changeset
837 // Get pointers to C strings not before vector is stable.
8c8031be8072 Windows: Don't get pointers to C strings while vector is still unstable.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29540
diff changeset
838 for (int i_arg = 0; i_arg < argc; i_arg++)
8c8031be8072 Windows: Don't get pointers to C strings while vector is still unstable.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29540
diff changeset
839 argv[i_arg] = &argv_str[i_arg][0];
29540
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
840 argv[argc] = nullptr;
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
841
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
842 #else
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
843 int
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
844 main (int argc, char **argv)
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
845 {
b6f80b1d448f Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents: 29519
diff changeset
846 #endif
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
847 const char *doc = "See \"octave-svgconvert -h\"";
27277
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
848 const char *help = "Usage:\n\
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
849 octave-svgconvert infile fmt dpi font reconstruct outfile\n\n\
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
850 Convert svg file to pdf, or svg. All arguments are mandatory:\n\
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
851 * infile: input svg file or \"-\" to indicate that the input svg file should be \
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
852 read from stdin\n\
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
853 * fmt: format of the output file. May be one of pdf or svg\n\
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
854 * dpi: device dependent resolution in screen pixel per inch\n\
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
855 * font: specify a file name for the default FreeSans font\n\
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 26993
diff changeset
856 * reconstruct: specify whether to reconstruct triangle to polygons (0 or 1)\n\
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
857 * outfile: output file name\n";
26617
98afb8bbd1f6 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 26063
diff changeset
858
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
859 if (strcmp (argv[1], "-h") == 0)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
860 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
861 std::cout << help;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
862 return 0;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
863 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
864 else if (argc != 7)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
865 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
866 std::cerr << help;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
867 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
868 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
869
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
870 // Open svg file
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
871 QFile file;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
872 if (strcmp (argv[1], "-") != 0)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
873 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
874 // Read from file
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
875 file.setFileName (argv[1]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
876 if (! file.open (QIODevice::ReadOnly | QIODevice::Text))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
877 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
878 std::cerr << "Unable to open file " << argv[1] << "\n";
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
879 std::cerr << help;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
880 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
881 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
882 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
883 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
884 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
885 // Read from stdin
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
886 if (! file.open (stdin, QIODevice::ReadOnly | QIODevice::Text))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
887 {
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
888 std::cerr << "Unable to read from stdin\n";
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
889 std::cerr << doc;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
890 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
891 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
892 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
893
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
894 // Create a DOM document and load the svg file
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
895 QDomDocument document;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
896 QString msg;
27934
49a0d90cd2a3 maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
897 if (! document.setContent (&file, false, &msg))
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
898 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
899 std::cerr << "Failed to parse XML contents" << std::endl
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
900 << msg.toStdString () << std::endl;
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
901 file.close();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
902 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
903 }
26993
119353eb6b38 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 26647
diff changeset
904
26647
903c9a39e051 Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26617
diff changeset
905 file.close ();
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
906
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
907 // Format
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
908 if (strcmp (argv[2], "pdf") != 0 && strcmp (argv[2], "svg") != 0)
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
909 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
910 std::cerr << "Unhandled output file format " << argv[2] << "\n";
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
911 std::cerr << doc;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
912 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
913 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
914
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
915 // Resolution (Currently unused). Keep the DPI argument in case
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
916 // we implement raster outputs.
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
917 // double dpi = QString (argv[3]).toDouble ();
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
918
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
919 // Get the viewport from the root element
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
920 QDomElement root = document.firstChildElement();
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
921 double x0, y0, dx, dy;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
922 QString s = root.attribute ("viewBox");
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
923 QTextStream (&s) >> x0 >> y0 >> dx >> dy;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
924 QRectF vp (x0, y0, dx, dy);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
925
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
926 // Setup application and add default FreeSans font if needed
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
927 QApplication a (argc, argv);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
928
26063
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
929 // When printing to PDF we may need the default FreeSans font
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
930 if (! strcmp (argv[2], "pdf"))
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
931 {
26063
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
932 QFont font ("FreeSans");
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
933 if (! font.exactMatch ())
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
934 {
26063
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
935 QString fontpath (argv[4]);
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
936 if (! fontpath.isEmpty ())
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
937 {
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
938 int id = QFontDatabase::addApplicationFont (fontpath);
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
939 if (id < 0)
26617
98afb8bbd1f6 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 26063
diff changeset
940 std::cerr << "warning: print: "
27934
49a0d90cd2a3 maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
941 "Unable to add default font to database\n";
26063
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
942 }
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
943 else
4407b315339d print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26042
diff changeset
944 std::cerr << "warning: print: FreeSans font not found\n";
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
945 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
946 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
947
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
948 // First render in a temporary file
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
949 QTemporaryFile fout;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
950 if (! fout.open ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
951 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
952 std::cerr << "Could not open temporary file\n";
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
953 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
954 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
955
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
956 // Do basic polygons reconstruction
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
957 if (QString (argv[5]).toInt ())
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
958 reconstruct_polygons (root);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
959
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
960 // Draw
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
961 if (! strcmp (argv[2], "pdf"))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
962 {
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
963 // PDF painter
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
964 pdfpainter painter (fout.fileName (), vp);
29470
2ae4764180c6 Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29358
diff changeset
965
29519
78f42413e20f octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 29482
diff changeset
966 draw (root, painter);
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
967 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
968 else
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
969 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
970 // Return modified svg document
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
971 QTextStream out (&fout);
26647
903c9a39e051 Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26617
diff changeset
972 out.setCodec ("UTF-8");
903c9a39e051 Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26617
diff changeset
973 out << document.toByteArray ();
26027
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
974 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
975
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
976 // Delete output file before writing with new data
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
977 if (QFile::exists (argv[6]))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
978 if (! QFile::remove (argv[6]))
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
979 {
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
980 std::cerr << "Unable to replace existing file " << argv[6] << "\n";
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
981 return -1;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
982 }
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
983
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
984 fout.copy (argv[6]);
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
985
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
986 return 0;
98d7a111786a Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff changeset
987 }