Mercurial > hg > octave-nkf
diff libinterp/interp-core/gl-render.cc @ 16855:359ac80ecb30
Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
* libinterp/interp-core/gl-render.cc(render_ticktexts): Trim spaces from labels.
Use % operator to repeat labels as necessary to fill number of ticks.
* libinterp/interpfcn/graphics.cc(get_ticklabel_extents): Trim spaces from labels
before calculating extent of text.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 26 Jun 2013 15:49:57 -0700 |
parents | 049e8bbff782 |
children |
line wrap: on
line diff
--- a/libinterp/interp-core/gl-render.cc +++ b/libinterp/interp-core/gl-render.cc @@ -754,28 +754,37 @@ int xyz, int ha, int va, int& wmax, int& hmax) { - int n = std::min (ticklabels.numel (), ticks.numel ()); - - for (int i = 0; i < n; i++) + int nticks = ticks.numel (); + int nlabels = ticklabels.numel (); + + if (nlabels == 0) + return; + + for (int i = 0; i < nticks; i++) { double val = ticks(i); if (lim1 <= val && val <= lim2) { Matrix b; - // FIXME: as tick text is transparent, shouldn't be + + std::string label (ticklabels(i % nlabels)); + label.erase (0, label.find_first_not_of (" ")); + label = label.substr (0, label.find_last_not_of (" ")+1); + + // FIXME: as tick text is transparent, shouldn't it be // drawn after axes object, for correct rendering? if (xyz == 0) // X { - b = render_text (ticklabels(i), val, p1, p2, ha, va); + b = render_text (label, val, p1, p2, ha, va); } else if (xyz == 1) // Y { - b = render_text (ticklabels(i), p1, val, p2, ha, va); + b = render_text (label, p1, val, p2, ha, va); } else if (xyz == 2) // Z { - b = render_text (ticklabels(i), p1, p2, val, ha, va); + b = render_text (label, p1, p2, val, ha, va); } wmax = std::max (wmax, static_cast<int> (b(2)));