annotate scripts/plot/appearance/whitebg.m @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 0a5b15007766
children 597f3ee61a48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
3 ## Copyright (C) 2010-2022 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
4 ##
27923
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/>.
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
7 ##
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
8 ## This file is part of Octave.
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24423
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24423
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22709
diff changeset
13 ## (at your option) any later version.
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
14 ##
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22709
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22709
diff changeset
18 ## GNU General Public License for more details.
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
19 ##
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24423
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
25
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
26 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20711
diff changeset
27 ## @deftypefn {} {} whitebg ()
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20711
diff changeset
28 ## @deftypefnx {} {} whitebg (@var{color})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20711
diff changeset
29 ## @deftypefnx {} {} whitebg ("none")
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
30 ## @deftypefnx {} {} whitebg (@var{hfig})
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
31 ## @deftypefnx {} {} whitebg (@var{hfig}, @var{color})
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
32 ## @deftypefnx {} {} whitebg (@var{hfig}, "none")
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14868
diff changeset
33 ## Invert the colors in the current color scheme.
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
34 ##
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
35 ## The root properties are also inverted such that all subsequent plots will
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
36 ## use the new color scheme.
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
37 ##
12189
9558ca33648d Add functions reset, whitebg to documentation.
Rik <octave@nomad.inbox5.com>
parents: 11587
diff changeset
38 ## If the optional argument @var{color} is present then the background color
9558ca33648d Add functions reset, whitebg to documentation.
Rik <octave@nomad.inbox5.com>
parents: 11587
diff changeset
39 ## is set to @var{color} rather than inverted. @var{color} may be a string
9558ca33648d Add functions reset, whitebg to documentation.
Rik <octave@nomad.inbox5.com>
parents: 11587
diff changeset
40 ## representing one of the eight known colors or an RGB triplet. The special
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
41 ## string argument @qcode{"none"} restores the plot to the factory default
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
42 ## colors.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
43 ##
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
44 ## If the first argument @var{hfig} is a figure handle or list of figure
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
45 ## handles, then operate on these figures rather than the current figure
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
46 ## returned by @code{gcf}. The root properties will not be changed unless 0
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
47 ## is in the list of figures.
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14868
diff changeset
48 ##
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
49 ## Programming Note: @code{whitebg} operates by changing the color properties
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
50 ## of the children of the specified figures. Only objects with a single color
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
51 ## are affected. For example, a patch with a single @qcode{"FaceColor"} will
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
52 ## be changed, but a patch with shading (@qcode{"interp"}) will not be
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
53 ## modified. For inversion, the new color is simply the inversion in RGB
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
54 ## space: @code{@var{cnew} = [1-@var{R} 1-@var{G} 1-@var{B}]}. When a color
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
55 ## is specified, the axes and figure are set to the new color, and the color
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
56 ## of child objects are then adjusted to have some contrast (visibility)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
57 ## against the new background.
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14868
diff changeset
58 ## @seealso{reset, get, set}
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
59 ## @end deftypefn
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
60
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
61 ## FIXME: It's not clear whether Matlab also changes color properties
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
62 ## of the figure object itself, or only the children. However, visually,
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
63 ## it looks better to change the figure along with the axes background.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
64
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
65 function whitebg (varargin)
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
66
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
67 if (nargin > 2)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
68 print_usage ();
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
69 endif
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
70
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
71 h = 0;
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
72 color = NaN;
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
73 have_fig = false;
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
74
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
75 if (nargin > 0)
24423
1d52db450db4 Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents: 23220
diff changeset
76 if (all (ishghandle (varargin{1})))
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
77 h = varargin{1};
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
78 have_fig = true;
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
79 if (nargin == 2)
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
80 color = varargin{2};
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
81 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
82 elseif (nargin == 1)
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
83 color = varargin{1};
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
84 else
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
85 print_usage ();
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
86 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
87 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
88
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
89 if (! have_fig)
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
90 fig = gcf ();
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
91 do_root = true;
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
92 elseif (all (isfigure (h) | h == 0))
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
93 fig = h(h != 0);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
94 do_root = any (h == 0);
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
95 else
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
96 error ("whitebg: HFIG must be a valid figure handle");
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
97 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
98
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
99 if (isnan (color))
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
100 if (do_root)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
101 ## Set the default axes and figure properties on root
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
102 ## so that subsequent plots have the new color scheme
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
103 fac = get (0, "factory");
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
104 fields = fieldnames (fac);
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
105 idx = ! cellfun ("isempty", regexp (fields,
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
106 '^factory(axes|figure).*color$'));
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
107
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
108 ## Use default value in place of factory value if specified.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
109 for field = fields(idx)'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
110 defaultfield = strrep (field{1}, "factory", "default");
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
111 try
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
112 defaultvalue = 1 - get (0, defaultfield);
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
113 catch
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
114 defaultvalue = 1 - fac.(field{1});
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
115 end_try_catch
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
116 set (0, defaultfield, defaultvalue);
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
117 endfor
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
118 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
119
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
120 ## The sort is necessary so that child legend objects are acted on
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
121 ## before the legend axes object.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
122 hlist = sort (findobj (fig));
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
123
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
124 for h = hlist'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
125 props = get (h);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
126 fields = fieldnames (props);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
127 ## Find all fields with the word color in them and invert.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
128 idx = find (! cellfun ("isempty", regexp (fields, 'color$')));
26268
6dd232798997 maint: Remove useless ';' from end of for, if, while, etc. statements.
Rik <rik@octave.org>
parents: 25054
diff changeset
129 for field = fields(idx)'
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
130 c = props.(field{1});
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
131 if (! ischar (c) && columns (c) == 3)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
132 set (h, field{1}, 1 - c);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
133 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
134 endfor
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
135 endfor
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
136
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
137 else # 2nd argument such as a color or "none"
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
138
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
139 if (! strcmp (color, "none"))
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
140 ## Set the specified color on the figure and all axes objects
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
141 hlist = [fig; findobj(fig, "type", "axes")];
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
142 set (hlist, "color", color);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
143 if (do_root)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
144 defs = get (0, "default");
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
145 if (isfield (defs, "defaultaxescolor")
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
146 && strcmp (defs.defaultaxescolor, "none"))
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
147 set (0, "defaultaxescolor", color);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
148 endif
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
149 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
150
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
151 ## Adjust colors of remaining objects to have some contrast
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
152 bg = rgb2hsv (get (fig, "color"));
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
153 ## List of children without the figure and axes objects already changed
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
154 hlist = setdiff (findobj (fig), hlist);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
155 for h = hlist'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
156 props = get (h);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
157 fields = fieldnames (props);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
158 ## Find all fields with the word color in them and adjust HSV.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
159 idx = find (! cellfun ("isempty", regexp (fields, 'color$')));
26268
6dd232798997 maint: Remove useless ';' from end of for, if, while, etc. statements.
Rik <rik@octave.org>
parents: 25054
diff changeset
160 for field = fields(idx)'
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
161 c = props.(field{1});
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
162 if (! ischar (c) && columns (c) == 3)
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
163 set (h, field{1}, calc_contrast_color (bg, c));
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
164 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
165 endfor
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
166 endfor
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
167
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
168 else
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
169 ## Reset colors to factory defaults
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
170 if (do_root)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
171 fac = get (0, "factory");
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
172 fields = fieldnames (fac);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
173 idx = ! cellfun ("isempty", regexp (fields,
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
174 '^factory(axes|figure).*color$'));
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
175 for field = fields(idx)'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
176 factoryfield = field{1};
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
177 factoryvalue = fac.(factoryfield);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
178 if (strncmp (factoryfield, "factoryfigure", 13))
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
179 ## Strip off "factoryfigure" part of fieldname before applying
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
180 set (fig, factoryfield(14:end), factoryvalue);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
181 endif
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
182 ## Remove applied default from root
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
183 defaultfield = strrep (factoryfield, "factory", "default");
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
184 set (0, defaultfield, "remove");
22709
5c04055aa767 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22679
diff changeset
185 endfor
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
186 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
187
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
188 hlist = sort (findobj (fig));
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
189 for h = hlist'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
190 props = get (h);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
191 fields = fieldnames (props);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
192 ## Find all fields with the word color in them and restore to factory.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
193 idx = find (! cellfun ("isempty", regexp (fields, 'color$')));
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
194 for field = fields(idx)'
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
195 set (h, field{1}, "factory");
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
196 endfor
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
197 endfor
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
198 endif
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
199 endif
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
200
10725
3c59ce262c66 Add the whitebg function
David Bateman <dbateman@free.fr>
parents:
diff changeset
201 endfunction
13096
5553412c6614 Tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 12931
diff changeset
202
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
203 ## Calculate a new color which contrasts with the supplied bg color and is
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
204 ## perceptually related to the original color.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
205 ##
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
206 ## Input color bg must be in HSV space. Input color corig is in RGB space.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
207 ##
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
208 ## FIXME: Calculation is segregated into its own function in case anyone wants
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
209 ## to try and improve the selection of a "contrasting" color.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
210 ##
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
211 ## This algorithm maintains at least 90 degrees separation between corig and bg
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
212 ## in Hue rotation space. No modifications are done for saturation or value.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
213 function cnew = calc_contrast_color (bg, corig)
22709
5c04055aa767 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22679
diff changeset
214
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
215 hsv = rgb2hsv (corig);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
216 contrast_hue = mod (bg(1) + 0.5, 1); # Generate a contrasting bg color
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
217
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
218 ## If close to existing contrast color, leave alone
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
219 delta = abs (hsv(1) - contrast_hue);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
220 if (delta < 0.25 || delta > 0.75)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
221 cnew(1) = hsv(1);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
222 else
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
223 cnew(1) = mod (hsv(1) + 0.5, 1);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
224 endif
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
225
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
226 ## No modifications to saturation or value.
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
227 cnew(2:3) = hsv(2:3);
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
228
22709
5c04055aa767 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 22679
diff changeset
229 cnew = hsv2rgb (cnew);
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
230
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
231 endfunction
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
232
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
233
13096
5553412c6614 Tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 12931
diff changeset
234 %!test
13111
ebb42fb2da04 Various fixes for tests in scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 13096
diff changeset
235 %! dac = get (0, "defaultaxescolor");
ebb42fb2da04 Various fixes for tests in scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 13096
diff changeset
236 %! dfc = get (0, "defaultfigurecolor");
13124
2ea1658ad049 Don't use explicit figure number for tests to avoid interference with any figures opened by user.
Kai Habel <kai.habel@gmx.de>
parents: 13116
diff changeset
237 %! hf = figure ("visible", "off");
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 13136
diff changeset
238 %! unwind_protect
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
239 %! hl = line ("Color", "r");
13116
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
240 %! assert (get (hf, "color"), dfc);
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
241 %! assert (get (gca, "color"), dac);
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
242 %! assert (get (hl, "color"), [1 0 0]);
13136
79b9a7669bb8 Tests added for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 13124
diff changeset
243 %! whitebg (hf);
13116
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
244 %! assert (get (hf, "color"), 1 - dfc);
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
245 %! assert (get (gca, "color"), 1 - dac);
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
246 %! assert (get (hl, "color"), [0 1 1]);
13116
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
247 %! c = [0.2 0.2 0.2];
13136
79b9a7669bb8 Tests added for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 13124
diff changeset
248 %! whitebg (hf, c);
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
249 %! assert (get (hf, "color"), c);
13116
9fc95b9f8001 Avoid touching default values.
Kai Habel <kai.habel@gmx.de>
parents: 13111
diff changeset
250 %! assert (get (gca, "color"), c);
13096
5553412c6614 Tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 12931
diff changeset
251 %! unwind_protect_cleanup
5553412c6614 Tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 12931
diff changeset
252 %! close (hf);
5553412c6614 Tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 12931
diff changeset
253 %! end_unwind_protect
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
254
22679
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
255 ## Test input validation
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
256 %!error whitebg (1,2,3)
e70551dacef6 whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents: 22323
diff changeset
257 %!error whitebg ({1}, 2)