X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faccidental-placement.cc;h=1c7d356cc93f1b17ce289277f99520745de6cc87;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=323fa7d6f3d23764d361df92707fbe7f97772eee;hpb=8e459799a3048b989067c0f2114b27f77d6cada1;p=lilypond.git diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index 323fa7d6f3..1c7d356cc9 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2002--2007 Han-Wen Nienhuys + (c) 2002--2008 Han-Wen Nienhuys */ @@ -68,7 +68,8 @@ Accidental_placement::split_accidentals (Grob *accs, { Grob *a = unsmob_grob (scm_car (s)); - if (unsmob_grob (a->get_object ("tie"))) + if (unsmob_grob (a->get_object ("tie")) + && !to_boolean (a->get_property ("forced"))) break_reminder->push_back (a); else real_acc->push_back (a); @@ -76,54 +77,23 @@ Accidental_placement::split_accidentals (Grob *accs, } vector -Accidental_placement::get_break_reminder_accidentals (vector const &elts, Grob *left) +Accidental_placement::get_relevant_accidentals (vector const &elts, Grob *left) { vector br; vector ra; vector ret; - - if (dynamic_cast (left)->break_status_dir () != RIGHT) - return vector (); + bool right = dynamic_cast (left)->break_status_dir () == RIGHT; 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. -*/ -Interval -Accidental_placement::get_relevant_accidental_extent (Grob *me, - Item *item_col, - Grob *left_object) -{ - vector br, ra; - vector *which = 0; - - Accidental_placement::split_accidentals (me, &br, &ra); - concat (br, ra); - - if (dynamic_cast (left_object)->break_status_dir () == RIGHT) - which = &br; - else - which = &ra; - - Interval extent; - for (vsize i = 0; i < which->size (); i++) - extent.unite (which->at (i)->extent (item_col, X_AXIS)); + + ret.insert (ret.end (), ra.begin (), ra.end ()); - if (!extent.is_empty ()) - { - Real p = robust_scm2double (me->get_property ("left-padding"), 0.2); - extent[LEFT] -= p; + if (right) + ret.insert (ret.end (), br.begin (), br.end ()); } - - return extent; + return ret; } struct Accidental_placement_entry @@ -243,7 +213,7 @@ stagger_apes (vector *apes) */ -MAKE_SCHEME_CALLBACK(Accidental_placement, calc_positioning_done, 1); +MAKE_SCHEME_CALLBACK (Accidental_placement, calc_positioning_done, 1); SCM Accidental_placement::calc_positioning_done (SCM smob) { @@ -251,6 +221,8 @@ Accidental_placement::calc_positioning_done (SCM smob) if (!me->is_live ()) return SCM_BOOL_T; + me->set_property ("positioning-done", SCM_BOOL_T); + SCM accs = me->get_object ("accidental-grobs"); if (!scm_is_pair (accs)) return SCM_BOOL_T; @@ -397,8 +369,8 @@ Accidental_placement::calc_positioning_done (SCM smob) Real padding = robust_scm2double (me->get_property ("padding"), 0.2); Skyline left_skyline = head_ape->left_skyline_; - left_skyline.raise (-robust_scm2double (me->get_property ("right-padding"), 0)) -; + left_skyline.raise (-robust_scm2double (me->get_property ("right-padding"), 0)); + /* Add accs entries right-to-left. */ @@ -442,9 +414,10 @@ Accidental_placement::calc_positioning_done (SCM smob) me->flush_extent_cache (X_AXIS); me->set_property ("X-extent", scm_width); - for (vsize i = apes.size (); i--;) - delete apes[i]; + junk_pointers (apes); + delete head_ape; + return SCM_BOOL_T; }