]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/mensural-ligature-engraver.cc
2003 -> 2004
[lilypond.git] / lily / mensural-ligature-engraver.cc
index 913580a2d34e407add6760056a64e21f1582ff1f..629c299aa125dc8f21a89d3ba56833fcf2a6f8e3 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2002--2003 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2004 Juergen Reuter <reuter@ipd.uka.de>
  */
 
 #include "mensural-ligature.hh"
@@ -73,7 +73,7 @@ Mensural_ligature_engraver::Mensural_ligature_engraver ()
 Spanner *
 Mensural_ligature_engraver::create_ligature_spanner ()
 {
-  return new Spanner (get_property ("MensuralLigature"));
+  return make_spanner ("MensuralLigature");
 }
 
 /*
@@ -325,43 +325,31 @@ Mensural_ligature_engraver::transform_heads (Array<Grob_info> primitives)
   // TODO: if (state == STATE_ERROR) { ... }
 }
 
-void set_delta_pitch (Item *primitive, Grob_info info1, Grob_info info2)
-{
-  Pitch pitch1 = *unsmob_pitch (info1.music_cause ()->get_mus_property ("pitch"));
-  Pitch pitch2 = *unsmob_pitch (info2.music_cause ()->get_mus_property ("pitch"));
-  int delta_pitch = (pitch2.steps () - pitch1.steps ());
-  primitive->set_grob_property ("delta-pitch", gh_int2scm (delta_pitch));
-}
-
 /*
- * A MensuralLigature grob consists of a bunch of LigatureHead grobs
- * that are glued together.  It (a) does not make sense to change
+ * A MensuralLigature grob consists of a bunch of NoteHead grobs that
+ * are glued together.  It (a) does not make sense to change
  * properties like thickness or flexa-width from one head to the next
  * within a ligature (this would totally screw up alignment), and (b)
  * some of these properties (like flexa-width) are specific to
  * e.g. the MensuralLigature (as in contrast to e.g. LigatureBracket),
- * and therefore should not be handled in the generic LigatureHead
- * (which is also used by LigatureBracket).  Therefore, we let the
- * user control these properties via the concrete Ligature grob (like
+ * and therefore should not be handled in the NoteHead code (which is
+ * also used by LigatureBracket).  Therefore, we let the user control
+ * these properties via the concrete Ligature grob (like
  * MensuralLigature) and then copy these properties as necessary to
- * each of the LigatureHead grobs.  This is what
+ * each of the NoteHead grobs.  This is what
  * propagate_properties() does.
  */
 void
 Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
                                                  Array<Grob_info> primitives)
 {
-  SCM thickness_scm = ligature->get_grob_property ("thickness");
-  Real thickness = (thickness_scm != SCM_EOL) ?
-    gh_scm2double (thickness_scm) : 1.4;
-  thickness *= ligature->get_paper ()->get_var ("linethickness");
+  Real thickness = robust_scm2double (ligature->get_grob_property ("thickness"), 1.4);
+  thickness *= ligature->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
 
   Real head_width =
     Font_interface::get_default_font (ligature)->
     find_by_name ("noteheads--1mensural").extent (X_AXIS).length ();
-  SCM flexa_width_scm = ligature->get_grob_property ("flexa-width");
-  Real flexa_width = (flexa_width_scm != SCM_EOL) ?
-    gh_scm2double (flexa_width_scm) : 2.0;
+    Real flexa_width = robust_scm2double (ligature->get_grob_property ("flexa-width"), 2);
   flexa_width *= Staff_symbol_referencer::staff_space (ligature);
 
   Real half_flexa_width = 0.5 * (flexa_width + thickness);
@@ -390,8 +378,6 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
                                        gh_double2scm (half_flexa_width));
          primitive->set_grob_property ("flexa-width",
                                        gh_double2scm (flexa_width));
-         set_delta_pitch (primitive,
-                          primitives[i], primitives[i+1]);
          break;
        default:
          programming_error (_f ("unexpected case fall-through"));
@@ -417,13 +403,6 @@ Mensural_ligature_engraver::fold_up_primitives (Array<Grob_info> primitives)
 
       if (i > 0)
        {
-#if 0
-         Rod r;
-         r.distance_ = distance;
-         r.item_l_drul_[LEFT] = first;
-         r.item_l_drul_[RIGHT] = current;
-         r.add_to_cols ();
-#endif
          current->translate_axis (distance, X_AXIS);
        }
 
@@ -448,7 +427,7 @@ Mensural_ligature_engraver::join_primitives (Array<Grob_info> primitives)
          if (output & MLP_ANY)
            {
              int delta_pitch = (pitch.steps () - last_pitch.steps ());
-             primitive->set_grob_property ("join-left",
+             primitive->set_grob_property ("join-left-amount",
                                            gh_int2scm (delta_pitch));
            }
        }
@@ -469,7 +448,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature,
 ENTER_DESCRIPTION (Mensural_ligature_engraver,
 /* descr */       "Handles Mensural_ligature_events by glueing special ligature heads together.",
 /* creats*/       "MensuralLigature",
-/* accepts */     "ligature-event abort-event",
-/* acks  */      "ligature-head-interface note-head-interface rest-interface",
+/* accepts */     "ligature-event",
+/* acks  */      "note-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");