X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-grobs.scm;h=5e2dd4d86c14ea0572aadc11d7d5ae6a9e2f28b1;hb=6f664e0e318a1651f6fe9317a842bf9c7f476f08;hp=14eb7e17966fc49d7258675023798c4374dee963;hpb=0da65512d3ef498ace08623f449b4af08411a89c;p=lilypond.git diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 14eb7e1796..5e2dd4d86c 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -51,6 +51,7 @@ accidental-suggestion-interface self-alignment-interface font-interface)))))) + (AccidentalPlacement . ( (left-padding . 0.2) @@ -144,6 +145,14 @@ side-position-interface font-interface)))))) + (BalloonTextItem + . ((stencil . ,ly:balloon-interface::print) + (text . ,(grob::calc-property-by-copy 'text)) + (X-offset . ,(grob::calc-property-by-copy 'X-offset)) + (Y-offset . ,(grob::calc-property-by-copy 'Y-offset)) + (meta . ((class . Item) + (interfaces . (text-interface + font-interface)))))) (BarLine . ( (break-align-symbol . staff-bar) @@ -413,6 +422,7 @@ (stencil . ,ly:clef::print) (glyph-name . ,ly:clef::calc-glyph-name) (non-musical . #t) + (avoid-slur . inside) (font-family . music) (break-align-symbol . clef) (break-visibility . ,begin-of-line-visible) @@ -647,6 +657,14 @@ side-position-interface self-alignment-interface item-interface)))))) + (FretBoard + . ((stencil . ,fret-board::calc-stencil) + (finger-code . below-string) + (meta . ((class . Item) + (interfaces . (fret-diagram-interface + font-interface + )))) + )) (Glissando . ( (style . line) @@ -718,6 +736,8 @@ (thickness . 1.0) (stencil . ,ly:horizontal-bracket::print) (Y-offset . ,ly:side-position-interface::y-aligned-side) + (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors) + (padding . 0.2) (staff-padding . 0.2) (direction . ,DOWN) @@ -774,6 +794,7 @@ (KeySignature . ( (stencil . ,ly:key-signature-interface::print) + (avoid-slur . inside) (space-alist . ( (time-signature . (extra-space . 1.15)) (staff-bar . (extra-space . 1.1)) @@ -793,9 +814,10 @@ . ( (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:semi-tie::calc-direction) + (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) + (head-direction . ,LEFT) (thickness . 1.0) (meta . ((class . Item) (interfaces . (semi-tie-interface)) @@ -909,7 +931,7 @@ (LyricText . ( (stencil . ,lyric-text::print) - (text . ,lyric-text::calc-text) + (text . ,(grob::calc-property-by-copy 'text)) (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent) (self-alignment-X . 0) (word-space . 0.6) @@ -1255,7 +1277,6 @@ mark-interface self-alignment-interface)))))) - (RepeatSlash . ( (stencil . ,ly:percent-repeat-item-interface::beat-slash) @@ -1263,14 +1284,16 @@ (slope . 1.7) (meta . ((class . Item) (interfaces . (percent-repeat-interface)))))) + (RepeatTie . ( (stencil . ,ly:tie::print) (control-points . ,ly:semi-tie::calc-control-points) - (direction . ,ly:semi-tie::calc-direction) + (direction . ,ly:tie::calc-direction) (details . ((ratio . 0.333) (height-limit . 1.0))) (thickness . 1.0) + (head-direction . ,RIGHT) (meta . ((class . Item) (interfaces . (semi-tie-interface)) )) @@ -1280,7 +1303,9 @@ . ( (X-extent . #f) (Y-extent . #f) + (direction . ,ly:tie::calc-direction) (head-direction . ,RIGHT) + (positioning-done . ,ly:semi-tie-column::calc-positioning-done) (meta . ((class . Item) (interfaces . (semi-tie-column-interface)) @@ -1290,7 +1315,7 @@ (Rest . ( (stencil . ,ly:rest::print) - (duration-log . ,note-head::calc-duration-log) + (duration-log . ,stem::calc-duration-log) (X-extent . ,ly:rest::width) (Y-extent . ,ly:rest::height) (Y-offset . ,ly:rest::y-offset-callback) @@ -1316,7 +1341,9 @@ ;; padding set in script definitions. (staff-padding . 0.25) ;; (script-priority . 0) priorities for scripts, see script.scm - (X-offset . , ly:self-alignment-interface::centered-on-x-parent) + (X-offset . ,ly:self-alignment-interface::centered-on-x-parent) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (side-axis . ,Y) (stencil . ,ly:script-interface::print) (direction . ,ly:script-interface::calc-direction) @@ -1339,8 +1366,9 @@ (SeparationItem . ( - (X-extent . #f) - (Y-extent . #f) + (avoid-slur . inside) + (X-extent . ,ly:axis-group-interface::width) + (Y-extent . ,ly:axis-group-interface::height) (meta . ((class . Item) (interfaces . (spacing-interface separation-item-interface)))))) @@ -1381,6 +1409,7 @@ (meta . ((class . Item) (interfaces . (text-interface self-alignment-interface + piano-pedal-script-interface font-interface)))))) (SostenutoPedalLineSpanner @@ -1474,7 +1503,7 @@ (Stem . ( (direction . ,ly:stem::calc-direction) - (duration-log . ,note-head::calc-duration-log) + (duration-log . ,stem::calc-duration-log) (default-direction . ,ly:stem::calc-default-direction) (stem-end-position . ,ly:stem::calc-stem-end-position) @@ -1591,6 +1620,7 @@ line-spanner-interface text-interface self-alignment-interface + piano-pedal-script-interface font-interface)))))) (SustainPedalLineSpanner @@ -1613,6 +1643,7 @@ (axes . (0 1)) (X-extent . ,ly:axis-group-interface::width) (Y-extent . ,ly:axis-group-interface::height) + (skyline-spacing . #t) (meta . ((class . System) (interfaces . (system-interface axis-group-interface)))))) @@ -1680,7 +1711,6 @@ . ( (stencil . ,ly:text-interface::print) (Y-offset . ,ly:staff-symbol-referencer::callback) - (duration-log . ,note-head::calc-duration-log) (font-size . -2) (stem-attachment . (0.0 . 1.35)) (font-series . bold) @@ -1696,6 +1726,8 @@ . ( (no-spacing-rods . #t) (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) + (Y-offset . ,ly:side-position-interface::y-aligned-side) + (side-axis . ,Y) (direction . ,DOWN) ;; sync with Fingering ? @@ -1779,6 +1811,7 @@ (stencil . ,ly:time-signature::print) (break-align-symbol . time-signature) (break-visibility . ,all-visible) + (avoid-slur . inside) (space-alist . ( (first-note . (fixed-space . 2.0)) (right-edge . (extra-space . 0.5)) @@ -1889,6 +1922,7 @@ (X-offset . ,ly:self-alignment-interface::x-aligned-on-self) (meta . ((class . Item) (interfaces . (text-interface + piano-pedal-script-interface self-alignment-interface font-interface)))))) @@ -1934,6 +1968,7 @@ (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback) (Y-extent . ,ly:hara-kiri-group-spanner::y-extent) (X-extent . ,ly:axis-group-interface::width) + (skyline-spacing . #t) (meta . ((class . Spanner) (interfaces . (axis-group-interface hara-kiri-group-interface @@ -2028,72 +2063,57 @@ (define pure-print-callbacks (list - `(,ly:note-head::print . '()) - `(,ly:clef::print . '()) - `(,ly:text-interface::print . '()) - `(,ly:script-interface::print . '()))) + ly:note-head::print + ly:clef::print + ly:text-interface::print + ly:script-interface::print)) ;; ly:grob::stencil-extent is safe iff the print callback is safe too (define (pure-stencil-height grob start stop) (let ((sten (ly:grob-property-data grob 'stencil))) (if (or (ly:stencil? sten) - (pair? (assq sten pure-print-callbacks))) + (memq sten pure-print-callbacks)) (ly:grob::stencil-height grob) '(0 . 0)))) -(define pure-Y-extents - (list - `(,ly:staff-symbol::height . ()))) - -(define Y-extent-conversions +(define pure-conversions-alist (list + `(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback) `(,ly:stem::height . ,ly:stem::pure-height) `(,ly:grob::stencil-height . ,pure-stencil-height) `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side) `(,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height) `(,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height) - `(,ly:slur::height . ,ly:slur::pure-height))) - -(define pure-Y-offsets - (list - `(,ly:staff-symbol-referencer::callback . ()))) + `(,ly:slur::height . ,ly:slur::pure-height) + `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side))) -(define Y-offset-conversions +(define pure-functions (list - `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side))) + ly:staff-symbol-referencer::callback + ly:staff-symbol::height)) (define-public (pure-relevant grob) (let ((extent-callback (ly:grob-property-data grob 'Y-extent))) - (or - (pair? extent-callback) - (pair? (assq extent-callback pure-Y-extents)) - (and - (pair? (assq extent-callback Y-extent-conversions)) - (or - (not (eq? extent-callback ly:grob::stencil-height)) - (pair? (assq (ly:grob-property-data grob 'stencil) pure-print-callbacks)) - (ly:stencil? (ly:grob-property-data grob 'stencil))))))) - -(define (pure-conversion pures conversions defsymbol defreturn rettype? grob start stop) - (let* ((normal-callback (ly:grob-property-data grob defsymbol)) - ) - - (if (rettype? normal-callback) - normal-callback - (if (pair? (assq normal-callback pures)) - (normal-callback grob) - (let - ((pure-callback (assq normal-callback conversions))) - - (if (pair? pure-callback) - ((cdr pure-callback) grob start stop) - defreturn)))))) - -(define-public (pure-Y-extent grob start stop) - (pure-conversion pure-Y-extents Y-extent-conversions - 'Y-extent '(0 . 0) pair? grob start stop)) - -(define-public (pure-Y-offset grob start stop) - (pure-conversion pure-Y-offsets Y-offset-conversions - 'Y-offset 0 number? grob start stop)) + (not (eq? #f + (or + (pair? extent-callback) + (memq extent-callback pure-functions) + (and + (pair? (assq extent-callback pure-conversions-alist)) + (begin + (or + (not (eq? extent-callback ly:grob::stencil-height)) + (memq (ly:grob-property-data grob 'stencil) pure-print-callbacks) + (ly:stencil? (ly:grob-property-data grob 'stencil)))))))))) + +(define-public (call-pure-function unpure args start end) + (if (ly:simple-closure? unpure) + (ly:eval-simple-closure (car args) unpure start end) + (if (not (procedure? unpure)) + unpure + (if (memq unpure pure-functions) + (apply unpure args) + (let ((pure (assq unpure pure-conversions-alist))) + (if pure + (apply (cdr pure) (append (list (car args) start end) (cdr args)))))))))