I just checked that this unwanted behavior happens in the
default make-stencil-boxer function too.

Is there a fix for this?
Thanks

%%%%%%%%%%%%%%%%
{
  \override DynamicText.stencil =
    #(make-stencil-boxer 0.4 0 ly:text-interface::print)
    c'_\mf
}

%%%%%%%%%%%%%%%%

On Sun, Feb 23, 2020 at 1:19 AM Paolo Prete <paolopr...@gmail.com> wrote:

> (This is for Aaron (and anyone who shows interest...)
>
> Hi Aaron,
>
> I need a little fix on the wonderful function you implemented.
> As you can see, in case of dynamic, the box has a little unwanted overlay.
> How we could avoid this?
>
> Thanks,
> Best
> P
>
> %%%%
> \version "2.19.83"
>
> #(define (box-stencil stencil thickness padding color expand?)
>   "Add a box around @var{stencil}, producing a new stencil."
>   (define (css-style-padding padding)
>     ;; padding => (top right bottom left)
>     (cond
>       ((or (null? padding) (eqv? #f padding)) '(0 0 0 0))
>       ((number? padding) (make-list 4 padding))
>       ((number-pair? padding)
>         (list (car padding) (cdr padding)
>               (car padding) (cdr padding)))
>       ((and (number-list? padding) (<= (length padding) 4))
>         (case (length padding)
>           ((1) (make-list 4 (first padding)))
>           ((2) (list (first padding) (second padding)
>                      (first padding) (second padding)))
>           ((3) (list (first padding) (second padding)
>                      (third padding) (second padding)))
>           (else padding)))
>       (else
>         (begin (ly:warning "Ignoring invalid padding: ~a" padding)
>                '(0 0 0 0)))))
>   (let* ((padding (css-style-padding padding))
>          (padding-top (first padding))
>          (padding-right (second padding))
>          (padding-bottom (third padding))
>          (padding-left (fourth padding))
>
>          (x-ext-orig (ly:stencil-extent stencil X))
>          (y-ext-orig (ly:stencil-extent stencil Y))
>          (x-ext-inner
>            (cons (- (interval-start x-ext-orig) padding-left)
>                  (+ (interval-end x-ext-orig) padding-right)))
>          (y-ext-inner
>            (cons (- (interval-start y-ext-orig) padding-bottom)
>                  (+ (interval-end y-ext-orig) padding-top)))
>          (x-ext-outer (interval-widen x-ext-inner thickness))
>          (y-ext-outer (interval-widen y-ext-inner thickness))
>          (x-ext-new (if expand? x-ext-outer x-ext-orig))
>          (y-ext-new (if expand? y-ext-outer y-ext-orig))
>
> (x-rule (make-filled-box-stencil (cons 0 thickness) y-ext-inner)) (y-rule
> (make-filled-box-stencil x-ext-outer (cons 0 thickness)))
>          (box (stencil-with-color
>            (ly:stencil-add
> (ly:stencil-translate-axis y-rule (interval-end y-ext-inner) Y)
> (ly:stencil-translate-axis x-rule (interval-end x-ext-inner) X)
> (ly:stencil-translate-axis y-rule (interval-start y-ext-outer) Y)
> (ly:stencil-translate-axis x-rule (interval-start x-ext-outer) X))
>            color)))
>     (ly:make-stencil
>       (ly:stencil-expr (ly:stencil-add stencil box))
>       x-ext-new y-ext-new)))
>
> #(define* (make-stencil-boxer thickness padding callback
>            #:optional (color red) (expand? #t))
>   "Return function that adds a box around the grob passed as argument."
>   (lambda (grob)
>     (box-stencil (callback grob) thickness padding color expand?)))
>
> {
>   \override DynamicText.stencil =
>     #(make-stencil-boxer 0.4 0 ly:text-interface::print)
>     c'_\mf
> }
> %%%%
>

Reply via email to