X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-column.cc;h=346fa9992e0af2d23d664a84686408729c8d0380;hb=027f1aab2ec8fbbc8a20cf421510f8b9a259d6d2;hp=78d6b487c3134d555e4b375d4adc588e1b31c77f;hpb=fbb6d20e9f58d691ffe845284cbb4d8bacf9ca60;p=lilypond.git diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 78d6b487c3..346fa9992e 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -7,40 +7,49 @@ */ +#include "spanner.hh" #include "tie-column.hh" #include "group-interface.hh" #include "tie.hh" #include "directional-element-interface.hh" -#include "note-head.hh" +#include "rhythmic-head.hh" -Tie_column::Tie_column () + + +void +Tie_column::set_interface (Score_element*me) { - set_elt_property ("ties", SCM_EOL); - set_empty (X_AXIS); - set_empty (Y_AXIS); - set_elt_property ("transparent", SCM_BOOL_T); + me->set_interface (ly_symbol2scm ("tie-column")); + me->set_extent_callback (0, X_AXIS); + me->set_extent_callback (0, Y_AXIS); +} + +bool +Tie_column::has_interface (Score_element*me) +{ + return me->has_interface (ly_symbol2scm ("tie-column")); } void -Tie_column::add_tie (Tie *s) +Tie_column::add_tie (Score_element*me,Score_element *s) { - Group_interface g (this, "ties"); + Pointer_group_interface g (me, "ties"); if (!g.count ()) { - set_bound (LEFT, s->head (LEFT)); - set_bound (RIGHT, s->head (RIGHT)); + dynamic_cast (me)->set_bound (LEFT, Tie::head (s,LEFT)); + dynamic_cast (me)->set_bound (RIGHT, Tie::head (s,RIGHT)); } - group (this, "ties").add_element (s); - s->add_dependency (this); + Pointer_group_interface (me, "ties").add_element (s); + s->add_dependency (me); } int -tie_compare (Tie* const & s1, - Tie* const & s2) +tie_compare (Score_element* const & s1, + Score_element* const & s2) { - return sign (s1->position_f () - s2->position_f()); + return sign (Tie::position_f (s1) - Tie::position_f(s2)); } /* @@ -51,48 +60,57 @@ tie_compare (Tie* const & s1, direction of the rest is determined by their staff position. Ross forgets about the tie that is *on* the middle staff line. We - assume it goes UP. (TODO: make this settable) */ + assume it goes UP. (TODO: make me settable) */ void -Tie_column::set_directions () +Tie_column::set_directions (Score_element*me) { - Link_array s = - Group_interface__extract_elements (this, (Tie*)0, "ties"); + Link_array ties = + Pointer_group_interface__extract_elements (me, (Score_element*)0, "ties"); - Direction d = directional_element (this).get (); + Direction d = Directional_element_interface (me).get (); if (d) { - for (int i = s.size (); i--;) - directional_element (s[i]).set (d); + for (int i = ties.size (); i--;) + { + Score_element * t = ties[i]; + Directional_element_interface (t).set (d); + } return; } - if (s.size () == 1) + if (ties.size () == 1) { - directional_element (s[0]).set (s[0]->get_default_dir ()); + Score_element * t = ties[0]; + Directional_element_interface (t).set (Tie::get_default_dir (t)); return; } - s.sort (tie_compare); - directional_element (s[0]).set (DOWN); - s.del (0); - directional_element (s.pop ()).set (UP); + ties.sort (tie_compare); + Directional_element_interface tie0(ties[0]); + tie0.set (DOWN); + ties.del (0); + + Directional_element_interface tietop(ties.pop ()); + tietop.set (UP); - for (int i=s.size(); i--; ) + for (int i=ties.size(); i--; ) { - Real p = s[i]->position_f (); + Score_element * t = ties[i]; + Real p = Tie::position_f (t); Direction d = (Direction) sign (p); if (!d) d = UP; - - directional_element (s[i]).set (d); + Directional_element_interface (t).set (d); } } -void -Tie_column::after_line_breaking () +MAKE_SCHEME_CALLBACK(Tie_column,after_line_breaking); +SCM +Tie_column::after_line_breaking (SCM smob) { - set_directions (); + set_directions (unsmob_element (smob)); + return SCM_UNSPECIFIED; }