1 ## Copyright (C) 2010-2012 David Bateman
3 ## This file is part of Octave.
5 ## Octave is free software; you can redistribute it and/or modify it
6 ## under the terms of the GNU General Public License as published by
7 ## the Free Software Foundation; either version 3 of the License, or (at
8 ## your option) any later version.
10 ## Octave is distributed in the hope that it will be useful, but
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 ## General Public License for more details.
15 ## You should have received a copy of the GNU General Public License
16 ## along with Octave; see the file COPYING. If not, see
17 ## <http://www.gnu.org/licenses/>.
20 ## @deftypefn {Function File} {} whitebg ()
21 ## @deftypefnx {Function File} {} whitebg (@var{color})
22 ## @deftypefnx {Function File} {} whitebg ("none")
23 ## @deftypefnx {Function File} {} whitebg (@var{fig})
24 ## @deftypefnx {Function File} {} whitebg (@var{fig}, @var{color})
25 ## @deftypefnx {Function File} {} whitebg (@var{fig}, "none")
26 ## Invert the colors in the current color scheme. The root properties are
27 ## also inverted such that all subsequent plot use the new color scheme.
29 ## If defined, @var{fig} is the handle to the figure to be inverted. In
30 ## this case only the specified figure has its color properties changed.
32 ## If the optional argument @var{color} is present then the background color
33 ## is set to @var{color} rather than inverted. @var{color} may be a string
34 ## representing one of the eight known colors or an RGB triplet. The special
35 ## string argument "none" restores the plot to the default colors.
39 function whitebg (varargin)
43 if (nargin > 0 && nargin < 3)
44 if (ishandle (varargin{1}))
58 typ = get (h, "type");
60 if (strcmp (typ, "root"))
63 elseif (strcmp (typ, "figure"))
67 error ("expecting a figure handle");
70 axes = findall (fig, "type", "axes");
72 ## Root figure. Set the default axes and figure properties so that
73 ## subsequent plots have the new color scheme
75 fac = get (0, "factory");
76 fields = fieldnames (fac);
77 fieldindex = intersect (find (!cellfun ("isempty", regexp(fields, 'color'))), union (find (!cellfun ("isempty", regexp(fields, 'factoryaxes.*'))), find (!cellfun ("isempty", regexp(fields, 'factoryfigure.*')))));
79 ## Check whether the factory value has been replaced
80 for nf = 1 : numel (fieldindex);
81 defaultfield = strrep (fields {fieldindex (nf)}, "factory", "default");
83 defaultvalue = 1 - get (0, defaultfield {n});
85 field = fields {fieldindex (nf)};
86 defaultvalue = 1 - subsref (fac, struct ("type", ".", "subs", field));
88 set (0, defaultfield, defaultvalue);
92 ## Load all objects which qualify for being searched.
95 while (numel (handles))
97 for n = 1 : numel (handles)
98 children = union (children, get(handles(n), "children"));
101 h = union (h, children);
104 for nh = 1 : numel(h)
106 fields = fieldnames (p);
107 fieldindex = find (!cellfun ("isempty", regexp(fields, 'color')));
108 if (numel (fieldindex))
109 for nf = 1 : numel (fieldindex);
110 field = fields {fieldindex (nf)};
111 c = subsref (p, struct ("type", ".", "subs", field));
112 if (! ischar(c) && columns(c) == 3)
113 set (h (nh), field, 1 - c);
118 ## If h(nh) is a figure or axes invert default color properties
119 typ = subsref (p, struct ("type", ".", "subs", "type"));
120 if (strcmp (typ, "axes") || strcmp (typ, "figure"))
121 def = get (h (nh), "default");
122 fields = fieldnames (def);
123 if (! isempty (fields))
124 fieldindex = find (!cellfun ("isempty", regexp(fields, 'color')));
125 for nf = 1 : numel (fieldindex)
126 defaultfield = fields {fieldindex (nf)};
127 defaultvalue = 1 - subsref (def, struct ("type", ".", "subs", defaultfield));
128 set (h (nh), defaultfield, defaultvalue);
135 ## Is this the right thing to do in this case?
136 set (findall (fig, "type", "axes"), "color", color);
138 defs = get (0, "default");
139 if (isfield (defs, "defaultaxescolor")
140 && strcmp (defs.defaultaxescolor, "none"))
141 set (0, "defaultaxescolor", color);
148 %! dac = get (0, "defaultaxescolor");
149 %! dfc = get (0, "defaultfigurecolor");
150 %! hf = figure ("visible", "off");
153 %! assert (get (hf, "color"), dfc);
154 %! assert (get (gca, "color"), dac);
156 %! assert (get (hf, "color"), 1 - dfc);
157 %! assert (get (gca, "color"), 1 - dac);
158 %! c = [0.2 0.2 0.2];
160 %! assert (get (hf, "color"), 1 - dfc);
161 %! assert (get (gca, "color"), c);
162 %! unwind_protect_cleanup
164 %! end_unwind_protect