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>
10 #include "spaceable-element.hh"
11 #include "score-element.hh"
15 Spaceable_element::get_minimum_distances ( Score_element
*me
)
17 return me
->get_elt_property ("minimum-distances");
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
),
36 mins
= gh_cons (gh_cons (p
->self_scm_
, newdist
), mins
);
37 me
->set_elt_property ("minimum-distances", mins
);
41 Spaceable_element::get_ideal_distances (Score_element
*me
)
43 return me
->get_elt_property ("ideal-distances");
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),
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
);
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");
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
) ;