]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-spacing.cc
* lily/accidental-placement.cc (split_accidentals): new function
[lilypond.git] / lily / staff-spacing.cc
index 5eab8ffbf200b4781f50b23645f365315f6e24f0..81bc06000d1585f019337d11534f23ef88a44bbb 100644 (file)
 #include "staff-symbol-referencer.hh"
 #include "note-column.hh"
 #include "stem.hh"
-
-bool
-Staff_spacing::has_interface (Grob* g)
-{
-  return g && g->has_interface (ly_symbol2scm ("staff-spacing-interface"));
-}
+#include "accidental-placement.hh"
 
 /*
   Insert some more space for the next note, in case it has a stem in
@@ -46,7 +41,10 @@ Staff_spacing::next_note_correction (Grob * me,
    */
   if (Grob * a = Note_column::accidentals (g))
     {
-      max_corr = max_corr >? (- a->extent (col, X_AXIS)[LEFT]);
+      Interval v= Accidental_placement::get_relevant_accidental_extent
+       (a, col, me);
+      
+      max_corr = max_corr >? (- v[LEFT]);
     }
   if (Grob* a = unsmob_grob (g->get_grob_property ("arpeggio")))
     {
@@ -179,7 +177,8 @@ Staff_spacing::get_spacing_params (Grob *me, Real * space, Real * fixed)
   *fixed = 1.0;
 
   Grob * separation_item=0;
-  
+  Item * me_item  = dynamic_cast<Item*> (me);
+    
   for (SCM s = me->get_grob_property ("left-items");
        gh_pair_p (s); s = gh_cdr(s))
     {
@@ -212,7 +211,15 @@ Staff_spacing::get_spacing_params (Grob *me, Real * space, Real * fixed)
   if (!scm_list_p (alist))
     return ;
 
-  SCM space_def = scm_sloppy_assq (ly_symbol2scm ("begin-of-note"), alist);
+  
+  SCM space_def = scm_sloppy_assq (ly_symbol2scm ("first-note"), alist);
+  if (me_item->break_status_dir () == CENTER)
+    {
+      SCM nndef = scm_sloppy_assq (ly_symbol2scm ("next-note"), alist);
+      if (gh_pair_p (nndef ))
+       space_def = nndef;
+    }
+
   if (!gh_pair_p (space_def))
     {
       programming_error ("Unknown prefatory spacing. "); 
@@ -232,3 +239,8 @@ Staff_spacing::get_spacing_params (Grob *me, Real * space, Real * fixed)
 
   *space += next_notes_correction (me, last_grob);
 }
+
+
+ADD_INTERFACE (Staff_spacing,"staff-spacing-interface",
+  "",
+  "stem-spacing-correction left-items right-items");