X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspaceable-grob.cc;h=fa597a6e1f7cb3db021a3af9fe8bde4fe7c56b1a;hb=90f11558943cc2381d2eae4d64029a0f8572f144;hp=bb6afc11e6721cbceed36953f7b7be0ea5933a24;hpb=27c10914b6b29e751a97d0e73be86f101e7069a7;p=lilypond.git diff --git a/lily/spaceable-grob.cc b/lily/spaceable-grob.cc index bb6afc11e6..fa597a6e1f 100644 --- a/lily/spaceable-grob.cc +++ b/lily/spaceable-grob.cc @@ -3,9 +3,11 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2002 Han-Wen Nienhuys + (c) 2000--2004 Han-Wen Nienhuys */ +#include +#include #include "spaceable-grob.hh" #include "grob.hh" @@ -16,7 +18,7 @@ SCM Spaceable_grob::get_minimum_distances (Grob*me) { - return me->get_grob_property ("minimum-distances"); + return me->get_property ("minimum-distances"); } /*todo: merge code of spring & rod? @@ -24,6 +26,9 @@ Spaceable_grob::get_minimum_distances (Grob*me) void Spaceable_grob::add_rod (Grob *me , Grob * p, Real d) { + // printf ("rod %lf\n", d); + + SCM mins = get_minimum_distances (me); SCM newdist = gh_double2scm (d); for (SCM s = mins; gh_pair_p (s); s = ly_cdr (s)) @@ -38,21 +43,33 @@ Spaceable_grob::add_rod (Grob *me , Grob * p, Real d) } mins = gh_cons (gh_cons (p->self_scm (), newdist), mins); - me->set_grob_property ("minimum-distances", mins); + me->set_property ("minimum-distances", mins); } void Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength, bool expand_only) { - if (d < 0.0 || strength <= 0.0) + // printf ("dist %lf, str %lf\n", d, strength); + if (d <= 0.0 || strength <= 0.0) { programming_error ("Adding reverse spring! Setting to unit spring"); d = 1.0; strength = 1.0; } + if (isinf (d) || isnan(d) + || isnan (strength)) + { + /* + strength == INF is possible. It means fixed distance. + */ + programming_error ("Insane distance found."); + d = 1.0; + strength = 1.0; + } + #ifndef NDEBUG - SCM mins = me->get_grob_property ("ideal-distances"); + SCM mins = me->get_property ("ideal-distances"); for (SCM s = mins; gh_pair_p (s); s = ly_cdr (s)) { Spring_smob * sp = unsmob_spring(ly_car (s)); @@ -65,8 +82,8 @@ Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength, bool expan #endif Spring_smob spring; - spring.strength_f_ = strength; - spring.distance_f_ = d; + spring.strength_ = strength; + spring.distance_ = d; spring.expand_only_b_ = expand_only; spring.other_ = p; @@ -77,14 +94,16 @@ Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength, bool expan void Spaceable_grob::remove_interface (Grob*me) { - me->remove_grob_property ("minimum-distances"); - me->remove_grob_property ("ideal-distances"); + me->set_property ("minimum-distances" , SCM_EOL); + me->set_property ("spacing-wishes", SCM_EOL); + me->set_property ("ideal-distances", SCM_EOL); } -ADD_INTERFACE (Spaceable,"spaceable-grob-interface", - "An grob (a Paper_column) that takes part in the -spacing problem. ", - "measure-length penalty minimum-distances ideal-distances -left-neighbors right-neighbors"); + +ADD_INTERFACE (Spaceable_grob,"spaceable-grob-interface", + "A layout object that takes part in the spacing problem. " + , + "measure-length spacing-wishes penalty minimum-distances ideal-distances " + "left-neighbors right-neighbors");