]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/fingering-engraver.cc
doc patch by Graham Percival
[lilypond.git] / lily / fingering-engraver.cc
index 45196adb9fe5ce5687680858f311e6d2bc48d1ab..688b3492aed642e5e7b208feb273024abc1d4ad9 100644 (file)
@@ -11,7 +11,7 @@
 #include "engraver.hh"
 #include "side-position-interface.hh"
 #include "item.hh"
-#include "musical-request.hh"
+#include "event.hh"
 #include "stem.hh"
 #include "rhythmic-head.hh"
 
@@ -39,7 +39,7 @@ protected:
 bool
 Fingering_engraver::try_music (Music *m)
 {
-  if (dynamic_cast<Text_script_req*> (m))
+  if (m->is_mus_type ("text-script-event"))
     {
       if (m->get_mus_property ("text-type") != ly_symbol2scm ("finger"))
        return false;
@@ -53,22 +53,21 @@ Fingering_engraver::try_music (Music *m)
 void
 Fingering_engraver::acknowledge_grob (Grob_info inf)
 {
-  
-  if (Stem::has_interface (inf.grob_l_))
+  if (Stem::has_interface (inf.grob_))
     {
       for (int i=0; i < fingerings_.size (); i++)
        {
-         Side_position_interface::add_support (fingerings_[i],inf.grob_l_);
+         Side_position_interface::add_support (fingerings_[i],inf.grob_);
        }
     }
-  else if (Rhythmic_head::has_interface (inf.grob_l_))
+  else if (Rhythmic_head::has_interface (inf.grob_))
     {
       Music * mc =inf.music_cause ();
       Pitch * mp = mc? unsmob_pitch (mc->get_mus_property ("pitch")) :0;
       for (int i=0; i < fingerings_.size (); i++)
        {
          Grob*t = fingerings_[i];
-         Side_position_interface::add_support (t,inf.grob_l_);
+         Side_position_interface::add_support (t,inf.grob_);
          Pitch *fp = unsmob_pitch (t->get_grob_property ("pitch"));
          if (fp)
            {
@@ -78,13 +77,13 @@ Fingering_engraver::acknowledge_grob (Grob_info inf)
              if (*fp == *mp)
                {
                  Axis other = other_axis (Side_position_interface::get_axis (t));
-                 t->set_parent (inf.grob_l_, other);
+                 t->set_parent (inf.grob_, other);
                }
            }
          else
            {
              if (!t->get_parent (X_AXIS))
-               t->set_parent (inf.grob_l_, X_AXIS);
+               t->set_parent (inf.grob_, X_AXIS);
            }
        }
     }
@@ -116,7 +115,7 @@ Fingering_engraver::process_music ()
   for (int i= pitch_sorted_reqs.size(); i--;)
     {
       SCM dir = pitch_sorted_reqs[i]->get_mus_property ("direction");
-      if (isdir_b (dir) && to_dir (dir)) {
+      if (ly_dir_p (dir) && to_dir (dir)) {
        if (to_dir (dir) == UP)
          up_reqs_.push (pitch_sorted_reqs[i]);
        else if (to_dir (dir) == DOWN)
@@ -183,13 +182,22 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a,  int i)
   
   Side_position_interface::set_axis (fingering, a);
       
-  fingering->add_offset_callback (Side_position_interface::aligned_on_self_proc, other);
-  fingering->add_offset_callback (Side_position_interface::centered_on_parent_proc, other);
-  fingering->set_grob_property ("script-priority",
-                               gh_int2scm (100 + d* i));
+  fingering->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, other);
+  fingering->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, other);
+
+  // Hmm
+  int priority = 200;
+  SCM s = fingering->get_grob_property ("script-priority");
+  if (gh_number_p (s))
+    priority = gh_scm2int (s);
+  
+  /* See script-engraver.cc */
+  priority += i;
 
+  fingering->set_grob_property ("script-priority", gh_int2scm (priority));
 
-  if (!isdir_b (fingering->get_grob_property ("direction")))
+
+  if (!ly_dir_p (fingering->get_grob_property ("direction")))
     {
       if (d)
        fingering->set_grob_property ("direction", gh_int2scm (d));
@@ -198,13 +206,6 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a,  int i)
     }
   
   fingering->set_grob_property ("text", r->get_mus_property ("text"));
-  
-  SCM nonempty = get_property ("textNonEmpty");
-  if (to_boolean (nonempty))
-    /*
-      empty fingering: signal that no rods should be applied.  
-    */
-    fingering->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
                
   announce_grob (fingering, r->self_scm());
   fingerings_.push (fingering);
@@ -242,6 +243,7 @@ Fingering_engraver::Fingering_engraver()
 ENTER_DESCRIPTION(Fingering_engraver,
 /* descr */       "Create fingering-scripts",
 /* creats*/       "Fingering",
-/* acks  */       "rhythmic-head-interface stem-interface",
-/* reads */       "scriptHorizontal textNonEmpty",
+/* accepts */     "text-script-event",
+/* acks  */      "rhythmic-head-interface stem-interface",
+/* reads */       "scriptHorizontal",
 /* write */       "");