Mercurial > octave
annotate src/octave-svgconvert.cc @ 33552:129d335e4b78 bytecode-interpreter tip
maint: Merge default to bytecode-interpreter
author | Arun Giridhar <arungiridhar@gmail.com> |
---|---|
date | Wed, 08 May 2024 15:17:17 -0400 |
parents | 2e484f9f1f18 |
children |
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 // |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
32591
diff
changeset
|
3 // Copyright (C) 2017-2024 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) |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
86 QVector<double> |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
87 qstr2vectorf (QString str) |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
88 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
89 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
|
90 QStringList coords = str.split (","); |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
91 for (auto& p : coords) |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
92 pts.append (p.toDouble ()); |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
93 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
94 return pts; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
95 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
96 |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
97 // 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
|
98 // Can one be called from the other to avoid code duplication, or deleted? |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
99 QVector<double> |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
100 qstr2vectord (QString str) |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
101 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
102 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
|
103 QStringList coords = str.split (","); |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
104 for (auto& p : coords) |
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
105 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
|
106 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
107 return pts; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
108 } |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
109 |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
110 QVector<QPointF> |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
111 qstr2ptsvector (QString str) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
112 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
113 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
|
114 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
|
115 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
|
116 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
|
117 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
|
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 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
|
120 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
|
121 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
122 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
|
123 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
124 |
31803
e25bf4beb488
Replace various iterators with range-based loops (bug #63738)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31799
diff
changeset
|
125 // 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
|
126 // Can one be called from the other to avoid code duplication, or deleted? |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
127 QVector<QPoint> |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
128 qstr2ptsvectord (QString str) |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
129 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
130 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
|
131 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
|
132 str.replace (" ", ","); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
133 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
|
134 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
|
135 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
136 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
|
137 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
|
138 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
139 return pts; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
140 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
141 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
142 // Extract field arguments in a style-like string, e.g. "bla field(1,34,56) bla" |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
143 QString |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
144 get_field (QString str, QString field) |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
145 { |
32000
20bf7bf8c95d
Replace remaining deprecated QRegExp by QRegularExpression.
Markus Mützel <markus.muetzel@gmx.de>
parents:
31883
diff
changeset
|
146 QRegularExpression rx (field + "\\(([^\\)]*)\\)"); |
20bf7bf8c95d
Replace remaining deprecated QRegExp by QRegularExpression.
Markus Mützel <markus.muetzel@gmx.de>
parents:
31883
diff
changeset
|
147 QRegularExpressionMatch match = rx.match (str); |
32085
cf03230c0363
octave-svgconvert: Fix parsing of fields.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32008
diff
changeset
|
148 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
|
149 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
150 return retval; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
151 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
152 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
153 // 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
|
154 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
|
155 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
156 public: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
157 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
158 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
|
159 { 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
|
160 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31803
diff
changeset
|
161 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
|
162 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31744
diff
changeset
|
163 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
|
164 { 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
|
165 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31744
diff
changeset
|
166 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
|
167 { 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
|
168 |
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
|
169 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
|
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 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
|
172 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
|
173 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
|
174 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
|
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 // 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
|
177 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
|
178 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
179 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
|
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 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
|
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 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
|
184 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
|
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[ii]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
187 { |
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 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
|
189 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
|
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 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
|
192 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
193 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
|
194 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
|
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 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
|
197 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
|
198 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
|
199 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
|
200 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
201 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
202 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
203 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
204 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
205 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
206 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
207 // 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
|
208 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
|
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 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
|
211 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
|
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 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
|
214 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
215 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
|
216 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
|
217 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
218 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
|
219 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
|
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 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
|
222 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
|
223 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
224 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
|
225 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
226 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
227 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
|
228 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
|
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 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
|
231 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
|
232 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
233 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
|
234 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
235 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
236 // 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
|
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 // 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
|
239 // 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
|
240 // 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
|
241 // 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
|
242 // 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
|
243 // else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
244 // resetloop--; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
245 // endif |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
246 // endwhile |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
247 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
248 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
|
249 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
|
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 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
|
252 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
|
253 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
|
254 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
255 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
256 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
|
257 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
258 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
259 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
|
260 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
|
261 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
262 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
|
263 <= 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
|
264 && (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
|
265 <= 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
|
266 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
267 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
268 static |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
269 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
|
270 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
271 // 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
|
272 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
|
273 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
|
274 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
275 for (int 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
|
276 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
277 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
|
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 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
|
280 && 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
|
281 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
|
282 && 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
|
283 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
284 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
|
285 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
286 // 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
|
287 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
|
288 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
|
289 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
290 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
|
291 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
|
292 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
|
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 // 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
|
295 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
|
296 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
|
297 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
|
298 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
299 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
|
300 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
|
301 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
|
302 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
303 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
|
304 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
|
305 |
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 = 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
|
307 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
|
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 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
|
310 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
|
311 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
|
312 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
|
313 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
314 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
|
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 } |
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 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
|
319 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
320 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
321 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
|
322 { |
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 (m_polygons.count () == 0) |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
324 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
|
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 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
327 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
|
328 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
|
329 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
|
330 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
331 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
|
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 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
334 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
335 private: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
336 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
|
337 }; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
338 |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
339 void |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
340 draw (QDomElement& parent_elt, pdfpainter& painter) |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
341 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
342 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
|
343 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
344 static QString clippath_id; |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
345 static QMap< QString, QVector<QPoint>> clippath; |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
346 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
347 // 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
|
348 // 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
|
349 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
|
350 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
|
351 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
352 // 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
|
353 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
|
354 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
|
355 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
356 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
|
357 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
358 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
|
359 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
|
360 continue; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
361 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
362 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
|
363 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
364 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
|
365 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
366 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
|
367 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
|
368 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
|
369 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
370 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
|
371 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
372 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
|
373 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
|
374 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
375 // Font |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
376 font = QFont (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
377 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
|
378 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
379 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
|
380 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
|
381 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
|
382 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
383 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
|
384 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
|
385 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
|
386 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
387 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
|
388 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
|
389 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
|
390 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
391 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
|
392 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
393 // 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
|
394 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
395 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
|
396 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
|
397 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
398 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
|
399 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
|
400 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
|
401 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
402 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
|
403 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
|
404 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
405 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
|
406 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
|
407 dy+rot[2].toDouble ()); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
408 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
|
409 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
|
410 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
|
411 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
412 else |
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 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
|
415 dx = 0; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
416 dy = 0; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
417 } |
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 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
420 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
|
421 painter.restore (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
422 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
423 else |
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 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
|
426 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
|
427 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
428 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
|
429 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
|
430 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
431 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
|
432 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
|
433 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
434 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
|
435 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
|
436 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
437 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
438 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
439 // Fill color |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
440 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
|
441 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
|
442 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
443 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
|
444 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
|
445 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
|
446 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
|
447 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
448 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
449 // Transform |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
450 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
|
451 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
452 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
|
453 { |
32006
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
454 #if HAVE_QSTRINGVIEW |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
455 QStringView tf {str}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
456 #else |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
457 QStringRef tf {&str}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
458 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
459 QTransform tform = |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
460 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
|
461 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
|
462 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
463 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
464 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
|
465 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
466 // 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
|
467 painter.restore (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
468 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
|
469 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
|
470 } |
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 () == "defs") |
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 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
|
475 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
|
476 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
|
477 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
478 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
|
479 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
480 // 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
|
481 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
|
482 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
|
483 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
484 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
|
485 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
486 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
|
487 { |
32006
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
488 #if HAVE_QSTRINGVIEW |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
489 QStringView data {d}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
490 #else |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
491 QStringRef data {&d}; |
5724d89e9244
Use QStreamView if available.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32000
diff
changeset
|
492 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
493 QPainterPath path; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
494 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
|
495 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
|
496 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
|
497 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
|
498 << 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
|
499 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
|
500 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
|
501 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
502 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
|
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 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
|
506 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
|
507 << 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
|
508 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
509 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
510 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
511 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
|
512 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
513 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
|
514 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
515 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
|
516 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
|
517 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
518 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
|
519 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
|
520 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
521 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
|
522 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
|
523 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
|
524 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
|
525 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
|
526 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
|
527 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
|
528 } |
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 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
531 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
|
532 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
533 // Font |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
534 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
|
535 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
536 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
|
537 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
|
538 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
|
539 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
540 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
|
541 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
|
542 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
543 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
|
544 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
|
545 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
546 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
|
547 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
548 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
549 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
|
550 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
|
551 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
552 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
|
553 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
|
554 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
555 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
|
556 } |
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 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
|
559 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
|
560 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
|
561 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
562 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
|
563 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
564 // 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
|
565 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
|
566 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
|
567 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
568 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
|
569 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
|
570 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
|
571 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
572 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
573 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
|
574 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
|
575 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
|
576 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
|
577 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
578 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
|
579 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
|
580 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
|
581 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
|
582 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
583 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
584 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
|
585 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
|
586 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
587 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
|
588 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
589 // Color |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
590 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
|
591 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
|
592 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
|
593 && 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
|
594 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
|
595 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
596 QPen pen; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
597 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
|
598 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
599 // Line properties |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
600 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
|
601 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
|
602 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
603 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
|
604 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
|
605 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
|
606 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
607 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
608 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
|
609 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 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
|
619 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
|
620 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
|
621 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
622 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
|
623 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
|
624 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
|
625 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
626 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
|
627 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
|
628 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
629 // 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
|
630 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
|
631 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
|
632 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
633 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
|
634 } |
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 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
637 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
|
638 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
|
639 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
640 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
|
641 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
642 // 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
|
643 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
|
644 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
|
645 QByteArray data |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
646 = 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
|
647 QImage img; |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
648 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
|
649 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
650 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
|
651 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
|
652 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
|
653 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
|
654 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
655 // Translate |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
656 painter.save (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
657 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
|
658 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
|
659 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
660 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
|
661 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
|
662 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
|
663 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
|
664 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
665 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
666 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
|
667 #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
|
668 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
|
669 #endif |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
670 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
|
671 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
|
672 painter.restore (); |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
673 } |
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 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
|
676 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
677 // Position |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
678 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
|
679 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
|
680 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
681 // Size |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
682 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
|
683 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
|
684 |
31191
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
685 // Color |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
686 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
|
687 |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
688 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
|
689 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
|
690 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
|
691 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
692 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
|
693 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
694 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
|
695 |
bb9d776eafac
Fix wrong color in PDF printout of some latex strings (bug #62884)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
30564
diff
changeset
|
696 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
|
697 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
|
698 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
699 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
|
700 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
701 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
|
702 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
|
703 else |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
704 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
705 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
|
706 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
|
707 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
708 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
|
709 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
710 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
|
711 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
|
712 && 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
|
713 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
|
714 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
715 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
|
716 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
717 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
|
718 { |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
719 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
|
720 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
|
721 |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
722 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
|
723 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
|
724 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
|
725 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
726 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
727 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
728 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
729 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
730 } |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
731 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
732 // 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
|
733 // 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
|
734 |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
735 void |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
736 replace_polygons (QDomElement& parent_elt, QList<QDomNode> orig, |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
737 QList<QPolygonF> 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
|
738 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
739 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
|
740 return; |
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 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
|
743 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
|
744 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
745 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
|
746 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
747 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
|
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 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
|
750 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
751 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
|
752 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
753 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
|
754 .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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
757 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
|
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 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
|
760 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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
763 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
|
764 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
|
765 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
766 |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
767 void |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
768 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
|
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 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
|
771 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
|
772 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
|
773 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
|
774 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
775 // Collection of child nodes to be removed and polygons to be added |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
776 QList< QPair<QList<QDomNode>, QList<QPolygonF>>> collection; |
26027
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 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
|
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 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
|
781 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
|
782 continue; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
783 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
784 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
|
785 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
786 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
|
787 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
788 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
|
789 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
|
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 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
|
792 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
|
793 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
|
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 double alpha = str.toDouble (); |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
796 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
|
797 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
|
798 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
799 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
800 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
|
801 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
|
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 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
|
804 { |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29358
diff
changeset
|
805 // 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
|
806 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
|
807 = current_polygon.reconstruct (reconstruct_level); |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
808 collection.push_back (QPair<QList<QDomNode>, QList<QPolygonF>> |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
809 (replaced_nodes, polygons)); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
810 |
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.clear (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
812 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
|
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 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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
817 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
|
818 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
|
819 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
|
820 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
821 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
822 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
823 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
824 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
|
825 { |
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
|
826 QList<QPolygonF> polygons = current_polygon.reconstruct (reconstruct_level); |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
827 collection.push_back (QPair<QList<QDomNode>, QList<QPolygonF>> |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
828 (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
|
829 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
|
830 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
|
831 } |
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
|
832 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
|
833 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
834 } |
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 // Finish |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
837 collection.push_back (QPair<QList<QDomNode>, QList<QPolygonF>> |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
838 (replaced_nodes, |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
839 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
|
840 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
841 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
|
842 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
|
843 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
844 |
32591
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
845 void |
a9dbbe06ca59
maint: C++ style check for src/ before 9.1 release.
Rik <rik@octave.org>
parents:
32085
diff
changeset
|
846 add_custom_properties (QDomElement& parent_elt) |
31228
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
847 { |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
848 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
|
849 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
850 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
|
851 { |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
852 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
|
853 if (! node.isElement ()) |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
854 continue; |
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 QDomElement elt = node.toElement (); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
857 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
858 if (elt.tagName () == "image") |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
859 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
|
860 else |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
861 add_custom_properties (elt); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
862 } |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
863 |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
864 } |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
865 |
29540
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
866 #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
|
867 extern "C" |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
868 int |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
869 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
|
870 { |
29540
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
871 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
|
872 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
|
873 |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
874 // 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
|
875 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
|
876 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
|
877 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
|
878 |
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
|
879 // 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
|
880 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
|
881 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
|
882 argv[argc] = nullptr; |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
883 |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
884 #else |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
885 int |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
886 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
|
887 { |
b6f80b1d448f
Windows: Support non-ASCII characters in command line arguments.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29519
diff
changeset
|
888 #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
|
889 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
|
890 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
|
891 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
|
892 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
|
893 * 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
|
894 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
|
895 * 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
|
896 * 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
|
897 * 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
|
898 * 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
|
899 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
|
900 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
|
901 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
|
902 * outfile: output file name\n"; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
903 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
904 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
|
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 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
|
907 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
|
908 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
909 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
|
910 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
911 std::cerr << help; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
912 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
913 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
914 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
915 // 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
|
916 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
|
917 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
|
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 // 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
|
920 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
|
921 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
|
922 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
923 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
|
924 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
|
925 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
|
926 } |
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 else |
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 // 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
|
931 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
|
932 { |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
933 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
|
934 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
|
935 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
|
936 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
937 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
938 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
939 // 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
|
940 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
|
941 QString msg; |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
942 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
|
943 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
944 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
|
945 << 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
|
946 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
|
947 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
|
948 } |
26993
119353eb6b38
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26647
diff
changeset
|
949 |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
950 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
|
951 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
952 // Format |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
953 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
|
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 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
|
956 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
|
957 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
|
958 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
959 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
960 // 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
|
961 // 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
|
962 // 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
|
963 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
964 // 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
|
965 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
|
966 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
|
967 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
|
968 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
|
969 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
|
970 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
971 // 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
|
972 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
|
973 |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
974 // 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
|
975 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
|
976 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
977 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
|
978 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
|
979 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
980 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
|
981 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
|
982 { |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
983 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
|
984 if (id < 0) |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
985 std::cerr << "warning: print: " |
27934
49a0d90cd2a3
maint: Use Octave coding conventions in src/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
986 "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
|
987 } |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
988 else |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
989 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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
993 // 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
|
994 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
|
995 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
|
996 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
997 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
|
998 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
|
999 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1000 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1001 // 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
|
1002 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
|
1003 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
|
1004 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
|
1005 |
31228
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
1006 // 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
|
1007 add_custom_properties (root); |
4c1be4d6d0d1
Hint SVG renderers to not interpolate images (bug #62998)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
31212
diff
changeset
|
1008 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1009 // Draw |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1010 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
|
1011 { |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1012 // PDF painter |
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1013 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
|
1014 |
29519
78f42413e20f
octave-svgconvert: Don't use Qt's SVG module (bug #59546)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29482
diff
changeset
|
1015 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
|
1016 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1017 else |
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 // 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
|
1020 QTextStream out (&fout); |
32008
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1021 #if HAVE_QTEXTSTREAM_SETENCODING |
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1022 out.setEncoding (QStringConverter::Utf8); |
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1023 #else |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1024 out.setCodec ("UTF-8"); |
32008
4d15e1304a48
build: Check for Qt function QTextStream::setEncoding.
Markus Mützel <markus.muetzel@gmx.de>
parents:
32006
diff
changeset
|
1025 #endif |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1026 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
|
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 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1029 // 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
|
1030 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
|
1031 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
|
1032 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1033 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
|
1034 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
|
1035 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1036 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1037 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
|
1038 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
1039 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
|
1040 } |