X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fstaff-symbol.cc;h=c8db2f48122f84123aea00d952b8e0aada756856;hb=e8936ee66fdd3e7ebe30556590e8dc913908a533;hp=75bb907c140514249a99f57a561e2f84b9d3d714;hpb=bfb10684605084baf1a898be8f42c0e463c5764a;p=lilypond.git diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index 75bb907c14..c8db2f4812 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -3,16 +3,17 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2002 Han-Wen Nienhuys + (c) 1997--2003 Han-Wen Nienhuys */ #include "lookup.hh" #include "dimensions.hh" #include "paper-def.hh" #include "molecule.hh" -#include "debug.hh" +#include "warn.hh" #include "item.hh" #include "staff-symbol.hh" +#include "staff-symbol-referencer.hh" #include "spanner.hh" @@ -27,28 +28,43 @@ Staff_symbol::brew_molecule (SCM smob) Grob * common = sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT), X_AXIS); - bool ragged = to_boolean (me->paper_l ()->get_scmvar ("raggedright")); - Real width; - if (ragged) + Real width = 0.0; + + /* + For raggedright without ragged staffs, simply set width to the linewidth. + + (ok -- lousy UI, since width is in staff spaces) + + --hwn. + */ + SCM width_scm = me->get_grob_property ("width"); + if (gh_number_p (width_scm)) { - // *prevent* staff symbol from being ragged right - width = - me->paper_l ()->get_var ("linewidth") - - sp->get_bound (LEFT)->relative_coordinate (common, X_AXIS) - ; + + /* + don't multiply by Staff_symbol_referencer::staff_space (me), + since that would make aligning staff symbols of different sizes to + one right margin hell. + */ + width = gh_scm2double (width_scm); } else { - width = - // right_shift - left_shift - + sp->get_bound (RIGHT)->relative_coordinate (common , X_AXIS) - - sp->get_bound (LEFT)->relative_coordinate (common, X_AXIS) - ; + width = sp->get_bound (RIGHT)->relative_coordinate (common , X_AXIS); + } + + // respect indentation, if any + width -= sp->get_bound (LEFT)->relative_coordinate (common, X_AXIS); + + if (width < 0) + { + warning (_f ("staff symbol: indentation yields beyond end of line")); + width = 0; } - Real t = me->paper_l ()->get_var ("linethickness"); + Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")); SCM my_thick = me->get_grob_property("thickness"); - if (gh_number_p(my_thick)) + if (gh_number_p (my_thick)) t *= gh_scm2double (my_thick); int l = Staff_symbol::line_count (me); @@ -58,8 +74,7 @@ Staff_symbol::brew_molecule (SCM smob) for (int i=0; i < l; i++) { Molecule a = - Lookup::filledbox (Box (Interval (0,width), - Interval (-t/2, t/2))); + Lookup::horizontal_line (Interval (0,width), t); a.translate_axis (height - i * staff_space (me), Y_AXIS); m.add_molecule (a); @@ -69,7 +84,7 @@ Staff_symbol::brew_molecule (SCM smob) } int -Staff_symbol::steps_i (Grob*me) +Staff_symbol::get_steps (Grob*me) { return line_count (me) * 2; } @@ -99,8 +114,9 @@ Staff_symbol::staff_space (Grob*me) ADD_INTERFACE (Staff_symbol,"staff-symbol-interface", - "This spanner draws the lines of a staff. The center (i.e. middle line -or space) is position 0.", + "This spanner draws the lines of a staff. The center (i.e. middle line " +"or space) is position 0. The length of the symbol may be set by hand " +"through the @code{width} property. ", - "staff-space thickness line-count"); + "width staff-space thickness line-count");