X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=e9cd3be70ecb18e31b3a6377a5f12798894515ff;hb=4995fea559cd5399b4f462de546a15195d76f4c3;hp=7c5e0c26844884bed8961b33e42414238516ad70;hpb=1a71119277d04b287b3a976c526adba6500239c6;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 7c5e0c2684..e9cd3be70e 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -3,142 +3,79 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1999 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ - +#include "moment.hh" #include "paper-column.hh" #include "paper-score.hh" #include "debug.hh" +#include "axis-group-interface.hh" +#include "spaceable-grob.hh" void -Paper_column::add_rod (Paper_column * p, Real d) +Paper_column::do_break_processing () { - Direction dir = Direction (sign (p->rank_i () - rank_i ())); - - if (!dir) - { - programming_error ("Must set minimum distance between differing columns."); - return; - } - - for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++) - { - Column_rod &rod = minimal_dists_arr_drul_[dir][i]; - if (rod.other_l_ == p) - { - rod.distance_f_ = rod.distance_f_ >? d; - return ; - } - } - - Column_rod cr; - cr.distance_f_ = d; - cr.other_l_ = p; - - minimal_dists_arr_drul_[dir].push (cr); -} - -void -Paper_column::add_spring (Paper_column * p, Real d, Real s) -{ - Direction dir = Direction (sign (p->rank_i () - rank_i ())); - - if (!dir) - { - warning (_ ("Must set spring between differing columns")); - return; - } - - for (int i=0; i < spring_arr_drul_[dir].size (); i++) - { - Column_spring &spring = spring_arr_drul_[dir][i]; - if (spring.other_l_ == p) - { - spring.distance_f_ = spring.distance_f_ >? d; - return ; - } - } - - Column_spring cr; - cr.distance_f_ = d; - cr.strength_f_ = s; - cr.other_l_ = p; - - spring_arr_drul_[dir].push (cr); + Spaceable_grob::remove_interface (this); + Item::do_break_processing (); } int -Paper_column::rank_i() const -{ - return rank_i_; -} - -void -Paper_column::set_rank (int i) +Paper_column::rank_i (Grob*me) { - rank_i_ = i; + return dynamic_cast (me)->rank_i_; } -void -Paper_column::do_print() const +Line_of_score* +Paper_column::line_l () const { -#ifndef NPRINT - DEBUG_OUT << "rank: " << rank_i_ << '\n'; - Direction d = LEFT; - do - { - for (int i=0; i < minimal_dists_arr_drul_[d].size (); i++) - { - minimal_dists_arr_drul_[d][i].print (); - } - for (int i=0; i < spring_arr_drul_[d].size (); i++) - { - spring_arr_drul_[d][i].print (); - } - - } - while ((flip (&d))!=LEFT); - Item::do_print (); -#endif + return line_l_; } -bool -Paper_column::breakpoint_b() const +Paper_column* +Paper_column::column_l () const { - return !line_l_; + return (Paper_column*) (this); } -Paper_column::Paper_column() +Paper_column::Paper_column (SCM l) + : Item (l) // guh.? { - set_axes (X_AXIS, X_AXIS); + Axis_group_interface::set_interface (this); + Axis_group_interface::set_axes (this, X_AXIS, X_AXIS); + Spaceable_grob::set_interface (this); line_l_=0; rank_i_ = -1; } -Line_of_score* -Paper_column::line_l() const +Moment +Paper_column::when_mom (Grob*me) { - return line_l_; + SCM m = me->get_grob_property ("when"); + Moment s (0); + if (unsmob_moment (m)) + { + return *unsmob_moment (m); + } + return s; } - - - - -Paper_column* -Paper_column::column_l () const + +bool +Paper_column::musical_b () const { - return (Paper_column*)(this); + SCM m = get_grob_property ("shortest-starter-duration"); + Moment s (0); + if (unsmob_moment (m)) + { + s = *unsmob_moment (m); + } + return s != Moment (0); } -/* - ugh. - */ -void -Paper_column::preprocess () +bool +Paper_column::used_b (Grob*me) { - minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare); - minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare); - spring_arr_drul_[LEFT].sort (Column_spring::compare); - spring_arr_drul_[RIGHT].sort (Column_spring::compare); + return gh_pair_p (me->get_grob_property ("elements")) || Item::breakable_b (me) + || gh_pair_p (me->get_grob_property ("bounded-by-me")) + ; }