From 8af46c7cf4753190efcdfb46dec2cb9636b7c803 Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Fri, 1 Dec 2006 23:07:38 +0200 Subject: [PATCH] Enable separation-item skyline spacing and fix performance bug. --- lily/include/separation-item.hh | 2 +- lily/separating-group-spanner.cc | 3 ++- lily/separation-item.cc | 6 ++++-- scm/define-grobs.scm | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lily/include/separation-item.hh b/lily/include/separation-item.hh index 5750716c72..ca63294852 100644 --- a/lily/include/separation-item.hh +++ b/lily/include/separation-item.hh @@ -23,7 +23,7 @@ struct Separation_item static Interval width (Grob *); static Interval relative_width (Grob *, Grob *); static Grob *extremal_break_aligned_grob (Grob *, Direction, Interval *); - static void set_distance (Drul_array, Real); + static bool set_distance (Drul_array, Real); static void set_skyline_distance (Drul_array, Real); static void add_item (Grob *, Item *); static void add_conditional_item (Grob *, Grob *); diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index bf02d7a564..fb8cce0022 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -37,7 +37,8 @@ Separating_group_spanner::find_rods (Item *r, Separation_item::set_distance (Drul_array (lb, r), padding); } - Separation_item::set_distance (Drul_array (l, r), padding); + if (Separation_item::set_distance (Drul_array (l, r), padding)) + break; /* this grob doesn't cause a constraint. We look further until we diff --git a/lily/separation-item.cc b/lily/separation-item.cc index dec77f5eaf..79f1f81caa 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -53,7 +53,7 @@ Separation_item::set_skyline_distance (Drul_array items, } } -void +bool Separation_item::set_distance (Drul_array items, Real padding) { @@ -61,7 +61,7 @@ Separation_item::set_distance (Drul_array items, && !Item::is_non_musical (items[RIGHT])) { set_skyline_distance (items, padding); - return; + return true; } Interval li (Separation_item::width (items[LEFT])); @@ -76,7 +76,9 @@ Separation_item::set_distance (Drul_array items, if (rod.distance_ > 0) rod.add_to_cols (); + return true; } + return false; } /* diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 8916c63440..4b70e8428a 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1373,6 +1373,7 @@ (avoid-slur . inside) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) + (skylines . ,ly:separation-item::calc-skylines) (meta . ((class . Item) (interfaces . (spacing-interface separation-item-interface)))))) -- 2.39.5