X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem.cc;h=b72720756833186f1b452087cc43bd92efd3bb4c;hb=31a565c0bad19d6c9206a72405b90dd47b0d4968;hp=6f57b2db616251cadcf8045dba8c812b8a462438;hpb=286b81accdca4a86239425de564014a145109a6e;p=lilypond.git diff --git a/lily/system.cc b/lily/system.cc index 6f57b2db61..b727207568 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -8,6 +8,7 @@ #include +#include "align-interface.hh" #include "axis-group-interface.hh" #include "warn.hh" #include "system.hh" @@ -41,8 +42,8 @@ int System::spanner_count () const { int k = 0; - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) - if (dynamic_cast (unsmob_grob (ly_car (s)))) + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) + if (dynamic_cast (unsmob_grob (scm_car (s)))) k++; return k; } @@ -64,18 +65,18 @@ System::typeset_grob (Grob * elem) static void fixup_refpoints (SCM s) { - for (; ly_c_pair_p (s); s = ly_cdr (s)) + for (; scm_is_pair (s); s = scm_cdr (s)) { - Grob::fixup_refpoint (ly_car (s)); + Grob::fixup_refpoint (scm_car (s)); } } SCM System::get_lines () { - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) { - Grob *g = unsmob_grob (ly_car (s)); + Grob *g = unsmob_grob (scm_car (s)); if (g->internal_has_interface (ly_symbol2scm ("only-prebreak-interface"))) { /* @@ -101,8 +102,8 @@ System::get_lines () { Grob *se = broken_intos_[i]; SCM all = se->get_property ("all-elements"); - for (SCM s = all; ly_c_pair_p (s); s = ly_cdr (s)) - fixup_refpoint (ly_car (s)); + for (SCM s = all; scm_is_pair (s); s = scm_cdr (s)) + fixup_refpoint (scm_car (s)); count += scm_ilength (all); } @@ -111,8 +112,8 @@ System::get_lines () */ fixup_refpoints (get_property ("all-elements")); - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) - unsmob_grob (ly_car (s))->handle_broken_dependencies (); + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) + unsmob_grob (scm_car (s))->handle_broken_dependencies (); handle_broken_dependencies (); #if 0 /* don't do this: strange side effects. */ @@ -170,11 +171,11 @@ set_loose_columns (System* which, Column_x_positions const *posns) while (1) { SCM between = loose->get_property ("between-cols"); - if (!ly_c_pair_p (between)) + if (!scm_is_pair (between)) break; - Item *le = dynamic_cast (unsmob_grob (ly_car (between))); - Item *re = dynamic_cast (unsmob_grob (ly_cdr (between))); + Item *le = dynamic_cast (unsmob_grob (scm_car (between))); + Item *re = dynamic_cast (unsmob_grob (scm_cdr (between))); if (!(le && re)) break; @@ -252,7 +253,7 @@ System::add_column (Paper_column*p) { Grob *me = this; SCM cs = me->get_property ("columns"); - Grob *prev = ly_c_pair_p (cs) ? unsmob_grob (ly_car (cs)) : 0; + Grob *prev = scm_is_pair (cs) ? unsmob_grob (scm_car (cs)) : 0; p->rank_ = prev ? Paper_column::get_rank (prev) + 1 : 0; @@ -264,29 +265,29 @@ System::add_column (Paper_column*p) void System::pre_processing () { - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) - unsmob_grob (ly_car (s))->discretionary_processing (); + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) + unsmob_grob (scm_car (s))->discretionary_processing (); if (verbose_global_b) progress_indication (_f ("Grob count %d", element_count ())); - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) - unsmob_grob (ly_car (s))->handle_prebroken_dependencies (); + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) + unsmob_grob (scm_car (s))->handle_prebroken_dependencies (); fixup_refpoints (get_property ("all-elements")); - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) { - Grob *sc = unsmob_grob (ly_car (s)); + Grob *sc = unsmob_grob (scm_car (s)); sc->calculate_dependencies (PRECALCED, PRECALCING, ly_symbol2scm ("before-line-breaking-callback")); } progress_indication ("\n"); progress_indication (_ ("Calculating line breaks...")); progress_indication (" "); - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) { - Grob *e = unsmob_grob (ly_car (s)); + Grob *e = unsmob_grob (scm_car (s)); SCM proc = e->get_property ("spacing-procedure"); if (ly_c_procedure_p (proc)) scm_call_1 (proc, e->self_scm ()); @@ -296,9 +297,9 @@ System::pre_processing () void System::post_processing () { - for (SCM s = get_property ("all-elements"); ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s)) { - Grob *g = unsmob_grob (ly_car (s)); + Grob *g = unsmob_grob (scm_car (s)); g->calculate_dependencies (POSTCALCED, POSTCALCING, ly_symbol2scm ("after-line-breaking-callback")); } @@ -308,7 +309,7 @@ System::post_processing () programming_error ("System with zero extent."); else translate_axis (-iv[MAX], Y_AXIS); - + /* Generate all stencils to trigger font loads. This might seem inefficient, but Stencils are cached per grob anyway. */ @@ -316,9 +317,9 @@ System::post_processing () all = ly_list_qsort_uniq_x (all); this->get_stencil (); - for (SCM s = all; ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = all; scm_is_pair (s); s = scm_cdr (s)) { - Grob *g = unsmob_grob (ly_car (s)); + Grob *g = unsmob_grob (scm_car (s)); g->get_stencil (); } } @@ -336,15 +337,24 @@ System::get_line () Start with layer 3, since scm_cons prepends to list. */ SCM all = get_property ("all-elements"); Interval staff_refpoints; + staff_refpoints.set_empty(); + for (int i = LAYER_COUNT; i--;) - for (SCM s = all; ly_c_pair_p (s); s = ly_cdr (s)) + for (SCM s = all; scm_is_pair (s); s = scm_cdr (s)) { - Grob *g = unsmob_grob (ly_car (s)); + Grob *g = unsmob_grob (scm_car (s)); Stencil *stil = g->get_stencil (); if (i == 0 && Axis_group_interface::has_interface (g) - && dynamic_cast (g)) + && !Align_interface::has_interface (g) + && dynamic_cast (g) + /* + UGH. + */ + && !g->internal_has_interface (ly_symbol2scm ("dynamic-interface")) + && !g->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")) + ) { staff_refpoints.add_point (g->relative_coordinate (this, Y_AXIS)); } @@ -368,8 +378,6 @@ System::get_line () st.translate (o + extra); *tail = scm_cons (st.expr (), SCM_EOL); tail = SCM_CDRLOC(*tail); - - } if (Stencil *me = get_stencil ()) @@ -399,19 +407,19 @@ System::broken_col_range (Item const *left, Item const *right) const right = right->get_column (); SCM s = get_property ("columns"); - while (ly_c_pair_p (s) && ly_car (s) != right->self_scm ()) - s = ly_cdr (s); + while (scm_is_pair (s) && scm_car (s) != right->self_scm ()) + s = scm_cdr (s); - if (ly_c_pair_p (s)) - s = ly_cdr (s); + if (scm_is_pair (s)) + s = scm_cdr (s); - while (ly_c_pair_p (s) && ly_car (s) != left->self_scm ()) + while (scm_is_pair (s) && scm_car (s) != left->self_scm ()) { - Paper_column*c = dynamic_cast (unsmob_grob (ly_car (s))); + Paper_column*c = dynamic_cast (unsmob_grob (scm_car (s))); if (Item::is_breakable (c) && !c->system_) ret.push (c); - s = ly_cdr (s); + s = scm_cdr (s); } ret.reverse ();