changeset 19081:1288a2f27769

Handle non "points" fontunits properties (bug # 40158) * graphics.in.h (axes and text properties): new hidden, read-only properties "fontsize_points" * graphics.in.h (text properties): declare custom set/update methods for "fontunits" property * graphics.cc (text::properties::set_fontunits, text::properties::update_fontunits): new methods borrowed from axes::properties * graphics.cc (text::properties::update_font, axes::properties::update_font): use new property "fontsize_points" * gl-render.cc (opengl_renderer::set_font): use new property "fontsize_points" * gl-render.cc (opengl_renderer::draw_text): call set_font * gl2ps-renderer.cc (glps_renderer::set_font): use new property "fontsize_points"
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sun, 11 May 2014 22:24:50 +0200
parents 89e275a4f6f6
children ec28b7216501
files libinterp/corefcn/gl-render.cc libinterp/corefcn/gl2ps-renderer.cc libinterp/corefcn/graphics.cc libinterp/corefcn/graphics.in.h
diffstat 4 files changed, 46 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/gl-render.cc	Sat Aug 23 17:53:48 2014 -0400
+++ b/libinterp/corefcn/gl-render.cc	Sun May 11 22:24:50 2014 +0200
@@ -2652,6 +2652,8 @@
   if (props.get_string ().is_empty ())
     return;
 
+  set_font (props);
+
   Matrix pos = xform.scale (props.get_data_position ());
   const Matrix bbox = props.get_extent_matrix ();
 
@@ -2886,7 +2888,7 @@
   text_renderer.set_font (props.get ("fontname").string_value (),
                           props.get ("fontweight").string_value (),
                           props.get ("fontangle").string_value (),
-                          props.get ("fontsize").double_value ());
+                          props.get ("fontsize_points").double_value ());
 #endif
 }
 
--- a/libinterp/corefcn/gl2ps-renderer.cc	Sat Aug 23 17:53:48 2014 -0400
+++ b/libinterp/corefcn/gl2ps-renderer.cc	Sun May 11 22:24:50 2014 +0200
@@ -182,7 +182,7 @@
 {
   opengl_renderer::set_font (props);
 
-  fontsize = props.get ("fontsize").double_value ();
+  fontsize = props.get ("fontsize_points").double_value ();
 
   caseless_str fn = props.get ("fontname").string_value ();
   fontname = "";
--- a/libinterp/corefcn/graphics.cc	Sat Aug 23 17:53:48 2014 -0400
+++ b/libinterp/corefcn/graphics.cc	Sun May 11 22:24:50 2014 +0200
@@ -6197,7 +6197,7 @@
   text_renderer.set_font (get ("fontname").string_value (),
                           get ("fontweight").string_value (),
                           get ("fontangle").string_value (),
-                          get ("fontsize").double_value ());
+                          get ("fontsize_points").double_value ());
 #endif
 #endif
 }
@@ -7816,6 +7816,40 @@
 }
 
 void
+text::properties::set_fontunits (const octave_value& v)
+{
+  if (! error_state)
+    {
+      caseless_str old_fontunits = get_fontunits ();
+      if (fontunits.set (v, true))
+        {
+          update_fontunits (old_fontunits);
+          mark_modified ();
+        }
+    }
+}
+
+void
+text::properties::update_fontunits (const caseless_str& old_units)
+{
+  caseless_str new_units = get_fontunits ();
+  double parent_height = 0;
+  double fsz = get_fontsize ();
+
+  if (new_units == "normalized")
+    {
+      graphics_object go (gh_manager::get_object (get___myhandle__ ()));
+      graphics_object ax (go.get_ancestor ("axes"));
+
+      parent_height = ax.get_properties ().get_boundingbox (true).elem (3);
+    }
+
+  fsz = convert_font_size (fsz, old_units, new_units, parent_height);
+
+  set_fontsize (octave_value (fsz));
+}
+
+void
 text::properties::update_font (void)
 {
 #ifdef HAVE_FREETYPE
@@ -7823,7 +7857,7 @@
   renderer.set_font (get ("fontname").string_value (),
                      get ("fontweight").string_value (),
                      get ("fontangle").string_value (),
-                     get ("fontsize").double_value ());
+                     get ("fontsize_points").double_value ());
 #endif
   renderer.set_color (get_color_rgb ());
 #endif
--- a/libinterp/corefcn/graphics.in.h	Sat Aug 23 17:53:48 2014 -0400
+++ b/libinterp/corefcn/graphics.in.h	Sun May 11 22:24:50 2014 +0200
@@ -3848,6 +3848,8 @@
       row_vector_property xmtick h , Matrix ()
       row_vector_property ymtick h , Matrix ()
       row_vector_property zmtick h , Matrix ()
+      // hidden property for text rendering
+      double_property fontsize_points hgr , 0
    END_PROPERTIES
 
   protected:
@@ -4368,7 +4370,7 @@
       radio_property fontangle u , "{normal}|italic|oblique"
       string_property fontname u , OCTAVE_DEFAULT_FONTNAME
       double_property fontsize u , 10
-      radio_property fontunits , "inches|centimeters|normalized|{points}|pixels"
+      radio_property fontunits SU , "inches|centimeters|normalized|{points}|pixels"
       radio_property fontweight u , "light|{normal}|demi|bold"
       radio_property horizontalalignment mu , "{left}|center|right"
       radio_property interpreter u , "{tex}|none|latex"
@@ -4394,6 +4396,8 @@
       radio_property horizontalalignmentmode hu , "{auto}|manual"
       radio_property verticalalignmentmode hu , "{auto}|manual"
       radio_property autopos_tag h , "{none}|xlabel|ylabel|zlabel|title"
+      // hidden property for text rendering
+      double_property fontsize_points hgr , 0
     END_PROPERTIES
 
     Matrix get_data_position (void) const;
@@ -4458,6 +4462,7 @@
     void update_verticalalignment (void) { update_text_extent (); }
 
     void update_units (void);
+    void update_fontunits (const caseless_str& old_fontunits);
 
   private:
     std::string cached_units;