Hi folks,
for a project of mine I wanted to center a markup inside another markup.
I searched the built-in markup functions, but to no avail. (Surely it is
possible that I missed something...)
So I came up with the following code. Feel free to test and comment it.
Maybe it is possible in an easier way, though.
Would this kind of stuff fit into the LSR?

Best regards,
Michael

% Align src-markup inside dest-markup and merge stencils
% xdir = -1 aligns left edges, 1 right edges
% ydir = -1 aligns bottom edges, 1 top edges
% Values between -1 and 1 are interpolated

#(define-markup-command (align-inside layout props xdir ydir src-markup
dest-markup)
   (number? number? markup? markup?)
   (let* ((src-stil (interpret-markup layout props src-markup))
          (dest-stil (interpret-markup layout props dest-markup))

          (src-x-extent (ly:stencil-extent src-stil X))
          (src-y-extent (ly:stencil-extent src-stil Y))
          (src-x-center (interval-center src-x-extent))
          (src-y-center (interval-center src-y-extent))
          (src-width (interval-length src-x-extent))
          (src-height (interval-length src-y-extent))

          (dest-x-extent (ly:stencil-extent dest-stil X))
          (dest-y-extent (ly:stencil-extent dest-stil Y))
          (dest-x-center (interval-center dest-x-extent))
          (dest-y-center (interval-center dest-y-extent))
          (dest-width (interval-length dest-x-extent))
          (dest-height (interval-length dest-y-extent))

          (offset-x-centered (- dest-x-center src-x-center))
          (offset-y-centered (- dest-y-center src-y-center))
          (offset-dir (cons (+ offset-x-centered (* xdir 0.5 (-
dest-width src-width)))
                             (+ offset-y-centered (* ydir 0.5 (-
dest-height src-height))))))

     (ly:stencil-add dest-stil (ly:stencil-translate src-stil
offset-dir))))

boxone = \markup \with-color #blue \filled-box #'(0 . 6) #'(0 . 6) #0
boxtwo = \markup \with-color #red \filled-box #'(3 . 5) #'(5 . 7) #0

\markup \align-inside #CENTER #CENTER \boxtwo \boxone
\markup \align-inside #LEFT #0.5 \boxtwo \boxone
\markup \align-inside #RIGHT #DOWN \boxtwo \boxone

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to