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