[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
\vshape and custom curve-stencil for TextSpanner
From: |
Thomas Morley |
Subject: |
\vshape and custom curve-stencil for TextSpanner |
Date: |
Sat, 23 Jul 2022 10:59:56 +0200 |
Hi,
I'm attempting to create a s-curve stencil for TextSpanner.
While so far all works as wished and it is possibel to use \shape,
\vshape doesn't print the control-points.
What am I missing?
Code below.
Thanks to Jean how fixed make-path-stencil!
Thanks,
Harm
\version "2.23.11"
#(define (make-s-curve-stencil line-thickness thickness control-points)
(let* ((start-pt (car control-points))
(end-pt (last control-points))
(lngth (- (car end-pt) (car start-pt)))
(second-cp (second control-points))
(third-cp (third control-points))
(second-delta
(* (- (car second-cp) (car start-pt)) (/ thickness (/ lngth 2))))
(second-out
(cons (car second-cp)
(+ (cdr second-cp) second-delta)))
(second-in
(cons (car second-cp)
(- (cdr second-cp) second-delta)))
(third-delta
(* (- (car end-pt) (car third-cp)) (/ thickness (/ lngth 2))))
(third-out
(cons (car third-cp)
(+ (cdr third-cp) third-delta)))
(third-in
(cons (car third-cp)
(- (cdr third-cp) third-delta)))
(coord-list
(list
start-pt
second-out
third-out
end-pt
third-in
second-in)))
((@@ (lily) make-bezier-sandwich-stencil) coord-list line-thickness)))
#(define horizontal-spanner-cps
(lambda (grob)
(let* ((left-info (ly:grob-property grob 'left-bound-info))
(right-info (ly:grob-property grob 'right-bound-info))
(left-x (assoc-get 'X left-info))
(right-x (assoc-get 'X right-info))
(lngth (- right-x left-x))
(height 2)
(cp-2 (cons (* lngth 0.25) height))
(cp-3 (cons (* lngth 0.75) (- height))))
(list
'(0 . 0)
cp-2
cp-3
(cons (- right-x left-x) 0)))))
#(define text-spanner::s-curve-stencil
(lambda (grob)
(let* ((layout (ly:grob-layout grob))
(line-thick (ly:output-def-lookup layout 'line-thickness))
(thickness (ly:grob-property grob 'thickness 1.2))
(thick (* line-thick thickness)))
; (box-stencil
(make-s-curve-stencil line-thick thick
(ly:grob-property grob 'control-points))
; 0 0)
)))
{
\override TextSpanner.control-points = #horizontal-spanner-cps
\override TextSpanner.show-control-points = ##t
\override TextSpanner.stencil = #text-spanner::s-curve-stencil
\vshape #'((0 . 0)(0 . 10)(0 . -10)(0 . 0)) TextSpanner
b1\startTextSpan
b\stopTextSpan
}
- \vshape and custom curve-stencil for TextSpanner,
Thomas Morley <=