2 item.cc -- implement Item
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
13 #include "elem-group.hh"
20 broken_to_drul_[LEFT] = broken_to_drul_[RIGHT]=0;
23 IMPLEMENT_IS_TYPE_B1(Item, Score_elem);
26 Item::do_print() const
29 DOUT << "breakable_b_: " << breakable_b_ <<
30 " break_status_i_: " <<break_status_i_;
38 return absolute_coordinate (X_AXIS);
44 return (axis_group_l_a_[X_AXIS])? axis_group_l_a_[X_AXIS]->line_l() : 0;
48 Item::break_status_i() const
50 return break_status_i_;
54 Item::copy_breakable_items()
56 if (broken_to_drul_[LEFT] || broken_to_drul_[RIGHT])
58 Drul_array<Item *> new_copies;
62 Item * item_p = clone()->item ();
64 item_p->break_status_i_ = i;
65 pscore_l_->typeset_element (item_p);
66 item_p->handle_prebroken_dependencies();
67 new_copies[i] =item_p;
69 while ((i *= -1) != LEFT);
70 broken_to_drul_= new_copies;
74 Item::do_breakable_col_processing()
79 copy_breakable_items();
80 handle_prebroken_dependencies();
83 Otherwise the broken items won't be pre_process()'ed.
85 add_dependency (broken_to_drul_[LEFT]);
86 add_dependency (broken_to_drul_[RIGHT]);
91 Item::find_prebroken_piece (Line_of_score*l) const
95 else if (broken_to_drul_[LEFT] && broken_to_drul_[LEFT]->line_l() == l)
96 return broken_to_drul_[LEFT];
97 else if (broken_to_drul_[RIGHT] && broken_to_drul_[RIGHT]->line_l() == l)
98 return broken_to_drul_[RIGHT];
104 Item::find_prebroken_piece (int breakstatus) const
107 return (Item *) this; // ugh
109 return (Item*) broken_to_drul_[(Direction)breakstatus];
113 Item::handle_prebroken_dependencies()
116 Score_elem::handle_prebroken_dependencies();
120 Item::left_right_compare(Item const *l, Item const *r)
122 while (!l->is_type_b (Paper_column::static_name ()))
123 l = l->axis_group_l_a_[X_AXIS]->item();
124 while (!r->is_type_b (Paper_column::static_name ()))
125 r = r->axis_group_l_a_[X_AXIS]->item();
127 Paper_column *p1 = (Paper_column*)l;
128 Paper_column* p2 = (Paper_column*)r;
129 return p1->rank_i () - p2->rank_i ();
134 Item::linked_b() const
136 return Score_elem::linked_b() || attached_span_l_arr_.size();
140 Item::do_junk_links()
142 attached_span_l_arr_.set_size(0);
148 for (int i=0; i < attached_span_l_arr_.size (); i++) {
149 Spanner *&s= attached_span_l_arr_[i];
150 if (s->spanned_drul_[LEFT] == this)
151 s->set_bounds (LEFT, 0);
152 if (s->spanned_drul_[RIGHT] == this)
153 s->set_bounds (RIGHT,0);
156 attached_span_l_arr_.set_size (0);