diff src/graphics.cc @ 14391:c9ec21bef97a

Fix ticklength updating (bug # 35438). * graphics.cc: (axes::properties::update_ticklengths): include ticklength property value. * graphics.cc, graphics.h.in: Change update_ticklengths to update_ticklength. * graphics.h.in: Add "u" qualifier to axes ticklength property.
author Ben Abbott <bpabbott@mac.com>
date Wed, 22 Feb 2012 20:06:05 -0500
parents ba01a38bc5c1
children e41e538e9d03
line wrap: on
line diff
--- a/src/graphics.cc	Wed Feb 22 08:14:09 2012 -0500
+++ b/src/graphics.cc	Wed Feb 22 20:06:05 2012 -0500
@@ -4933,11 +4933,11 @@
   Matrix viewmat = get_view ().matrix_value ();
   nearhoriz = std::abs(viewmat(1)) <= 5;
 
-  update_ticklengths ();
-}
-
-void
-axes::properties::update_ticklengths (void)
+  update_ticklength ();
+}
+
+void
+axes::properties::update_ticklength (void)
 {
   bool mode2d = (((xstate > AXE_DEPTH_DIR ? 1 : 0) +
                   (ystate > AXE_DEPTH_DIR ? 1 : 0) +
@@ -4955,10 +4955,15 @@
   double ticksign = (tickdirmode_is ("auto") ?
                      (mode2d ? -1 : 1) :
                      (tickdir_is ("in") ? -1 : 1));
-  // FIXME: use ticklength property
-  xticklen = ticksign*7;
-  yticklen = ticksign*7;
-  zticklen = ticksign*7;
+
+  Matrix bbox = get_boundingbox (true);
+  Matrix ticklen = get_ticklength ().matrix_value ();
+  ticklen(0) = ticklen(0) * std::max (bbox(2), bbox(3));
+  ticklen(1) = ticklen(1) * std::max (bbox(2), bbox(3));
+
+  xticklen = ticksign * (mode2d ? ticklen(0) : ticklen(1));
+  yticklen = ticksign * (mode2d ? ticklen(0) : ticklen(1));
+  zticklen = ticksign * (mode2d ? ticklen(0) : ticklen(1));
 
   xtickoffset = (mode2d ? std::max (0., xticklen) : std::abs (xticklen)) + 5;
   ytickoffset = (mode2d ? std::max (0., yticklen) : std::abs (yticklen)) + 5;
@@ -4970,6 +4975,22 @@
   update_title_position ();
 }
 
+/*
+%!demo
+%!  clf
+%!  subplot (2, 1, 1)
+%!  plot (rand (3))
+%!  xlabel xlabel
+%!  ylabel ylabel
+%!  title title
+%!  subplot (2, 1, 2)
+%!  plot (rand (3))
+%!  set (gca, "ticklength", get (gca, "ticklength") * 2, "tickdir", "out")
+%!  xlabel xlabel
+%!  ylabel ylabel
+%!  title title
+*/
+
 static bool updating_xlabel_position = false;
 
 void