Mercurial > octave
annotate libinterp/corefcn/ft-text-renderer.cc @ 29683:5ffe7159f94b
Add substitution font to SVG font stack if necessary
* ft-text-rrenderer (ft_text_renderer::process_character): Make "previous" arg
mandatory. New std::string& argument "sub_name" to eventually return
substitution font name.
(ft_text_renderer::visit (text_element_string& e),
ft_text_renderer::visit (text_element_symbol& e)): Eventually add subtitution
font to the string's family name stack.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Sun, 16 May 2021 19:11:15 +0200 |
parents | 7ad7991e946a |
children | f148aff802b6 |
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 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
28483
diff
changeset
|
3 // Copyright (C) 2009-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
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 //////////////////////////////////////////////////////////////////////// |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21568
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21209
diff
changeset
|
27 # include "config.h" |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
28 #endif |
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
29 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
30 #include "base-text-renderer.h" |
23462
314d980bee93
maint: Add '#include "XXX.h"' to XXX.cc files.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
31 #include "ft-text-renderer.h" |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
32 |
14003
1555c5a177c9
better fix for fontconfig segfault
John W. Eaton <jwe@octave.org>
parents:
13999
diff
changeset
|
33 #if defined (HAVE_FREETYPE) |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
34 |
21334
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
35 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24126
diff
changeset
|
36 # pragma GCC diagnostic push |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24126
diff
changeset
|
37 # pragma GCC diagnostic ignored "-Wold-style-cast" |
21334
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
38 #endif |
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
39 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
40 #include <ft2build.h> |
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
41 #include FT_FREETYPE_H |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
42 #include FT_GLYPH_H |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
43 |
14003
1555c5a177c9
better fix for fontconfig segfault
John W. Eaton <jwe@octave.org>
parents:
13999
diff
changeset
|
44 #if defined (HAVE_FONTCONFIG) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21102
diff
changeset
|
45 # include <fontconfig/fontconfig.h> |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
46 #endif |
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
47 |
21334
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
48 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24126
diff
changeset
|
49 # pragma GCC diagnostic pop |
21334
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
50 #endif |
36e75e013849
* ft-text-renderer.cc: Use pragma to avoid old-style cast warnings.
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
51 |
17352
4a348443de9b
Support multibyte characters in Freetype-based renderer (bug #31596).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17330
diff
changeset
|
52 #include <clocale> |
4a348443de9b
Support multibyte characters in Freetype-based renderer (bug #31596).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17330
diff
changeset
|
53 #include <cwchar> |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
54 #include <map> |
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
55 #include <utility> |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
56 |
13992
e1f76bfe0452
apply singleton_cleanup to a few more classes
John W. Eaton <jwe@octave.org>
parents:
13730
diff
changeset
|
57 #include "singleton-cleanup.h" |
25362
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
58 #include "unistr-wrappers.h" |
13992
e1f76bfe0452
apply singleton_cleanup to a few more classes
John W. Eaton <jwe@octave.org>
parents:
13730
diff
changeset
|
59 |
25460
627d6bde9b8d
solve installation info initialization problem differently
John W. Eaton <jwe@octave.org>
parents:
25440
diff
changeset
|
60 #include "defaults.h" |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
61 #include "error.h" |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
62 #include "file-ops.h" |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
63 #include "oct-env.h" |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
64 #include "pr-output.h" |
29489
ee66869c30d6
Fix loading fonts from path with non-ASCII characters on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29470
diff
changeset
|
65 #include "sysdep.h" |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
66 #include "text-renderer.h" |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
67 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
68 namespace octave |
13317
d2b799e3178a
allow warnings about missing glyphs to be disabled
John W. Eaton <jwe@octave.org>
parents:
13141
diff
changeset
|
69 { |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
70 // FIXME: maybe issue at most one warning per glyph/font/size/weight |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
71 // combination. |
13317
d2b799e3178a
allow warnings about missing glyphs to be disabled
John W. Eaton <jwe@octave.org>
parents:
13141
diff
changeset
|
72 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
73 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
74 warn_missing_glyph (FT_ULong c) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
75 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
76 warning_with_id ("Octave:missing-glyph", |
26152
b68c41cb0f99
Silence compiler warning about incorrect format specifier (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25460
diff
changeset
|
77 "text_renderer: skipping missing glyph for character '%lx'", c); |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
78 } |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
79 |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
80 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
81 warn_glyph_render (FT_ULong c) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
82 { |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
83 warning_with_id ("Octave:glyph-render", |
26152
b68c41cb0f99
Silence compiler warning about incorrect format specifier (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25460
diff
changeset
|
84 "text_renderer: unable to render glyph for character '%lx'", c); |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
85 } |
13317
d2b799e3178a
allow warnings about missing glyphs to be disabled
John W. Eaton <jwe@octave.org>
parents:
13141
diff
changeset
|
86 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
87 #if defined (_MSC_VER) |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
88 // FIXME: is this really needed? |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
89 // |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
90 // This is just a trick to avoid multiple symbol definitions. |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
91 // PermMatrix.h contains a dllexport'ed Array<octave_idx_type> |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
92 // that will cause MSVC not to generate a new instantiation and |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
93 // use the imported one instead. |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
94 # include "PermMatrix.h" |
13730
a2c74b5c02de
[MSVC] Prevent duplicate symbol.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13317
diff
changeset
|
95 #endif |
a2c74b5c02de
[MSVC] Prevent duplicate symbol.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13317
diff
changeset
|
96 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
97 // Forward declaration |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
98 static void ft_face_destroyed (void *object); |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
99 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
100 class |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
101 ft_manager |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
102 { |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
103 private: |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
104 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
105 ft_manager (void) |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
106 : m_library (), m_freetype_initialized (false), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
107 m_fontconfig_initialized (false) |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
108 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
109 if (FT_Init_FreeType (&m_library)) |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
110 error ("unable to initialize FreeType library"); |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
111 else |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
112 m_freetype_initialized = true; |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
113 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
114 #if defined (HAVE_FONTCONFIG) |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
115 if (! FcInit ()) |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
116 error ("unable to initialize fontconfig library"); |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
117 else |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
118 m_fontconfig_initialized = true; |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
119 #endif |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
120 } |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
121 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
122 public: |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
123 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
124 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
125 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
126 ft_manager (const ft_manager&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
127 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
128 ft_manager& operator = (const ft_manager&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
129 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
130 private: |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
131 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
132 ~ft_manager (void) |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
133 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
134 if (m_freetype_initialized) |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
135 FT_Done_FreeType (m_library); |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
136 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
137 #if defined (HAVE_FONTCONFIG) |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
138 // FIXME: Skip the call to FcFini because it can trigger the assertion |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
139 // |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
140 // octave: fccache.c:507: FcCacheFini: Assertion 'fcCacheChains[i] == ((void *)0)' failed. |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
141 // |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
142 // if (m_fontconfig_initialized) |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
143 // FcFini (); |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
144 #endif |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
145 } |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
146 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
147 public: |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
148 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
149 static bool instance_ok (void) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
150 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
151 bool retval = true; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
152 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
153 if (! instance) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
154 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
155 instance = new ft_manager (); |
26369
0249ba4c9589
Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents:
26340
diff
changeset
|
156 singleton_cleanup_list::add (cleanup_instance); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
157 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
158 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
159 return retval; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
160 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
161 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
162 static void cleanup_instance (void) { delete instance; instance = nullptr; } |
13992
e1f76bfe0452
apply singleton_cleanup to a few more classes
John W. Eaton <jwe@octave.org>
parents:
13730
diff
changeset
|
163 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
164 static FT_Face get_font (const std::string& name, const std::string& weight, |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
165 const std::string& angle, double size, |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
166 FT_ULong c = 0) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
167 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
168 return (instance_ok () |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
169 ? instance->do_get_font (name, weight, angle, size, c) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
170 : nullptr); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
171 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
172 |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
173 static octave_map get_system_fonts (void) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
174 { |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
175 return (instance_ok () |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
176 ? instance->do_get_system_fonts () |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
177 : octave_map ()); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
178 } |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
179 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
180 static void font_destroyed (FT_Face face) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
181 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
182 if (instance_ok ()) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
183 instance->do_font_destroyed (face); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
184 } |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
185 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
186 private: |
12122
f4689107dd8c
Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents:
11586
diff
changeset
|
187 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
188 static ft_manager *instance; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
189 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
190 typedef std::pair<std::string, double> ft_key; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
191 typedef std::map<ft_key, FT_Face> ft_cache; |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
192 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
193 // Cache the fonts loaded by FreeType. This cache only contains |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
194 // weak references to the fonts, strong references are only present |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
195 // in class text_renderer. |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
196 ft_cache cache; |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
197 |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
198 static octave_map do_get_system_fonts (void) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
199 { |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
200 static octave_map font_map; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
201 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
202 if (font_map.isempty ()) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
203 { |
28483
98889de398dd
* ft-text-renderer.cc: Allow build to succeed if HAVE_FONTCONFIG is undefined.
John W. Eaton <jwe@octave.org>
parents:
28305
diff
changeset
|
204 #if defined (HAVE_FONTCONFIG) |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
205 FcConfig *config = FcConfigGetCurrent(); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
206 FcPattern *pat = FcPatternCreate (); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
207 FcObjectSet *os = FcObjectSetBuild (FC_FAMILY, FC_SLANT, FC_WEIGHT, |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
208 FC_CHARSET, nullptr); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
209 FcFontSet *fs = FcFontList (config, pat, os); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
210 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
211 if (fs->nfont > 0) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
212 { |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
213 // Mark fonts that have at least all printable ASCII chars |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
214 FcCharSet *minimal_charset = FcCharSetCreate (); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
215 for (int i = 32; i < 127; i++) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
216 FcCharSetAddChar (minimal_charset, static_cast<FcChar32> (i)); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
217 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
218 string_vector fields (4); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
219 fields(0) = "family"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
220 fields(1) = "angle"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
221 fields(2) = "weight"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
222 fields(3) = "suitable"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
223 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
224 dim_vector dv (1, fs->nfont); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
225 Cell families (dv); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
226 Cell angles (dv); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
227 Cell weights (dv); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
228 Cell suitable (dv); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
229 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
230 unsigned char *family; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
231 int val; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
232 for (int i = 0; fs && i < fs->nfont; i++) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
233 { |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
234 FcPattern *font = fs->fonts[i]; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
235 if (FcPatternGetString (font, FC_FAMILY, 0, &family) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
236 == FcResultMatch) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
237 families(i) = std::string (reinterpret_cast<char*> (family)); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
238 else |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
239 families(i) = "unknown"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
240 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
241 if (FcPatternGetInteger (font, FC_SLANT, 0, &val) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
242 == FcResultMatch) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
243 angles(i) = (val == FC_SLANT_ITALIC |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
244 || val == FC_SLANT_OBLIQUE) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
245 ? "italic" : "normal"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
246 else |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
247 angles(i) = "unknown"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
248 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
249 if (FcPatternGetInteger (font, FC_WEIGHT, 0, &val) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
250 == FcResultMatch) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
251 weights(i) = (val == FC_WEIGHT_BOLD |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
252 || val == FC_WEIGHT_DEMIBOLD) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
253 ? "bold" : "normal"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
254 else |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
255 weights(i) = "unknown"; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
256 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
257 FcCharSet *cset; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
258 if (FcPatternGetCharSet (font, FC_CHARSET, 0, &cset) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
259 == FcResultMatch) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
260 suitable(i) = (FcCharSetIsSubset (minimal_charset, cset) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
261 ? true : false); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
262 else |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
263 suitable(i) = false; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
264 } |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
265 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
266 font_map = octave_map (dv, fields); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
267 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
268 font_map.assign ("family", families); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
269 font_map.assign ("angle", angles); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
270 font_map.assign ("weight", weights); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
271 font_map.assign ("suitable", suitable); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
272 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
273 if (fs) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
274 FcFontSetDestroy (fs); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
275 } |
28483
98889de398dd
* ft-text-renderer.cc: Allow build to succeed if HAVE_FONTCONFIG is undefined.
John W. Eaton <jwe@octave.org>
parents:
28305
diff
changeset
|
276 #endif |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
277 } |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
278 |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
279 return font_map; |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
280 } |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
281 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
282 FT_Face do_get_font (const std::string& name, const std::string& weight, |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
283 const std::string& angle, double size, |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
284 FT_ULong search_code_point) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
285 { |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
286 FT_Face retval = nullptr; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
287 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
288 #if defined (HAVE_FT_REFERENCE_FACE) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
289 // Look first into the font cache, then use fontconfig. If the font |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
290 // is present in the cache, simply add a reference and return it. |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
291 |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
292 ft_key key (name + ':' + weight + ':' + angle + ':' |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
293 + std::to_string (search_code_point), size); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
294 ft_cache::const_iterator it = cache.find (key); |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
295 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
296 if (it != cache.end ()) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
297 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
298 FT_Reference_Face (it->second); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
299 return it->second; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
300 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
301 #endif |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
302 |
24899
1a46d174a483
include a proper definition of Octave's private font fallback directory
Mike Miller <mtmiller@octave.org>
parents:
24722
diff
changeset
|
303 static std::string fonts_dir; |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
304 |
24899
1a46d174a483
include a proper definition of Octave's private font fallback directory
Mike Miller <mtmiller@octave.org>
parents:
24722
diff
changeset
|
305 if (fonts_dir.empty ()) |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
306 { |
24899
1a46d174a483
include a proper definition of Octave's private font fallback directory
Mike Miller <mtmiller@octave.org>
parents:
24722
diff
changeset
|
307 fonts_dir = sys::env::getenv ("OCTAVE_FONTS_DIR"); |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
308 |
24899
1a46d174a483
include a proper definition of Octave's private font fallback directory
Mike Miller <mtmiller@octave.org>
parents:
24722
diff
changeset
|
309 if (fonts_dir.empty ()) |
24900
00d42b86d0a5
configure: new option --with-system-freefont to use system fonts (bug #53348)
Mike Miller <mtmiller@octave.org>
parents:
24899
diff
changeset
|
310 #if defined (SYSTEM_FREEFONT_DIR) |
25460
627d6bde9b8d
solve installation info initialization problem differently
John W. Eaton <jwe@octave.org>
parents:
25440
diff
changeset
|
311 fonts_dir = SYSTEM_FREEFONT_DIR; |
24900
00d42b86d0a5
configure: new option --with-system-freefont to use system fonts (bug #53348)
Mike Miller <mtmiller@octave.org>
parents:
24899
diff
changeset
|
312 #else |
25460
627d6bde9b8d
solve installation info initialization problem differently
John W. Eaton <jwe@octave.org>
parents:
25440
diff
changeset
|
313 fonts_dir = config::oct_fonts_dir (); |
24900
00d42b86d0a5
configure: new option --with-system-freefont to use system fonts (bug #53348)
Mike Miller <mtmiller@octave.org>
parents:
24899
diff
changeset
|
314 #endif |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
315 } |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
316 |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
317 |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
318 // Default font file |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
319 std::string file; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
320 |
24899
1a46d174a483
include a proper definition of Octave's private font fallback directory
Mike Miller <mtmiller@octave.org>
parents:
24722
diff
changeset
|
321 if (! fonts_dir.empty ()) |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
322 { |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
323 file = fonts_dir + sys::file_ops::dir_sep_str () + "FreeSans"; |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
324 |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
325 if (weight == "bold") |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
326 file += "Bold"; |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
327 |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
328 if (angle == "italic" || angle == "oblique") |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
329 file += "Oblique"; |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
330 |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
331 file += ".otf"; |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
332 } |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
333 |
14003
1555c5a177c9
better fix for fontconfig segfault
John W. Eaton <jwe@octave.org>
parents:
13999
diff
changeset
|
334 #if defined (HAVE_FONTCONFIG) |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
335 if ((search_code_point != 0 || name != "*") && m_fontconfig_initialized) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
336 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
337 int fc_weight, fc_angle; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
338 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
339 if (weight == "bold") |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
340 fc_weight = FC_WEIGHT_BOLD; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
341 else |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
342 fc_weight = FC_WEIGHT_NORMAL; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
343 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
344 if (angle == "italic") |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
345 fc_angle = FC_SLANT_ITALIC; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
346 else if (angle == "oblique") |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
347 fc_angle = FC_SLANT_OBLIQUE; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
348 else |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
349 fc_angle = FC_SLANT_ROMAN; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
350 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
351 FcPattern *pat = FcPatternCreate (); |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
352 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
353 FcPatternAddString (pat, FC_FAMILY, |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
354 (reinterpret_cast<const FcChar8 *> |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
355 (name.c_str ()))); |
9616
2093499ec9f4
avoid crash if default font can't be found
John W. Eaton <jwe@octave.org>
parents:
9406
diff
changeset
|
356 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
357 FcPatternAddInteger (pat, FC_WEIGHT, fc_weight); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
358 FcPatternAddInteger (pat, FC_SLANT, fc_angle); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
359 FcPatternAddDouble (pat, FC_PIXEL_SIZE, size); |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
360 |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
361 if (search_code_point > 0) |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
362 { |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
363 FcCharSet *minimal_charset = FcCharSetCreate (); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
364 FcCharSetAddChar (minimal_charset, |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
365 static_cast<FcChar32> (search_code_point)); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
366 FcPatternAddCharSet (pat, FC_CHARSET, minimal_charset); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
367 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
368 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
369 if (FcConfigSubstitute (nullptr, pat, FcMatchPattern)) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
370 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
371 FcResult res; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
372 FcPattern *match; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
373 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
374 FcDefaultSubstitute (pat); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
375 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
376 match = FcFontMatch (nullptr, pat, &res); |
9833 | 377 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
378 // FIXME: originally, this test also required that |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
379 // res != FcResultNoMatch. Is that really needed? |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
380 if (match) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
381 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
382 unsigned char *tmp; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
383 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
384 FcPatternGetString (match, FC_FILE, 0, &tmp); |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
385 file = reinterpret_cast<char *> (tmp); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
386 } |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
387 else |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
388 ::warning ("could not match any font: %s-%s-%s-%g, using default font", |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
389 name.c_str (), weight.c_str (), angle.c_str (), |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
390 size); |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
391 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
392 if (match) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
393 FcPatternDestroy (match); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
394 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
395 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
396 FcPatternDestroy (pat); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
397 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
398 #endif |
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
399 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
400 if (file.empty ()) |
24126
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
401 ::warning ("unable to find default font files"); |
2390079a8aed
Provide default font files and use them (bug #52150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
24076
diff
changeset
|
402 else |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
403 { |
29489
ee66869c30d6
Fix loading fonts from path with non-ASCII characters on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29470
diff
changeset
|
404 std::string ascii_file = sys::get_ASCII_filename (file); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
405 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
406 if (FT_New_Face (m_library, ascii_file.c_str (), 0, &retval)) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
407 ::warning ("ft_manager: unable to load font: %s", file.c_str ()); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
408 #if defined (HAVE_FT_REFERENCE_FACE) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
409 else |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
410 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
411 // Install a finalizer to notify ft_manager that the font is |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
412 // being destroyed. The class ft_manager only keeps weak |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
413 // references to font objects. |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
414 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
415 retval->generic.data = new ft_key (key); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
416 retval->generic.finalizer = ft_face_destroyed; |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
417 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
418 // Insert loaded font into the cache. |
28206
11d66485fc19
Correctly cache fonts in ft_manager (bug #58150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27923
diff
changeset
|
419 if (FT_Reference_Face (retval) == 0) |
11d66485fc19
Correctly cache fonts in ft_manager (bug #58150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27923
diff
changeset
|
420 cache[key] = retval; |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
421 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
422 #endif |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
423 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
424 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
425 return retval; |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
426 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
427 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
428 void do_font_destroyed (FT_Face face) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
429 { |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
430 if (face->generic.data) |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
431 { |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
432 ft_key *pkey = reinterpret_cast<ft_key *> (face->generic.data); |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
433 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
434 cache.erase (*pkey); |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
435 delete pkey; |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
436 face->generic.data = nullptr; |
28206
11d66485fc19
Correctly cache fonts in ft_manager (bug #58150)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27923
diff
changeset
|
437 FT_Done_Face (face); |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
438 } |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
439 } |
17270
ba865ea9c7e9
Add simple FreeType font cache in class ft_manager.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
440 |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
441 private: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
442 FT_Library m_library; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
443 bool m_freetype_initialized; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
444 bool m_fontconfig_initialized; |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
445 }; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
446 |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23447
diff
changeset
|
447 ft_manager *ft_manager::instance = nullptr; |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
448 |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
449 static void |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
450 ft_face_destroyed (void *object) |
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
451 { |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
452 ft_manager::font_destroyed (reinterpret_cast<FT_Face> (object)); |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
453 } |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
454 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
455 class |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
456 OCTINTERP_API |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
457 ft_text_renderer : public base_text_renderer |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
458 { |
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
459 public: |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
460 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
461 enum |
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 MODE_BBOX = 0, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
464 MODE_RENDER = 1 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
465 }; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
466 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
467 public: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
468 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
469 ft_text_renderer (void) |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
470 : base_text_renderer (), m_font (), m_bbox (1, 4, 0.0), m_halign (0), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
471 m_xoffset (0), m_line_yoffset (0), m_yoffset (0), m_mode (MODE_BBOX), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
472 m_color (dim_vector (1, 3), 0), m_do_strlist (false), m_strlist (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
473 m_line_xoffset (0), m_ymin (0), m_ymax (0), m_deltax (0), |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
474 m_max_fontsize (0), m_antialias (true) |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22331
diff
changeset
|
475 { } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
476 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
477 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
478 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
479 ft_text_renderer (const ft_text_renderer&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
480 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
481 ft_text_renderer& operator = (const ft_text_renderer&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
482 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
483 ~ft_text_renderer (void) = default; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
484 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
485 void visit (text_element_string& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
486 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
487 void visit (text_element_list& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
488 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
489 void visit (text_element_subscript& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
490 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
491 void visit (text_element_superscript& e); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
492 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
493 void visit (text_element_color& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
494 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
495 void visit (text_element_fontsize& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
496 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
497 void visit (text_element_fontname& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
498 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
499 void visit (text_element_fontstyle& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
500 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
501 void visit (text_element_symbol& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
502 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
503 void visit (text_element_combined& e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
504 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
505 void reset (void); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
506 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
507 uint8NDArray get_pixels (void) const { return pixels; } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
508 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
509 Matrix get_boundingbox (void) const { return m_bbox; } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
510 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
511 uint8NDArray render (text_element *elt, Matrix& box, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
512 int rotation = ROTATION_0); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
513 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
514 Matrix get_extent (text_element *elt, double rotation = 0.0); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
515 Matrix get_extent (const std::string& txt, double rotation, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
516 const caseless_str& interpreter); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
517 |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
518 void set_anti_aliasing (bool val) { m_antialias = val; }; |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
519 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
520 void set_font (const std::string& name, const std::string& weight, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
521 const std::string& angle, double size); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
522 |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
523 octave_map get_system_fonts (void); |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
524 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
525 void set_color (const Matrix& c); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
526 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
527 void set_mode (int m); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
528 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
529 void text_to_pixels (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
530 uint8NDArray& pxls, Matrix& bbox, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
531 int halign, int valign, double rotation, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
532 const caseless_str& interpreter, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
533 bool handle_rotation); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
534 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
535 private: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
536 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
537 // Class to hold information about fonts and a strong |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
538 // reference to the font objects loaded by FreeType. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
539 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
540 class ft_font : public text_renderer::font |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
541 { |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
542 public: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
543 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
544 ft_font (void) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
545 : text_renderer::font (), face (nullptr) { } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
546 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
547 ft_font (const std::string& nm, const std::string& wt, |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
548 const std::string& ang, double sz, FT_Face f = nullptr) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
549 : text_renderer::font (nm, wt, ang, sz), face (f) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
550 { } |
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 ft_font (const ft_font& ft); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
553 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
554 ~ft_font (void) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
555 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
556 if (face) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
557 FT_Done_Face (face); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
558 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
559 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
560 ft_font& operator = (const ft_font& ft); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
561 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
562 bool is_valid (void) const { return get_face (); } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
563 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
564 FT_Face get_face (void) const; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
565 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
566 private: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
567 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
568 mutable FT_Face face; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
569 }; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
570 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
571 void push_new_line (void); |
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 void update_line_bbox (void); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
574 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
575 void compute_bbox (void); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
576 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
577 int compute_line_xoffset (const Matrix& lb) const; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
578 |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
579 FT_UInt process_character (FT_ULong code, FT_UInt previous, |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
580 std::string& sub_font); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
581 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
582 public: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
583 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
584 void text_to_strlist (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
585 std::list<text_renderer::string>& lst, Matrix& bbox, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
586 int halign, int valign, double rotation, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
587 const caseless_str& interp); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
588 |
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
589 private: |
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
590 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
591 // The current font used by the renderer. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
592 ft_font m_font; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
593 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
594 // Used to stored the bounding box corresponding to the rendered text. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
595 // The bounding box has the form [x, y, w, h] where x and y represent the |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
596 // coordinates of the bottom left corner relative to the anchor point of |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
597 // the text (== start of text on the baseline). Due to font descent or |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
598 // multiple lines, the value y is usually negative. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
599 Matrix m_bbox; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
600 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
601 // Used to stored the rendered text. It's a 3D matrix with size MxNx4 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
602 // where M and N are the width and height of the bounding box. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
603 uint8NDArray pixels; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
604 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
605 // Used to store the bounding box of each line. This is used to layout |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
606 // multiline text properly. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
607 std::list<Matrix> line_bbox; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
608 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
609 // The current horizontal alignment. This is used to align multi-line text. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
610 int m_halign; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
611 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
612 // The X offset for the next glyph. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
613 int m_xoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
614 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
615 // The Y offset of the baseline for the current line. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
616 int m_line_yoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
617 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
618 // The Y offset of the baseline for the next glyph. The offset is relative |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
619 // to line_yoffset. The total Y offset is computed with: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
620 // line_yoffset + yoffset. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
621 int m_yoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
622 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
623 // The current mode of the rendering process (box computing or rendering). |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
624 int m_mode; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
625 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
626 // The base color of the rendered text. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
627 uint8NDArray m_color; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
628 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
629 // A list of parsed strings to be used for printing. |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
630 bool m_do_strlist; |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
631 std::list<text_renderer::string> m_strlist; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
632 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
633 // The X offset of the baseline for the current line. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
634 int m_line_xoffset; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
635 |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
636 // Min and max y coordinates of all glyphs in a line. |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
637 FT_Pos m_ymin; |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
638 FT_Pos m_ymax; |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
639 |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
640 // Difference between the advance and the actual extent of the latest glyph |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
641 FT_Pos m_deltax; |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
642 |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
643 // Used for computing the distance between lines. |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
644 double m_max_fontsize; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
645 |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
646 // Anti-aliasing. |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
647 bool m_antialias; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
648 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
649 }; |
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
650 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
651 void |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
652 ft_text_renderer::set_font (const std::string& name, |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
653 const std::string& weight, |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
654 const std::string& angle, double size) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
655 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
656 // FIXME: take "fontunits" into account |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
657 m_font = ft_font (name, weight, angle, size, nullptr); |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
658 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
659 |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
660 octave_map |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
661 ft_text_renderer::get_system_fonts (void) |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
662 { |
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
663 return ft_manager::get_system_fonts (); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
664 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
665 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
666 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
667 ft_text_renderer::push_new_line (void) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
668 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
669 switch (m_mode) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
670 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
671 case MODE_BBOX: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
672 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
673 // Create a new bbox entry based on the current font. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
674 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
675 FT_Face face = m_font.get_face (); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
676 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
677 if (face) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
678 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
679 Matrix bb (1, 5, 0.0); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
680 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
681 line_bbox.push_back (bb); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
682 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
683 m_xoffset = m_yoffset = 0; |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
684 m_ymin = m_ymax = m_deltax = 0; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
685 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
686 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
687 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
688 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
689 case MODE_RENDER: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
690 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
691 // Move to the next line bbox, adjust xoffset based on alignment |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
692 // and yoffset based on the old and new line bbox. |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
693 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
694 Matrix old_bbox = line_bbox.front (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
695 line_bbox.pop_front (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
696 Matrix new_bbox = line_bbox.front (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
697 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
698 m_xoffset = m_line_xoffset = compute_line_xoffset (new_bbox); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
699 m_line_yoffset -= (-old_bbox(1) + math::round (0.4 * m_max_fontsize) |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
700 + (new_bbox(3) + new_bbox(1))); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
701 m_yoffset = 0; |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
702 m_ymin = m_ymax = m_deltax = 0; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
703 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
704 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
705 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
706 } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
707 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
708 int |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
709 ft_text_renderer::compute_line_xoffset (const Matrix& lb) const |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
710 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
711 if (! m_bbox.isempty ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
712 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
713 switch (m_halign) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
714 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
715 case 0: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
716 return 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
717 case 1: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
718 return (m_bbox(2) - lb(2)) / 2; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
719 case 2: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
720 return (m_bbox(2) - lb(2)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
721 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
722 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
723 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
724 return 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
725 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
726 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
727 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
728 ft_text_renderer::compute_bbox (void) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
729 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
730 // Stack the various line bbox together and compute the final |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
731 // bounding box for the entire text string. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
732 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
733 m_bbox = Matrix (); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
734 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
735 switch (line_bbox.size ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
736 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
737 case 0: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
738 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
739 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
740 case 1: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
741 m_bbox = line_bbox.front ().extract (0, 0, 0, 3); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
742 break; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
743 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
744 default: |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
745 for (const auto& lbox : line_bbox) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
746 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
747 if (m_bbox.isempty ()) |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
748 m_bbox = lbox.extract (0, 0, 0, 3); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
749 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
750 { |
26221
76ac35f71573
Fix regression in multi-line text rendering (bug #55218)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26187
diff
changeset
|
751 double delta = math::round (0.4 * m_max_fontsize) + lbox(3); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
752 m_bbox(1) -= delta; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
753 m_bbox(3) += delta; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
754 m_bbox(2) = math::max (m_bbox(2), lbox(2)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
755 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
756 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
757 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
758 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
759 } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
760 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
761 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
762 ft_text_renderer::update_line_bbox (void) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
763 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
764 // Called after a font change, when in MODE_BBOX mode, to update the |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
765 // current line bbox with the new font metrics. This also includes the |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
766 // current yoffset, that is the offset of the current glyph's baseline |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
767 // the line's baseline. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
768 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
769 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
770 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
771 Matrix& bb = line_bbox.back (); |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
772 bb(1) = m_ymin; |
26330
45cf2ada3e39
Make sure text bounding box is high enough (bug #55328).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26221
diff
changeset
|
773 // Add one pixel to the bbox height to avoid occasional text clipping. |
45cf2ada3e39
Make sure text bounding box is high enough (bug #55328).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26221
diff
changeset
|
774 // See bug #55328. |
45cf2ada3e39
Make sure text bounding box is high enough (bug #55328).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26221
diff
changeset
|
775 bb(3) = (m_ymax + 1) - m_ymin; |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
776 if (m_deltax > 0) |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
777 bb(2) += m_deltax; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
778 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
779 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
780 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
781 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
782 ft_text_renderer::set_mode (int m) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
783 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
784 m_mode = m; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
785 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
786 switch (m_mode) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
787 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
788 case MODE_BBOX: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
789 m_xoffset = m_line_yoffset = m_yoffset = 0; |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
790 m_max_fontsize = 0.0; |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
791 m_bbox = Matrix (1, 4, 0.0); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
792 line_bbox.clear (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
793 push_new_line (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
794 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
795 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
796 case MODE_RENDER: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
797 if (m_bbox.numel () != 4) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
798 { |
22515
77b50a83ec11
Error out, rather than segfault, when fontname is "" (bug #49102).
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
799 ::error ("ft_text_renderer: invalid bounding box, cannot render"); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
800 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
801 m_xoffset = m_line_yoffset = m_yoffset = 0; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
802 pixels = uint8NDArray (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
803 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
804 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
805 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
806 dim_vector d (4, octave_idx_type (m_bbox(2)), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
807 octave_idx_type (m_bbox(3))); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
808 pixels = uint8NDArray (d, static_cast<uint8_t> (0)); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
809 m_xoffset = compute_line_xoffset (line_bbox.front ()); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
810 m_line_yoffset = -m_bbox(1); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
811 m_yoffset = 0; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
812 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
813 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
814 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
815 default: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
816 error ("ft_text_renderer: invalid mode '%d'", m_mode); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
817 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
818 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
819 } |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
820 bool is_opaque (const FT_GlyphSlot &glyph, const int x, const int y) |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
821 { |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
822 // Borrowed from https://stackoverflow.com/questions/14800827/ |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
823 // indexing-pixels-in-a-monochrome-freetype-glyph-buffer |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
824 int pitch = std::abs (glyph->bitmap.pitch); |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
825 unsigned char *row = &glyph->bitmap.buffer[pitch * y]; |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
826 char cvalue = row[x >> 3]; |
26995
ab5bfee22d18
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26858
diff
changeset
|
827 |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
828 return ((cvalue & (128 >> (x & 7))) != 0); |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
829 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
830 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
831 FT_UInt |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
832 ft_text_renderer::process_character (FT_ULong code, FT_UInt previous, |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
833 std::string& sub_name) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
834 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
835 FT_Face face = m_font.get_face (); |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
836 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
837 sub_name = face->family_name; |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
838 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
839 FT_UInt glyph_index = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
840 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
841 if (face) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
842 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
843 glyph_index = FT_Get_Char_Index (face, code); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
844 |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
845 if (code != '\n' && code != '\t' |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
846 && (! glyph_index |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
847 || FT_Load_Glyph (face, glyph_index, FT_LOAD_DEFAULT))) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
848 { |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
849 #if defined (HAVE_FONTCONFIG) |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
850 // Try to substitue font |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
851 FT_Face sub_face = ft_manager::get_font (m_font.get_name (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
852 m_font.get_weight (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
853 m_font.get_angle (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
854 m_font.get_size (), |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
855 code); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
856 |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
857 if (sub_face) |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
858 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
859 FT_Set_Char_Size (sub_face, 0, m_font.get_size ()*64, 0, 0); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
860 |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
861 glyph_index = FT_Get_Char_Index (sub_face, code); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
862 |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
863 if (glyph_index |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
864 && (FT_Load_Glyph (sub_face, glyph_index, FT_LOAD_DEFAULT) |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
865 == 0)) |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
866 { |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
867 static std::string prev_sub_name; |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
868 |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
869 if (prev_sub_name.empty () |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
870 || prev_sub_name != std::string (sub_face->family_name)) |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
871 { |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
872 prev_sub_name = sub_face->family_name; |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
873 warning_with_id ("Octave:substituted-glyph", |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
874 "text_renderer: substituting font to '%s' for some characters", |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
875 sub_face->family_name); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
876 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
877 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
878 ft_font saved_font = m_font; |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
879 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
880 m_font = ft_font (m_font.get_name (), m_font.get_weight (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
881 m_font.get_angle (), m_font.get_size (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
882 sub_face); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
883 |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
884 process_character (code, previous, sub_name); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
885 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
886 m_font = saved_font; |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
887 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
888 else |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
889 { |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
890 glyph_index = 0; |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
891 warn_missing_glyph (code); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
892 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
893 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
894 else |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
895 { |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
896 glyph_index = 0; |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
897 warn_missing_glyph (code); |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
898 } |
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
899 #else |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
900 glyph_index = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
901 warn_missing_glyph (code); |
29678
7511182e5e9b
Allow for automatic font substitution in graphics text rendering
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29655
diff
changeset
|
902 #endif |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
903 } |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
904 else if ((code == '\n') || (code == '\t')) |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
905 { |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
906 glyph_index = FT_Get_Char_Index (face, ' '); |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
907 if (! glyph_index |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
908 || FT_Load_Glyph (face, glyph_index, FT_LOAD_DEFAULT)) |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
909 { |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
910 glyph_index = 0; |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
911 warn_missing_glyph (' '); |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
912 } |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
913 else if (code == '\n') |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
914 push_new_line (); |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
915 else |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
916 { |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
917 // Advance to next multiple of 4 times the width of the "space" |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
918 // character. |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
919 int x_tab = 4 * (face->glyph->advance.x >> 6); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
920 m_xoffset = (1 + std::floor (1. * m_xoffset / x_tab)) * x_tab; |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
921 } |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
922 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
923 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
924 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
925 switch (m_mode) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
926 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
927 case MODE_RENDER: |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
928 if (FT_Render_Glyph (face->glyph, (m_antialias |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
929 ? FT_RENDER_MODE_NORMAL |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
930 : FT_RENDER_MODE_MONO))) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
931 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
932 glyph_index = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
933 warn_glyph_render (code); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
934 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
935 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
936 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
937 FT_Bitmap& bitmap = face->glyph->bitmap; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
938 int x0, y0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
939 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
940 if (previous) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
941 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
942 FT_Vector delta; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
943 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
944 FT_Get_Kerning (face, previous, glyph_index, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
945 FT_KERNING_DEFAULT, &delta); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
946 |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
947 m_xoffset += (delta.x >> 6); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
948 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
949 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
950 x0 = m_xoffset + face->glyph->bitmap_left; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
951 y0 = m_line_yoffset + m_yoffset |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
952 + (face->glyph->bitmap_top - 1); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
953 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
954 // 'w' seems to have a negative -1 |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
955 // face->glyph->bitmap_left, this is so we don't index out |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
956 // of bound, and assumes we've allocated the right amount of |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
957 // horizontal space in the bbox. |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
958 if (x0 < 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
959 x0 = 0; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
960 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
961 for (int r = 0; static_cast<unsigned int> (r) < bitmap.rows; r++) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
962 for (int c = 0; static_cast<unsigned int> (c) < bitmap.width; c++) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
963 { |
26858
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
964 unsigned char pix |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
965 = (m_antialias |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
966 ? bitmap.buffer[r*bitmap.width+c] |
0adb232f93b9
Implement axes and text "fontsmoothing" property (bug #55833).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26619
diff
changeset
|
967 : (is_opaque (face->glyph, c, r) ? 255 : 0)); |
26995
ab5bfee22d18
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26858
diff
changeset
|
968 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
969 if (x0+c < 0 || x0+c >= pixels.dim2 () |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
970 || y0-r < 0 || y0-r >= pixels.dim3 ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
971 { |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
972 // ::warning ("ft_text_renderer: x %d, y %d", |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
973 // x0+c, y0-r); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
974 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
975 else if (pixels(3, x0+c, y0-r).value () == 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
976 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
977 pixels(0, x0+c, y0-r) = m_color(0); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
978 pixels(1, x0+c, y0-r) = m_color(1); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
979 pixels(2, x0+c, y0-r) = m_color(2); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
980 pixels(3, x0+c, y0-r) = pix; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
981 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
982 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
983 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
984 m_xoffset += (face->glyph->advance.x >> 6); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
985 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
986 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
987 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
988 case MODE_BBOX: |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
989 Matrix& bb = line_bbox.back (); |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
990 |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
991 // If we have a previous glyph, use kerning information. This |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
992 // usually means moving a bit backward before adding the next |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
993 // glyph. That is, "delta.x" is usually < 0. |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
994 if (previous) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
995 { |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
996 FT_Vector delta; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
997 |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
998 FT_Get_Kerning (face, previous, glyph_index, |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
999 FT_KERNING_DEFAULT, &delta); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1000 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1001 m_xoffset += (delta.x >> 6); |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
1002 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1003 |
25421
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
1004 // Extend current X offset box by the width of the current |
c335f94766a7
Re-organize to avoid code duplication (bug #54083).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25420
diff
changeset
|
1005 // glyph. Then extend the line bounding box if necessary. |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1006 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1007 m_xoffset += (face->glyph->advance.x >> 6); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1008 bb(2) = math::max (bb(2), m_xoffset); |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1009 |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1010 // Store the actual bbox vertical coordinates of this character |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1011 FT_Glyph glyph; |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1012 if (FT_Get_Glyph (face->glyph, &glyph)) |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1013 warn_glyph_render (code); |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1014 else |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1015 { |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1016 FT_BBox glyph_bbox; |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1017 FT_Glyph_Get_CBox (glyph, FT_GLYPH_BBOX_UNSCALED, |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1018 &glyph_bbox); |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1019 m_deltax = (glyph_bbox.xMax - face->glyph->advance.x) >> 6; |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1020 m_ymin = math::min ((glyph_bbox.yMin >> 6) + m_yoffset, |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1021 m_ymin); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1022 m_ymax = math::max ((glyph_bbox.yMax >> 6) + m_yoffset, |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1023 m_ymax); |
26478
6f22d0c91beb
Fix memory leak with FT_Glyph objects (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26376
diff
changeset
|
1024 FT_Done_Glyph (glyph); |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1025 update_line_bbox (); |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1026 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1027 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1028 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1029 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1030 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1031 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1032 return glyph_index; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1033 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1034 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1035 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1036 ft_text_renderer::text_to_strlist (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1037 std::list<text_renderer::string>& lst, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1038 Matrix& box, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1039 int ha, int va, double rot, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1040 const caseless_str& interp) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1041 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1042 uint8NDArray pxls; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1043 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1044 // First run text_to_pixels which will also build the string list |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1045 |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1046 m_strlist = std::list<text_renderer::string> (); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
1047 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
1048 unwind_protect_var<bool> restore_var1 (m_do_strlist); |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
1049 unwind_protect_var<std::list<text_renderer::string>> |
28823
26cfccfee9a0
Replace unwind_protect with more efficient constructs (bug #59192).
Rik <rik@octave.org>
parents:
28483
diff
changeset
|
1050 restore_var2 (m_strlist); |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
1051 |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1052 m_do_strlist = true; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
1053 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1054 text_to_pixels (txt, pxls, box, ha, va, rot, interp, false); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1055 |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1056 lst = m_strlist; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1057 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1058 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1059 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1060 ft_text_renderer::visit (text_element_string& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1061 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1062 if (m_font.is_valid ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1063 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1064 m_max_fontsize = std::max (m_max_fontsize, m_font.get_size ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1065 FT_UInt glyph_index, previous = 0; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1066 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1067 std::string str = e.string_value (); |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1068 const uint8_t *c = reinterpret_cast<const uint8_t *> (str.c_str ()); |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1069 uint32_t u32_c; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
1070 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1071 std::size_t n = str.size (); |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1072 std::size_t icurr = 0; |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1073 std::size_t ibegin = 0; |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1074 |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1075 // Initialize a new string |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1076 text_renderer::string fs (str, m_font, m_xoffset, m_yoffset); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1077 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1078 std::string fname = m_font.get_face ()->family_name; |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1079 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1080 if (fname.find (" ") != std::string::npos) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1081 fname = "'" + fname + "'"; |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1082 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1083 fs.set_family (fname); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1084 |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23807
diff
changeset
|
1085 std::vector<double> xdata; |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1086 std::string sub_name; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1087 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1088 while (n > 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1089 { |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1090 // Retrieve the length and the u32 representation of the current |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1091 // character |
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1092 int mblen = octave_u8_strmbtouc_wrapper (&u32_c, c + icurr); |
27142
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1093 if (mblen < 1) |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1094 { |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1095 // This is not an UTF-8 character, use a replacement character |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1096 mblen = 1; |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1097 u32_c = 0xFFFD; |
8a07083c8cfc
Use replacement characters to display non UTF-8 strings in figures (bug #55974)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
1098 } |
27623
698c8b08fe8c
New function uisetfont (bug #57130).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
27150
diff
changeset
|
1099 |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1100 n -= mblen; |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1101 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1102 if (m_do_strlist && m_mode == MODE_RENDER) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1103 { |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1104 if (u32_c == 10) |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1105 { |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1106 // Finish previous string in m_strlist before processing |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1107 // the newline character |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1108 fs.set_y (m_line_yoffset + m_yoffset); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1109 fs.set_color (m_color); |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
1110 |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1111 std::string s = str.substr (ibegin, icurr - ibegin); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1112 if (! s.empty ()) |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1113 { |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1114 fs.set_string (s); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1115 fs.set_y (m_line_yoffset + m_yoffset); |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1116 fs.set_xdata (xdata); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1117 fs.set_family (fname); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1118 m_strlist.push_back (fs); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1119 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1120 } |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1121 else |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1122 xdata.push_back (m_xoffset); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1123 } |
25362
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1124 |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1125 glyph_index = process_character (u32_c, previous, sub_name); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1126 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1127 if (m_do_strlist && m_mode == MODE_RENDER && ! sub_name.empty ()) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1128 { |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1129 // Add substitution font to the family name stack |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1130 std::string tmp_family = fs.get_family (); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1131 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1132 if (tmp_family.find (sub_name) == std::string::npos) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1133 { |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1134 if (sub_name.find (" ") != std::string::npos) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1135 sub_name = "'" + sub_name + "'"; |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1136 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1137 fs.set_family (tmp_family + ", " + sub_name); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1138 } |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1139 } |
25362
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1140 |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1141 if (u32_c == 10) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1142 { |
25362
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1143 previous = 0; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26573
diff
changeset
|
1144 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1145 if (m_do_strlist && m_mode == MODE_RENDER) |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1146 { |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1147 // Start a new string in m_strlist |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1148 ibegin = icurr+1; |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1149 xdata.clear (); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1150 fs = text_renderer::string (str.substr (ibegin), m_font, |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1151 m_line_xoffset, m_yoffset); |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1152 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1153 } |
25362
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1154 else |
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1155 previous = glyph_index; |
def1b446ba64
Convert strings to UTF-32 for FreeType (bug #53646).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25336
diff
changeset
|
1156 |
26187
8d4f23b7f4eb
Improve text extent calculation when using freetype text renderer (bug #55075)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26152
diff
changeset
|
1157 icurr += mblen; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1158 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1159 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1160 if (m_do_strlist && m_mode == MODE_RENDER |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1161 && ! fs.get_string ().empty ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1162 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1163 fs.set_y (m_line_yoffset + m_yoffset); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1164 fs.set_color (m_color); |
24076
1b7e49a72c62
improve text rendering in svg printout (bug #48567)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23807
diff
changeset
|
1165 fs.set_xdata (xdata); |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1166 m_strlist.push_back (fs); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1167 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1168 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1169 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1170 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1171 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1172 ft_text_renderer::visit (text_element_list& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1173 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1174 // Save and restore (after processing the list) the current font and color. |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1175 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1176 ft_font saved_font (m_font); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1177 uint8NDArray saved_color (m_color); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1178 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1179 text_processor::visit (e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1180 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1181 m_font = saved_font; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1182 m_color = saved_color; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1183 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1184 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1185 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1186 ft_text_renderer::visit (text_element_subscript& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1187 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1188 ft_font saved_font (m_font); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1189 int saved_line_yoffset = m_line_yoffset; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1190 int saved_yoffset = m_yoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1191 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1192 double sz = m_font.get_size (); |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1193 |
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1194 // Reducing font size by 70% produces decent results. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1195 set_font (m_font.get_name (), m_font.get_weight (), m_font.get_angle (), |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1196 std::max (5.0, sz * 0.7)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1197 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1198 if (m_font.is_valid ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1199 { |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1200 // Shifting the baseline by 15% of the font size gives decent results. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1201 m_yoffset -= std::ceil (sz * 0.15); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1202 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1203 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1204 update_line_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1205 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1206 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1207 text_processor::visit (e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1208 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1209 m_font = saved_font; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1210 // If line_yoffset changed, this means we moved to a new line; hence yoffset |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1211 // cannot be restored, because the saved value is not relevant anymore. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1212 if (m_line_yoffset == saved_line_yoffset) |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1213 m_yoffset = saved_yoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1214 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1215 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1216 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1217 ft_text_renderer::visit (text_element_superscript& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1218 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1219 ft_font saved_font (m_font); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1220 int saved_line_yoffset = m_line_yoffset; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1221 int saved_yoffset = m_yoffset; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1222 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1223 double sz = m_font.get_size (); |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1224 |
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1225 // Reducing font size by 70% produces decent results. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1226 set_font (m_font.get_name (), m_font.get_weight (), m_font.get_angle (), |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1227 std::max (5.0, sz * 0.7)); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1228 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1229 if (saved_font.is_valid ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1230 { |
28305
6e8d5c99263c
Produce better looking TeX superscript and subscripts (bug #58376).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
28206
diff
changeset
|
1231 // Shifting the baseline by 40% of the font size gives decent results. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1232 m_yoffset += std::ceil (sz * 0.4); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1233 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1234 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1235 update_line_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1236 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1237 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1238 text_processor::visit (e); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1239 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1240 m_font = saved_font; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1241 // If line_yoffset changed, this means we moved to a new line; hence yoffset |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1242 // cannot be restored, because the saved value is not relevant anymore. |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1243 if (m_line_yoffset == saved_line_yoffset) |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1244 m_yoffset = saved_yoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1245 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1246 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1247 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1248 ft_text_renderer::visit (text_element_color& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1249 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1250 if (m_mode == MODE_RENDER) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1251 set_color (e.get_color ()); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1252 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1253 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1254 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1255 ft_text_renderer::visit (text_element_fontsize& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1256 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1257 double sz = e.get_fontsize (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1258 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1259 // FIXME: Matlab documentation says that the font size is expressed |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1260 // in the text object FontUnit. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1261 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1262 set_font (m_font.get_name (), m_font.get_weight (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1263 m_font.get_angle (), sz); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1264 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1265 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1266 update_line_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1267 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1268 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1269 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1270 ft_text_renderer::visit (text_element_fontname& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1271 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1272 set_font (e.get_fontname (), m_font.get_weight (), m_font.get_angle (), |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1273 m_font.get_size ()); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1274 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1275 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1276 update_line_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1277 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1278 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1279 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1280 ft_text_renderer::visit (text_element_fontstyle& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1281 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1282 switch (e.get_fontstyle ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1283 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1284 case text_element_fontstyle::normal: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1285 set_font (m_font.get_name (), "normal", "normal", m_font.get_size ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1286 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1287 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1288 case text_element_fontstyle::bold: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1289 set_font (m_font.get_name (), "bold", "normal", m_font.get_size ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1290 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1291 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1292 case text_element_fontstyle::italic: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1293 set_font (m_font.get_name (), "normal", "italic", m_font.get_size ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1294 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1295 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1296 case text_element_fontstyle::oblique: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1297 set_font (m_font.get_name (), "normal", "oblique", m_font.get_size ()); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1298 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1299 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1300 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1301 if (m_mode == MODE_BBOX) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1302 update_line_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1303 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1304 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1305 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1306 ft_text_renderer::visit (text_element_symbol& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1307 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1308 uint32_t code = e.get_symbol_code (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1309 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1310 std::vector<double> xdata (1, m_xoffset); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1311 text_renderer::string fs ("-", m_font, m_xoffset, m_yoffset); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1312 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1313 if (code != text_element_symbol::invalid_code && m_font.is_valid ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1314 { |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1315 std::string sub_name; |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1316 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1317 process_character (code, 0, sub_name); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1318 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1319 if (m_do_strlist && m_mode == MODE_RENDER) |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1320 { |
29683
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1321 if (! sub_name.empty ()) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1322 { |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1323 // Add substitution font to the family name |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1324 std::string tmp_family = fs.get_family (); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1325 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1326 if (tmp_family.find (sub_name) == std::string::npos) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1327 { |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1328 if (sub_name.find (" ") != std::string::npos) |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1329 sub_name = "'" + sub_name + "'"; |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1330 |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1331 fs.set_family (tmp_family + ", " + sub_name); |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1332 } |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1333 } |
5ffe7159f94b
Add substitution font to SVG font stack if necessary
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29679
diff
changeset
|
1334 |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1335 fs.set_code (code); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1336 fs.set_xdata (xdata); |
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1337 } |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1338 } |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1339 else if (m_font.is_valid ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1340 ::warning ("ignoring unknown symbol: %d", e.get_symbol ()); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1341 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1342 if (m_do_strlist && m_mode == MODE_RENDER && fs.get_code ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1343 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1344 fs.set_y (m_line_yoffset + m_yoffset); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1345 fs.set_color (m_color); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1346 fs.set_family (m_font.get_face ()->family_name); |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1347 m_strlist.push_back (fs); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1348 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1349 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1350 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1351 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1352 ft_text_renderer::visit (text_element_combined& e) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1353 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1354 int saved_xoffset = m_xoffset; |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1355 int max_xoffset = m_xoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1356 |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1357 for (auto *txt_elt : e) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1358 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1359 m_xoffset = saved_xoffset; |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1360 txt_elt->accept (*this); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1361 max_xoffset = math::max (m_xoffset, max_xoffset); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1362 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1363 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1364 m_xoffset = max_xoffset; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1365 } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1366 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1367 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1368 ft_text_renderer::reset (void) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1369 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1370 set_mode (MODE_BBOX); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1371 set_color (Matrix (1, 3, 0.0)); |
26573
ad70a85f702b
Avoid accumulating data in text_renderer member variable (bug #55287)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26478
diff
changeset
|
1372 m_strlist = std::list<text_renderer::string> (); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1373 } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1374 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1375 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1376 ft_text_renderer::set_color (const Matrix& c) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1377 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1378 if (c.numel () == 3) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1379 { |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1380 m_color(0) = static_cast<uint8_t> (c(0)*255); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1381 m_color(1) = static_cast<uint8_t> (c(1)*255); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1382 m_color(2) = static_cast<uint8_t> (c(2)*255); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1383 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1384 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1385 ::warning ("ft_text_renderer::set_color: invalid color"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1386 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1387 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1388 uint8NDArray |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1389 ft_text_renderer::render (text_element *elt, Matrix& box, int rotation) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1390 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1391 set_mode (MODE_BBOX); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1392 elt->accept (*this); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1393 compute_bbox (); |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1394 box = m_bbox; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1395 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1396 set_mode (MODE_RENDER); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1397 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1398 if (pixels.numel () > 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1399 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1400 elt->accept (*this); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1401 |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29359
diff
changeset
|
1402 rotate_pixels (pixels, rotation); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1403 } |
9403
4af6e29449c1
[mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
1404 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1405 return pixels; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1406 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1407 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1408 // Note: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1409 // x-extent accurately measures width of glyphs. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1410 // y-extent is overly large because it is measured from baseline-to-baseline. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1411 // Calling routines, such as ylabel, may need to account for this mismatch. |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1412 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1413 Matrix |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1414 ft_text_renderer::get_extent (text_element *elt, double rotation) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1415 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1416 set_mode (MODE_BBOX); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1417 elt->accept (*this); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1418 compute_bbox (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1419 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1420 Matrix extent (1, 2, 0.0); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1421 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1422 switch (rotation_to_mode (rotation)) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1423 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1424 case ROTATION_0: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1425 case ROTATION_180: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1426 extent(0) = m_bbox(2); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1427 extent(1) = m_bbox(3); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1428 break; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1429 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1430 case ROTATION_90: |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1431 case ROTATION_270: |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1432 extent(0) = m_bbox(3); |
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1433 extent(1) = m_bbox(2); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1434 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1435 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1436 return extent; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1437 } |
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 Matrix |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1440 ft_text_renderer::get_extent (const std::string& txt, double rotation, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1441 const caseless_str& interpreter) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1442 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1443 text_element *elt = text_parser::parse (txt, interpreter); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1444 Matrix extent = get_extent (elt, rotation); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1445 delete elt; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1446 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1447 return extent; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1448 } |
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 void |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1451 ft_text_renderer::text_to_pixels (const std::string& txt, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1452 uint8NDArray& pxls, Matrix& box, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1453 int _halign, int valign, double rotation, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1454 const caseless_str& interpreter, |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1455 bool handle_rotation) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1456 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1457 int rot_mode = rotation_to_mode (rotation); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1458 |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1459 m_halign = _halign; |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1460 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1461 text_element *elt = text_parser::parse (txt, interpreter); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1462 pxls = render (elt, box, rot_mode); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1463 delete elt; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1464 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23462
diff
changeset
|
1465 if (pxls.isempty ()) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1466 return; // nothing to render |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1467 |
29470
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29359
diff
changeset
|
1468 // Move X0 and Y0 depending on alignments and eventually swap all values |
2ae4764180c6
Initial implementation of a LaTeX interpreter (bug #59546).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29359
diff
changeset
|
1469 // for text rotated 90° 180° or 270° |
29679
7ad7991e946a
ft-text-renderer.cc: Use m_ prefix for class data members
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
29678
diff
changeset
|
1470 fix_bbox_anchor (box, m_halign, valign, rot_mode, handle_rotation); |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1471 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1472 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1473 ft_text_renderer::ft_font::ft_font (const ft_font& ft) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
1474 : text_renderer::font (ft), face (nullptr) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1475 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1476 #if defined (HAVE_FT_REFERENCE_FACE) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1477 FT_Face ft_face = ft.get_face (); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1478 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1479 if (ft_face && FT_Reference_Face (ft_face) == 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1480 face = ft_face; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1481 #endif |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1482 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1483 |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1484 ft_text_renderer::ft_font& |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1485 ft_text_renderer::ft_font::operator = (const ft_font& ft) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1486 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1487 if (&ft != this) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1488 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1489 text_renderer::font::operator = (ft); |
17271
cb7233cfbf43
Prepare base text rendering code for full TeX support.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17270
diff
changeset
|
1490 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1491 if (face) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1492 { |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1493 FT_Done_Face (face); |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
1494 face = nullptr; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1495 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1496 |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1497 #if defined (HAVE_FT_REFERENCE_FACE) |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1498 FT_Face ft_face = ft.get_face (); |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1499 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1500 if (ft_face && FT_Reference_Face (ft_face) == 0) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1501 face = ft_face; |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1502 #endif |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1503 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1504 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1505 return *this; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1506 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1507 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1508 FT_Face |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1509 ft_text_renderer::ft_font::get_face (void) const |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1510 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1511 if (! face && ! name.empty ()) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1512 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1513 face = ft_manager::get_font (name, weight, angle, size); |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1514 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1515 if (face) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1516 { |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1517 if (FT_Set_Char_Size (face, 0, size*64, 0, 0)) |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1518 ::warning ("ft_text_renderer: unable to set font size to %g", size); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1519 } |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1520 else |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1521 ::warning ("ft_text_renderer: unable to load appropriate font"); |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1522 } |
17330
219552139c18
Allow to compile with older freetype on RHEL5 (bug #39823).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17327
diff
changeset
|
1523 |
22331
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1524 return face; |
b81b08cc4c83
maint: Indent namespaces in more files.
John W. Eaton <jwe@octave.org>
parents:
22326
diff
changeset
|
1525 } |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1526 } |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1527 |
20945
9d9270e2f98f
eliminate comments after preprocessor conditionals
John W. Eaton <jwe@octave.org>
parents:
20715
diff
changeset
|
1528 #endif |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1529 |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1530 namespace octave |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1531 { |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1532 base_text_renderer * |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1533 make_ft_text_renderer (void) |
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1534 { |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1535 #if defined (HAVE_FREETYPE) |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1536 return new ft_text_renderer (); |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1537 #else |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1538 return 0; |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1539 #endif |
22326
71dd9d5a5ecd
move more new classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1540 } |
21209
67d2965af0b5
revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
1541 } |