Mercurial > hg > octave-lojdl
changeset 10725:3c59ce262c66
Add the whitebg function
author | David Bateman <dbateman@free.fr> |
---|---|
date | Wed, 23 Jun 2010 12:57:36 +0200 |
parents | f0236b444356 |
children | f062b569a301 |
files | scripts/ChangeLog scripts/plot/__go_draw_figure__.m scripts/plot/module.mk scripts/plot/whitebg.m |
diffstat | 4 files changed, 154 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,10 @@ +2010-06-23 David Bateman <dbateman@free.fr> + + * whitebg.m: New function. + * module.mk (plot_FCN_FILES): Add it here. + * __go_draw_figure__.m: Set the border color to the inverse of the + background color. + 2010-06-17 Brad Froehle <brad.froehle@gmail.com> * sparse/spy.m: Fix typo.
--- a/scripts/plot/__go_draw_figure__.m +++ b/scripts/plot/__go_draw_figure__.m @@ -92,6 +92,9 @@ else fg_is_set = false; endif + if (bg_is_set) + fprintf (plot_stream, "set border linecolor rgb \"#%02x%02x%02x\"\n", 255 * (1 - bg)); + endif if (output_to_paper) axes_position_on_page = orig_axes_position .* paper_position([3, 4, 3 ,4]); axes_position_on_page(1:2) = axes_position_on_page(1:2) + paper_position(1:2);
--- a/scripts/plot/module.mk +++ b/scripts/plot/module.mk @@ -157,6 +157,7 @@ plot/title.m \ plot/view.m \ plot/waitforbuttonpress.m \ + plot/whitebg.m \ plot/xlabel.m \ plot/xlim.m \ plot/ylabel.m \
new file mode 100644 --- /dev/null +++ b/scripts/plot/whitebg.m @@ -0,0 +1,143 @@ +## Copyright (C) 2010 David Bateman +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} whitebg () +## @deftypefnx {Function File} {} whitebg (@var{color}) +## @deftypefnx {Function File} {} whitebg (@var{fig}) +## @deftypefnx {Function File} {} whitebg (@var{fig}, @var{color}) +## Inverts the colors in the current current. The root properties are +## also inverted such that all subsequent plot use the new color scheme. +## +## If defined, @var{fig} is the handle to the figure to be inverted. In +## this case only this figure has its color properties changed +## +## The background colors of the figure and its children can be set +## specifically if @var{color} is defined. @var{color} must be a valid +## color set as a string or an RGB triplet, or the value "none". +## +## @seealso{reset, colordef} +## @end deftypefn + +function whitebg (varargin) + h = 0; + color = NaN; + + if (nargin > 0 && nargin < 2) + if (ishandle (varargin{1})) + h = varargin{1}; + if (nargin == 2) + color = varargin{2}; + endif + elseif (nargin == 1) + color = varargin{1}; + else + print_usage (); + endif + elseif (nargin != 0) + print_usage (); + endif + + typ = get (h, "type"); + + if (strcmp (typ, "root")) + isroot = true; + fig = gcf (); + elseif (strcmp (typ, "figure")) + isroot = false; + fig = h; + else + error ("expecting a figure handle"); + endif + + axes = findall (fig, "type", "axes"); + if (isnan (color)) + ## Root figure. Set the default axes and figure properties so that + ## subsequent plots have the new color scheme + if (isroot) + fac = get (0, "factory"); + fields = fieldnames (fac); + fieldindex = intersect (find (!cellfun (@isempty, regexp(fields, ".*color.*"))), union (find (!cellfun (@isempty, regexp(fields, "factoryaxes.*"))), find (!cellfun (@isempty, regexp(fields, "factoryfigure.*"))))); + + ## Check whether the factory value has been replaced + for nf = 1 : numel (fieldindex); + defaultfield = strrep (fields {fieldindex (nf)}, "factory", "default"); + try + defaultvalue = 1 - get (0, defaultfield {n}); + catch + field = fields {fieldindex (nf)}; + defaultvalue = 1 - subsref (fac, struct ("type", ".", "subs", field)); + end_try_catch + set (0, defaultfield, defaultvalue); + endfor + endif + + ## Load all objects which qualify for being searched. + handles = fig; + h = fig; + while (numel (handles)) + children = []; + for n = 1 : numel (handles) + children = union (children, get(handles(n), "children")); + endfor + handles = children; + h = union (h, children); + endwhile + + for nh = 1 : numel(h) + p = get (h (nh)); + fields = fieldnames (p); + fieldindex = find (!cellfun (@isempty, regexp(fields, ".*color.*"))); + if (numel (fieldindex)) + for nf = 1 : numel (fieldindex); + field = fields {fieldindex (nf)}; + c = subsref (p, struct ("type", ".", "subs", field)); + if (! ischar(c) && columns(c) == 3) + set (h (nh), field, 1 - c); + endif + endfor + endif + + ## If h(nh) is a figure or axes invert default color properties + typ = subsref (p, struct ("type", ".", "subs", "type")); + if (strcmp (typ, "axes") || strcmp (typ, "figure")) + def = get (h (nh), "default"); + fields = fieldnames (def); + if (! isempty (fields)) + fieldindex = find (!cellfun (@isempty, regexp(fields, ".*color.*"))); + for nf = 1 : numel (fieldindex) + defaultfield = fields {fieldindex (nf)}; + defaultvalue = 1 - subsref (def, struct ("type", ".", "subs", defaultfield)); + set (h (nh), defaultfield, defaultvalue); + endfor + endif + endif + endfor + else + ## FIXME + ## Is this the right thing to do in this case? + set (findall (fig, "type", "axes"), "color", color); + if (isroot) + defs = get (0, "defaults"); + if (isfield (defs, "defaultaxescolor") + && strcmp (defs.defaultaxescolor, "none")) + set (0, "defaultaxescolor", color); + endif + endif + endif +endfunction