X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faxis-group-spanner.cc;h=033a55b33a25be97a84e0af417556f87249d7bc6;hb=2862b1027f316a2f0444fa92e441ee28acf7a463;hp=1d45de3ae0e3bd003c7ff457ec5daf88ab859bcd;hpb=68ffccad7c4d4ce0386cb60c537c99523e61c4d9;p=lilypond.git diff --git a/lily/axis-group-spanner.cc b/lily/axis-group-spanner.cc index 1d45de3ae0..033a55b33a 100644 --- a/lily/axis-group-spanner.cc +++ b/lily/axis-group-spanner.cc @@ -21,97 +21,95 @@ Axis_group_spanner::do_break_processing_if_unbroken() Line_of_score *my_line = line_l(); for (int i=0; i < elems.size(); i++) { - if (!elems[i]->line_l()) - { - Item * item_l = elems[i]->item(); - if (item_l - && item_l->breakable_b_ - && item_l->break_status_i() == 0) - { - // last two checks are paranoia - Item * broken_item_l = - item_l->find_prebroken_piece (my_line); - add_element (broken_item_l); - } - remove_element (elems[i]); - } + if (!elems[i]->line_l()) + { + Item * item_l = elems[i]->item(); + if (item_l + && item_l->breakable_b_ + && item_l->break_status_i() == 0) + { + // last two checks are paranoia + Item * broken_item_l = + item_l->find_prebroken_piece (my_line); + add_element (broken_item_l); + } + remove_element (elems[i]); + } } - } void Axis_group_spanner::do_break_processing() { - set_my_columns(); bool breaking_self_b = ! Spanner::line_l(); if (!breaking_self_b) { - do_break_processing_if_unbroken(); - Spanner::do_break_processing(); - return; + do_break_processing_if_unbroken(); + Spanner::do_break_processing(); + return; } - break_into_pieces (true); + break_into_pieces (); Link_array loose_elems = axis_admin_.elem_l_arr_; remove_all(); for (int i=0; i < loose_elems.size(); i++) { - Score_elem * elt = loose_elems[i]; - Line_of_score *elt_line = elt->line_l(); + Score_elem * elt = loose_elems[i]; + Line_of_score *elt_line = elt->line_l(); - if ( ! elt_line) - { - /* this piece doesn't know where it belongs. - Find out if it was broken, and use the broken remains - */ - if (elt->spanner()) - { - Spanner * sp = elt->spanner(); + if (! elt_line) + { + /* this piece doesn't know where it belongs. + Find out if it was broken, and use the broken remains + */ + if (elt->spanner()) + { + Spanner * sp = elt->spanner(); - for (int j =0; j < broken_into_l_arr_.size(); j++) - { - Axis_group_spanner * my_broken_l - = (Axis_group_spanner*)broken_into_l_arr_[j]; + for (int j =0; j < broken_into_l_arr_.size(); j++) + { + Axis_group_spanner * my_broken_l + = (Axis_group_spanner*)broken_into_l_arr_[j]; - Spanner * broken_span_l - = sp->find_broken_piece ( - ((Score_elem*)my_broken_l)->line_l()); + Spanner * broken_span_l + = sp->find_broken_piece ( + ((Score_elem*)my_broken_l)->line_l()); - if (broken_span_l) - my_broken_l->add_element (broken_span_l); - - } - } - else if (elt->item() - && elt->item()->breakable_b_ - && elt->item()->break_status_i () == 0) - { - - // broken items - for (int j =0; j < 2; j++) - { - Item * my_item = elt->item()->broken_to_a_[j]; - Line_of_score * item_line_l = my_item->line_l() ; - if ( ! item_line_l) - continue; + if (broken_span_l) + my_broken_l->add_element (broken_span_l); - Axis_group_spanner * v - = (Axis_group_spanner*)find_broken_piece (item_line_l); - if (v) - v->add_element (my_item); - } + } + } + else if (elt->item() + && elt->item()->breakable_b_ + && elt->item()->break_status_i () == 0) + { + // broken items + Direction j=LEFT; + do + { + Item * my_item = elt->item()->broken_to_drul_[j]; + Line_of_score * item_line_l = my_item->line_l() ; + if (! item_line_l) + continue; - } - } - else - { + Axis_group_spanner * v + = (Axis_group_spanner*)find_broken_piece (item_line_l); + if (v) + v->add_element (my_item); + } + while ((j*=-1) != LEFT); + } + } + else + { /* this piece *does* know where it belongs. Put it in appropriate piece of this spanner */ - Axis_group_spanner * my_broken_l - = (Axis_group_spanner*)find_broken_piece (elt->line_l()); - my_broken_l->add_element (elt); - } + Axis_group_spanner * my_broken_l + = (Axis_group_spanner*)find_broken_piece (elt->line_l()); + my_broken_l->add_element (elt); + } } Spanner::do_break_processing();