From: Joe Neeman Date: Sun, 17 Dec 2006 21:35:37 +0000 (+0200) Subject: fix conditional-elements in horizontal-spacing skylines X-Git-Tag: release/2.11.4-1~17 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e239130aac777f163b436dd0fe5715417f964734;hp=ec2ba4ca9c8610e9bcbc2a2f4bbaaadf4d4c3f9a;p=lilypond.git fix conditional-elements in horizontal-spacing skylines --- diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index f6bfefff5d..6aaf49b2e6 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -75,6 +75,24 @@ Accidental_placement::split_accidentals (Grob *accs, } } +vector +Accidental_placement::get_break_reminder_accidentals (vector const &elts, Grob *left) +{ + vector br; + vector ra; + vector ret; + + if (dynamic_cast (left)->break_status_dir () != RIGHT) + return vector (); + + for (vsize i = 0; i < elts.size (); i++) + { + split_accidentals (elts[i], &br, &ra); + ret.insert (ret.end (), br.begin (), br.end ()); + } + return ret; +} + /* Accidentals are special, because they appear and disappear after ties at will. diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh index c34fc0b766..5d09bdc2df 100644 --- a/lily/include/accidental-placement.hh +++ b/lily/include/accidental-placement.hh @@ -18,6 +18,8 @@ public: DECLARE_SCHEME_CALLBACK (alignment_callback, (SCM element)); static void add_accidental (Grob *, Grob *); + static vector get_break_reminder_accidentals (vector const &elts, + Grob *left); static Interval get_relevant_accidental_extent (Grob *me, Item *item_col, Grob *acc); diff --git a/lily/separation-item.cc b/lily/separation-item.cc index 0f1d461021..0a6c085afc 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -35,7 +35,7 @@ Separation_item::set_skyline_distance (Drul_array items, Skyline_pair::unsmob (items[RIGHT]->get_property ("skylines"))); Skyline right = conditional_skyline (items[RIGHT], items[LEFT]); right.merge ((*lines[RIGHT])[LEFT]); - + Real dist = padding + (*lines[LEFT])[RIGHT].distance (right); if (dist > 0) { @@ -91,7 +91,13 @@ Separation_item::boxes (Grob *me, Grob *left) int very_large = INT_MAX; Paper_column *pc = item->get_column (); vector out; - extract_grob_set (me, left ? "conditional-elements" : "elements", elts); + extract_grob_set (me, left ? "conditional-elements" : "elements", read_only_elts); + vector elts; + + if (left) + elts = Accidental_placement::get_break_reminder_accidentals (read_only_elts, left); + else + elts = read_only_elts; Grob *ycommon = common_refpoint_of_array (elts, me, Y_AXIS); @@ -107,18 +113,11 @@ Separation_item::boxes (Grob *me, Grob *left) continue; Interval y (il->pure_height (ycommon, 0, very_large)); - Interval x; - - if (!left) - x = il->extent (pc, X_AXIS); - else if (Accidental_placement::has_interface (il)) - x = Accidental_placement::get_relevant_accidental_extent (il, pc, left); - else - continue; + Interval x (il->extent (pc, X_AXIS)); SCM padding = elts[i]->get_property ("padding"); x.widen (robust_scm2double (padding, 0)); - + out.push_back (Box (x, y)); }