X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fseparation-item.cc;h=8a32363eb4d2b0d8c6df9c321f429cbee8886e8d;hb=543dc9db58da5e3acaf72dae2478933742fa6e90;hp=ac14f7cf85a6d83ef133d4407787590c0e7d7936;hpb=3f8a827aad721ed546b823e3f9f2605f61b90e20;p=lilypond.git diff --git a/lily/separation-item.cc b/lily/separation-item.cc index ac14f7cf85..8a32363eb4 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2011 Han-Wen Nienhuys + Copyright (C) 1998--2012 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,8 +80,7 @@ Skyline Separation_item::conditional_skyline (Grob *me, Grob *left) { vector bs = boxes (me, left); - Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); - return Skyline (bs, horizon_padding, Y_AXIS, LEFT); + return Skyline (bs, Y_AXIS, LEFT); } MAKE_SCHEME_CALLBACK (Separation_item, calc_skylines, 1); @@ -90,8 +89,19 @@ Separation_item::calc_skylines (SCM smob) { Item *me = unsmob_item (smob); vector bs = boxes (me, 0); - Real horizon_padding = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); - return Skyline_pair (bs, horizon_padding, Y_AXIS).smobbed_copy (); + Skyline_pair sp (bs, Y_AXIS); + /* + TODO: We need to decide if padding is 'intrinsic' + to a skyline or if it is something that is only added on in + distance calculations. Here, we make it intrinsic, which copies + the behavior from the old code but no longer corresponds to how + vertical skylines are handled (where padding is not built into + the skyline). + */ + Real vp = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); + sp[LEFT] = sp[LEFT].padded (vp); + sp[RIGHT] = sp[RIGHT].padded (vp); + return sp.smobbed_copy (); } /* if left is non-NULL, get the boxes corresponding to the @@ -140,10 +150,19 @@ Separation_item::boxes (Grob *me, Grob *left) Interval extra_height = robust_scm2interval (elts[i]->get_property ("extra-spacing-height"), Interval (0.0, 0.0)); - x[LEFT] += extra_width[LEFT]; - x[RIGHT] += extra_width[RIGHT]; - y[DOWN] += extra_height[DOWN]; - y[UP] += extra_height[UP]; + // The conventional empty extent is (+inf.0 . -inf.0) + // but (-inf.0 . +inf.0) is used as extra-spacing-height + // on items that must not overlap other note-columns. + // If these two uses of inf combine, leave the empty extent. + + if (!isinf (x[LEFT])) + x[LEFT] += extra_width[LEFT]; + if (!isinf (x[RIGHT])) + x[RIGHT] += extra_width[RIGHT]; + if (!isinf (y[DOWN])) + y[DOWN] += extra_height[DOWN]; + if (!isinf (y[UP])) + y[UP] += extra_height[UP]; if (!x.is_empty () && !y.is_empty ()) out.push_back (Box (x, y));