Mercurial > octave
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 |
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 | 7 ## |
8 ## This file is part of Octave. | |
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 | 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 | 14 ## |
15 ## Octave is distributed in the hope that it will be useful, but | |
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 | 19 ## |
20 ## You should have received a copy of the GNU General Public License | |
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 | 25 |
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 | 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 | 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 | 59 ## @end deftypefn |
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 | 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 | 71 h = 0; |
72 color = NaN; | |
22679
e70551dacef6
whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
73 have_fig = false; |
10725 | 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 | 77 h = varargin{1}; |
22679
e70551dacef6
whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
78 have_fig = true; |
10725 | 79 if (nargin == 2) |
80 color = varargin{2}; | |
81 endif | |
82 elseif (nargin == 1) | |
83 color = varargin{1}; | |
84 else | |
85 print_usage (); | |
86 endif | |
87 endif | |
88 | |
22679
e70551dacef6
whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
89 if (! have_fig) |
10725 | 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 | 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 | 97 endif |
98 | |
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 | 103 fac = get (0, "factory"); |
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 | 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 | 111 try |
22679
e70551dacef6
whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
112 defaultvalue = 1 - get (0, defaultfield); |
10725 | 113 catch |
22679
e70551dacef6
whitebg.m: Completely overhaul function.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
114 defaultvalue = 1 - fac.(field{1}); |
10725 | 115 end_try_catch |
116 set (0, defaultfield, defaultvalue); | |
117 endfor | |
118 endif | |
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 | 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 | 149 endif |
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 | 164 endif |
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 | 186 endif |
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 | 198 endif |
199 endif | |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
200 |
10725 | 201 endfunction |
13096 | 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 | 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 | 251 %! unwind_protect_cleanup |
252 %! close (hf); | |
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) |