X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=blobdiff_plain;f=lily%2Fspan-bar.cc;h=476d028e2af0d2008d05f0c77023752c224efe58;hb=5142c0fa1225591c2aca945cf616c81767f2ed4e;hp=7f7768b2d16f17251fbb76678d1801b192b17dc7;hpb=a078e3a2964438b8e4ef63c0ed9b6e298afa9449;p=lilypond.git diff --git a/lily/span-bar.cc b/lily/span-bar.cc index 7f7768b2d1..476d028e2a 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -92,44 +92,41 @@ Span_bar::brew_molecule (SCM smobbed_me) // compose span_bar_mol Molecule span_bar_mol = Molecule::Molecule (); - Grob *prev_staff_bar = 0; - Real prev_staff_bar_length = 0.0; + Interval prev_extent; for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts)) { SCM smobbed_staff_bar = gh_car (elts); - SCM smobbed_staff_bar_molecule = - Bar::brew_molecule (smobbed_staff_bar); Grob *staff_bar = unsmob_grob (smobbed_staff_bar); - Real staff_bar_length = - unsmob_molecule (smobbed_staff_bar_molecule)-> - extent (Y_AXIS).length (); + Interval ext = staff_bar->extent (refp, Y_AXIS); - if (prev_staff_bar) { + if (ext.empty_b ()) + continue; + + if (!prev_extent.empty_b ()) { Interval l; - l[LEFT] = prev_staff_bar->extent (refp, Y_AXIS)[UP]; - l[RIGHT] = staff_bar->extent (refp, Y_AXIS)[DOWN]; - - SCM smobbed_staff_bar = gh_car (elts); - Grob *staff_bar = unsmob_grob (smobbed_staff_bar); + l[LEFT] = prev_extent[UP]; + l[RIGHT] = ext[DOWN]; + + //SCM smobbed_staff_bar = gh_car (elts); + //Grob *staff_bar = unsmob_grob (smobbed_staff_bar); SCM smobbed_interstaff_bar_molecule = Bar::compound_barline (staff_bar, glyph_str, l.length()). smobbed_copy (); - + Molecule *interstaff_bar_mol = unsmob_molecule (smobbed_interstaff_bar_molecule); - - yoffs += prev_staff_bar_length; // skip staff bar + + yoffs += prev_extent.length (); // skip staff bar yoffs += 0.5 * (l[RIGHT] - l[LEFT]); // compensate interstaff bar centering interstaff_bar_mol->translate_axis (yoffs, Y_AXIS); yoffs += 0.5 * (l[RIGHT] - l[LEFT]); - + span_bar_mol.add_molecule (*interstaff_bar_mol); } - prev_staff_bar = staff_bar; - prev_staff_bar_length = staff_bar_length; + prev_extent = ext; } return span_bar_mol.smobbed_copy ();