X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem.cc;h=0551b85cbccda5286e770fdc238722edda48aec7;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=d30a5f342909fedf384769e446c7a471b1acbf73;hpb=0c14539bc83d6bb405141b6f21430b33d1e8fcf0;p=lilypond.git diff --git a/lily/system.cc b/lily/system.cc index d30a5f3429..0551b85cbc 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -40,6 +40,7 @@ #include "text-interface.hh" #include "warn.hh" #include "unpure-pure-container.hh" +#include "lily-imports.hh" System::System (System const &src) : Spanner (src) @@ -105,16 +106,9 @@ System::typeset_grob (Grob *elem) void System::derived_mark () const { - if (!all_elements_->empty ()) - { - Grob **ptr = &all_elements_->array_reference ()[0]; - Grob **end = ptr + all_elements_->size (); - while (ptr < end) - { - scm_gc_mark ((*ptr)->self_scm ()); - ptr++; - } - } + const vector &arr = all_elements_->array (); + for (vsize i = arr.size (); i--;) + scm_gc_mark (arr[i]->self_scm ()); if (pscore_) scm_gc_mark (pscore_->self_scm ()); @@ -180,7 +174,7 @@ System::do_break_substitution_and_fixup_refpoints () handle_broken_dependencies (); - /* Because the this->get_property (all-elements) contains items in 3 + /* Because the get_property (all-elements) contains items in 3 versions, handle_broken_dependencies () will leave duplicated items in all-elements. Strictly speaking this is harmless, but it leads to duplicated symbols in the output. uniq makes sure @@ -327,8 +321,8 @@ System::internal_get_note_heights_in_range (vsize start, vsize end, bool foot) if (!Text_interface::is_markup (footnote_markup)) continue; - SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"), - pscore_->layout ()->self_scm ()); + SCM props = + Lily::layout_extract_page_properties (pscore_->layout ()->self_scm ()); SCM footnote_stl = Text_interface::interpret_markup (pscore_->layout ()->self_scm (), props, footnote_markup); @@ -413,7 +407,7 @@ System::vertical_skyline_elements (SCM smob) vector vertical_skyline_grobs; extract_grob_set (me_grob, "elements", my_elts); for (vsize i = 0; i < my_elts.size (); i++) - if (System_start_delimiter::has_interface (my_elts[i])) + if (has_interface (my_elts[i])) vertical_skyline_grobs.push_back (my_elts[i]); System *me = dynamic_cast (me_grob); @@ -428,7 +422,7 @@ System::vertical_skyline_elements (SCM smob) extract_grob_set (align, "elements", elts); for (vsize i = 0; i < elts.size (); i++) - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) vertical_skyline_grobs.push_back (elts[i]); SCM grobs_scm = Grob_array::make_array (); @@ -449,7 +443,7 @@ System::break_into_pieces (vector const &breaking) int st = Paper_column::get_rank (c[0]); int end = Paper_column::get_rank (c.back ()); - Interval iv (pure_height (this, st, end)); + Interval iv (pure_y_extent (this, st, end)); system->set_property ("pure-Y-extent", ly_interval2scm (iv)); system->set_bound (LEFT, c[0]); @@ -549,7 +543,7 @@ System::post_processing () vector all_elts_sorted (all_elements_->array ()); uniquify (all_elts_sorted); - this->get_stencil (); + get_stencil (); for (vsize i = all_elts_sorted.size (); i--;) { Grob *g = all_elts_sorted[i]; @@ -636,14 +630,14 @@ System::get_paper_system () } } - Grob *left_bound = this->get_bound (LEFT); + Grob *left_bound = get_bound (LEFT); SCM prop_init = left_bound->get_property ("line-break-system-details"); Prob *pl = make_paper_system (prop_init); paper_system_set_stencil (pl, sys_stencil); /* information that the page breaker might need */ - Grob *right_bound = this->get_bound (RIGHT); - pl->set_property ("vertical-skylines", this->get_property ("vertical-skylines")); + Grob *right_bound = get_bound (RIGHT); + pl->set_property ("vertical-skylines", get_property ("vertical-skylines")); pl->set_property ("page-break-permission", right_bound->get_property ("page-break-permission")); pl->set_property ("page-turn-permission", right_bound->get_property ("page-turn-permission")); pl->set_property ("page-break-penalty", right_bound->get_property ("page-break-penalty")); @@ -664,7 +658,7 @@ System::get_paper_system () } pl->set_property ("staff-refpoint-extent", ly_interval2scm (staff_refpoints)); - pl->set_property ("system-grob", this->self_scm ()); + pl->set_property ("system-grob", self_scm ()); return pl->unprotect (); } @@ -762,7 +756,7 @@ System::get_vertical_alignment (SCM smob) extract_grob_set (me, "elements", elts); Grob *ret = 0; for (vsize i = 0; i < elts.size (); i++) - if (Align_interface::has_interface (elts[i])) + if (has_interface (elts[i])) { if (ret) me->programming_error ("found multiple vertical alignments in this system"); @@ -791,7 +785,7 @@ System::get_extremal_staff (Direction dir, Interval const &iv) vsize end = (dir == UP) ? elts.size () : VPOS; for (vsize i = start; i != end; i += dir) { - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) Hara_kiri_group_spanner::consider_suicide (elts[i]); Interval intersection = elts[i]->extent (this, X_AXIS); @@ -821,7 +815,7 @@ System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interva if (elts[i] == vertical_axis_group) return out; - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) Hara_kiri_group_spanner::consider_suicide (elts[i]); bounds.intersect (elts[i]->spanned_rank_interval ()); @@ -916,7 +910,7 @@ System::calc_pure_relevant_grobs (SCM smob) for (vsize i = 0; i < elts.size (); ++i) { - if (!Axis_group_interface::has_interface (elts[i])) + if (!has_interface (elts[i])) { relevant_grobs.push_back (elts[i]);