]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/new-fingering-engraver.cc
* lily/relocate.cc (setup_paths): only check path for non-absolute
[lilypond.git] / lily / new-fingering-engraver.cc
index c4489acbb5ee2b821212af0d3baefa0c79e67750..c8ef218d83378bfc99065c193b9408161e66092a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1998--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "warn.hh"
@@ -44,16 +44,16 @@ class New_fingering_engraver : public Engraver
   Array<Finger_tuple> fingerings_;
   Array<Finger_tuple> articulations_;
   Array<Finger_tuple> string_numbers_;
-  
+
   Link_array<Grob> heads_;
   Grob *stem_;
 
 public:
   TRANSLATOR_DECLARATIONS (New_fingering_engraver);
 protected:
-  PRECOMPUTED_VIRTUAL void stop_translation_timestep ();
-  DECLARE_ACKNOWLEDGER(rhythmic_head);
-  DECLARE_ACKNOWLEDGER(stem);
+  void stop_translation_timestep ();
+  DECLARE_ACKNOWLEDGER (rhythmic_head);
+  DECLARE_ACKNOWLEDGER (stem);
   void add_fingering (Grob *, Music *, Music *);
   void add_script (Grob *, Music *, Music *);
   void add_string (Grob *, Music *, Music *);
@@ -77,21 +77,13 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
        continue;
 
       if (m->is_mus_type ("fingering-event"))
-       {
-         add_fingering (inf.grob (), m, note_ev);
-       }
+       add_fingering (inf.grob (), m, note_ev);
       else if (m->is_mus_type ("text-script-event"))
-       {
-         m->origin ()->warning (_ ("can't add text scripts to individual note heads"));
-       }
+       m->origin ()->warning (_ ("can't add text scripts to individual note heads"));
       else if (m->is_mus_type ("script-event"))
-       {
-         add_script (inf.grob (), m, note_ev);
-       }
+       add_script (inf.grob (), m, note_ev);
       else if (m->is_mus_type ("string-number-event"))
-       {
-         add_string (inf.grob (), m, note_ev);
-       }
+       add_string (inf.grob (), m, note_ev);
       else if (m->is_mus_type ("harmonic-event"))
        {
          inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic"));
@@ -120,8 +112,7 @@ New_fingering_engraver::add_script (Grob *head,
   Finger_tuple ft;
 
   Grob *g = make_item ("Script", event->self_scm ());
-  make_script_from_event (g, &ft.follow_into_staff_, context (),
-                         event->get_property ("articulation-type"), 0);
+  make_script_from_event (g, context (), event->get_property ("articulation-type"), 0);
   if (g)
     {
       ft.script_ = g;
@@ -159,7 +150,7 @@ New_fingering_engraver::add_fingering (Grob *head,
       */
       event->origin ()->warning (_ ("music for the martians."));
     }
-  SCM sstr = scm_number_to_string (scm_int2num (d), scm_int2num (10));
+  SCM sstr = scm_number_to_string (scm_from_int (d), scm_from_int (10));
   ft.script_->set_property ("text", sstr);
 
   ft.finger_event_ = event;
@@ -169,7 +160,6 @@ New_fingering_engraver::add_fingering (Grob *head,
   fingerings_.push (ft);
 }
 
-
 void
 New_fingering_engraver::add_string (Grob *head,
                                    Music *event,
@@ -183,7 +173,7 @@ New_fingering_engraver::add_string (Grob *head,
 
   int d = scm_to_int (event->get_property ("string-number"));
 
-  SCM sstr = scm_number_to_string (scm_int2num (d), scm_int2num (10));
+  SCM sstr = scm_number_to_string (scm_from_int (d), scm_from_int (10));
   ft.script_->set_property ("text", sstr);
 
   ft.finger_event_ = event;
@@ -211,9 +201,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
     positioning the fingerings, setting both X and Y coordinates.
   */
   for (int i = 0; i < scripts->size (); i++)
-    {
-      (*scripts)[i].position_ = scm_to_int ((*scripts)[i].head_->get_property ("staff-position"));
-    }
+    (*scripts)[i].position_ = scm_to_int ((*scripts)[i].head_->get_property ("staff-position"));
 
   for (int i = scripts->size (); i--;)
     for (int j = heads_.size (); j--;)
@@ -278,41 +266,36 @@ New_fingering_engraver::position_scripts (SCM orientations,
       Grob *f = ft.script_;
       f->set_parent (ft.head_, X_AXIS);
       f->set_parent (ft.head_, Y_AXIS);
-      f->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, Y_AXIS);
-      f->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, Y_AXIS);
-      f->add_offset_callback (Side_position_interface::aligned_side_proc, X_AXIS);
 
-      f->set_property ("direction", scm_int2num (hordir));
+      Self_alignment_interface::set_align_self (f, Y_AXIS);
+      Self_alignment_interface::set_center_parent (f, Y_AXIS);
+      Side_position_interface::set_axis (f, X_AXIS);
+
+      f->set_property ("direction", scm_from_int (hordir));
     }
 
   int finger_prio = 200;
-  for (int i = 0; i < up.size (); i++)
-    {
-      Finger_tuple ft = up[i];
-      Grob *f = ft.script_;
-      f->set_parent (ft.head_, X_AXIS);
-      f->set_property ("script-priority",
-                      scm_int2num (finger_prio + ft.position_));
-      f->add_offset_callback (Side_position_interface::aligned_side_proc, Y_AXIS);
-      f->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, X_AXIS);
-      f->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, X_AXIS);
 
-      f->set_property ("direction", scm_int2num (UP));
-    }
-
-  for (int i = 0; i < down.size (); i++)
+  Direction d = DOWN;
+  Drul_array< Array<Finger_tuple> > vertical (down, up);
+  do
     {
-      Finger_tuple ft = down[i];
-      Grob *f = ft.script_;
-      f->set_parent (ft.head_, X_AXIS);
-      f->set_property ("script-priority",
-                      scm_int2num (finger_prio + down.size () - ft.position_));
-
-      f->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, X_AXIS);
-      f->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, X_AXIS);
-      f->add_offset_callback (Side_position_interface::aligned_side_proc, Y_AXIS);
-      f->set_property ("direction", scm_int2num (DOWN));
+      for (int i = 0; i < vertical[d].size (); i++)
+       {
+         Finger_tuple ft = vertical[d][i];
+         Grob *f = ft.script_;
+         f->set_parent (ft.head_, X_AXIS);
+         f->set_property ("script-priority",
+                          scm_from_int (finger_prio + d * ft.position_));
+
+         Self_alignment_interface::set_align_self (f, X_AXIS);
+         Self_alignment_interface::set_center_parent (f, X_AXIS);
+         Side_position_interface::set_axis (f, Y_AXIS);
+      
+         f->set_property ("direction", scm_from_int (d));
+       }
     }
+  while (flip (&d) != DOWN);
 }
 
 void
@@ -345,11 +328,7 @@ New_fingering_engraver::stop_translation_timestep ()
       if (stem_ && to_boolean (script->get_property ("add-stem-support")))
        Side_position_interface::add_support (script, stem_);
 
-      if (articulations_[i].follow_into_staff_)
-       {
-         script->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS);
-         script->set_property ("staff-padding", SCM_EOL);
-       }
+
     }
 
   stem_ = 0;
@@ -361,14 +340,14 @@ New_fingering_engraver::New_fingering_engraver ()
 {
   stem_ = 0;
 }
-ADD_ACKNOWLEDGER(New_fingering_engraver, rhythmic_head);
-ADD_ACKNOWLEDGER(New_fingering_engraver, stem);
+ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head);
+ADD_ACKNOWLEDGER (New_fingering_engraver, stem);
 
 ADD_TRANSLATOR (New_fingering_engraver,
-               /* descr */ "Create fingering-scripts for notes in a new chord.  "
+               /* doc */ "Create fingering-scripts for notes in a new chord.  "
                "This engraver is ill-named, since it "
                "also takes care of articulations and harmonic note heads",
-               /* creats*/ "Fingering",
-               /* accepts */ "",
-               /* reads */ "fingeringOrientations",
+               /* creat*/ "Fingering",
+               /* accept */ "",
+               /* read */ "fingeringOrientations",
                /* write */ "");