Mercurial > hg > octave-lyh
changeset 7168:f345eb60f941
[project @ 2007-11-13 15:16:52 by jwe]
author | jwe |
---|---|
date | Tue, 13 Nov 2007 15:16:52 +0000 |
parents | 1f1969db6e65 |
children | f83b2ca41b05 |
files | scripts/ChangeLog scripts/plot/__go_draw_axes__.m src/ChangeLog src/graphics.cc src/graphics.h.in |
diffstat | 5 files changed, 148 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,8 @@ +2007-11-13 David Bateman <dbateman@free.fr> + + * plot/__go_draw_axes__.m (get_fontname_and_size): + Handle fontweight and fontangle properties. + 2007-11-12 Kai Habel <kai.habel@gmx.de> * plot/spinmap.m, plot/ribbon.m: New functions.
--- a/scripts/plot/__go_draw_axes__.m +++ b/scripts/plot/__go_draw_axes__.m @@ -1380,9 +1380,22 @@ function [f, s] = get_fontname_and_size (t) if (isempty (t.fontname)) - f = "Helvetica"; + f = "helvetica"; else - f = t.fontname; + f = tolower (t.fontname); + endif + if (! isempty (t.fontweight) && strcmp (tolower (t.fontweight), "bold")) + if (! isempty(t.fontangle) + && (strcmp (tolower (t.fontangle), "italic") + || strcmp (tolower (t.fontangle), "oblique"))) + f = strcat (f, "-bolditalic"); + else + f = strcat (f, "-bold"); + endif + elseif (! isempty(t.fontangle) + && (strcmp (tolower (t.fontangle), "italic") + || strcmp (tolower (t.fontangle), "oblique"))) + f = strcat (f, "-italic"); endif if (isempty (t.fontsize)) s = 10;
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2007-11-12 David Bateman <dbateman@free.fr> + + * graphics.h.in, graphics.cc (class text): Add the fontangle and + fontweight properties. Add string_property class to handle the + string radio values. + 2007-11-12 John W. Eaton <jwe@octave.org> * version.h (OCTAVE_VERSION): Now 2.9.17+.
--- a/src/graphics.cc +++ b/src/graphics.cc @@ -1919,7 +1919,9 @@ horizontalalignment ("left"), color (Matrix (1, 3, 0.0)), fontname ("Helvetica"), - fontsize (10) + fontsize (10), + fontangle (radio_values ("{normal}|italic|oblique")), + fontweight (radio_values ("{normal}|bold|demi|light")) { } void @@ -1952,6 +1954,10 @@ set_fontname (val); else if (name.compare ("fontsize")) set_fontsize (val); + else if (name.compare ("fontangle")) + set_fontangle (val); + else if (name.compare ("fontweight")) + set_fontweight (val); else { modified = false; @@ -1979,6 +1985,8 @@ m.assign ("color", color); m.assign ("fontname", fontname); m.assign ("fontsize", fontsize); + m.assign ("fontangle", fontangle); + m.assign ("fontweight", fontweight); return m; } @@ -2012,6 +2020,10 @@ retval = fontname; else if (name.compare ("fontsize")) retval = fontsize; + else if (name.compare ("fontangle")) + retval = fontangle; + else if (name.compare ("fontweight")) + retval = fontweight; else warning ("get: invalid property `%s'", name.c_str ()); @@ -2031,6 +2043,10 @@ m["color"] = Matrix (1, 3, 1.0); m["fontname"] = "Helvetica"; m["fontsize"] = 10; + m["fontangle"] = + string_property ("normal", radio_values ("{normal}|italic|oblique")); + m["fontweight"] = + string_property ("normal", radio_values ("{normal}|bold|demi|light")); return m; }
--- a/src/graphics.h.in +++ b/src/graphics.h.in @@ -44,6 +44,7 @@ { public: radio_values (const std::string& opt_string = std::string ()); + radio_values (const radio_values& a) : default_val (a.default_val), possible_vals (a.possible_vals) { } @@ -351,6 +352,108 @@ Matrix cmap; }; +class +string_property +{ +public: + string_property (const octave_value& c = octave_value (std::string ()), + const radio_values& v = radio_values ()) + : radio_val (v) + { + if (c.is_defined ()) + { + std::string newval = c.string_value (); + + std::transform (newval.begin (), newval.end (), + newval.begin (), tolower); + + if (! error_state) + { + if (radio_val.validate (newval)) + current_val = newval; + } + } + else + current_val = v.default_value (); + } + + string_property (const radio_values& v) + : current_val (v.default_value()), radio_val (v) + { } + + string_property (const radio_values& v, const std::string& initial_value) + : radio_val (v) + { + current_val = initial_value; + std::transform (current_val.begin (), current_val.end (), + current_val.begin (), tolower); + } + + operator octave_value (void) const { return current_val; } + + string_property& operator = (const string_property& a) + { + if (&a != this) + { + current_val = a.current_val; + radio_val = a.radio_val; + } + + return *this; + } + + string_property& operator = (const std::string& s) + { + std::string newval = s; + + std::transform (newval.begin (), newval.end (), + newval.begin (), tolower); + + if (! newval.empty ()) + { + if (radio_val.contains (newval)) + current_val = newval; + else + error ("invalid string specification"); + } + else + error ("invalid string specification"); + + return *this; + } + + string_property& operator = (const octave_value& val) + { + if (val.is_string ()) + { + std::string newval = val.string_value (); + + std::transform (newval.begin (), newval.end (), + newval.begin (), tolower); + + if (! newval.empty ()) + { + if (radio_val.contains (newval)) + current_val = newval; + else + error ("invalid string specification"); + } + else + error ("invalid string specification"); + } + else + error ("invalid string specification"); + + return *this; + } + + const std::string& current_value (void) const { return current_val; } + +private: + std::string current_val; + radio_values radio_val; +}; + // --------------------------------------------------------------------- class property_name : public std::string @@ -1412,6 +1515,8 @@ color_property color octave_value fontname octave_value fontsize + string_property fontangle a + string_property fontweight a END_PROPERTIES static std::string go_name;