lilypond-1.3.70
[lilypond.git] / lily / spaceable-element.cc
blob7f746ee4d6b5d1b35be0c2057bc6926540b534df
1 /*
2 spaceable-element.cc -- implement Spaceable_element
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 */
10 #include "spaceable-element.hh"
11 #include "score-element.hh"
12 #include "warn.hh"
14 SCM
15 Spaceable_element::get_minimum_distances ( Score_element*me)
17 return me->get_elt_property ("minimum-distances");
20 void
21 Spaceable_element::add_rod (Score_element *me , Score_element * p, Real d)
23 SCM mins = get_minimum_distances (me);
24 SCM newdist= gh_double2scm (d);
25 for (; gh_pair_p (mins); mins = gh_cdr (mins))
27 SCM dist = gh_car (mins);
28 if (gh_car (dist) == p->self_scm_)
30 gh_set_cdr_x (dist, scm_max (gh_cdr (dist),
31 newdist));
32 return ;
36 mins = gh_cons (gh_cons (p->self_scm_, newdist), mins);
37 me->set_elt_property ("minimum-distances", mins);
40 SCM
41 Spaceable_element::get_ideal_distances (Score_element*me)
43 return me->get_elt_property ("ideal-distances");
46 void
47 Spaceable_element::add_spring (Score_element*me, Score_element * p, Real d, Real s)
49 SCM mins = get_ideal_distances (me);
50 SCM newdist= gh_double2scm (d);
51 for (; gh_pair_p (mins); mins = gh_cdr (mins))
53 SCM dist = gh_car (mins);
54 if (gh_car (dist) == p->self_scm_)
56 programming_error("already have that spring");
57 /* gh_set_car_x (gh_cdr (dist), scm_max (gh_cadr (dist),
58 newdist));*/
59 return ;
62 SCM newstrength= gh_double2scm (s);
64 mins = gh_cons (gh_cons (p->self_scm_, gh_cons (newdist, newstrength)), mins);
65 me->set_elt_property ("ideal-distances", mins);
69 void
70 Spaceable_element::remove_interface (Score_element*me)
72 me->remove_elt_property ("minimum-distances");
73 me->remove_elt_property ("ideal-distances");
74 me->remove_elt_property ("dir-list");
78 void
79 Spaceable_element::set_interface (Score_element*me)
81 me->set_elt_property ("minimum-distances", SCM_EOL);
82 me->set_elt_property ("ideal-distances", SCM_EOL);
83 me->set_elt_property ("dir-list",SCM_EOL) ;