2018-05-31 14:40 GMT+02:00 David Kastrup <d...@gnu.org>: > Thomas Morley <thomasmorle...@gmail.com> writes: > >> 2018-05-31 14:13 GMT+02:00 Aaron Laws <dartm...@gmail.com>: >>> On Thu, May 31, 2018 at 7:10 AM, Thomas Morley <thomasmorle...@gmail.com> >>> wrote: >>>> >>>> Hi, >>>> >>>> 'to-barline does not work as expected for Glissandi. >>> >>> >>> Pray pardon my ignorance; what are you expecting to happen? Are you wanting >>> the glissando to point down to the c'1, but stop at the barline? >> >> Yes. >> Similar as it's done at line-break: >> >> \paper { line-width = 60 } >> >> { >> \once \override Glissando.breakable = ##t >> \override Glissando.after-line-breaking = #'() >> f'1\glissando >> \break >> c'1 >> } >> >>> It looks >>> like the glissando is pointing to the middle of the staff (or perhaps to >>> c''1...). >> >> Which is wrong in almost every case. > > Huh. So we'd need different right boundaries for X and for Y > coordinates. Or have glissando derive its slope from something other > than its right spanner bound, assuming that that is what it does. > > -- > David Kastrup
In scheme I'd do something at the lines (some TODOs in it) of: foo = \once \override Glissando.to-barline = #(lambda (grob) (let* ((bound-right (ly:spanner-bound grob RIGHT)) (bound-left (ly:spanner-bound grob LEFT)) (raw-left-Y (if (grob::has-interface bound-left 'note-head-interface) (ly:grob-property bound-left 'staff-position) 0)) (raw-right-Y (if (grob::has-interface bound-right 'note-head-interface) (ly:grob-property bound-right 'staff-position) 0))) ;; TODO implement default 'after-line-breaking, i.e. ;; ly:spanner::kill-zero-spanned-time somewhere. ;; ;; take gradient of the line into account, to prevent the line being too ;; step? (ly:grob-set-property! grob 'after-line-breaking (lambda (grob) (let ((to-barline (ly:grob-property grob 'to-barline))) (if (eq? #t to-barline) (begin (ly:grob-set-nested-property! grob '(left-bound-info Y) (/ raw-left-Y 2)) (ly:grob-set-nested-property! grob '(right-bound-info Y) (/ raw-right-Y 2))))))) #t )) \paper { line-width = 60 } { \once \override Glissando.breakable = ##t \foo a'1\glissando \break s1 \break s1 a1 } { \once \override Glissando.breakable = ##t \foo a'1\glissando \break s1 a1 } { \once \override Glissando.breakable = ##t \foo a'1\glissando a1 } Though, I'm somewhat surprised the Y-values provided return nice output... Cheers, Harm _______________________________________________ bug-lilypond mailing list bug-lilypond@gnu.org https://lists.gnu.org/mailman/listinfo/bug-lilypond