changeset 16910:8a4e53cf79c9

Modify the plotbox position relative to the keybox position. scripts/plot/legend.m: Position the plotbox relative to the keybox and account for the tightinset.
author Ben Abbott <bpabbott@mac.com>
date Sat, 06 Jul 2013 12:25:21 -0400
parents 8f9ed9d8a478
children 5ea6a6d2b83f
files scripts/plot/legend.m
diffstat 1 files changed, 26 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/legend.m	Sat Jul 06 12:06:45 2013 -0400
+++ b/scripts/plot/legend.m	Sat Jul 06 12:25:21 2013 -0400
@@ -569,6 +569,10 @@
         ca_pos = unmodified_axes_position;
         ca_outpos = unmodified_axes_outerposition;
         ca_fontsize = get (ca(1), "fontsize");
+        tightinset = get (ca(1), "tightinset");
+        for i = 2 : numel (ca)
+          tightinset = max (tightinset, get (ca(i), "tightinset"));
+        endfor
       unwind_protect_cleanup
         set (ca(1), "units", units);
         set (ca(1), "fontunits", fontunits);
@@ -701,6 +705,9 @@
           gnuplot_offset = 0;
         endif
 
+        ## For legend's outside the associated axes postion, align their edge
+        ## to the unmodified_axes_outerpostion, and adjust the axes postion
+        ## accordingly.
         switch (location)
           case "north"
             if (outside)
@@ -717,7 +724,8 @@
             if (outside)
               lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
                       ca_outpos(2) + ypad, lpos(3), lpos(4)];
-              new_pos = [ca_pos(1), ca_pos(2) + lpos(4), ca_pos(3), ...
+              new_pos = [ca_pos(1), lpos(2) + lpos(4) + 2 * ypad ...
+                      + tightinset(2), ca_pos(3), ...
                          ca_pos(4) - lpos(4)];
             else
               lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
@@ -727,7 +735,9 @@
             if (outside)
               lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
                       ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
-              new_pos = [ca_pos(1), ca_pos(2), ca_pos(3) - lpos(3), ca_pos(4)];
+              new_pos = [ca_pos(1), ca_pos(2), ...
+                         lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
+                         ca_pos(4)];
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
               lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
@@ -738,8 +748,8 @@
               lpos = [ca_outpos(1) + ypad, ...
                       ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ...
                       lpos(3), lpos(4)];
-              new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ...
-                         ca_pos(3) - lpos(3), ca_pos(4)];
+              new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
+                         ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
               new_pos(1) = new_pos(1) - gnuplot_offset;
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
@@ -750,7 +760,9 @@
             if (outside)
               lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
                       ca_pos(2) + ca_pos(4) - lpos(4), lpos(3), lpos(4)];
-              new_pos = [ca_pos(1), ca_pos(2), ca_pos(3) - lpos(3), ca_pos(4)];
+              new_pos = [ca_pos(1), ca_pos(2), ...
+                         lpos(1) - 2 * xpad - tightinset(3) - ca_pos(1), ...
+                         ca_pos(4)];
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
               lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
@@ -760,8 +772,8 @@
             if (outside)
               lpos = [ca_outpos(1) + ypad , ca_pos(2) + ca_pos(4) - lpos(4), ...
                       lpos(3), lpos(4)];
-              new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ...
-                         ca_pos(3) - lpos(3), ca_pos(4)];
+              new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
+              ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
               new_pos(1) = new_pos(1) - gnuplot_offset;
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
@@ -773,7 +785,8 @@
               lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
                       ca_pos(2), lpos(3), lpos(4)];
               new_pos = [ca_pos(1), ca_pos(2), ...
-                         ca_pos(3) - lpos(3), ca_pos(4)];
+                         lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
+                         ca_pos(4)];
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
               lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
@@ -782,8 +795,8 @@
           case "southwest"
             if (outside)
               lpos = [ca_outpos(1) + ypad, ca_pos(2), lpos(3), lpos(4)];
-              new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ...
-                         ca_pos(3) - lpos(3), ca_pos(4)];
+              new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
+              ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
               new_pos(1) = new_pos(1) - gnuplot_offset;
               new_pos(3) = new_pos(3) + gnuplot_offset;
             else
@@ -963,6 +976,9 @@
           addlistener (hlegend, "orientation", @updatelegend);
           addlistener (hlegend, "string", @updatelegend);
           addlistener (hlegend, "textposition", @updatelegend);
+          ## TODO - need to add listeners for tighinset and position
+          ##        addlistener (ca, "tightinset", @update????);
+          ##        addlistener (ca, "position", @update????);
         endif
       unwind_protect_cleanup
         set (fig, "currentaxes", curaxes);