X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-column.cc;h=e364bf7f03299582d7394b9b869d70903e5c7577;hb=3b963e7de14816666287b7a2bcfd35eccef977c4;hp=13951511d92497130226baa73188925501bd6365;hpb=e0833e924a7b626154c66170d98335c6c4985dfe;p=lilypond.git diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 13951511d9..e364bf7f03 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000 Han-Wen Nienhuys + (c) 2000--2002 Han-Wen Nienhuys */ @@ -16,40 +16,32 @@ -void -Tie_column::set_interface (Score_element*me) -{ - 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")); -} + + +/* + tie dir depends on what Tie_column does. +*/ void -Tie_column::add_tie (Score_element*me,Score_element *s) +Tie_column::add_tie (Grob*me,Grob *s) { - Pointer_group_interface g (me, "ties"); - if (!g.count ()) + if (! Pointer_group_interface ::count (me, "ties")) { dynamic_cast (me)->set_bound (LEFT, Tie::head (s,LEFT)); dynamic_cast (me)->set_bound (RIGHT, Tie::head (s,RIGHT)); } - Pointer_group_interface (me, "ties").add_element (s); + Pointer_group_interface::add_grob (me, ly_symbol2scm ("ties"), s); s->add_dependency (me); } int -tie_compare (Score_element* const & s1, - Score_element* const & s2) +tie_compare (Grob* const & s1, + Grob* const & s2) { - return sign (Tie::position_f (s1) - Tie::position_f(s2)); + return sign (Tie::position_f (s1) - Tie::position_f (s2)); } /* @@ -62,19 +54,26 @@ tie_compare (Score_element* const & s1, Ross forgets about the tie that is *on* the middle staff line. We assume it goes UP. (TODO: make me settable) */ void -Tie_column::set_directions (Score_element*me) +Tie_column::set_directions (Grob*me) { - Link_array ties = - Pointer_group_interface__extract_elements (me, (Score_element*)0, "ties"); + Link_array ties = + Pointer_group_interface__extract_grobs (me, (Grob*)0, "ties"); + for (int i = ties.size (); i--;) + if (Directional_element_interface::get (ties[i])) + ties.del (i); + - Direction d = Directional_element_interface::get (me); + if (!ties.size ()) + return ; + + Direction d = Directional_element_interface::get (me); if (d) { for (int i = ties.size (); i--;) { - Score_element * t = ties[i]; + Grob * t = ties[i]; Directional_element_interface::set (t, d); } return; @@ -82,19 +81,19 @@ Tie_column::set_directions (Score_element*me) if (ties.size () == 1) { - Score_element * t = ties[0]; + Grob * t = ties[0]; Directional_element_interface::set (t,Tie::get_default_dir (t)); return; } ties.sort (tie_compare); - Directional_element_interface::set( ties[0], DOWN); + Directional_element_interface::set (ties[0], DOWN); ties.del (0); - Directional_element_interface ::set(ties.pop (), UP); - for (int i=ties.size(); i--; ) + Directional_element_interface ::set (ties.pop (), UP); + for (int i=ties.size (); i--;) { - Score_element * t = ties[i]; + Grob * t = ties[i]; Real p = Tie::position_f (t); Direction d = (Direction) sign (p); if (!d) @@ -104,10 +103,17 @@ Tie_column::set_directions (Score_element*me) } -MAKE_SCHEME_CALLBACK(Tie_column,after_line_breaking,1); +MAKE_SCHEME_CALLBACK (Tie_column,after_line_breaking,1); SCM Tie_column::after_line_breaking (SCM smob) { - set_directions (unsmob_element (smob)); + set_directions (unsmob_grob (smob)); return SCM_UNSPECIFIED; } + + + +ADD_INTERFACE (Tie_column,"tie-column-interface", + "that sets tie directions in a tied chord", + "direction"); +