From: Joe Neeman Date: Mon, 30 Jul 2007 08:19:57 +0000 (+1000) Subject: Avoid more cyclic dependencies for adjacent-pure-heights X-Git-Tag: release/2.11.29-1~27^2~2 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e7248fadf69b37221b4b36e9cdc0027eef60493a;p=lilypond.git Avoid more cyclic dependencies for adjacent-pure-heights --- diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 4d280ac480..291c799910 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -151,7 +151,8 @@ Axis_group_interface::adjacent_pure_heights (SCM smob) for (vsize j = 0; j < spanners.size (); j++) { Interval_t rank_span = spanners[j]->spanned_rank_interval (); - if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start) + if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start + && !to_boolean (spanners[j]->get_property ("cross-staff"))) { Interval dims = spanners[j]->pure_height (common, start, end); if (!dims.is_empty ()) diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index dc105cea4a..88f8735d68 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -26,6 +26,7 @@ public: DECLARE_SCHEME_CALLBACK (x_aligned_side, (SCM element, SCM current)); DECLARE_SCHEME_CALLBACK (y_aligned_side, (SCM element, SCM current)); DECLARE_SCHEME_CALLBACK (pure_y_aligned_side, (SCM element, SCM start, SCM end, SCM current)); + DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM element)); static SCM aligned_side (Grob*me, Axis a, bool pure, int start, int end, Real *current_off_ptr); diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 14d5c8903d..43665211bf 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -201,6 +201,17 @@ Side_position_interface::pure_y_aligned_side (SCM smob, SCM start, SCM end, SCM cur_off); } +MAKE_SCHEME_CALLBACK (Side_position_interface, calc_cross_staff, 1) +SCM +Side_position_interface::calc_cross_staff (SCM smob) +{ + Grob *me = unsmob_grob (smob); + extract_grob_set (me, "side-support-elements", elts); + + Grob *common = common_refpoint_of_array (elts, me->get_parent (Y_AXIS), Y_AXIS); + return scm_from_bool (common != me->get_parent (Y_AXIS)); +} + SCM Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, int end, Real *current_off) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 2115355f03..6b2135c9e6 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -605,6 +605,7 @@ (outside-staff-priority . 250) (Y-extent . ,ly:axis-group-interface::height) (X-extent . ,ly:axis-group-interface::width) + (cross-staff . ,ly:side-position-interface::calc-cross-staff) (meta . ((class . Spanner) (interfaces . (axis-group-interface dynamic-interface