Item::Item()
{
+ breakable_b_ = false;
+ break_status_i_ = 0;
pcol_l_ = 0;
- broken_to_a_[0]
- = broken_to_a_[1]=0;
+ broken_to_a_[0] = broken_to_a_[1]=0;
}
IMPLEMENT_IS_TYPE_B1(Item, Score_elem);
Real
Item::hpos_f()const
{
- return pcol_l_->hpos_f_ + offset().x;
+ return pcol_l_->hpos_f_ + absolute_coordinate(X_AXIS);
}
-
-
Line_of_score *
Item::line_l()const
{
int
Item::break_status_i() const
{
- PCol * c = pcol_l_;
- if (c->breakable_b())
- return 0;
- else if (!c->daddy_l_)
- return 0;
- else if (c == c->daddy_l_->prebreak_p_)
- return -1;
- else
- return 1;
+ return break_status_i_;
}
void
Item::copy_breakable_items()
{
+ if ( broken_to_a_[0] || broken_to_a_[1] )
+ return;
+ Item *new_copies[2];
for (int i=0; i < 2; i++) {
Item * item_p = clone()->item();
item_p->copy_dependencies(*this);
- /* add our pre and postbreaks blondly to our own y_group
- Let Vertical_group_spanner figure out the mess.
- */
- if ( y_group_l_ )
- y_group_l_->add_element( item_p );
- pscore_l_->typeset_item(item_p, pcol_l_, -1+ 2*i);
+
+ item_p->break_status_i_ = -1+ 2*i;
+ pscore_l_->typeset_item(item_p, pcol_l_);
item_p->handle_prebroken_dependencies();
- broken_to_a_[i] = item_p;
+ new_copies[i] =item_p;
}
+ broken_to_a_= new_copies;
}
void
Item::do_breakable_col_processing()
{
- PCol * c = pcol_l_;
- if (!c->breakable_b())
+ if (!breakable_b_ || !pcol_l_->breakable_b())
return;
-
+
copy_breakable_items();
handle_prebroken_dependencies();
+
+ /*
+ Otherwise the broken items won't be pre_process()'ed.
+ */
+ add_dependency( broken_to_a_[0] );
+ add_dependency( broken_to_a_[1] );
+
}
Item*
void
Item::handle_prebroken_dependencies()
{
- if ( pcol_l_->breakable_b() || pcol_l_->daddy_l_ )
+ if ( breakable_b_ )
Score_elem::handle_prebroken_dependencies();
}