Mercurial > octave
annotate libinterp/corefcn/gl2ps-print.cc @ 28752:810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
* error.cc, gl2ps-print.cc, strfns.cc, sysdep.cc, audiodevinfo.cc,
ov-java.cc, pt-eval.cc, file-stat.cc, cmd-edit.cc:
Use C++ raw string literals to simplify backlsashing.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 17 Sep 2020 10:24:55 -0700 |
parents | 8d2f9cfc16bc |
children | 43ad651cf5a0 |
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 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2009-2020 The Octave Project Developers |
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 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
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 |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
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 |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
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 //////////////////////////////////////////////////////////////////////// |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21539
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21230
diff
changeset
|
27 # include "config.h" |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
28 #endif |
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
29 |
21539
212bafe8413a
gl2ps-print.cc: Fix compiling whet --without-opengl used.
Rik <rik@octave.org>
parents:
21527
diff
changeset
|
30 // Both header files are required outside of HAVE_GLP2S_H |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
31 #include "errwarn.h" |
21539
212bafe8413a
gl2ps-print.cc: Fix compiling whet --without-opengl used.
Rik <rik@octave.org>
parents:
21527
diff
changeset
|
32 #include "gl2ps-print.h" |
19648
16f21db320b5
Fix compilation error when building without gl2ps
Mike Miller <mtmiller@ieee.org>
parents:
19639
diff
changeset
|
33 |
22750
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
34 #if defined (HAVE_GL2PS_H) && defined (HAVE_OPENGL) |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
35 |
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
36 #include <cstdio> |
21852
25493c55d976
don't include unistd.h unless it is needed
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
37 |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
38 #include <limits> |
21852
25493c55d976
don't include unistd.h unless it is needed
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
39 |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
40 #include <gl2ps.h> |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
41 |
28337
8d2f9cfc16bc
Use relative filename in .tex file when printing using -dXXXlatex devices (bug #58374).
Rik <rik@octave.org>
parents:
28293
diff
changeset
|
42 #include "file-ops.h" |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
43 #include "lo-mappers.h" |
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
44 #include "oct-locbuf.h" |
21991
80659e58609f
provide wrapper for tmpfile (bug #48337)
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
45 #include "tmpfile-wrapper.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21852
diff
changeset
|
46 #include "unistd-wrappers.h" |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
47 #include "unistr-wrappers.h" |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
48 #include "unwind-prot.h" |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
49 |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
50 #include "gl-render.h" |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
51 #include "interpreter-private.h" |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
52 #include "oct-opengl.h" |
21527
ab8760b1245d
Raise an error if writes to pipe fail (bug #47381).
Rik <rik@octave.org>
parents:
21391
diff
changeset
|
53 #include "sighandlers.h" |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
54 #include "sysdep.h" |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21207
diff
changeset
|
55 #include "text-renderer.h" |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
56 |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
57 namespace octave |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
58 { |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
59 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
60 safe_pclose (FILE *f) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
61 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
62 if (f) |
25649
85c3e315bd43
move libinterp/corefcn/sysdep functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25517
diff
changeset
|
63 octave::pclose (f); |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
64 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
65 |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
66 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
67 safe_fclose (FILE *f) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
68 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
69 if (f) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
70 std::fclose (f); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
71 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
72 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
73 class |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
74 OCTINTERP_API |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
75 gl2ps_renderer : public opengl_renderer |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
76 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
77 public: |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
78 |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
79 gl2ps_renderer (opengl_functions& glfcns, FILE *_fp, |
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
80 const std::string& _term) |
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
81 : opengl_renderer (glfcns), fp (_fp), term (_term), |
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
82 fontsize (), fontname (), buffer_overflow (false) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22396
diff
changeset
|
83 { } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
84 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22862
diff
changeset
|
85 ~gl2ps_renderer (void) = default; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
86 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
87 // FIXME: should we import the functions from the base class and |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
88 // overload them here, or should we use a different name so we don't |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
89 // have to do this? Without the using declaration or a name change, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
90 // the base class functions will be hidden. That may be OK, but it |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
91 // can also cause some confusion. |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
92 using opengl_renderer::draw; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
93 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
94 void draw (const graphics_object& go, const std::string& print_cmd); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
95 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
96 protected: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
97 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
98 Matrix render_text (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
99 double x, double y, double z, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
100 int halign, int valign, double rotation = 0.0); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
101 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
102 void set_font (const base_properties& props); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
103 |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
104 static bool has_alpha (const graphics_handle& h) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
105 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
106 bool retval = false; |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
107 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
108 gh_manager& gh_mgr = __get_gh_manager__ ("gl2ps_renderer::has_alpha"); |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
109 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
110 graphics_object go = gh_mgr.get_object (h); |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
111 |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
112 if (! go.valid_object ()) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
113 return retval; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
114 |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
115 if (go.isa ("axes") || go.isa ("hggroup")) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
116 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
117 Matrix children = go.get ("children").matrix_value (); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
118 for (octave_idx_type ii = 0; ii < children.numel (); ii++) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
119 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
120 retval = has_alpha (graphics_handle (children(ii))); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
121 if (retval) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
122 break; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
123 } |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
124 } |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
125 else if (go.isa ("patch") || go.isa ("surface")) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
126 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
127 octave_value fa = go.get ("facealpha"); |
24208
eec262017c6a
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24179
diff
changeset
|
128 if (fa.is_scalar_type () && fa.is_double_type () |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
129 && fa.double_value () < 1) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
130 retval = true; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
131 } |
28293
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
132 else if (go.isa ("scatter")) |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
133 { |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
134 octave_value fa = go.get ("markerfacealpha"); |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
135 if (fa.is_scalar_type () && fa.is_double_type () |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
136 && fa.double_value () < 1) |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
137 retval = true; |
332e644726f9
Allow printing transparent scatter objects (bug #58282)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28189
diff
changeset
|
138 } |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
139 |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
140 return retval; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
141 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
142 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
143 void draw_axes (const axes::properties& props) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
144 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
145 // Initialize a sorting tree (viewport) in gl2ps for each axes |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
146 GLint vp[4]; |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
147 m_glfcns.glGetIntegerv (GL_VIEWPORT, vp); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
148 gl2psBeginViewport (vp); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
149 |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
150 |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
151 // Don't remove hidden primitives when some of them are transparent |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
152 GLint opts; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
153 gl2psGetOptions (&opts); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
154 if (has_alpha (props.get___myhandle__ ())) |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
155 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
156 opts &= ~GL2PS_OCCLUSION_CULL; |
24208
eec262017c6a
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24179
diff
changeset
|
157 // FIXME: currently the GL2PS_BLEND (which is more an equivalent of |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
158 // GL_ALPHA_TEST than GL_BLEND) is not working on a per primitive |
27929
265b386f8b20
maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
159 // basis. We thus set it once per viewport. |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
160 gl2psEnable (GL2PS_BLEND); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
161 } |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
162 else |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
163 { |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
164 opts |= GL2PS_OCCLUSION_CULL; |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
165 gl2psDisable (GL2PS_BLEND); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
166 } |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
167 |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
168 gl2psSetOptions (opts); |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
169 |
24208
eec262017c6a
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24179
diff
changeset
|
170 // Draw and finish () or there may be primitives missing in the gl2ps |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
171 // output. |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
172 opengl_renderer::draw_axes (props); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
173 finish (); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
174 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
175 // Finalize viewport |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
176 GLint state = gl2psEndViewport (); |
23858
cb8251337689
Fix printing of plots with axes that are not visible (bug #51713).
Rik <rik@octave.org>
parents:
23848
diff
changeset
|
177 if (state == GL2PS_NO_FEEDBACK && props.is_visible ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
178 warning ("gl2ps_renderer::draw_axes: empty feedback buffer and/or nothing else to print"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
179 else if (state == GL2PS_ERROR) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
180 error ("gl2ps_renderer::draw_axes: gl2psEndPage returned GL2PS_ERROR"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
181 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
182 buffer_overflow |= (state == GL2PS_OVERFLOW); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
183 |
24208
eec262017c6a
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24179
diff
changeset
|
184 // Don't draw background for subsequent viewports (legends, subplots, |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
185 // etc.) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
186 gl2psGetOptions (&opts); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
187 opts &= ~GL2PS_DRAW_BACKGROUND; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
188 gl2psSetOptions (opts); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
189 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
190 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
191 void draw_text (const text::properties& props); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
192 |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
193 void draw_image (const image::properties& props); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
194 void draw_pixels (int w, int h, const float *data); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
195 void draw_pixels (int w, int h, const uint8_t *data); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
196 void draw_pixels (int w, int h, const uint16_t *data); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
197 |
24689
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
198 void init_marker (const std::string& m, double size, float width) |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
199 { |
28189
5624fd0c5efb
Fix inconsistent marker size between screen and printout (bug #57552)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27992
diff
changeset
|
200 opengl_renderer::init_marker (m, size, width); |
27992
46fe22bf1458
Fix size of markers in printouts to match screen (bug #57552).
Rik <rik@octave.org>
parents:
27957
diff
changeset
|
201 |
46fe22bf1458
Fix size of markers in printouts to match screen (bug #57552).
Rik <rik@octave.org>
parents:
27957
diff
changeset
|
202 // FIXME: gl2ps can't handle closed contours so we set linecap/linejoin |
24689
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
203 // round to obtain a better looking result for some markers. |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
204 if (m == "o" || m == "v" || m == "^" || m == ">" || m == "<" || m == "h" |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
205 || m == "hexagram" || m == "p" || m == "pentagram") |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
206 { |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
207 set_linejoin ("round"); |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
208 set_linecap ("round"); |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
209 } |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
210 else |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
211 { |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
212 set_linejoin ("miter"); |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
213 set_linecap ("square"); |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
214 } |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
215 } |
800876b7132c
Make some markers linejoin/linecap round for better looking printout (bug #53023)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24686
diff
changeset
|
216 |
22396
52c205a0ad88
Make linestyles compatible at larger linewidths (bug #48884).
Rik <rik@octave.org>
parents:
22392
diff
changeset
|
217 void set_linestyle (const std::string& s, bool use_stipple = false, |
52c205a0ad88
Make linestyles compatible at larger linewidths (bug #48884).
Rik <rik@octave.org>
parents:
22392
diff
changeset
|
218 double linewidth = 0.5) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
219 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
220 opengl_renderer::set_linestyle (s, use_stipple, linewidth); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
221 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
222 if (s == "-" && ! use_stipple) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
223 gl2psDisable (GL2PS_LINE_STIPPLE); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
224 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
225 gl2psEnable (GL2PS_LINE_STIPPLE); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
226 } |
21333
c4690d9ff566
avoid warnings about overloading virtual functions from a base class
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
227 |
22838
1444a65085ca
Make axes corners join in printout (bug #39643)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22759
diff
changeset
|
228 void set_linecap (const std::string& s) |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
229 { |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
230 opengl_renderer::set_linejoin (s); |
22910
23847979b91e
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
231 |
22838
1444a65085ca
Make axes corners join in printout (bug #39643)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22759
diff
changeset
|
232 #if defined (HAVE_GL2PSLINEJOIN) |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
233 if (s == "butt") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
234 gl2psLineCap (GL2PS_LINE_CAP_BUTT); |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
235 else if (s == "square") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
236 gl2psLineCap (GL2PS_LINE_CAP_SQUARE); |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
237 else if (s == "round") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
238 gl2psLineCap (GL2PS_LINE_CAP_ROUND); |
22838
1444a65085ca
Make axes corners join in printout (bug #39643)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22759
diff
changeset
|
239 #endif |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
240 } |
22838
1444a65085ca
Make axes corners join in printout (bug #39643)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22759
diff
changeset
|
241 |
22759
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
242 void set_linejoin (const std::string& s) |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
243 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
244 opengl_renderer::set_linejoin (s); |
22910
23847979b91e
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
245 |
22759
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
246 #if defined (HAVE_GL2PSLINEJOIN) |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
247 if (s == "round") |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
248 gl2psLineJoin (GL2PS_LINE_JOIN_ROUND); |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
249 else if (s == "miter") |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
250 gl2psLineJoin (GL2PS_LINE_JOIN_MITER); |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
251 else if (s == "chamfer") |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
252 gl2psLineJoin (GL2PS_LINE_JOIN_BEVEL); |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
253 #endif |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
254 } |
39f39eb4e476
Implement "linejoin" property (bug #48387)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22755
diff
changeset
|
255 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
256 void set_polygon_offset (bool on, float offset = 0.0f) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
257 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
258 if (on) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
259 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
260 opengl_renderer::set_polygon_offset (on, offset); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
261 gl2psEnable (GL2PS_POLYGON_OFFSET_FILL); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
262 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
263 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
264 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
265 gl2psDisable (GL2PS_POLYGON_OFFSET_FILL); |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
266 opengl_renderer::set_polygon_offset (on, offset); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
267 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
268 } |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
269 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
270 void set_linewidth (float w) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
271 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
272 gl2psLineWidth (w); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
273 } |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
274 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
275 private: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
276 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
277 // Use xform to compute the coordinates of the string list |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
278 // that have been parsed by freetype. |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
279 void fix_strlist_position (double x, double y, double z, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
280 Matrix box, double rotation, |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
281 std::list<text_renderer::string>& lst); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
282 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
283 // Build an svg text element from a list of parsed strings. |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
284 std::string strlist_to_svg (double x, double y, double z, Matrix box, |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
285 double rotation, |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
286 std::list<text_renderer::string>& lst); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
287 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
288 // Build a list of postscript commands from a list of parsed strings. |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
289 std::string strlist_to_ps (double x, double y, double z, Matrix box, |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
290 double rotation, |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
291 std::list<text_renderer::string>& lst); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
292 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
293 int alignment_to_mode (int ha, int va) const; |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
294 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
295 FILE *fp; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
296 caseless_str term; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
297 double fontsize; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
298 std::string fontname; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
299 bool buffer_overflow; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
300 }; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
301 |
23859
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
302 static bool |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
303 has_2D_axes (const graphics_handle& h) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
304 { |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
305 bool retval = true; |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
306 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
307 gh_manager& gh_mgr = __get_gh_manager__ ("gl2ps_renderer::has_2D_axes"); |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
308 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
309 graphics_object go = gh_mgr.get_object (h); |
23863
56b7352fa456
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23859
diff
changeset
|
310 |
23859
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
311 if (! go.valid_object ()) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
312 return retval; |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
313 |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
314 if (go.isa ("figure") || go.isa ("uipanel")) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
315 { |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
316 Matrix children = go.get ("children").matrix_value (); |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
317 for (octave_idx_type ii = 0; ii < children.numel (); ii++) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
318 { |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
319 retval = has_2D_axes (graphics_handle (children(ii))); |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
320 if (! retval) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
321 break; |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
322 } |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
323 } |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
324 else if (go.isa ("axes")) |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
325 { |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
326 axes::properties& ap |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
327 = reinterpret_cast<axes::properties&> (go.get_properties ()); |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
328 retval = ap.get_is2D (true); |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
329 } |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
330 |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
331 return retval; |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
332 } |
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
333 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
334 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
335 gl2ps_renderer::draw (const graphics_object& go, const std::string& print_cmd) |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
336 { |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
337 static bool in_draw = false; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
338 static std::string old_print_cmd; |
22753
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
339 static GLint buffsize; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
340 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
341 if (! in_draw) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
342 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
343 unwind_protect frame; |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
344 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
345 frame.protect_var (in_draw); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
346 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
347 in_draw = true; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
348 |
22336
47629df12b79
Fix crash when choosing an inappropriate terminal in drawnow (bug #48782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22331
diff
changeset
|
349 GLint gl2ps_term = GL2PS_PS; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
350 if (term.find ("eps") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
351 gl2ps_term = GL2PS_EPS; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
352 else if (term.find ("pdf") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
353 gl2ps_term = GL2PS_PDF; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
354 else if (term.find ("ps") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
355 gl2ps_term = GL2PS_PS; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
356 else if (term.find ("svg") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
357 gl2ps_term = GL2PS_SVG; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
358 else if (term.find ("pgf") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
359 gl2ps_term = GL2PS_PGF; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
360 else if (term.find ("tex") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
361 gl2ps_term = GL2PS_TEX; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
362 else |
22336
47629df12b79
Fix crash when choosing an inappropriate terminal in drawnow (bug #48782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22331
diff
changeset
|
363 warning ("gl2ps_renderer::draw: Unknown terminal %s, using 'ps'", |
47629df12b79
Fix crash when choosing an inappropriate terminal in drawnow (bug #48782)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
22331
diff
changeset
|
364 term.c_str ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
365 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
366 GLint gl2ps_text = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
367 if (term.find ("notxt") != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
368 gl2ps_text = GL2PS_NO_TEXT; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
369 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
370 // Default sort order optimizes for 3D plots |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
371 GLint gl2ps_sort = GL2PS_BSP_SORT; |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
372 |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
27155
diff
changeset
|
373 // FIXME: gl2ps does not provide a way to change the sorting algorithm |
23546
06805aabbdd1
Draw 2D axes primitives in the children stack order (bug #50750)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23457
diff
changeset
|
374 // on a viewport basis, we thus disable sorting only if all axes are 2D |
23859
7148b237f94f
Fix regression introduced by cset 06805aabbdd1 (bug #50750).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23858
diff
changeset
|
375 if (has_2D_axes (go.get ("__myhandle__"))) |
23546
06805aabbdd1
Draw 2D axes primitives in the children stack order (bug #50750)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23457
diff
changeset
|
376 gl2ps_sort = GL2PS_NO_SORT; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
377 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
378 // Use a temporary file in case an overflow happens |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23305
diff
changeset
|
379 FILE *tmpf = octave_tmpfile_wrapper (); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
380 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
381 if (! tmpf) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
382 error ("gl2ps_renderer::draw: couldn't open temporary file for printing"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
383 |
23740
38188d1aaf3f
ensure that temporary file used by gl2ps is closed (bug #50696)
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
384 frame.add_fcn (safe_fclose, tmpf); |
38188d1aaf3f
ensure that temporary file used by gl2ps is closed (bug #50696)
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
385 |
22753
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
386 // Reset buffsize, unless this is 2nd pass of a texstandalone print. |
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
387 if (term.find ("tex") == std::string::npos) |
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
388 buffsize = 2*1024*1024; |
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
389 else |
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
390 buffsize /= 2; |
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
391 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
392 buffer_overflow = true; |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
393 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
394 while (buffer_overflow) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
395 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
396 buffer_overflow = false; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
397 buffsize *= 2; |
22753
50fa2d656326
Size gl2ps print buffer just once when printing tex formats (bug #49492).
Rik <rik@octave.org>
parents:
22750
diff
changeset
|
398 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
399 std::fseek (tmpf, 0, SEEK_SET); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
400 octave_ftruncate_wrapper (fileno (tmpf), 0); |
21391
13b6be3cb217
Correctly print figure background when multiple axes present (bug #47315).
Rik <rik@octave.org>
parents:
21353
diff
changeset
|
401 |
22704
b5407b1ab11a
Provide extra info message when gl2ps buffer overflows (bug #49482).
Rik <rik@octave.org>
parents:
22622
diff
changeset
|
402 // For LaTeX output the print process uses 2 drawnow() commands. |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
403 // The first one is for the pdf/ps/eps graph to be included. The |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
404 // print_cmd is saved as old_print_cmd. Then the second drawnow() |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
405 // outputs the tex-file and the graphic filename to be included is |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
406 // extracted from old_print_cmd. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
407 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
408 std::string include_graph; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
409 |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23803
diff
changeset
|
410 size_t found_redirect = old_print_cmd.find ('>'); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
411 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
412 if (found_redirect != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
413 include_graph = old_print_cmd.substr (found_redirect + 1); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
414 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
415 include_graph = old_print_cmd; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
416 |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
417 size_t n_begin = include_graph.find_first_not_of (R"( "')"); |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
418 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
419 if (n_begin != std::string::npos) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
420 { |
28337
8d2f9cfc16bc
Use relative filename in .tex file when printing using -dXXXlatex devices (bug #58374).
Rik <rik@octave.org>
parents:
28293
diff
changeset
|
421 // Strip any quote characters characters around filename |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
422 size_t n_end = include_graph.find_last_not_of (R"( "')"); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
423 include_graph = include_graph.substr (n_begin, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
424 n_end - n_begin + 1); |
28337
8d2f9cfc16bc
Use relative filename in .tex file when printing using -dXXXlatex devices (bug #58374).
Rik <rik@octave.org>
parents:
28293
diff
changeset
|
425 // Strip path from filename |
8d2f9cfc16bc
Use relative filename in .tex file when printing using -dXXXlatex devices (bug #58374).
Rik <rik@octave.org>
parents:
28293
diff
changeset
|
426 n_begin = include_graph.find_last_of (octave::sys::file_ops::dir_sep_chars ()); |
8d2f9cfc16bc
Use relative filename in .tex file when printing using -dXXXlatex devices (bug #58374).
Rik <rik@octave.org>
parents:
28293
diff
changeset
|
427 include_graph = include_graph.substr (n_begin + 1); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
428 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
429 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
430 include_graph = "foobar-inc"; |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
431 |
24686
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
432 // FIXME: workaround gl2ps drawing 2 background planes, the first |
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
433 // eventually being black and producing visual artifacts |
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
434 const figure::properties& fprop |
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
435 = dynamic_cast<const figure::properties&> (go.get_properties ()); |
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
436 Matrix c = fprop.get_color_rgb (); |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
437 m_glfcns.glClearColor (c(0), c(1), c(2), 1); |
24686
21e97b50989d
Workaround the presence two background axes in printout (bug #52975).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24638
diff
changeset
|
438 |
25889
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
439 // Allow figures to be printed at arbitrary resolution |
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
440 set_device_pixel_ratio (fprop.get___device_pixel_ratio__ ()); |
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
441 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
442 // GL2PS_SILENT was removed to allow gl2ps to print errors on stderr |
24208
eec262017c6a
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24179
diff
changeset
|
443 GLint ret = gl2psBeginPage ("gl2ps_renderer figure", "Octave", |
24179
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
444 nullptr, gl2ps_term, gl2ps_sort, |
8365e584ebd8
Add support for transparent polygons in svg output (bug #39535)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24173
diff
changeset
|
445 (GL2PS_BEST_ROOT |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
446 | gl2ps_text |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
447 | GL2PS_DRAW_BACKGROUND |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
448 | GL2PS_NO_PS3_SHADING |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
449 | GL2PS_USE_CURRENT_VIEWPORT), |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23794
diff
changeset
|
450 GL_RGBA, 0, nullptr, 0, 0, 0, |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
451 buffsize, tmpf, include_graph.c_str ()); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
452 if (ret == GL2PS_ERROR) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
453 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
454 old_print_cmd.clear (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
455 error ("gl2ps_renderer::draw: gl2psBeginPage returned GL2PS_ERROR"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
456 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
457 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
458 opengl_renderer::draw (go); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
459 |
22704
b5407b1ab11a
Provide extra info message when gl2ps buffer overflows (bug #49482).
Rik <rik@octave.org>
parents:
22622
diff
changeset
|
460 if (buffer_overflow) |
b5407b1ab11a
Provide extra info message when gl2ps buffer overflows (bug #49482).
Rik <rik@octave.org>
parents:
22622
diff
changeset
|
461 warning ("gl2ps_renderer::draw: retrying with buffer size: %.1E B\n", double (2*buffsize)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
462 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
463 if (! buffer_overflow) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
464 old_print_cmd = print_cmd; |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
465 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
466 // Don't check return value of gl2psEndPage, it is not meaningful. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
467 // Errors and warnings are checked after gl2psEndViewport in |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
468 // gl2ps_renderer::draw_axes instead. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
469 gl2psEndPage (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
470 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
471 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
472 // Copy temporary file to pipe |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
473 std::fseek (tmpf, 0, SEEK_SET); |
23305
34c75889ed50
Possibly improve performance of OpenGL printing.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
474 char str[8192]; // 8 kB is a common kernel buffersize |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
475 size_t nread, nwrite; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
476 nread = 1; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
477 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
478 // In EPS terminal read the header line by line and insert a |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
479 // new procedure |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
480 const char* fcn = "/SRX { gsave FCT moveto rotate xshow grestore } BD\n"; |
24809
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
481 bool header_found = ! (term.find ("eps") != std::string::npos |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
482 || term.find ("svg") != std::string::npos); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
483 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
484 while (! feof (tmpf) && nread) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
485 { |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
486 if (! header_found && std::fgets (str, 8192, tmpf)) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
487 nread = strlen (str); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
488 else |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
489 nread = std::fread (str, 1, 8192, tmpf); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
490 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
491 if (nread) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
492 { |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
493 if (! header_found && std::strncmp (str, "/SBCR", 5) == 0) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
494 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
495 header_found = true; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
496 nwrite = std::fwrite (fcn, 1, strlen (fcn), fp); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
497 if (nwrite != strlen (fcn)) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
498 { |
24520
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
24290
diff
changeset
|
499 // FIXME: is this the best thing to do here? |
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
24290
diff
changeset
|
500 respond_to_pending_signals (); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
501 error ("gl2ps_renderer::draw: internal pipe error"); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
502 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
503 } |
24809
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
504 else if (! header_found |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
505 && term.find ("svg") != std::string::npos) |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
506 { |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
507 // FIXME: gl2ps uses pixel units for SVG format. |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
508 // Modify resulting svg to use points instead. |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
509 // Remove this "else if" block, and |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
510 // make header_found true for SVG if gl2ps is fixed. |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
511 std::string srchstr (str); |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
512 size_t pos = srchstr.find ("px"); |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
513 if (pos != std::string::npos) |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
514 { |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
515 header_found = true; |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
516 srchstr[pos+1] = 't'; // "px" -> "pt" |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
517 // Assume the second occurrence is at the same line |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
518 pos = srchstr.find ("px", pos); |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
519 srchstr[pos+1] = 't'; // "px" -> "pt" |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
520 std::strcpy (str, srchstr.c_str ()); |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
521 } |
a802e644937a
Workaround gl2ps using pixel units for SVG output (bug #53197).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24722
diff
changeset
|
522 } |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
523 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
524 nwrite = std::fwrite (str, 1, nread, fp); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
525 if (nwrite != nread) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
526 { |
24520
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
24290
diff
changeset
|
527 // FIXME: is this the best thing to do here? |
c5c11b07598a
refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents:
24290
diff
changeset
|
528 respond_to_pending_signals (); // Clear SIGPIPE signal |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
529 error ("gl2ps_renderer::draw: internal pipe error"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
530 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
531 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
532 } |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
533 } |
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
534 else |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
535 opengl_renderer::draw (go); |
21199
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
536 } |
dd6605e1eaea
make gl2ps_renderer implementation private
John W. Eaton <jwe@octave.org>
parents:
21198
diff
changeset
|
537 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
538 int |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
539 gl2ps_renderer::alignment_to_mode (int ha, int va) const |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
540 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
541 int gl2psa = GL2PS_TEXT_BL; |
19890 | 542 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
543 if (ha == 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
544 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
545 if (va == 0 || va == 3) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
546 gl2psa=GL2PS_TEXT_BL; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
547 else if (va == 2) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
548 gl2psa=GL2PS_TEXT_TL; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
549 else if (va == 1) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
550 gl2psa=GL2PS_TEXT_CL; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
551 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
552 else if (ha == 2) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
553 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
554 if (va == 0 || va == 3) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
555 gl2psa=GL2PS_TEXT_BR; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
556 else if (va == 2) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
557 gl2psa=GL2PS_TEXT_TR; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
558 else if (va == 1) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
559 gl2psa=GL2PS_TEXT_CR; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
560 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
561 else if (ha == 1) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
562 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
563 if (va == 0 || va == 3) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
564 gl2psa=GL2PS_TEXT_B; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
565 else if (va == 2) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
566 gl2psa=GL2PS_TEXT_T; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
567 else if (va == 1) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
568 gl2psa=GL2PS_TEXT_C; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
569 } |
19890 | 570 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
571 return gl2psa; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
572 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
573 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
574 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
575 gl2ps_renderer::fix_strlist_position (double x, double y, double z, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
576 Matrix box, double rotation, |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
577 std::list<text_renderer::string>& lst) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
578 { |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22838
diff
changeset
|
579 for (auto& txtobj : lst) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
580 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
581 // Get pixel coordinates |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
582 ColumnVector coord_pix = get_transform ().transform (x, y, z, false); |
19890 | 583 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
584 // Translate and rotate |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
585 double rot = rotation * 4.0 * atan (1.0) / 180; |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22838
diff
changeset
|
586 coord_pix(0) += (txtobj.get_x () + box(0))*cos (rot) |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22838
diff
changeset
|
587 - (txtobj.get_y () + box(1))*sin (rot); |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22838
diff
changeset
|
588 coord_pix(1) -= (txtobj.get_y () + box(1))*cos (rot) |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22838
diff
changeset
|
589 + (txtobj.get_x () + box(0))*sin (rot); |
19890 | 590 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
591 GLint vp[4]; |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
592 m_glfcns.glGetIntegerv (GL_VIEWPORT, vp); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
593 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
594 txtobj.set_x (coord_pix(0)); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
595 txtobj.set_y (vp[3] - coord_pix(1)); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
596 txtobj.set_z (coord_pix(2)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
597 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
598 } |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
599 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
600 static std::string |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
601 code_to_symbol (uint32_t code) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
602 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
603 std::string retval; |
9834
92d8f35ff217
compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents:
9798
diff
changeset
|
604 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
605 uint32_t idx = code - 945; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
606 if (idx < 25) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
607 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
608 std::string characters ("abgdezhqiklmnxoprVstufcyw"); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
609 retval = characters[idx]; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
610 return retval; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
611 } |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
612 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
613 idx = code - 913; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
614 if (idx < 25) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
615 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
616 std::string characters ("ABGDEZHQIKLMNXOPRVSTUFCYW"); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
617 retval = characters[idx]; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
618 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
619 else if (code == 978) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
620 retval = "U"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
621 else if (code == 215) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
622 retval = "\xb4"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
623 else if (code == 177) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
624 retval = "\xb1"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
625 else if (code == 8501) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
626 retval = "\xc0"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
627 else if (code == 8465) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
628 retval = "\xc1"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
629 else if (code == 8242) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
630 retval = "\xa2"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
631 else if (code == 8736) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
632 retval = "\xd0"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
633 else if (code == 172) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
634 retval = "\xd8"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
635 else if (code == 9829) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
636 retval = "\xa9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
637 else if (code == 8472) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
638 retval = "\xc3"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
639 else if (code == 8706) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
640 retval = "\xb6"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
641 else if (code == 8704) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
642 retval = "\x22"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
643 else if (code == 9827) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
644 retval = "\xa7"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
645 else if (code == 9824) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
646 retval = "\xaa"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
647 else if (code == 8476) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
648 retval = "\xc2"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
649 else if (code == 8734) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
650 retval = "\xa5"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
651 else if (code == 8730) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
652 retval = "\xd6"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
653 else if (code == 8707) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
654 retval = "\x24"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
655 else if (code == 9830) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
656 retval = "\xa8"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
657 else if (code == 8747) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
658 retval = "\xf2"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
659 else if (code == 8727) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
660 retval = "\x2a"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
661 else if (code == 8744) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
662 retval = "\xda"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
663 else if (code == 8855) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
664 retval = "\xc4"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
665 else if (code == 8901) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
666 retval = "\xd7"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
667 else if (code == 8728) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
668 retval = "\xb0"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
669 else if (code == 8745) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
670 retval = "\xc7"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
671 else if (code == 8743) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
672 retval = "\xd9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
673 else if (code == 8856) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
674 retval = "\xc6"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
675 else if (code == 8729) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
676 retval = "\xb7"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
677 else if (code == 8746) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
678 retval = "\xc8"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
679 else if (code == 8853) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
680 retval = "\xc5"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
681 else if (code == 8804) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
682 retval = "\xa3"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
683 else if (code == 8712) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
684 retval = "\xce"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
685 else if (code == 8839) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
686 retval = "\xca"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
687 else if (code == 8801) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
688 retval = "\xba"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
689 else if (code == 8773) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
690 retval = "\x40"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
691 else if (code == 8834) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
692 retval = "\xcc"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
693 else if (code == 8805) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
694 retval = "\xb3"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
695 else if (code == 8715) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
696 retval = "\x27"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
697 else if (code == 8764) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
698 retval = "\x7e"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
699 else if (code == 8733) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
700 retval = "\xb5"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
701 else if (code == 8838) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
702 retval = "\xcd"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
703 else if (code == 8835) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
704 retval = "\xc9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
705 else if (code == 8739) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
706 retval = "\xbd"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
707 else if (code == 8776) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
708 retval = "\xbb"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
709 else if (code == 8869) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
710 retval = "\x5e"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
711 else if (code == 8656) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
712 retval = "\xdc"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
713 else if (code == 8592) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
714 retval = "\xac"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
715 else if (code == 8658) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
716 retval = "\xde"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
717 else if (code == 8594) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
718 retval = "\xae"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
719 else if (code == 8596) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
720 retval = "\xab"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
721 else if (code == 8593) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
722 retval = "\xad"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
723 else if (code == 8595) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
724 retval = "\xaf"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
725 else if (code == 8970) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
726 retval = "\xeb"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
727 else if (code == 8971) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
728 retval = "\xfb"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
729 else if (code == 10216) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
730 retval = "\xe1"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
731 else if (code == 10217) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
732 retval = "\xf1"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
733 else if (code == 8968) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
734 retval = "\xe9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
735 else if (code == 8969) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
736 retval = "\xf9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
737 else if (code == 8800) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
738 retval = "\xb9"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
739 else if (code == 8230) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
740 retval = "\xbc"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
741 else if (code == 176) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
742 retval = "\xb0"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
743 else if (code == 8709) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
744 retval = "\xc6"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
745 else if (code == 169) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
746 retval = "\xd3"; |
20020
1929d9218ac0
Fix fontname search, fontweight and fontangle for printing (bug #44668)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19890
diff
changeset
|
747 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
748 if (retval.empty ()) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
749 warning ("print: unhandled symbol %d", code); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
750 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
751 return retval; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
752 } |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
753 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
754 static std::string |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
755 select_font (caseless_str fn, bool isbold, bool isitalic) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
756 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
757 std::transform (fn.begin (), fn.end (), fn.begin (), ::tolower); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
758 std::string fontname; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
759 if (fn == "times" || fn == "times-roman") |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
760 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
761 if (isitalic && isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
762 fontname = "Times-BoldItalic"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
763 else if (isitalic) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
764 fontname = "Times-Italic"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
765 else if (isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
766 fontname = "Times-Bold"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
767 else |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
768 fontname = "Times-Roman"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
769 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
770 else if (fn == "courier") |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
771 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
772 if (isitalic && isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
773 fontname = "Courier-BoldOblique"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
774 else if (isitalic) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
775 fontname = "Courier-Oblique"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
776 else if (isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
777 fontname = "Courier-Bold"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
778 else |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
779 fontname = "Courier"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
780 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
781 else if (fn == "symbol") |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
782 fontname = "Symbol"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
783 else if (fn == "zapfdingbats") |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
784 fontname = "ZapfDingbats"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
785 else |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
786 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
787 if (isitalic && isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
788 fontname = "Helvetica-BoldOblique"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
789 else if (isitalic) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
790 fontname = "Helvetica-Oblique"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
791 else if (isbold) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
792 fontname = "Helvetica-Bold"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
793 else |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
794 fontname = "Helvetica"; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
795 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
796 return fontname; |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
797 } |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
798 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
799 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
800 escape_character (const std::string chr, std::string& str) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
801 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
802 std::size_t idx = str.find (chr); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
803 while (idx != std::string::npos) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
804 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
805 str.insert (idx, 1, '\\'); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
806 idx = str.find (chr, idx + 2); |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
807 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24689
diff
changeset
|
808 } |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
809 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
810 std::string |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
811 gl2ps_renderer::strlist_to_svg (double x, double y, double z, |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
812 Matrix box, double rotation, |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
813 std::list<text_renderer::string>& lst) |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
814 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
815 if (lst.empty ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
816 return ""; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
817 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
818 //Use pixel coordinates to conform to gl2ps |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
819 ColumnVector coord_pix = get_transform ().transform (x, y, z, false); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
820 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
821 std::ostringstream os; |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
822 os << R"(<text xml:space="preserve" )"; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
823 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
824 // Rotation and translation are applied to the whole text element |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
825 os << "transform=\"" |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
826 << "translate(" << coord_pix(0) + box(0) << "," << coord_pix(1) - box(1) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
827 << ") rotate(" << -rotation << "," << -box(0) << "," << box(1) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
828 << ")\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
829 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
830 // Use the first entry for the base text font |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
831 auto p = lst.begin (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
832 std::string name = p->get_family (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
833 std::string weight = p->get_weight (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
834 std::string angle = p->get_angle (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
835 double size = p->get_size (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
836 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
837 os << "font-family=\"" << name << "\" " |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
838 << "font-weight=\"" << weight << "\" " |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
839 << "font-style=\"" << angle << "\" " |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
840 << "font-size=\"" << size << "\">"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
841 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
842 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
843 // build a tspan for each element in the strlist |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
844 for (p = lst.begin (); p != lst.end (); p++) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
845 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
846 os << "<tspan "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
847 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
848 if (name.compare (p->get_family ())) |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
849 os << "font-family=\"" << p->get_family () << "\" "; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
850 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
851 if (weight.compare (p->get_weight ())) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
852 os << "font-weight=\"" << p->get_weight () << "\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
853 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
854 if (angle.compare (p->get_angle ())) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
855 os << "font-style=\"" << p->get_angle () << "\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
856 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
857 if (size != p->get_size ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
858 os << "font-size=\"" << p->get_size () << "\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
859 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
860 os << "y=\"" << - p->get_y () << "\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
861 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
862 Matrix col = p->get_color (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
863 os << "fill=\"rgb(" << col(0)*255 << "," |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
864 << col(1)*255 << "," << col(2)*255 << ")\" "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
865 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
866 // provide an x coordinate for each character in the string |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
867 os << "x=\""; |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
868 std::vector<double> xdata = p->get_xdata (); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
869 for (auto q = xdata.begin (); q != xdata.end (); q++) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
870 os << (*q) << " "; |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
871 os << '"'; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
872 |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28337
diff
changeset
|
873 os << '>'; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
874 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
875 // translate unicode and special xml characters |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
876 if (p->get_code ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
877 os << "&#" << p->get_code () << ";"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
878 else |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
879 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
880 const std::string str = p->get_string (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
881 for (auto q = str.begin (); q != str.end (); q++) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
882 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
883 std::stringstream chr; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
884 chr << *q; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
885 if (chr.str () == "\"") |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
886 os << """; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
887 else if (chr.str () == "'") |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
888 os << "'"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
889 else if (chr.str () == "&") |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
890 os << "&"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
891 else if (chr.str () == "<") |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
892 os << "<"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
893 else if (chr.str () == ">") |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
894 os << ">"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
895 else |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
896 os << chr.str (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
897 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
898 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
899 os << "</tspan>"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
900 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
901 os << "</text>"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
902 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
903 return os.str (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
904 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
905 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
906 std::string |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
907 gl2ps_renderer::strlist_to_ps (double x, double y, double z, |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
908 Matrix box, double rotation, |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
909 std::list<text_renderer::string>& lst) |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
910 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
911 // Translate and rotate coordinates in order to use bottom-left alignment |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
912 fix_strlist_position (x, y, z, box, rotation, lst); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
913 Matrix prev_color (1, 3, -1); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
914 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
915 std::ostringstream ss; |
24084
71a449b29cc7
Save/Restore state of postscript program when dumping text (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
916 ss << "gsave\n"; |
71a449b29cc7
Save/Restore state of postscript program when dumping text (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
917 |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
918 static bool warned = false; |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
919 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
920 for (const auto& txtobj : lst) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
921 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
922 // Color |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
923 if (txtobj.get_color () != prev_color) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
924 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
925 prev_color = txtobj.get_color (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
926 for (int i = 0; i < 3; i++) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
927 ss << prev_color(i) << " "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
928 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
929 ss << "C\n"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
930 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
931 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
932 // String |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
933 std::string str; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
934 if (txtobj.get_code ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
935 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
936 fontname = "Symbol"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
937 str = code_to_symbol (txtobj.get_code ()); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
938 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
939 else |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
940 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
941 fontname = select_font (txtobj.get_name (), |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
942 txtobj.get_weight () == "bold", |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
943 txtobj.get_angle () == "italic"); |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
944 |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
945 // Check that the string is composed of single byte characters |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
946 const std::string tmpstr = txtobj.get_string (); |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
947 const uint8_t *c |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
948 = reinterpret_cast<const uint8_t *> (tmpstr.c_str ()); |
25889
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
949 |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
950 for (size_t i = 0; i < tmpstr.size ();) |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
951 { |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
952 int mblen = octave_u8_strmblen_wrapper (c + i); |
25889
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
953 |
27142
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
954 // Replace multibyte or non ascii characters by a question mark |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
955 if (mblen > 1) |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
956 { |
27142
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
957 str += "?"; |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
958 if (! warned) |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
959 { |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
960 warning_with_id ("Octave:print:unsupported-multibyte", |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
961 "print: only ASCII characters are " |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
962 "supported for EPS and derived " |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
963 "formats."); |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
964 warned = true; |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
965 } |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
966 } |
27142
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
967 else if (mblen < 1) |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
968 { |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
969 mblen = 1; |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
970 str += "?"; |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
971 if (! warned) |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
972 { |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
973 warning_with_id ("Octave:print:unhandled-character", |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
974 "print: only ASCII characters are " |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
975 "supported for EPS and derived " |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
976 "formats."); |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
977 warned = true; |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
978 } |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
979 } |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
980 else |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
981 str += tmpstr.at (i); |
25889
2da65009cc7f
Fix graphics object selection on high resolution screens (bug #49053)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25862
diff
changeset
|
982 |
25854
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
983 i += mblen; |
d19dfcc862d4
Remove multibyte characters in EPS printout (bug #52764)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
25649
diff
changeset
|
984 } |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
985 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
986 |
27155
53ae2b0fee3c
Escape backslash characters in EPS output (bug #56448)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27142
diff
changeset
|
987 escape_character ("\\", str); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
988 escape_character ("(", str); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
989 escape_character (")", str); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
990 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
991 ss << "(" << str << ") ["; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
992 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
993 std::vector<double> xdata = txtobj.get_xdata (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
994 for (size_t i = 1; i < xdata.size (); i++) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
995 ss << xdata[i] - xdata[i-1] << " "; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
996 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
997 ss << "10] " << rotation << " " << txtobj.get_x () |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
998 << " " << txtobj.get_y () << " " << txtobj.get_size () |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
999 << " /" << fontname << " SRX\n"; |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1000 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1001 |
24084
71a449b29cc7
Save/Restore state of postscript program when dumping text (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
1002 ss << "grestore\n"; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1003 |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1004 return ss.str (); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1005 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1006 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1007 Matrix |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1008 gl2ps_renderer::render_text (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1009 double x, double y, double z, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1010 int ha, int va, double rotation) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1011 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1012 std::string saved_font = fontname; |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1013 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1014 if (txt.empty ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1015 return Matrix (1, 4, 0.0); |
20715
5b7643257978
Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents:
20624
diff
changeset
|
1016 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1017 Matrix bbox; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1018 std::string str = txt; |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
1019 std::list<text_renderer::string> lst; |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1020 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1021 text_to_strlist (str, lst, bbox, ha, va, rotation); |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1022 m_glfcns.glRasterPos3d (x, y, z); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1023 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1024 // For svg/eps directly dump a preformated text element into gl2ps output |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1025 if (term.find ("svg") != std::string::npos) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1026 { |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1027 std::string elt = strlist_to_svg (x, y, z, bbox, rotation, lst); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1028 if (! elt.empty ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1029 gl2psSpecial (GL2PS_SVG, elt.c_str ()); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1030 } |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1031 else if (term.find ("eps") != std::string::npos) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1032 { |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1033 std::string elt = strlist_to_ps (x, y, z, bbox, rotation, lst); |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1034 if (! elt.empty ()) |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1035 gl2psSpecial (GL2PS_EPS, elt.c_str ()); |
20715
5b7643257978
Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents:
20624
diff
changeset
|
1036 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1037 } |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1038 else |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1039 gl2psTextOpt (str.c_str (), fontname.c_str (), fontsize, |
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1040 alignment_to_mode (ha, va), rotation); |
20715
5b7643257978
Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents:
20624
diff
changeset
|
1041 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1042 fontname = saved_font; |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23863
diff
changeset
|
1043 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1044 return bbox; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1045 } |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1046 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1047 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1048 gl2ps_renderer::set_font (const base_properties& props) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1049 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
1050 opengl_renderer::set_font (props); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1051 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1052 // Set the interpreter so that text_to_pixels can parse strings properly |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1053 if (props.has_property ("interpreter")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1054 set_interpreter (props.get ("interpreter").string_value ()); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1055 |
22622
4191f8b5070c
Add '__' to start/end of hidden Octave-only graphics properties (bug #49205).
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
1056 fontsize = props.get ("__fontsize_points__").double_value (); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1057 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1058 caseless_str fn = props.get ("fontname").xtolower ().string_value (); |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1059 bool isbold |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1060 =(props.get ("fontweight").xtolower ().string_value () == "bold"); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1061 bool isitalic |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1062 = (props.get ("fontangle").xtolower ().string_value () == "italic"); |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1063 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1064 fontname = select_font (fn, isbold, isitalic); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1065 } |
9798
2d6a5af744b6
printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents:
diff
changeset
|
1066 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1067 void |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1068 gl2ps_renderer::draw_image (const image::properties& props) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1069 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1070 octave_value cdata = props.get_color_data (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1071 dim_vector dv (cdata.dims ()); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1072 int h = dv(0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1073 int w = dv(1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1074 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1075 Matrix x = props.get_xdata ().matrix_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1076 Matrix y = props.get_ydata ().matrix_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1077 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1078 // Someone wants us to draw an empty image? No way. |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1079 if (x.isempty () || y.isempty ()) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1080 return; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1081 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1082 // Sort x/ydata and mark flipped dimensions |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1083 bool xflip = false; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1084 if (x(0) > x(1)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1085 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1086 std::swap (x(0), x(1)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1087 xflip = true; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1088 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1089 else if (w > 1 && x(1) == x(0)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1090 x(1) = x(1) + (w-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1091 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1092 bool yflip = false; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1093 if (y(0) > y(1)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1094 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1095 std::swap (y(0), y(1)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1096 yflip = true; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1097 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1098 else if (h > 1 && y(1) == y(0)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1099 y(1) = y(1) + (h-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1100 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1101 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1102 const ColumnVector p0 = xform.transform (x(0), y(0), 0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1103 const ColumnVector p1 = xform.transform (x(1), y(1), 0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1104 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1105 if (math::isnan (p0(0)) || math::isnan (p0(1)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1106 || math::isnan (p1(0)) || math::isnan (p1(1))) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1107 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1108 warning ("opengl_renderer: image X,Y data too large to draw"); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1109 return; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1110 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1111 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1112 // image pixel size in screen pixel units |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1113 float pix_dx, pix_dy; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1114 // image pixel size in normalized units |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1115 float nor_dx, nor_dy; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1116 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1117 if (w > 1) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1118 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1119 pix_dx = (p1(0) - p0(0)) / (w-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1120 nor_dx = (x(1) - x(0)) / (w-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1121 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1122 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1123 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1124 const ColumnVector p1w = xform.transform (x(1) + 1, y(1), 0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1125 pix_dx = p1w(0) - p0(0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1126 nor_dx = 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1127 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1128 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1129 if (h > 1) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1130 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1131 pix_dy = (p1(1) - p0(1)) / (h-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1132 nor_dy = (y(1) - y(0)) / (h-1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1133 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1134 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1135 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1136 const ColumnVector p1h = xform.transform (x(1), y(1) + 1, 0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1137 pix_dy = p1h(1) - p0(1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1138 nor_dy = 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1139 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1140 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1141 // OpenGL won't draw any of the image if its origin is outside the |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1142 // viewport/clipping plane so we must do the clipping ourselves. |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1143 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1144 int j0, j1, jj, i0, i1, ii; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1145 j0 = 0, j1 = w; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1146 i0 = 0, i1 = h; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1147 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1148 float im_xmin = x(0) - nor_dx/2; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1149 float im_xmax = x(1) + nor_dx/2; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1150 float im_ymin = y(0) - nor_dy/2; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1151 float im_ymax = y(1) + nor_dy/2; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1152 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1153 // Clip to axes or viewport |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1154 bool do_clip = props.is_clipping (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1155 Matrix vp = get_viewport_scaled (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1156 |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1157 ColumnVector vp_lim_min |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1158 = xform.untransform (std::numeric_limits <float>::epsilon (), |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1159 std::numeric_limits <float>::epsilon ()); |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1160 ColumnVector vp_lim_max = xform.untransform (vp(2), vp(3)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1161 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1162 if (vp_lim_min(0) > vp_lim_max(0)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1163 std::swap (vp_lim_min(0), vp_lim_max(0)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1164 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1165 if (vp_lim_min(1) > vp_lim_max(1)) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1166 std::swap (vp_lim_min(1), vp_lim_max(1)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1167 |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1168 float clip_xmin |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1169 = do_clip ? (vp_lim_min(0) > xmin ? vp_lim_min(0) : xmin) : vp_lim_min(0); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1170 |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1171 float clip_ymin |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1172 = do_clip ? (vp_lim_min(1) > ymin ? vp_lim_min(1) : ymin) : vp_lim_min(1); |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1173 |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1174 float clip_xmax |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1175 = do_clip ? (vp_lim_max(0) < xmax ? vp_lim_max(0) : xmax) : vp_lim_max(0); |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1176 |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1177 float clip_ymax |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1178 = do_clip ? (vp_lim_max(1) < ymax ? vp_lim_max(1) : ymax) : vp_lim_max(1); |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1179 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1180 if (im_xmin < clip_xmin) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1181 j0 += (clip_xmin - im_xmin)/nor_dx + 1; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1182 |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1183 if (im_xmax > clip_xmax) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1184 j1 -= (im_xmax - clip_xmax)/nor_dx; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1185 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1186 if (im_ymin < clip_ymin) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1187 i0 += (clip_ymin - im_ymin)/nor_dy + 1; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1188 |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1189 if (im_ymax > clip_ymax) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1190 i1 -= (im_ymax - clip_ymax)/nor_dy; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1191 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1192 if (i0 >= i1 || j0 >= j1) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1193 return; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1194 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1195 float zoom_x; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1196 m_glfcns.glGetFloatv (GL_ZOOM_X, &zoom_x); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1197 float zoom_y; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1198 m_glfcns.glGetFloatv (GL_ZOOM_Y, &zoom_y); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1199 |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27156
diff
changeset
|
1200 m_glfcns.glPixelZoom (m_devpixratio * pix_dx, - m_devpixratio * pix_dy); |
26728
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1201 m_glfcns.glRasterPos3d (im_xmin + nor_dx*j0, im_ymin + nor_dy*i0, 0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1202 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1203 // Expect RGB data |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1204 if (dv.ndims () == 3 && dv(2) == 3) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1205 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1206 if (cdata.is_double_type ()) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1207 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1208 const NDArray xcdata = cdata.array_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1209 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1210 OCTAVE_LOCAL_BUFFER (GLfloat, a, 3*(j1-j0)*(i1-i0)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1211 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1212 for (int i = i0; i < i1; i++) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1213 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1214 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1215 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1216 if (! yflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1217 ii = i; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1218 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1219 ii = h - i - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1220 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1221 if (! xflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1222 jj = j; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1223 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1224 jj = w - j - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1225 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1226 a[idx] = xcdata(ii,jj,0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1227 a[idx+1] = xcdata(ii,jj,1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1228 a[idx+2] = xcdata(ii,jj,2); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1229 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1230 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1231 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1232 draw_pixels (j1-j0, i1-i0, a); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1233 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1234 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1235 else if (cdata.is_single_type ()) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1236 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1237 const FloatNDArray xcdata = cdata.float_array_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1238 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1239 OCTAVE_LOCAL_BUFFER (GLfloat, a, 3*(j1-j0)*(i1-i0)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1240 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1241 for (int i = i0; i < i1; i++) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1242 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1243 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1244 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1245 if (! yflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1246 ii = i; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1247 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1248 ii = h - i - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1249 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1250 if (! xflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1251 jj = j; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1252 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1253 jj = w - j - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1254 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1255 a[idx] = xcdata(ii,jj,0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1256 a[idx+1] = xcdata(ii,jj,1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1257 a[idx+2] = xcdata(ii,jj,2); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1258 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1259 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1260 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1261 draw_pixels (j1-j0, i1-i0, a); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1262 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1263 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1264 else if (cdata.is_uint8_type ()) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1265 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1266 const uint8NDArray xcdata = cdata.uint8_array_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1267 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1268 OCTAVE_LOCAL_BUFFER (GLubyte, a, 3*(j1-j0)*(i1-i0)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1269 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1270 for (int i = i0; i < i1; i++) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1271 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1272 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1273 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1274 if (! yflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1275 ii = i; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1276 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1277 ii = h - i - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1278 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1279 if (! xflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1280 jj = j; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1281 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1282 jj = w - j - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1283 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1284 a[idx] = xcdata(ii,jj,0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1285 a[idx+1] = xcdata(ii,jj,1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1286 a[idx+2] = xcdata(ii,jj,2); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1287 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1288 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1289 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1290 draw_pixels (j1-j0, i1-i0, a); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1291 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1292 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1293 else if (cdata.is_uint16_type ()) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1294 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1295 const uint16NDArray xcdata = cdata.uint16_array_value (); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1296 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1297 OCTAVE_LOCAL_BUFFER (GLushort, a, 3*(j1-j0)*(i1-i0)); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1298 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1299 for (int i = i0; i < i1; i++) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1300 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1301 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1302 { |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1303 if (! yflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1304 ii = i; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1305 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1306 ii = h - i - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1307 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1308 if (! xflip) |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1309 jj = j; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1310 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1311 jj = w - j - 1; |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1312 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1313 a[idx] = xcdata(ii,jj,0); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1314 a[idx+1] = xcdata(ii,jj,1); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1315 a[idx+2] = xcdata(ii,jj,2); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1316 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1317 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1318 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1319 draw_pixels (j1-j0, i1-i0, a); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1320 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1321 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1322 else |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1323 warning ("opengl_renderer: invalid image data type (expected double, single, uint8, or uint16)"); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1324 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1325 m_glfcns.glPixelZoom (zoom_x, zoom_y); |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1326 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1327 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1328 } |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1329 |
f034b29320ad
Use OpenGl textures to render image objects (bug #55632).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1330 void |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1331 gl2ps_renderer::draw_pixels (int w, int h, const float *data) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1332 { |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22396
diff
changeset
|
1333 // Clip data between 0 and 1 for float values |
22392
4dfb28724863
Clip double RGB data before passing to gl2psDrawPixels (bug #48873).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22336
diff
changeset
|
1334 OCTAVE_LOCAL_BUFFER (float, tmp_data, 3*w*h); |
4dfb28724863
Clip double RGB data before passing to gl2psDrawPixels (bug #48873).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22336
diff
changeset
|
1335 |
4dfb28724863
Clip double RGB data before passing to gl2psDrawPixels (bug #48873).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22336
diff
changeset
|
1336 for (int i = 0; i < 3*h*w; i++) |
4dfb28724863
Clip double RGB data before passing to gl2psDrawPixels (bug #48873).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22336
diff
changeset
|
1337 tmp_data[i] = (data[i] < 0.0f ? 0.0f : (data[i] > 1.0f ? 1.0f : data[i])); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22396
diff
changeset
|
1338 |
22392
4dfb28724863
Clip double RGB data before passing to gl2psDrawPixels (bug #48873).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
22336
diff
changeset
|
1339 gl2psDrawPixels (w, h, 0, 0, GL_RGB, GL_FLOAT, tmp_data); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1340 } |
9950
7dedfd70dd9f
image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents:
9834
diff
changeset
|
1341 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1342 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1343 gl2ps_renderer::draw_pixels (int w, int h, const uint8_t *data) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1344 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1345 // gl2psDrawPixels only supports the GL_FLOAT type. |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1346 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1347 OCTAVE_LOCAL_BUFFER (float, tmp_data, 3*w*h); |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1348 |
24284
1ad2297f8ece
Fix printing integer type images (bug #51558)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23219
diff
changeset
|
1349 static const float maxval = std::numeric_limits<uint8_t>::max (); |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1350 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1351 for (int i = 0; i < 3*w*h; i++) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1352 tmp_data[i] = data[i] / maxval; |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1353 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1354 draw_pixels (w, h, tmp_data); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1355 } |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1356 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1357 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1358 gl2ps_renderer::draw_pixels (int w, int h, const uint16_t *data) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1359 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1360 // gl2psDrawPixels only supports the GL_FLOAT type. |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1361 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1362 OCTAVE_LOCAL_BUFFER (float, tmp_data, 3*w*h); |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1363 |
24284
1ad2297f8ece
Fix printing integer type images (bug #51558)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23219
diff
changeset
|
1364 static const float maxval = std::numeric_limits<uint16_t>::max (); |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1365 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1366 for (int i = 0; i < 3*w*h; i++) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1367 tmp_data[i] = data[i] / maxval; |
21353
e4fc19d8c6c3
remove HAVE_OPENGL from public header file
John W. Eaton <jwe@octave.org>
parents:
21341
diff
changeset
|
1368 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1369 draw_pixels (w, h, tmp_data); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1370 } |
9950
7dedfd70dd9f
image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents:
9834
diff
changeset
|
1371 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1372 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1373 gl2ps_renderer::draw_text (const text::properties& props) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1374 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23546
diff
changeset
|
1375 if (props.get_string ().isempty ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1376 return; |
11455
2be9e22796d2
improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents:
10955
diff
changeset
|
1377 |
24173
730227072acb
Add support for text background area for OpenGL toolkits (bug #39692).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24084
diff
changeset
|
1378 draw_text_background (props, true); |
730227072acb
Add support for text background area for OpenGL toolkits (bug #39692).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24084
diff
changeset
|
1379 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1380 // First set font properties: freetype will use them to compute |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1381 // coordinates and gl2ps will retrieve the color directly from the |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1382 // feedback buffer |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1383 set_font (props); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1384 set_color (props.get_color_rgb ()); |
11455
2be9e22796d2
improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents:
10955
diff
changeset
|
1385 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1386 std::string saved_font = fontname; |
20624
4e47e10d5279
Add basic support for multiline and tex markup in printed figures (bugs #31468, 42320, 45301)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
20610
diff
changeset
|
1387 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1388 // Alignment |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1389 int halign = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1390 int valign = 0; |
11455
2be9e22796d2
improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents:
10955
diff
changeset
|
1391 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1392 if (props.horizontalalignment_is ("center")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1393 halign = 1; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1394 else if (props.horizontalalignment_is ("right")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1395 halign = 2; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1396 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1397 if (props.verticalalignment_is ("top")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1398 valign = 2; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1399 else if (props.verticalalignment_is ("baseline")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1400 valign = 3; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1401 else if (props.verticalalignment_is ("middle")) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1402 valign = 1; |
11455
2be9e22796d2
improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents:
10955
diff
changeset
|
1403 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1404 // FIXME: handle margin and surrounding box |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1405 // Matrix bbox; |
11455
2be9e22796d2
improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents:
10955
diff
changeset
|
1406 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1407 const Matrix pos = get_transform ().scale (props.get_data_position ()); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1408 std::string str = props.get_string ().string_vector_value ().join ("\n"); |
12965
22bc9ec80c2c
allow multi-line string property for text objects using cell arrays or char matrices
Ben Abbott <bpabbott@mac.com>
parents:
12322
diff
changeset
|
1409 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1410 render_text (str, pos(0), pos(1), pos.numel () > 2 ? pos(2) : 0.0, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1411 halign, valign, props.get_rotation ()); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1412 } |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1413 } |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1414 |
21207
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1415 #endif |
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1416 |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1417 namespace octave |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1418 { |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1419 // If the name of the stream begins with '|', open a pipe to the command |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1420 // named by the rest of the string. Otherwise, write to the named file. |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1421 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1422 void |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1423 gl2ps_print (opengl_functions& glfcns, const graphics_object& fig, |
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1424 const std::string& stream, const std::string& term) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1425 { |
22750
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
1426 #if defined (HAVE_GL2PS_H) && defined (HAVE_OPENGL) |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1427 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1428 // FIXME: should we have a way to create a file that begins with the |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1429 // character '|'? |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1430 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1431 bool have_cmd = stream.length () > 1 && stream[0] == '|'; |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1432 |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1433 FILE *fp = nullptr; |
19709
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1434 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
1435 unwind_protect frame; |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1436 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1437 if (have_cmd) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1438 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1439 // Create process and pipe gl2ps output to it. |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1440 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1441 std::string cmd = stream.substr (1); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1442 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26728
diff
changeset
|
1443 fp = popen (cmd.c_str (), "w"); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1444 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1445 if (! fp) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1446 error (R"(print: failed to open pipe "%s")", stream.c_str ()); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1447 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1448 frame.add_fcn (safe_pclose, fp); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1449 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1450 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1451 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1452 // Write gl2ps output directly to file. |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1453 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26728
diff
changeset
|
1454 fp = sys::fopen (stream.c_str (), "w"); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1455 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1456 if (! fp) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1457 error (R"(gl2ps_print: failed to create file "%s")", stream.c_str ()); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1458 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1459 frame.add_fcn (safe_fclose, fp); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1460 } |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1461 |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1462 gl2ps_renderer rend (glfcns, fp, term); |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
1463 |
24638
a3031d4967ce
Supply the OpenGL viewport setting for gl2ps_print context (bug #52940).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
24534
diff
changeset
|
1464 Matrix pos = fig.get ("position").matrix_value (); |
a3031d4967ce
Supply the OpenGL viewport setting for gl2ps_print context (bug #52940).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
24534
diff
changeset
|
1465 rend.set_viewport (pos(2), pos(3)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1466 rend.draw (fig, stream); |
21197
9a5bb6996b16
write to pipe or file in gl2ps_print
John W. Eaton <jwe@octave.org>
parents:
21196
diff
changeset
|
1467 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1468 // Make sure buffered commands are finished!!! |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1469 rend.finish (); |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1470 |
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1471 #else |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1472 |
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1473 octave_unused_parameter (glfcns); |
22750
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
1474 octave_unused_parameter (fig); |
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
1475 octave_unused_parameter (stream); |
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
1476 octave_unused_parameter (term); |
dc828d9a7f3a
Fix building gl2ps when --without-opengl is used (bug #47886).
Rik <rik@octave.org>
parents:
22704
diff
changeset
|
1477 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1478 err_disabled_feature ("gl2ps_print", "gl2ps"); |
25862
e5a73a8c116c
use wrapper class to call OpenGL functions
John W. Eaton <jwe@octave.org>
parents:
25854
diff
changeset
|
1479 |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1480 #endif |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1481 } |
19639
61cc00ebac60
move opengl printing code from __init_fltk__.cc to gl2ps-renderer.cc
John W. Eaton <jwe@octave.org>
parents:
19596
diff
changeset
|
1482 } |