X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspanner.cc;h=69251e2a2ab3166d6e84b732061f37ce248cb53b;hb=a286e94740cef413b1460cda2ce9848ad089ca90;hp=d5341c4c55cc98acc1bfe1aa22838b008b2fe24c;hpb=72b030aeed611d4a24ed6ade7fcc570cceac4c0d;p=lilypond.git diff --git a/lily/spanner.cc b/lily/spanner.cc index d5341c4c55..69251e2a2a 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -5,12 +5,14 @@ (c) 1996--2004 Han-Wen Nienhuys */ -#include -#include +#include "spanner.hh" + +#include + +#include #include "warn.hh" -#include "spanner.hh" #include "paper-column.hh" #include "paper-score.hh" #include "stencil.hh" @@ -19,6 +21,14 @@ #include "system.hh" #include "group-interface.hh" + + +Grob * +Spanner::clone (int count) const +{ + return new Spanner (*this, count); +} + void Spanner::do_break_processing () { @@ -37,7 +47,7 @@ Spanner::do_break_processing () { if (Spanner* parent = dynamic_cast (get_parent ((Axis)a))) { - if (!parent->spanned_rank_iv ().contains_b (this->spanned_rank_iv ())) + if (!parent->spanned_rank_iv ().superset (this->spanned_rank_iv ())) { programming_error (to_string ("Spanner `%s' is not fully contained in parent spanner `%s'.", name ().to_str0 (), @@ -62,7 +72,7 @@ Spanner::do_break_processing () programming_error ("no broken bound"); else if (bound->get_system ()) { - Spanner * span = dynamic_cast (clone ()); + Spanner * span = dynamic_cast (clone (broken_intos_.size ())); span->set_bound (LEFT, bound); span->set_bound (RIGHT, bound); @@ -99,7 +109,7 @@ Spanner::do_break_processing () continue; } - Spanner *span = dynamic_cast (clone ()); + Spanner *span = dynamic_cast (clone (broken_intos_.size ())); span->set_bound (LEFT,bounds[LEFT]); span->set_bound (RIGHT,bounds[RIGHT]); @@ -119,12 +129,12 @@ Spanner::do_break_processing () } } broken_intos_.sort (Spanner::compare); - for (int i= broken_intos_.size();i--;) + for (int i= broken_intos_.size ();i--;) broken_intos_[i]->break_index_ = i; } int -Spanner::get_break_index ()const +Spanner::get_break_index () const { return break_index_; } @@ -146,14 +156,10 @@ Spanner::spanned_rank_iv () { Interval_t iv (0, 0); - if (spanned_drul_[LEFT]) - { - iv[LEFT] = Paper_column::get_rank (spanned_drul_[LEFT]->get_column ()); - } - if (spanned_drul_[RIGHT]) - { - iv[RIGHT] = Paper_column::get_rank (spanned_drul_[RIGHT]->get_column ()); - } + if (spanned_drul_[LEFT] && spanned_drul_[LEFT]->get_column ()) + iv[LEFT] = Paper_column::get_rank (spanned_drul_[LEFT]->get_column ()); + if (spanned_drul_[RIGHT] && spanned_drul_[RIGHT]->get_column ()) + iv[RIGHT] = Paper_column::get_rank (spanned_drul_[RIGHT]->get_column ()); return iv; } @@ -202,8 +208,8 @@ Spanner::set_bound (Direction d, Grob*s) } } -Spanner::Spanner (SCM s) - : Grob (s) +Spanner::Spanner (SCM s, Object_key const*key) + : Grob (s, key) { break_index_ = 0; spanned_drul_[LEFT]=0; @@ -212,8 +218,8 @@ Spanner::Spanner (SCM s) Group_interface::add_thing (this, ly_symbol2scm ("interfaces"), ly_symbol2scm ("spanner-interface")); } -Spanner::Spanner (Spanner const &s) - : Grob (s) +Spanner::Spanner (Spanner const &s, int count) + : Grob (s, count) { spanned_drul_[LEFT] = spanned_drul_[RIGHT] =0; } @@ -341,7 +347,7 @@ Spanner::set_spacing_rods (SCM smob) r.item_l_drul_[LEFT] = sp->get_bound (LEFT); r.item_l_drul_[RIGHT] = sp->get_bound (RIGHT); r.distance_ = - robust_scm2double (me->get_grob_property ("minimum-length"), 0); + robust_scm2double (me->get_property ("minimum-length"), 0); r.add_to_cols (); return SCM_UNSPECIFIED; @@ -365,7 +371,7 @@ unsmob_spanner (SCM s ) return dynamic_cast (unsmob_grob (s)); } -ADD_INTERFACE(Spanner, +ADD_INTERFACE (Spanner, "spanner-interface", "Some objects are horizontally spanned between objects. For\n" "example, slur, beam, tie, etc. These grobs form a subtype called\n"