bug-lilypond
[Top][All Lists]
Advanced

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

Re: Pango font tree not handled at non-default score size


From: Phil Holmes
Subject: Re: Pango font tree not handled at non-default score size
Date: Mon, 7 Jun 2010 17:13:07 +0100

Think this has been missed?

--
Phil Holmes


"Valentin Villenave" <address@hidden> wrote in message news:address@hidden
On Wed, Jan 27, 2010 at 1:04 AM, Neil Puttock <address@hidden> wrote:
2010/1/26 Jiri Zurek (Prague) <address@hidden>:

Fonts set in the make-pango-font-tree are used only in the default score
size. As soon as the score size is changed with the layout-set-staff-size to any specific value, the fonts used for the lyrics become the default (a sort
of Century Schoolbook). This behavior is observed at least throughout the
versions 2.12.2-2.13.11

Unfortunately, when you call make-pango-font-tree, the font names
aren't cached anywhere, which means there's no way of regenerating the
same settings in a layout block with a change of scale. Currently all
the staff-size setting functions reset 'fonts using
make-century-schoolbook-tree instead.

Hi Neil,

is there something we can do about it? Consider this as a known
limitation, document the workaround somewhere, or even somehow improve
the source code so the workaround is no longer needed?

Please do tell me if this has already been taken care of :-)

I need that the lyrics in the whole book is typeset with the specific font regardless of the size of the corresponding staff. Is there a workaround to
the above mentioned bug?

Try this:

#(define-public (layout-set-staff-size staff-size)

(define (calc-line-thickness staff-space pt)
(let* ((x1 (* 4.125 pt))
(x0 (* 5 pt))
(f1 (* 0.47 pt))
(f0 (* 0.50 pt)))

(/
(+
(* f1 (- staff-space x0))
(* f0 (- x1 staff-space)))
(- x1 x0))))

(let* ((module (current-module))
(pt (eval 'pt module))
(staff-height (* pt staff-size))
(ss (/ staff-height 4))
(factor (/ staff-height (* 20 pt)))
(setm! (lambda (sym val)
(module-define! module sym val)))
(parser (eval 'parser module))
(pap (ly:parser-lookup parser '$defaultpaper))
(pango-fonts (ly:output-def-lookup pap 'pango-font-list #f)))

(setm! 'text-font-size (* 12 factor))
(setm! 'output-scale ss)
(setm! 'fonts (if pango-fonts
(make-pango-font-tree (car pango-fonts)
(cadr pango-fonts)
(caddr pango-fonts)
factor)
(make-century-schoolbook-tree factor)))
(setm! 'staff-height staff-height)
(setm! 'staff-space ss)
(setm! 'line-thickness (calc-line-thickness ss pt))
(setm! 'ledger-line-thickness (+ (* 0.5 pt) (/ ss 10)))
(setm! 'blot-diameter (* 0.4 pt))))

#(define-public (pango-font-tree-wrapper roman sans typewriter factor)
"Call make-pango-font-tree, binding the result to 'fonts
and cache the font names in a paper variable (pango-font-list)."
(let ((parser (eval 'parser (current-module))))

(ly:parser-define! parser 'pango-font-list (list roman sans typewriter))
(ly:parser-define! parser 'fonts
(make-pango-font-tree roman sans typewriter factor))))

In your \paper block call `pango-font-tree-wrapper' as follows:

#(pango-font-tree-wrapper "Arial"
"Nimbus Sans"
"Luxi Mono"
(/ 20 20))

Cheers,
Valentin




reply via email to

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