]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond
authorJoe Neeman <joeneeman@gmail.com>
Sun, 7 Jan 2007 09:25:53 +0000 (11:25 +0200)
committerJoe Neeman <joeneeman@gmail.com>
Sun, 7 Jan 2007 09:25:53 +0000 (11:25 +0200)
1  2 
lily/grob.cc
scm/define-grobs.scm

diff --combined lily/grob.cc
index 91f8ce5016f3bd9255e3fd377ac1ae37950fd339,0591ab115f6cc6ac8ed0ffddb2960141c4e77695..0738e80869fa17a73063d7f8cc033979834f2990
@@@ -59,7 -59,16 +59,16 @@@ Grob::Grob (SCM basicprops
  
    SCM meta = get_property ("meta");
    if (scm_is_pair (meta))
-     interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+     {
+       interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+       SCM object_cbs = scm_assq (ly_symbol2scm ("object-callbacks"), meta);
+       if (scm_is_pair (object_cbs))
+       {
+         for (SCM s = scm_cdr (object_cbs); scm_is_pair (s); s = scm_cdr (s))
+           set_object (scm_caar (s), scm_cdar (s)); 
+       }
+     }
    
    if (get_property_data ("X-extent") == SCM_EOL)
      set_property ("X-extent", Grob::stencil_width_proc);
@@@ -420,21 -429,11 +429,21 @@@ Grob::extent (Grob *refp, Axis a) cons
  Interval
  Grob::pure_height (Grob *refp, int start, int end)
  {
 -  SCM proc = get_property_data ( ly_symbol2scm ("Y-extent"));
 -  Interval iv = robust_scm2interval (call_pure_function (proc,
 -                                                       scm_list_1 (self_scm ()),
 -                                                       start, end),
 -                                   Interval (0, 0));
 +  SCM proc = get_property_data (ly_symbol2scm ("Y-extent"));
 +  SCM pure_proc = get_property_data (ly_symbol2scm ("pure-Y-extent"));
 +  SCM iv_scm;
 +
 +  if (ly_is_procedure (pure_proc))
 +    iv_scm = scm_apply_3 (pure_proc,
 +                        self_scm (),
 +                        scm_from_int (start),
 +                        scm_from_int (end), SCM_EOL);
 +  else
 +    iv_scm = call_pure_function (proc,
 +                               scm_list_1 (self_scm ()),
 +                               start, end);
 +  
 +  Interval iv = robust_scm2interval (iv_scm, Interval (0, 0));
    Real offset = pure_relative_y_coordinate (refp, start, end);
  
    SCM min_ext = get_property ("minimum-Y-extent");
@@@ -636,7 -635,6 +645,7 @@@ ADD_INTERFACE (Grob
               "outside-staff-horizontal-padding "
               "outside-staff-padding "
               "outside-staff-priority "
 +             "pure-Y-extent "
               "rotation "
               "springs-and-rods "
               "staff-symbol "
               "transparent "
               );
  
  /****************************************************************
    CALLBACKS
  ****************************************************************/
  
  static SCM
  grob_stencil_extent (Grob *me, Axis a)
  {
diff --combined scm/define-grobs.scm
index 33493aabdf55f106378bd7c144c04d9993b37118,35ed14771297a1a667ac22895fcd93856b9b5cf9..d3270748bbfa28263ee66322d2ce502ffa7df8aa
@@@ -23,7 -23,6 +23,7 @@@
        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
        (alteration . ,accidental-interface::calc-alteration) 
        (stencil . ,ly:accidental-interface::print)
 +      (pure-Y-extent . ,ly:accidental-interface::pure-height)
        (after-line-breaking
         . ,ly:accidental-interface::after-line-breaking)
        (meta . ((class . Item)
@@@ -36,7 -35,6 +36,7 @@@
        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
        (alteration . ,accidental-interface::calc-alteration) 
        (stencil . ,ly:accidental-interface::print)
 +      (pure-Y-extent . ,ly:accidental-interface::pure-height)
        (after-line-breaking
         . ,ly:accidental-interface::after-line-breaking)
        (meta . ((class . Item)
        (X-offset . ,ly:side-position-interface::x-aligned-side)
        (direction . ,LEFT)
        (stencil . ,ly:accidental-interface::print)
 +      (pure-Y-extent . ,ly:accidental-interface::pure-height)
        (glyph-name-alist . ,standard-alteration-glyph-name-alist)      
        (after-line-breaking . ,ly:accidental-interface::after-line-breaking)
        (side-axis . ,X)
        (meta . ((class . Item)
-                (interfaces . (item-interface
+                (interfaces . (
                                accidental-interface
                                break-aligned-interface
                                side-position-interface
        (beaming . ,ly:beam::calc-beaming)
        (stencil . ,ly:beam::print)
        (clip-edges . #t)
-       
+       (details .  ((hint-direction-penalty . 20)))
        ;; TODO: should be in SLT.
        (thickness . 0.48) ; in staff-space
        (neutral-direction . ,DOWN)
        ;; only for debugging.
        (font-family . roman)
        (meta . ((class . Spanner)
+                (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) 
                 (interfaces . (staff-symbol-referencer-interface
+                               unbreakable-spanner-interface
                                beam-interface))))))
  
      (BendAfter
                                rhythmic-grob-interface
                                text-interface
                                chord-name-interface
-                               item-interface))))))
+                               ))))))
  
      (CombineTextScript
       . (
       . (
        (stencil . ,ly:dots::print)
        (dot-count . ,dots::calc-dot-count)
+       (staff-position . ,dots::calc-staff-position)
        (meta . ((class . Item)
                 (interfaces . (font-interface
                                staff-symbol-referencer-interface
        (self-alignment-X . 0)
        (self-alignment-Y . 0)
        (script-priority . 100)
        (stencil . ,ly:text-interface::print)
        (direction . ,ly:script-interface::calc-direction)
        (text . ,fingering::calc-text) 
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
      (FretBoard
       . ((stencil . ,fret-board::calc-stencil)
        (finger-code . below-string)
        (after-line-breaking . ,ly:line-spanner::after-line-breaking)
        (meta . ((class . Spanner)
                 (interfaces . (line-interface
+                               unbreakable-spanner-interface
                                line-spanner-interface))))))
  
      (GraceSpacing
  
        ;; 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)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (side-axis . ,Y)
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
      
      (StrokeFinger
       . (
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
      
  
      (SustainPedal
        (stencil . ,ly:accidental-interface::print)
        (glyph-name-alist . ,standard-alteration-glyph-name-alist)
        (meta . ((class . Item)
-                (interfaces . (item-interface
-                               trill-pitch-accidental-interface
+                (interfaces . (trill-pitch-accidental-interface
+                               accidental-interface
                                side-position-interface
                                font-interface))))))
  
        (padding . 0.3)
        (meta . ((class . Item)
                 (interfaces . (side-position-interface
+                               parentheses-interface
                                note-head-interface
                                rhythmic-head-interface
                                font-interface
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (font-size . -4)
        (meta . ((class . Item)
-                (interfaces . (item-interface
-                               rhythmic-head-interface
+                (interfaces . (rhythmic-head-interface
                                font-interface
                                pitched-trill-interface
                                ledgered-interface
        (padding . 0.5)
        (skylines . ,ly:axis-group-interface::combine-skylines)
        (meta . ((class . Spanner)
+                (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)))
                 (interfaces . (align-interface
                                axis-group-interface))))))
      (VerticalAxisGroup
        (X-extent . ,ly:axis-group-interface::width)
        (skylines . ,ly:axis-group-interface::calc-skylines);
        (meta . ((class . Spanner)
+                (object-callbacks . ((X-common . ,ly:axis-group-interface::calc-x-common)))
                 (interfaces . (axis-group-interface
                                hara-kiri-group-spanner-interface
                                vertically-spaceable-interface))))))
                               (cons 'spanner-interface ifaces-entry))))
       (else
        (ly:warning "Unknown class ~a" class)))
+     (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
      (set! ifaces-entry (cons 'grob-interface ifaces-entry))
  
      (set! meta-entry (assoc-set! meta-entry 'name name-sym))
    (list
     `(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
     `(,ly:stem::height . ,ly:stem::pure-height)
+    `(,ly:rest::height . ,ly:rest::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:staff-symbol-referencer::callback
     ly:staff-symbol::height))
  
- (define-public (pure-relevant grob)
+ (define-public (pure-relevant? grob)
    (let ((extent-callback (ly:grob-property-data grob 'Y-extent)))
      (not (eq? #f
              (or
                  (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))))))))))
+                  (ly:stencil? (ly:grob-property-data grob 'stencil))
+                  ))))))))
  
  (define-public (call-pure-function unpure args start end)
    (if (ly:simple-closure? unpure)