changeset 17042:62d5f73e840c

axes.m: reorder figure children after setting the currentaxes (bug #39539). * scripts/plot/axes.m:
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sat, 20 Jul 2013 16:05:44 +0200
parents 1b549a0c3ca4
children f4dc32d6f263
files scripts/plot/axes.m
diffstat 1 files changed, 33 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/axes.m	Mon Jul 22 22:58:04 2013 +0200
+++ b/scripts/plot/axes.m	Sat Jul 20 16:05:44 2013 +0200
@@ -20,7 +20,21 @@
 ## @deftypefn  {Function File} {} axes ()
 ## @deftypefnx {Function File} {} axes (@var{property}, @var{value}, @dots{})
 ## @deftypefnx {Function File} {} axes (@var{h})
-## Create an axes object and return a handle to it.
+## @deftypefnx {Function File} {@var{h} =} axes (@dots{})
+## Create an axes object and return a handle to it, or set the current
+## axes to @var{h}.
+##
+## Called without any arguments, or with @var{property}/@var{value} pairs,
+## contruct a new axes.  For accepted properties and corresponding
+## values, see @code{set} function.
+##
+## Called with a single axes handle argument @var{h}, the function makes
+## @var{h} the current axis.  It also restacks the axes in the
+## corresponding figure so that @var{h} is the first entry in the list
+## of children.  This causes @var{h} to be displayed on top of any other
+## axes objects (Z-order stacking).
+## 
+## @seealso {gca, set, get}
 ## @end deftypefn
 
 ## Author: jwe
@@ -36,27 +50,33 @@
     else
       cf = gcf ();
     endif
-    tmp = __go_axes__ (cf, varargin{:});
-    if (__is_handle_visible__ (tmp))
-      set (ancestor (cf, "figure"), "currentaxes", tmp);
+    htmp = __go_axes__ (cf, varargin{:});
+    if (__is_handle_visible__ (htmp))
+      set (ancestor (cf, "figure"), "currentaxes", htmp);
     endif
   else
-    ## arg is axes handle.
-    tmp = varargin{1};
-    if (length (tmp) == 1 && ishandle (tmp)
-        && strcmp (get (tmp, "type"), "axes"))
-      if (__is_handle_visible__ (tmp))
-        parent = ancestor (tmp, "figure");
+    ## ARG is axes handle.
+    htmp = varargin{1};
+    if (isscalar (htmp) && ishandle (htmp)
+        && strcmp (get (htmp, "type"), "axes"))
+      if (__is_handle_visible__ (htmp))
+        parent = ancestor (htmp, "figure");
         set (0, "currentfigure", parent);
-        set (parent, "currentaxes", tmp);
+        set (parent, "currentaxes", htmp);
+
+        ## restack
+        ch = get (parent, "children")(:);
+        idx = (ch == htmp);
+        ch = [ch(idx); ch(!idx)];
+        set (parent, "children", ch);
       endif
     else
-      error ("axes: expecting argument to be a scalar axes handle");
+      error ("axes: H must be a scalar axes handle");
     endif
   endif
 
   if (nargout > 0)
-    h = tmp;
+    h = htmp;
   endif
 
 endfunction