Mercurial > octave
comparison scripts/plot/appearance/orient.m @ 28081:9291de57bcfe stable
orient.m: Overhaul function.
* orient.m: Use "nargin" rather than "nargs" as variable name.
Put input validation of nargin ahead of call to gcf() so that
useless figure is not created when function fails. Use
variable "orientation" rather than "varargin{1}" for readability.
Put BIST tests within unwind_protect block so that temporary
figure is always cleaned up correctly even when tests fail.
Put code for %!error test within unwind_protect block to
clean up any figure created.
author | Rik <rik@octave.org> |
---|---|
date | Mon, 17 Feb 2020 17:22:17 -0800 |
parents | 9f9ac219896d |
children | 0a5b15007766 |
comparison
equal
deleted
inserted
replaced
28075:5e79401cbc35 | 28081:9291de57bcfe |
---|---|
51 ## @seealso{print, saveas} | 51 ## @seealso{print, saveas} |
52 ## @end deftypefn | 52 ## @end deftypefn |
53 | 53 |
54 function retval = orient (varargin) | 54 function retval = orient (varargin) |
55 | 55 |
56 nargs = nargin; | 56 cf = []; |
57 | 57 if (nargin > 0 && isscalar (varargin{1}) && isfigure (varargin{1})) |
58 if (nargs > 0 && numel (varargin{1}) == 1 && isfigure (varargin{1})) | |
59 cf = varargin{1}; | 58 cf = varargin{1}; |
60 varargin(1) = []; | 59 varargin(1) = []; |
61 nargs -= 1; | 60 nargin = nargin - 1; |
62 else | |
63 cf = gcf (); | |
64 endif | 61 endif |
65 | 62 |
66 if (nargs > 1) | 63 if (nargin > 1) |
67 print_usage (); | 64 print_usage (); |
65 endif | |
66 | |
67 if (isempty (cf)) | |
68 cf = gcf (); | |
68 endif | 69 endif |
69 | 70 |
70 paperunits = get (cf, "paperunits"); | 71 paperunits = get (cf, "paperunits"); |
71 unwind_protect | 72 unwind_protect |
72 set (cf, "paperunits", "inches"); # All Matlab calculations assume inches. | 73 set (cf, "paperunits", "inches"); # All Matlab calculations assume inches. |
73 | 74 |
74 if (nargs == 0) | 75 if (nargin == 0) |
75 retval = get (cf, "paperorientation"); | 76 retval = get (cf, "paperorientation"); |
76 if (strcmp (retval, "portrait")) | 77 if (strcmp (retval, "portrait")) |
77 papersize = get (cf, "papersize"); | 78 papersize = get (cf, "papersize"); |
78 paperposition = get (cf, "paperposition"); | 79 paperposition = get (cf, "paperposition"); |
79 if (paperposition == [0.25 0.25 (papersize - 0.5)]) | 80 if (paperposition == [0.25 0.25 (papersize - 0.5)]) |
101 else | 102 else |
102 ## landscape also sets the plot to occupy the entire page | 103 ## landscape also sets the plot to occupy the entire page |
103 papersize = get (cf, "papersize"); | 104 papersize = get (cf, "papersize"); |
104 set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); | 105 set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); |
105 endif | 106 endif |
106 elseif (strcmpi (varargin{1}, "tall")) | 107 elseif (strcmpi (orientation, "tall")) |
107 orient ("portrait"); | 108 orient ("portrait"); |
108 papersize = get (cf, "papersize"); | 109 papersize = get (cf, "papersize"); |
109 set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); | 110 set (cf, "paperposition", [0.25, 0.25, (papersize - 0.5)]); |
110 else | 111 else |
111 error ("orient: unknown ORIENTATION"); | 112 error ("orient: unknown ORIENTATION"); |
117 end_unwind_protect | 118 end_unwind_protect |
118 | 119 |
119 endfunction | 120 endfunction |
120 | 121 |
121 | 122 |
122 %!shared papersize, paperposition, fullpaperposition, hfig | 123 %!test |
123 %! papersize = [8.5, 11]; | 124 %! papersize = [8.5, 11]; |
124 %! paperposition = [0.25, 2.5, 8, 6]; | 125 %! paperposition = [1.342185258002766, 3.319138943502075, 5.815629483994468, 4.361722112995850]; |
125 %! fullpaperposition = [0.25, 0.25, (papersize-0.5)]; | 126 %! fullpaperposition = [0.25, 0.25, (papersize-0.5)]; |
126 %! hfig = figure ("visible", "off"); | 127 %! hfig = figure ("visible", "off"); |
127 %! set (hfig, "paperunits", "inches"); | 128 %! unwind_protect |
128 %! set (hfig, "paperorientation", "portrait"); | 129 %! set (hfig, "paperunits", "inches"); |
129 %! set (hfig, "papersize", papersize); | 130 %! set (hfig, "paperorientation", "portrait"); |
130 %! set (hfig, "paperposition", paperposition); | 131 %! set (hfig, "papersize", papersize); |
131 | 132 %! set (hfig, "paperposition", paperposition); |
132 %!test | 133 %! |
133 %! orient portrait; | 134 %! orient portrait; |
134 %! assert (orient, "portrait"); # default | 135 %! assert (orient, "portrait"); # default |
135 %! assert (get (hfig, "papersize"), papersize); | 136 %! assert (get (hfig, "papersize"), papersize); |
136 %! assert (get (hfig, "paperposition"), paperposition); | 137 %! assert (get (hfig, "paperposition"), paperposition); |
137 | 138 %! |
138 %!test | 139 %! orient landscape; |
139 %! orient landscape; | 140 %! assert (orient,"landscape"); # change to landscape |
140 %! assert (orient,"landscape"); # change to landscape | 141 %! assert (get (hfig, "papersize"), papersize([2, 1])); |
141 %! assert (get (hfig, "papersize"), papersize([2, 1])); | 142 %! assert (get (hfig, "paperposition"), fullpaperposition([1, 2, 4, 3])); |
142 %! assert (get (hfig, "paperposition"), fullpaperposition([1, 2, 4, 3])); | 143 %! |
143 | 144 %! orient portrait # change back to portrait |
144 %!test | 145 %! assert (orient, "portrait"); |
145 %! orient portrait # change back to portrait | 146 %! assert (get (hfig, "papersize"), papersize); |
146 %! assert (orient, "portrait"); | 147 %! assert (get (hfig, "paperposition"), paperposition); |
147 %! assert (get (hfig, "papersize"), papersize); | 148 %! |
148 %! assert (get (hfig, "paperposition"), paperposition); | 149 %! orient landscape; |
149 | 150 %! orient tall; |
150 %!test | 151 %! assert (orient, "tall"); |
151 %! orient landscape; | 152 %! assert (get (hfig, "papersize"), papersize); |
152 %! orient tall; | 153 %! assert (get (hfig, "paperposition"), fullpaperposition); |
153 %! assert (orient, "tall"); | 154 %! |
154 %! assert (get (hfig, "papersize"), papersize); | 155 %! orient portrait # errors don't change the state |
155 %! assert (get (hfig, "paperposition"), fullpaperposition); | 156 %! assert (orient, "portrait"); |
156 | 157 %! assert (get (hfig, "papersize"), papersize); |
157 %!test | 158 %! assert (get (hfig, "paperposition"), paperposition); |
158 %! orient portrait # errors don't change the state | 159 %! unwind_protect_cleanup |
159 %! assert (orient, "portrait"); | 160 %! close (hfig); |
160 %! assert (get (hfig, "papersize"), papersize); | 161 %! end_unwind_protect |
161 %! assert (get (hfig, "paperposition"), paperposition); | |
162 | 162 |
163 ## Test input validation | 163 ## Test input validation |
164 %!error orient (1.73, 2.5) | 164 %!error orient (1.73, 2.5) |
165 %!error <unknown ORIENTATION> orient ("nobody") | 165 %!error <unknown ORIENTATION> |
166 | 166 %! hfig = figure ("visible", "off"); |
167 %!test | 167 %! unwind_protect |
168 %! close (hfig); | 168 %! orient ("nobody"); |
169 %! unwind_protect_cleanup | |
170 %! close (hfig); | |
171 %! end_unwind_protect |