X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fitem.cc;h=78db9884e97fadeb4f5fb11877a222066c5cda81;hb=55fa3168d0fb5326341ff56d7a1638c89eb2ebaf;hp=6d72b4c5b81d0c013435b14375333672386e4a34;hpb=2862b1027f316a2f0444fa92e441ee28acf7a463;p=lilypond.git diff --git a/lily/item.cc b/lily/item.cc index 6d72b4c5b8..78db9884e9 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -3,31 +3,33 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "p-score.hh" #include "debug.hh" #include "item.hh" #include "p-col.hh" -#include "elem-group.hh" +// #include "elem-group.hh" #include "spanner.hh" -Item::Item() +Item::Item () { + unbroken_original_l_ =0; + break_priority_i_ = 0; breakable_b_ = false; - break_status_i_ = 0; + break_status_dir_ = CENTER; broken_to_drul_[LEFT] = broken_to_drul_[RIGHT]=0; } -IMPLEMENT_IS_TYPE_B1(Item, Score_elem); +IMPLEMENT_IS_TYPE_B1(Item, Score_element); void Item::do_print() const { #ifndef NPRINT - DOUT << "breakable_b_: " << breakable_b_; - DOUT << "break_status_i_: " <line_l() : 0; + Graphical_axis_group *ga = axis_group_l_a_[X_AXIS]; + + if (!ga) + return 0; + + assert (ga->access_Score_element()); + return ga->access_Score_element ()-> line_l (); } -int -Item::break_status_i() const +Direction +Item::break_status_dir() const { - return break_status_i_; + return break_status_dir_; } void @@ -59,14 +67,14 @@ Item::copy_breakable_items() Direction i=LEFT; do { - Item * item_p = clone()->item (); + Item * item_p = clone()->access_Item (); - item_p->break_status_i_ = i; + item_p->break_status_dir_ = i; pscore_l_->typeset_element (item_p); item_p->handle_prebroken_dependencies(); new_copies[i] =item_p; } - while ((i *= -1) != LEFT); + while (flip(&i) != LEFT); broken_to_drul_= new_copies; } @@ -76,15 +84,17 @@ Item::do_breakable_col_processing() if (!breakable_b_) return; + if (!column_l ()->breakable_b_) + return; + copy_breakable_items(); handle_prebroken_dependencies(); /* Otherwise the broken items won't be pre_process()'ed. - */ + */ add_dependency (broken_to_drul_[LEFT]); add_dependency (broken_to_drul_[RIGHT]); - } Item* @@ -101,28 +111,28 @@ Item::find_prebroken_piece (Line_of_score*l) const } Item* -Item::find_prebroken_piece (int breakstatus) const +Item::find_prebroken_piece (Direction breakstatus) const { if (!breakstatus) return (Item *) this; // ugh else - return (Item*) broken_to_drul_[(Direction)breakstatus]; + return (Item*) broken_to_drul_[breakstatus]; } void Item::handle_prebroken_dependencies() { if (breakable_b_) - Score_elem::handle_prebroken_dependencies(); + Score_element::handle_prebroken_dependencies(); } int Item::left_right_compare(Item const *l, Item const *r) { while (!l->is_type_b (Paper_column::static_name ())) - l = l->axis_group_l_a_[X_AXIS]->item(); + l = l->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item (); while (!r->is_type_b (Paper_column::static_name ())) - r = r->axis_group_l_a_[X_AXIS]->item(); + r = r->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item (); Paper_column *p1 = (Paper_column*)l; Paper_column* p2 = (Paper_column*)r; @@ -133,7 +143,7 @@ Item::left_right_compare(Item const *l, Item const *r) bool Item::linked_b() const { - return Score_elem::linked_b() || attached_span_l_arr_.size(); + return Score_element::linked_b() || attached_span_l_arr_.size(); } void @@ -145,13 +155,43 @@ Item::do_junk_links() void Item::do_unlink() { - for (int i=0; i < attached_span_l_arr_.size (); i++) { - Spanner *&s= attached_span_l_arr_[i]; - if (s->spanned_drul_[LEFT] == this) - s->set_bounds (LEFT, 0); - if (s->spanned_drul_[RIGHT] == this) - s->set_bounds (RIGHT,0); - s =0; - } - attached_span_l_arr_.set_size (0); + Link_array attached=attached_span_l_arr_; + for (int i=0; i < attached.size (); i++) + { + Spanner *s= attached[i]; + + Direction d= LEFT; + do { + if (s->spanned_drul_[d] == this) + s->set_bounds (d, 0); + if (unbroken_original_l_ + && unbroken_original_l_-> broken_to_drul_[d] == this) + unbroken_original_l_->broken_to_drul_[d] = 0; + } while (flip (&d) != LEFT); + } + assert (!attached_span_l_arr_.size ()); + unbroken_original_l_ =0; +} + +Paper_column * +Item::column_l () const +{ + return axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ()->column_l (); +} + +Item::Item (Item const &s) + : Score_element (s) +{ + unbroken_original_l_ = &s; + /* do not copy attached_span_l_arr_ */ + breakable_b_ = s.breakable_b_; + broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] =0; + break_status_dir_ = s.break_status_dir_; + break_priority_i_ = s.break_priority_i_; +} + +Item * +Item::access_Item () +{ + return this; }