X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcrescendo.cc;h=4af8ceadcdf1cc49d3e9e443482d8831aa62b50c;hb=31653bf1d61a33ef8bc8c871d60c6b3452d04d28;hp=4ca1196b091090d27deeccf8d6d7cad9422bb0d3;hpb=0d2593e4ef1f3d1eb6994223f1de8f6c8fbcd066;p=lilypond.git diff --git a/lily/crescendo.cc b/lily/crescendo.cc index 4ca1196b09..4af8ceadcd 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -3,54 +3,77 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "molecule.hh" -#include "dimen.hh" #include "crescendo.hh" #include "lookup.hh" +#include "dimensions.hh" #include "paper-def.hh" #include "debug.hh" +#include "score-column.hh" Crescendo::Crescendo() { - grow_dir_i_ =0; - dir_i_ = -1 ; - left_dyn_b_ = right_dyn_b_ =false; + grow_dir_ =0; + dir_ = DOWN; + dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false; } +Interval +Crescendo::symbol_height() const +{ + return get_symbol().dim_[Y_AXIS]; +} +static Real absdyn_dim = 10 PT; // ugh -Molecule* -Crescendo::brew_molecule_p() const +Atom +Crescendo::get_symbol() const { - Molecule* m_p =0; - Real x_off_dim=0.0; - Real absdyn_dim = 10 PT; // ugh - - m_p = new Molecule; - Real w_dim = width().length(); - if ( left_dyn_b_ ) { - w_dim -= absdyn_dim; - x_off_dim += absdyn_dim; + Real w_dim = width().length (); + if (dyn_b_drul_[LEFT]) + { + w_dim -= absdyn_dim; } - if ( right_dyn_b_ ) { - w_dim -= absdyn_dim; + if (dyn_b_drul_[RIGHT]) + { + w_dim -= absdyn_dim; } - - if (w_dim < 0) { - warning("Crescendo too small"); - w_dim = 0; + + if (w_dim < 0) + { + warning (_ ("crescendo") + " " + _("too small")); + w_dim = 0; } - Real lookup_wid = w_dim * 0.9; // make it slightly smaller. - - Symbol s( paper()->lookup_l()->hairpin( lookup_wid, grow_dir_i_ < 0) ); - m_p->add(Atom(s)); - int pos = get_position_i(s.dim.y); - m_p->translate(Offset(x_off_dim + 0.05 * w_dim, - pos * paper()->internote_f())); - return m_p; + + Drul_array broken; + Direction d = LEFT; + do { + Score_column* s = (Score_column* )spanned_drul_[d] ; // UGH + broken[d] = (!s->musical_b()); + } while (flip(&d) != LEFT); + + + bool continued = broken[(Direction)-grow_dir_]; + return Atom (lookup_l ()->hairpin (w_dim, grow_dir_ < 0, continued)); } -IMPLEMENT_STATIC_NAME(Crescendo); +Molecule* +Crescendo::brew_molecule_p() const +{ + Molecule* m_p =0; + Real x_off_dim=0.0; + if (dyn_b_drul_[LEFT]) + x_off_dim += absdyn_dim; + + m_p = new Molecule; + Atom s (get_symbol()); + m_p->add_atom (s); + m_p->translate (Offset (x_off_dim, coordinate_offset_f_)); + return m_p; +} + + +IMPLEMENT_IS_TYPE_B1(Crescendo,Spanner);