Mercurial > hg > octave-nkf
changeset 17687:cf43cc342bfa
orient.m: Return "tall" as a possible orientation. Save/restore paperunits property.
* scripts/plot/appearance/orient.m: Redo docstring. Return "tall" if
orientation is "portrait" and "paperposition" is full page. Save/restore
"paperunits" property since function assumes inches is always used.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 18 Oct 2013 13:56:56 -0700 |
parents | 65544374c1cf |
children | 8031fc73f291 |
files | scripts/plot/appearance/orient.m |
diffstat | 1 files changed, 63 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/plot/appearance/orient.m +++ b/scripts/plot/appearance/orient.m @@ -21,18 +21,26 @@ ## @deftypefnx {Function File} {} orient (@var{hfig}, @var{orientation}) ## @deftypefnx {Function File} {@var{orientation} =} orient () ## @deftypefnx {Function File} {@var{orientation} =} orient (@var{hfig}) -## Query or set the default print orientation. +## Query or set the print orientation for figure @var{hfig}. ## -## Valid values for @var{orientation} are @qcode{"landscape"}, -## @qcode{"portrait"}, and @qcode{"tall"}. +## Valid values for @var{orientation} are @qcode{"portrait"}, +## @qcode{"landscape"}, and @qcode{"tall"}. +## +## The @qcode{"landscape"} option changes the orientation so the plot width +## is larger than the plot height. The @qcode{"paperposition"} is also +## modified so that the plot fills the page, while leaving a 0.25 inch border. ## -## The @qcode{"tall"} option sets the orientation to portrait and fills -## the page with the plot, while leaving a 0.25 inch border. +## The @qcode{"tall"} option sets the orientation to @qcode{"portrait"} and +## fills the page with the plot, while leaving a 0.25 inch border. ## -## When called with no arguments, return the default print orientation. +## The @qcode{"portrait"} option (default) changes the orientation so the plot +## height is larger than the plot width. It also restores the default +## @qcode{"paperposition"} property. ## -## If the first argument @var{hfig} is a figure handle, then operate on this -## figure rather than the current figure returned by @code{gcf}. +## When called with no arguments, return the current print orientation. +## +## If the argument @var{hfig} is omitted, then operate on the current figure +## returned by @code{gcf}. ## @seealso{print, saveas} ## @end deftypefn @@ -55,47 +63,64 @@ print_usage (); endif - if (nargs == 0) - retval = get (cf, "paperorientation"); - else - orientation = varargin{1}; - if (strcmpi (orientation, "landscape") || strcmpi (orientation, "portrait")) - if (! strcmpi (get (cf, "paperorientation"), orientation)) - ## FIXME: with the proper listeners in place there won't be a need to - ## set the papersize and paperposition here. + paperunits = get (cf, "paperunits"); + unwind_protect + set (cf, "paperunits", "inches"); # All Matlab calculations assume inches. + + if (nargs == 0) + retval = get (cf, "paperorientation"); + if (strcmp (retval, "portrait")) papersize = get (cf, "papersize"); paperposition = get (cf, "paperposition"); - set (cf, "paperorientation", orientation); - set (cf, "papersize", papersize([2, 1])); - set (cf, "paperposition", paperposition([2, 1, 4, 3])); + if (paperposition == [0.25 0.25 (papersize - 0.5)]) + retval = "tall"; + endif endif - if (strcmpi (orientation, "portrait")) - ## portrait restores the default - ## FIXME: Should use "default" here, but Octave complains - ## that "paperposition" is not a default property. - set (cf, "paperposition", "factory"); - else - ## landscape also sets the plot to occupy the entire page + else + orientation = varargin{1}; + if (strcmpi (orientation, "landscape") + || strcmpi (orientation, "portrait")) + if (! strcmpi (get (cf, "paperorientation"), orientation)) + ## FIXME: with the proper listeners in place there won't be a need to + ## set the papersize and paperposition here. + papersize = get (cf, "papersize"); + paperposition = get (cf, "paperposition"); + set (cf, "paperorientation", orientation); + set (cf, "papersize", papersize([2, 1])); + set (cf, "paperposition", paperposition([2, 1, 4, 3])); + endif + if (strcmpi (orientation, "portrait")) + ## portrait restores the default + ## FIXME: Should use "default" here, but Octave complains + ## that "paperposition" is not a default property. + set (cf, "paperposition", "factory"); + else + ## landscape also sets the plot to occupy the entire page + papersize = get (cf, "papersize"); + set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); + endif + elseif (strcmpi (varargin{1}, "tall")) + orient ("portrait"); papersize = get (cf, "papersize"); set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); + else + error ("orient: unknown ORIENTATION"); endif - elseif (strcmpi (varargin{1}, "tall")) - orient ("portrait"); - papersize = get (cf, "papersize"); - set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); - else - error ("orient: unknown ORIENTATION"); endif - endif + + unwind_protect_cleanup + set (cf, "paperunits", paperunits); + end_unwind_protect endfunction -%!shared papersize, paperposition, tallpaperposition, hfig +%!shared papersize, paperposition, fullpaperposition, hfig %! papersize = [8.5, 11]; %! paperposition = [0.25, 2.5, 8, 6]; -%! tallpaperposition = [0.25, 0.25, (papersize-0.5)]; +%! fullpaperposition = [0.25, 0.25, (papersize-0.5)]; %! hfig = figure ("visible", "off"); +%! set (hfig, "paperunits", "inches"); %! set (hfig, "paperorientation", "portrait"); %! set (hfig, "papersize", papersize); %! set (hfig, "paperposition", paperposition); @@ -110,7 +135,7 @@ %! orient landscape; %! assert (orient,"landscape") # change to landscape %! assert (get (hfig, "papersize"), papersize([2, 1])); -%! assert (get (hfig, "paperposition"), tallpaperposition([1, 2, 4, 3])); +%! assert (get (hfig, "paperposition"), fullpaperposition([1, 2, 4, 3])); %!test %! orient portrait # change back to portrait @@ -121,9 +146,9 @@ %!test %! orient landscape; %! orient tall; -%! assert (orient, "portrait"); +%! assert (orient, "tall"); %! assert (get (hfig, "papersize"), papersize); -%! assert (get (hfig, "paperposition"), tallpaperposition); +%! assert (get (hfig, "paperposition"), fullpaperposition); %!test %! orient portrait # errors don't change the state