For example, the value of an adjustment to VoiceFollower.bound-details.left.Y is relative to the start note's staff, not to the end note's one.
This requires some work. The basic problem is that for this to work we need the line spanner to compute its own coordinate relative to the chosen refpoint. This does not work for line spanners that are side-positioned, such as DynamicTextSpanner: their coordinate depends on their very stencil (side positioning is skyline-based). That's logical: if the Y positions are already fixed relative to the staff, it does not make sense to side-position afterwards. In general, there are a number of differences in handling between horizontal line spanners, such as TextSpanner, DynamicTextSpanner, etc., and non-horizontal line spanners, like Glissando, FingerGlideSpanner and VoiceFollower. This takes the stance of being explicit and introduces a horizontal-line-spanner-interface, which is a subset of the line-spanner-interface. Horizontal line spanners now use callbacks from this interface to compute bound info. These callbacks don't try to calculate Y values. This also obviates having to set Y to 0 in bound-details for horizontal line spanners. The repartition of the feature set is that while horizontal line spanners can be side-positioned, the non-horizontal ones can have their Y positions computed automatically.
In the future, the horizontal-line-spanner-interface may prove useful for smarter cross-staff handling.
Closes #5229 (closed)