lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: scaling problem


From: Werner LEMBERG
Subject: Re: scaling problem
Date: Sun, 19 Aug 2007 18:21:35 +0200 (CEST)

[Using git 2007-08-19 f3734e9]


[Han-Wen, I'm resending this with slightly improved code and wording
to the lilypond-devel list since it seems that you don't have enough
time to answer.]

> String numbers usually get put next to (left or right) of notes;
> check out the manual on to how to use them - probably you can get
> away with disguising your as the text of a StringNumber grob. If you
> put the markup vertically (below/above) and move it with
> extra-offset, you will get undesirable extra offsets due to notehead
> and stem size which may not scale in the way you expect them to.

Ok, here's my next try.  Perhaps due to my lack of the deeper
knowledge of lilypond internals, I'm stuck now.

  . What must I do to guarantee that the vertical brackets are always
    positioned left of the accidentals?

  . The vertical positioning of the markup objects in the code below
    is done in a very clumsy way, as can be seen easily, but I wasn't
    able to find out how I can shift `ly:bracket' vertically.  It
    appears as if it is always centered relative to the note head it
    is attached to.

    I would like to do it better; however, it should be done *within*
    my `make-vbracket' function because I plan to improve the logic of
    the vertical positioning (depending on the note's pitches).

My code (ab)uses the `Fingering' interface -- I think that single
vertical brackets should become a new grob: Just think of vertical
brackets *plus* fingerings...


       Werner


======================================================================

#(define-public (make-vbracket grob)
  (let* ((event (event-cause grob))
         (digit (ly:event-property event 'digit))
         (mag (magstep (ly:grob-property grob 'font-size)))
         (m (if (< digit 0)
              (markup #:override (cons 'baseline-skip (* mag 3))
                      #:column (#:null
                                #:stencil (ly:bracket Y (cons 0 (* mag (- 
digit)))
                                                      (* mag 0.2) (* mag 0.4))))
              (markup #:override (cons 'baseline-skip (* mag 1))
                      #:column (#:stencil (ly:bracket Y (cons 0 (* mag digit))
                                                      (* mag 0.2) (* mag 0.4))
                                #:null)))))
     m))

vbracket =
#(define-music-function (parser location interval) (number?)
  "Add a vertical bracket, using the given @var{interval} (which can be
negative)."
  (apply make-music
         (append
          (list
           'FingeringEvent
           'origin location)
          (list 'digit interval))))


{
  \override Fingering #'text = #make-vbracket
  \override Fingering #'padding = #0.2
  \set fingeringOrientations = #'(left)
  <c'-\vbracket #2 es' a'>4
  <c' es'! a'-\vbracket #-3 >4
  <c'-\vbracket #2 es' as'-\vbracket #-3 >4
}

{
  \set fingeringOrientations = #'(left)
  <c'-\vbracket #2 es' a'>4
  <c' es'! a'-\vbracket #-3 >4
  <c'-\vbracket #2 es' as'-\vbracket #-3 >4
}

\paper {
  ragged-right = ##t
}

PNG image


reply via email to

[Prev in Thread] Current Thread [Next in Thread]