changeset 20625:974b218e7292

Display ticklabels of log axes as powers of 10 (bug #46055) * graphics.cc (axes::properties::calc_ticklabels): use tex superscript to print powers of ten * graphics.cc (get_ticklabel_extents): use the current ticklabelinterpreter to call get_extent
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sat, 26 Sep 2015 19:25:03 +0200
parents 4e47e10d5279
children 9fb8133288e8
files libinterp/corefcn/graphics.cc
diffstat 1 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc	Tue Oct 13 23:09:43 2015 +0200
+++ b/libinterp/corefcn/graphics.cc	Sat Sep 26 19:25:03 2015 +0200
@@ -6946,18 +6946,24 @@
           else
             exponent = gnulib::floor (std::log10 (values(i)));
           significand = values(i) * std::pow (10., -exponent);
+
           os.str (std::string ());
-          os << significand;
+          if ((std::abs (significand) - 1) > 
+              std::numeric_limits<double>::epsilon())
+            os << significand << ".";
+          else if (significand < 0)
+            os << "-";
+
+          os << "10^{";
+
           if (exponent < 0.0)
             {
-              os << "e-";
+              os << "-";
               exponent = -exponent;
             }
-          else
-            os << "e+";
           if (exponent < 10. && (exp_max > 9 || exp_min < -9))
             os << "0";
-          os << exponent;
+          os << exponent << "}";
           c(i) = os.str ();
         }
     }
@@ -6996,7 +7002,8 @@
           label.erase (0, label.find_first_not_of (" "));
           label = label.substr (0, label.find_last_not_of (" ")+1);
 #ifdef HAVE_FREETYPE
-          ext = text_renderer.get_extent (label, 0.0, "none");
+          ext = text_renderer.get_extent (label, 0.0, 
+                                          get_ticklabelinterpreter ());
           wmax = std::max (wmax, ext(0));
           hmax = std::max (hmax, ext(1));
 #else