X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspaceable-grob.cc;h=725c4759c65c10464b42d36754aa4eef0a6d5163;hb=8ccf262699c56faceea2e158cff6dfb638c7ac3d;hp=464e0d3b1c1ddc50b6ec591c82110fa403cfda69;hpb=d903c7971c00e582b88ef6b76b97573186d3eb76;p=lilypond.git diff --git a/lily/spaceable-grob.cc b/lily/spaceable-grob.cc index 464e0d3b1c..725c4759c6 100644 --- a/lily/spaceable-grob.cc +++ b/lily/spaceable-grob.cc @@ -55,45 +55,17 @@ Spaceable_grob::add_rod (Grob *me, Grob *p, Real d) me->set_object ("minimum-distances", mins); } -void -Spaceable_grob::add_spring (Grob *me, Grob *other, - Real distance, Real inverse_strength) -{ -#ifndef NDEBUG - SCM mins = me->get_object ("ideal-distances"); - for (SCM s = mins; scm_is_pair (s); s = scm_cdr (s)) - { - Spring *sp = unsmob_spring (scm_car (s)); - if (sp->other_ == other) - { - programming_error ("already have that spring"); - return; - } - } -#endif - - Spring spring; - spring.set_inverse_stretch_strength (inverse_strength); - spring.set_inverse_compress_strength (inverse_strength); - spring.set_distance (distance); - spring.other_ = other; - - SCM ideal = me->get_object ("ideal-distances"); - ideal = scm_cons (spring.smobbed_copy (), ideal); - me->set_object ("ideal-distances", ideal); -} - void Spaceable_grob::add_spring (Grob *me, Grob *other, Spring sp) { SCM ideal = me->get_object ("ideal-distances"); - sp.other_ = other; - ideal = scm_cons (sp.smobbed_copy (), ideal); + + ideal = scm_cons (scm_cons (sp.smobbed_copy (), other->self_scm ()), ideal); me->set_object ("ideal-distances", ideal); } -void -Spaceable_grob::get_spring (Grob *this_col, Grob *next_col, Real *dist, Real *inv_strength) +Spring +Spaceable_grob::get_spring (Grob *this_col, Grob *next_col) { Spring *spring = 0; @@ -101,25 +73,23 @@ Spaceable_grob::get_spring (Grob *this_col, Grob *next_col, Real *dist, Real *in !spring && scm_is_pair (s); s = scm_cdr (s)) { - Spring *sp = unsmob_spring (scm_car (s)); - - if (sp && sp->other_ == next_col) - spring = sp; + if (scm_is_pair (scm_car (s)) + && unsmob_grob (scm_cdar (s)) == next_col + && unsmob_spring (scm_caar (s))) + spring = unsmob_spring (scm_caar (s)); } if (!spring) programming_error (_f ("No spring between column %d and next one", Paper_column::get_rank (this_col))); - *dist = (spring) ? spring->distance () : 5.0; - *inv_strength = (spring) ? spring->inverse_stretch_strength () : 1.0; + return spring ? *spring : Spring (); } ADD_INTERFACE (Spaceable_grob, - "A layout object that takes part in the spacing problem. ", - + "A layout object that takes part in the spacing problem.", /* properties */ "allow-loose-spacing " @@ -130,6 +100,5 @@ ADD_INTERFACE (Spaceable_grob, "minimum-distances " "right-neighbors " "spacing-wishes " - );