Hi,
I'm trying to code an engraver setting a pointer from BarLine to
previous NoteHead and an override for BarLine.Y-offset acting upon
that pointer.
It does not work, if the BarLine is at end.
Here a stripped down example (every security is removed and all is
heavily simplified):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.23.9"
tst =
#(lambda (ctx)
(let ((nc #f)
(bar #f))
(make-engraver
(acknowledgers
((bar-line-interface engraver grob source-engraver)
(set! bar grob))
((note-head-interface engraver grob source-engraver)
(set! nc grob)))
((stop-translation-timestep engraver)
(if (and nc bar)
(ly:grob-set-object! bar 'element nc))))))
moveBarLineToPrevHead =
\override Staff.BarLine.Y-offset =
#(lambda (grob)
(let* ((prev-head (ly:grob-object grob 'element))
(staff-pos
(if (ly:grob? prev-head)
(ly:grob-property prev-head 'staff-position #f)
#f)))
(pretty-print
(list
(cons 'prev-head prev-head)
(cons 'staff-pos staff-pos)))
(/ (or staff-pos 10) 2)))
\layout {
\context {
\Staff
\consists \tst
\moveBarLineToPrevHead
}
}
\new Staff { b4 \bar "." b }
\new Staff { b4 \bar "." }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I'm aware the (main) difference between the two staves is the
break-direction of the BarLine.
Though, how to catch it ?
Or how to do it different?
Thanks,
Harm