On 5 nov. 2012, at 00:42, Keith OHara <k-ohara5...@oco.net> wrote: > mike <at> mikesolomon.org <mike <at> mikesolomon.org> writes: > >> If a Rest being managed by a RestCollision, a call to Grob::extent with any >> common refpoint other than the Rest itself will trigger at some point >> Rest_collision:calc_positioning_done ... >> > > Not more than once. > rest-collision.cc:calc_positioning_done() sets 'positioning-done' to true, > presumably to indicate that it has taken responsibility for positioning all > the rests within this RestCollision object. >
True. This avoids circular dependencies for the positioning done property, and the translate_axis call in force_shift_callback_rest avoids circular dependency issues for Y-offset, but there is no protection against circular dependencies for the extents. > Rests in outer voices do not often need to move to avoid rests in inner > voices, but when they do, it seems to work correctly: > > \new Staff \with {\override StaffSymbol #'staff-space = 0.7 } << > \new Voice {\voiceOne r2 g''2} > \new Voice {\voiceThree r4 e''4 c''2} > \new Voice {\voiceFour r4. e'8 g'2} > \new Voice {\voiceTwo r2 c'2} >> > I'm having trouble forcing this to come to the surface - I can only get it to trigger in some experimental work. However, I'm positive that the circular dependency exists. Here's a reduction of what's going on. 1) rest->extent (common, Y_AXIS) 2) Rest::height 3) Rest::generic_extent_callback 4) Rest::brew_internal_stencil 5) Rest::glyph_name 6) Staff_symbol_referencer::get_position 7) rest->relative_coordinate (common, Y_AXIS); 8) Rest_collision::force_shift_callback_rest 9) Rest_collision::calc_positioning_done 10) rest->extent (common, Y_AXIS) Cheers, MS _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel