Mercurial > hg > octave-nkf
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 +++ b/src/graphics.cc @@ -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