Mercurial > octave
annotate src/octave-svgconvert.cc @ 32085:cf03230c0363
octave-svgconvert: Fix parsing of fields.
* src/octave-svgconvert.cc (get_field): Return correct capturing group.
Regression from 20bf7bf8c95d.
See also: https://octave.discourse.group/t/3139/73
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Tue, 09 May 2023 18:25:45 +0200 |
parents | 4d15e1304a48 |
children | a9dbbe06ca59 |
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 // |
31706
597f3ee61a48
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
31650
diff
changeset
|
3 // Copyright (C) 2017-2023 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 |
31650
24bd675bceab
octave-svgconvert: Include header that defines "stdin".
Markus Mützel <markus.muetzel@gmx.de>
parents:
31228
diff
changeset
|
30 #include <cstdio> |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
31 #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
|
32 |
29540
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
33 #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
|
34 # include <vector> |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
35 # include <locale> |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
36 # include <codecvt> |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
37 #endif |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
38 |
26027
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 <QtCore> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
40 #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
|
41 |
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 <QApplication> |
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 <QFontDatabase> |
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 <QImage> |
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 <QPainter> |
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 <QPrinter> |
32000
20bf7bf8c95d
Replace remaining deprecated QRegExp by QRegularExpression.
Markus Mützel <markus.muetzel@gmx.de>
parents:
31883
diff
changeset
|
47 #include <QRegularExpression> |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
48 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
49 // 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
|
50 #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
|
51 |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
52 // 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
|
53 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
|
54 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
55 public: |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
56 |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
57 pdfpainter () = delete; |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
58 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
59 pdfpainter (QString fname, QRectF sz) |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
60 : 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
|
61 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
62 // 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
|
63 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
|
64 m_printer.setFontEmbeddingEnabled (true); |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
65 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
|
66 m_printer.setFullPage (true); |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
67 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
|
68 QString ("custom"), |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
69 QPageSize::ExactMatch)); |
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 |
31883
56809fe23e53
eliminate some clang warnings about defaulted functions being deleted
John W. Eaton <jwe@octave.org>
parents:
31855
diff
changeset
|
76 OCTAVE_DISABLE_COPY_MOVE (pdfpainter) |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
77 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31744
diff
changeset
|
78 ~pdfpainter () { 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
|
79 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
80 private: |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
81 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
82 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
|
83 }; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
84 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
85 // 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
|
86 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
|
87 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
88 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
|
89 QStringList coords = str.split (","); |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
90 for (auto& p : coords) |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
91 pts.append (p.toDouble ()); |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
92 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
93 return pts; |
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 |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
96 // FIXME: What's the difference between qstr2vectorf and qstr2vectord? |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
97 // Can one be called from the other to avoid code duplication, or deleted? |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
98 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
|
99 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
100 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
|
101 QStringList coords = str.split (","); |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
102 for (auto& p : coords) |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
103 pts.append (p.toDouble ()); |
29519
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 |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
122 // FIXME: What's the difference between qstr2ptsvector and qstr2ptsvectord? |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
123 // Can one be called from the other to avoid code duplication, or deleted? |
29519
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> 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
|
125 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
126 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
|
127 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
|
128 str.replace (" ", ","); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
129 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
|
130 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
|
131 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
132 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
|
133 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
|
134 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
135 return pts; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
136 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
137 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
138 // 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
|
139 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
|
140 { |
32000
20bf7bf8c95d
Replace remaining deprecated QRegExp by QRegularExpression.
Markus Mützel <markus.muetzel@gmx.de>
parents:
31883
diff
changeset
|
141 QRegularExpression rx (field + "\\(([^\\)]*)\\)"); |
20bf7bf8c95d
Replace remaining deprecated QRegExp by QRegularExpression.
Markus Mützel <markus.muetzel@gmx.de>
parents:
31883
diff
changeset
|
142 QRegularExpressionMatch match = rx.match (str); |
32085
cf03230c0363
octave-svgconvert: Fix parsing of fields.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32008
diff
changeset
|
143 QString retval = match.captured (1); |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
144 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
145 return retval; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
146 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
147 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
148 // 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
|
149 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
|
150 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
151 public: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
152 |
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 (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
|
154 { 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
|
155 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
156 OCTAVE_DEFAULT_CONSTRUCT_COPY_MOVE_DELETE (octave_polygon) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
157 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31744
diff
changeset
|
158 int count () const |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
159 { 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
|
160 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31744
diff
changeset
|
161 void reset () |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
162 { 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
|
163 |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
164 QList<QPolygonF> reconstruct (int reconstruct_level) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
165 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
166 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
|
167 return QList<QPolygonF> (); |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
168 else if (reconstruct_level < 2) |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
169 return m_polygons; |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
170 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
171 // Once a polygon has been merged to another, it is marked unsuded |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
172 QVector<bool> unused (m_polygons.count (), false); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
173 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
174 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
|
175 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
176 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
|
177 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
178 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
|
179 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
|
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 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
|
182 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
183 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
|
184 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
|
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 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
|
187 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
188 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
|
189 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
|
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 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
|
192 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
|
193 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
|
194 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
|
195 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
196 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
197 } |
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 // 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
|
203 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
|
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 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
|
206 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
|
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 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
|
209 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
210 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
|
211 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
|
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 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
|
214 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
|
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 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
|
217 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
|
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 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
|
220 } |
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 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
|
223 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
|
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 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
|
226 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
|
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 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
|
229 } |
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 // 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
|
232 // 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
|
233 // 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
|
234 // 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
|
235 // 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
|
236 // 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
|
237 // 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
|
238 // else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
239 // resetloop--; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
240 // endif |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
241 // endwhile |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
242 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
243 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
|
244 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
|
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 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
|
247 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
|
248 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
|
249 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
250 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
251 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
|
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 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
|
255 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
|
256 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
257 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
|
258 <= 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
|
259 && (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
|
260 <= 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
|
261 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
262 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
263 static |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
264 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
|
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 // 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
|
267 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
|
268 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
|
269 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
270 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
|
271 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
272 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
|
273 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
274 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
|
275 && 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
|
276 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
|
277 && 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
|
278 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
279 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
|
280 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
281 // 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
|
282 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
|
283 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
|
284 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
285 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
|
286 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
|
287 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
|
288 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
289 // 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
|
290 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
|
291 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
|
292 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
|
293 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
294 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
|
295 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
|
296 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
|
297 else |
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 = 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
|
299 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
|
300 |
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 = 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
|
302 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
|
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 // 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
|
305 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
|
306 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
|
307 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
|
308 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
309 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
|
310 } |
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 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
313 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
|
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 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
|
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 if (m_polygons.count () == 0) |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
319 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
|
320 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
321 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
322 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
|
323 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
|
324 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
|
325 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
326 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
|
327 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
328 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
329 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
330 private: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
331 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
|
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 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
334 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
|
335 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
336 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
|
337 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
338 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
|
339 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
|
340 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
341 // 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
|
342 // 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
|
343 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
|
344 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
|
345 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
346 // 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
|
347 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
|
348 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
|
349 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
350 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
|
351 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
352 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
|
353 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
|
354 continue; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
355 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
356 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
|
357 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
358 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
|
359 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
360 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
|
361 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
|
362 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
|
363 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
364 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
|
365 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
366 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
|
367 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
|
368 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
369 // Font |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
370 font = QFont (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
371 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
|
372 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
373 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
|
374 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
|
375 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
|
376 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
377 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
|
378 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
|
379 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
|
380 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
385 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
|
386 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
387 // 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
|
388 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
389 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
|
390 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
|
391 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
392 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
|
393 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
|
394 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
|
395 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
396 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
|
397 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
|
398 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
399 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
|
400 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
|
401 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
|
402 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
|
403 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 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
406 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
407 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
408 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
|
409 dx = 0; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
410 dy = 0; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
411 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
412 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
413 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
414 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
|
415 painter.restore (); |
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 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
418 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
419 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
|
420 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
|
421 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
422 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
|
423 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
|
424 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
425 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
|
426 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
|
427 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
428 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
|
429 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
|
430 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
431 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
432 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
433 // Fill color |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
434 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
|
435 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
|
436 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 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
|
441 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
442 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
443 // Transform |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
444 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
|
445 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
446 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
|
447 { |
32006
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
448 #if HAVE_QSTRINGVIEW |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
449 QStringView tf {str}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
450 #else |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
451 QStringRef tf {&str}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
452 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
453 QTransform tform = |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
454 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
|
455 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
|
456 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
457 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
458 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
|
459 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
460 // 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
|
461 painter.restore (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
462 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
|
463 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
|
464 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
465 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
466 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
|
467 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
468 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
|
469 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
|
470 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
|
471 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
472 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
|
473 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
474 // 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
|
475 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
|
476 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
|
477 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
478 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
|
479 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
480 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
|
481 { |
32006
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
482 #if HAVE_QSTRINGVIEW |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
483 QStringView data {d}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
484 #else |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
485 QStringRef data {&d}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
486 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
487 QPainterPath path; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
488 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
|
489 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
|
490 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
|
491 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
|
492 << 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
|
493 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
|
494 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
|
495 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
496 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
|
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 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
|
500 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
|
501 << 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
|
502 } |
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 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
505 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
|
506 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
507 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
|
508 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
509 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
|
510 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
|
511 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
512 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
|
513 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
|
514 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
515 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
|
516 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
|
517 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
|
518 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
|
519 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
|
520 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
|
521 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
|
522 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
523 } |
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 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
|
526 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
527 // Font |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
528 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
|
529 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
530 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
|
531 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
|
532 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
|
533 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
534 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
|
535 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
|
536 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
537 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
|
538 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
|
539 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
540 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
|
541 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
542 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
543 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
|
544 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
|
545 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
546 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
|
547 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
|
548 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
549 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
|
550 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
551 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
552 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
|
553 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
|
554 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
|
555 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
556 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
|
557 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
558 // 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
|
559 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
|
560 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
|
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 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
|
563 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
|
564 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
|
565 } |
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 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
|
568 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
|
569 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
|
570 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
|
571 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
572 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
|
573 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
|
574 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
|
575 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
|
576 } |
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 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
|
579 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
|
580 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
581 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
|
582 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
583 // Color |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
584 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
|
585 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
|
586 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
|
587 && 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
|
588 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
|
589 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
590 QPen pen; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
591 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
|
592 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
593 // Line properties |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
594 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
|
595 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
|
596 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
597 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
|
598 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
|
599 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
|
600 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
601 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 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
|
608 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
609 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 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
|
615 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
616 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
|
617 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
|
618 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
|
619 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
620 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
|
621 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
|
622 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
623 // 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
|
624 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
|
625 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
|
626 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
627 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
|
628 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
629 } |
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 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
|
632 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
|
633 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
634 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
|
635 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
636 // 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
|
637 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
|
638 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
|
639 QByteArray data |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
640 = 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
|
641 QImage img; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
642 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
|
643 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
644 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
|
645 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
|
646 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
|
647 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
|
648 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
649 // Translate |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
650 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
651 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
|
652 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
|
653 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
654 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
|
655 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
|
656 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
|
657 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
|
658 } |
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 painter.setRenderHint (QPainter::Antialiasing, false); |
31212
55415fa6a20f
svgconvert: Use Lossless encoding of images when available (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31191
diff
changeset
|
661 #if defined (HAVE_QPAINTER_RENDERHINT_LOSSLESS) |
55415fa6a20f
svgconvert: Use Lossless encoding of images when available (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31191
diff
changeset
|
662 painter.setRenderHint (QPainter::LosslessImageRendering); |
55415fa6a20f
svgconvert: Use Lossless encoding of images when available (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31191
diff
changeset
|
663 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
664 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
|
665 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
|
666 painter.restore (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
667 } |
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 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
|
670 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
671 // Position |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
672 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
|
673 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
|
674 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
675 // Size |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
676 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
|
677 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
|
678 |
31191
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
679 // Color |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
680 QColor saved_color = painter.brush ().color (); |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
681 |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
682 QString str = elt.attribute ("fill"); |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
683 if (! str.isEmpty ()) |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
684 painter.setBrush (QColor (str)); |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
685 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
686 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
|
687 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
688 painter.drawRect (QRectF (x, y, wd, hg)); |
31191
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
689 |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
690 if (! str.isEmpty ()) |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
691 painter.setBrush (saved_color); |
29519
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 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
|
694 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
695 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
|
696 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
|
697 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
698 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
699 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
|
700 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
|
701 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
702 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
|
703 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
704 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
|
705 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
|
706 && 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
|
707 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
|
708 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
709 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
|
710 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
711 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
|
712 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
713 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
|
714 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
|
715 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
716 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
|
717 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
|
718 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
|
719 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
720 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
721 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
722 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
723 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
724 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
725 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
726 // 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
|
727 // 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
|
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 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
|
730 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
|
731 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
732 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
|
733 return; |
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 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
|
736 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
|
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 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
|
739 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
740 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
|
741 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
742 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
|
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 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
|
745 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
746 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
|
747 .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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
750 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
|
751 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
752 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
|
753 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
|
754 } |
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 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
|
757 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
|
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 |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
760 void reconstruct_polygons (QDomElement& parent_elt, int reconstruct_level) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
761 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
762 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
|
763 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
|
764 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
|
765 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
|
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 // 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
|
768 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
|
769 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
770 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
|
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 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
|
773 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
|
774 continue; |
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 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
|
777 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
778 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
|
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 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
|
781 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
|
782 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
783 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
|
784 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
|
785 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
|
786 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
787 double alpha = str.toDouble (); |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
788 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
|
789 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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
792 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
|
793 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
|
794 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
795 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
|
796 { |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
797 // Reconstruct the previous series of triangles |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
798 QList<QPolygonF> polygons |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
799 = current_polygon.reconstruct (reconstruct_level); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
800 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
|
801 (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
|
802 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
803 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
|
804 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
|
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 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
|
807 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
808 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
809 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
|
810 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
|
811 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
|
812 } |
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 else |
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 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
|
817 { |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
818 QList<QPolygonF> polygons = current_polygon.reconstruct (reconstruct_level); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
819 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
|
820 (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
|
821 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
|
822 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
|
823 } |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
824 reconstruct_polygons (elt, reconstruct_level); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
825 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
826 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
827 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
828 // Finish |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
829 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> > |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
830 (replaced_nodes, |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
831 current_polygon.reconstruct (reconstruct_level))); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
832 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
833 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
|
834 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
|
835 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
836 |
31228
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
837 void add_custom_properties (QDomElement& parent_elt) |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
838 { |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
839 QDomNodeList nodes = parent_elt.childNodes (); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
840 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
841 for (int ii = 0; ii < nodes.count (); ii++) |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
842 { |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
843 QDomNode node = nodes.at (ii); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
844 if (! node.isElement ()) |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
845 continue; |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
846 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
847 QDomElement elt = node.toElement (); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
848 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
849 if (elt.tagName () == "image") |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
850 elt.setAttribute ("image-rendering", "optimizeSpeed"); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
851 else |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
852 add_custom_properties (elt); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
853 } |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
854 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
855 } |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
856 |
29540
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
857 #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
|
858 extern "C" |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
859 int |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
860 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
|
861 { |
29540
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
862 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
|
863 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
|
864 |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
865 // 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
|
866 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
|
867 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
|
868 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
|
869 |
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
|
870 // 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
|
871 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
|
872 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
|
873 argv[argc] = nullptr; |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
874 |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
875 #else |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
876 int |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
877 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
|
878 { |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
879 #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
|
880 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
|
881 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
|
882 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
|
883 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
|
884 * 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
|
885 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
|
886 * 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
|
887 * 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
|
888 * font: specify a file name for the default FreeSans font\n\ |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
889 * reconstruct: specify whether to reconstruct triangle to polygons\n\ |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
890 0: no reconstruction (merging) of polygons\n\ |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
891 1: merge consecutive triangles if they share an edge\n\ |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
892 2: merge all triangles that share edges (might take a long time)\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
|
893 * outfile: output file name\n"; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
894 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
895 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
|
896 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
897 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
|
898 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
|
899 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
900 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
|
901 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
902 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
|
903 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
|
904 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
905 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
906 // 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
|
907 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
|
908 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
|
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 // 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
|
911 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
|
912 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
|
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 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
|
915 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
|
916 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
|
917 } |
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 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
920 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
921 // 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
|
922 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
|
923 { |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
924 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
|
925 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
|
926 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
|
927 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
928 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
929 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
930 // 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
|
931 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
|
932 QString msg; |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
933 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
|
934 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
935 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
|
936 << 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
|
937 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
|
938 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
|
939 } |
26993
119353eb6b38
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26647
diff
changeset
|
940 |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
941 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
|
942 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
943 // Format |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
944 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
|
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 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
|
947 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
|
948 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
|
949 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
950 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
951 // 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
|
952 // 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
|
953 // 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
|
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 // 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
|
956 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
|
957 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
|
958 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
|
959 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
|
960 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
|
961 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
962 // 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
|
963 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
|
964 |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
965 // 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
|
966 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
|
967 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
968 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
|
969 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
|
970 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
971 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
|
972 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
|
973 { |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
974 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
|
975 if (id < 0) |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
976 std::cerr << "warning: print: " |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
977 "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
|
978 } |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
979 else |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
980 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
|
981 } |
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 // 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
|
985 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
|
986 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
|
987 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
988 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
|
989 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
|
990 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
991 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
992 // Do basic polygons reconstruction |
31798
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
993 int reconstruct_level = QString (argv[5]).toInt (); |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
994 if (reconstruct_level) |
82128f652585
print: Add option to merge only subsequent triangles with SVG toolchain (bug #63646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
31706
diff
changeset
|
995 reconstruct_polygons (root, reconstruct_level); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
996 |
31228
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
997 // Add custom properties to SVG |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
998 add_custom_properties (root); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
999 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1000 // Draw |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1001 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
|
1002 { |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1003 // PDF painter |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1004 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
|
1005 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1006 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
|
1007 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1008 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1009 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1010 // 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
|
1011 QTextStream out (&fout); |
32008
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1012 #if HAVE_QTEXTSTREAM_SETENCODING |
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1013 out.setEncoding (QStringConverter::Utf8); |
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1014 #else |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1015 out.setCodec ("UTF-8"); |
32008
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1016 #endif |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1017 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
|
1018 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1019 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1020 // 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
|
1021 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
|
1022 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
|
1023 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1024 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
|
1025 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
|
1026 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1027 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1028 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
|
1029 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1030 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
|
1031 } |