]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/mensural-ligature.cc
2003 -> 2004
[lilypond.git] / lily / mensural-ligature.cc
index 9581e567248ac76287e63977217c5a5c27697931..8eac3a53957aa05dcc57d015bc9e9d78e250bf9b 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2002 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2004 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include <math.h>
@@ -28,38 +28,38 @@ brew_flexa (Grob *me,
            bool solid,
            Real width,
            Real thickness,
-           bool add_stem,
-           Direction stem_direction)
+           bool add_cauda,
+           Direction cauda_direction)
 {
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Real height = 0.6 * staff_space;
   Molecule molecule = Molecule ();
 
-  if (add_stem)
+  if (add_cauda)
     {
       bool consider_interval =
-       stem_direction * interval > 0.0;
+       cauda_direction * interval > 0.0;
 
-      Interval stem_box_x (0, thickness);
-      Interval stem_box_y;
+      Interval cauda_box_x (0, thickness);
+      Interval cauda_box_y;
 
       if (consider_interval)
         {
          Real y_length = max (interval/2.0*staff_space, 1.2*staff_space);
-         stem_box_y = Interval (0, y_length);
+         cauda_box_y = Interval (0, y_length);
        }
       else
-       stem_box_y = Interval (0, staff_space);
+       cauda_box_y = Interval (0, staff_space);
 
       Real y_correction =
-       (stem_direction == UP) ?
+       (cauda_direction == UP) ?
        +0.5*height :
-       -0.5*height - stem_box_y.length();
+       -0.5*height - cauda_box_y.length();
 
-      Box stem_box (stem_box_x, stem_box_y);
-      Molecule stem = Lookup::filledbox (stem_box);
-      stem.translate_axis (y_correction, Y_AXIS);
-      molecule.add_molecule(stem);
+      Box cauda_box (cauda_box_x, cauda_box_y);
+      Molecule cauda = Lookup::filled_box (cauda_box);
+      cauda.translate_axis (y_correction, Y_AXIS);
+      molecule.add_molecule (cauda);
     }
 
   Real slope = (interval / 2.0 * staff_space) / width;
@@ -73,28 +73,28 @@ brew_flexa (Grob *me,
   if (solid)
     {
       Molecule solid_head =
-       Lookup::horizontal_slope (width, corrected_slope, height);
+       Lookup::beam (corrected_slope, width, height, 0.0);
       molecule.add_molecule (solid_head);
     }
   else // outline
     {
       Molecule left_edge =
-       Lookup::horizontal_slope (thickness, corrected_slope, height);
+       Lookup::beam (corrected_slope, thickness, height, 0.0);
       molecule.add_molecule(left_edge);
 
       Molecule right_edge =
-       Lookup::horizontal_slope (thickness, corrected_slope, height);
+       Lookup::beam (corrected_slope, thickness, height, 0.0);
       right_edge.translate_axis (width-thickness, X_AXIS);
       right_edge.translate_axis (corrected_slope * (width-thickness), Y_AXIS);
       molecule.add_molecule(right_edge);
 
       Molecule bottom_edge =
-       Lookup::horizontal_slope (width, corrected_slope, thickness);
+       Lookup::beam (corrected_slope, width, thickness, 0.0);
       bottom_edge.translate_axis (-0.5*height, Y_AXIS);
       molecule.add_molecule (bottom_edge);
 
       Molecule top_edge =
-       Lookup::horizontal_slope (width, corrected_slope, thickness);
+       Lookup::beam (corrected_slope, width, thickness, 0.0);
       top_edge.translate_axis (+0.5*height, Y_AXIS);
       molecule.add_molecule (top_edge);
     }
@@ -117,7 +117,7 @@ add_ledger_lines (Grob *me, Molecule *out, int pos, Real offs,
                                     hd[RIGHT] + right_ledger_protusion);
       Molecule ledger_lines =
        Note_head::brew_ledger_lines (me, pos, interspaces,
-                                     l_extents,
+                                     l_extents,0,
                                      ledger_take_space);
       ledger_lines.translate_axis (offs, Y_AXIS);
       out->add_molecule (ledger_lines);
@@ -130,7 +130,8 @@ internal_brew_primitive (Grob *me, bool ledger_take_space)
   SCM primitive_scm = me->get_grob_property ("primitive");
   if (primitive_scm == SCM_EOL)
     {
-      programming_error ("Mensural_ligature: undefined primitive -> ignoring grob");
+      programming_error ("Mensural_ligature:"
+                        "undefined primitive -> ignoring grob");
       return Molecule ();
     }
 
@@ -142,41 +143,15 @@ internal_brew_primitive (Grob *me, bool ledger_take_space)
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   if (primitive & MLP_ANY)
     {
-      SCM thickness_scm = me->get_grob_property ("thickness");
-      if (thickness_scm != SCM_EOL)
-       {
-         thickness = gh_scm2double (thickness_scm);
-       }
-      else
-       {
-         programming_error (_f ("Mensural_ligature: thickness undefined on flexa %d; assuming 1.4", primitive));
-         thickness = 1.4 * me->paper_l ()->get_var ("linethickness");
-       }
+      thickness = robust_scm2double ( me->get_grob_property ("thickness"), .14);
     }
 
   if (primitive & MLP_FLEXA)
     {
-      SCM delta_pitch_scm = me->get_grob_property ("delta-pitch");
-      if (delta_pitch_scm != SCM_EOL)
-       {
-         delta_pitch = gh_scm2int (delta_pitch_scm);
-       }
-      else
-       {
-         programming_error (_f ("Mensural_ligature: delta-pitch undefined on flexa %d; assuming 0", primitive));
-         delta_pitch = 0;
-       }
+      delta_pitch = robust_scm2int (me->get_grob_property ("delta-pitch"),
+                                   0);
 
-      SCM flexa_width_scm = me->get_grob_property ("flexa-width");
-      if (flexa_width_scm != SCM_EOL)
-       {
-         flexa_width = gh_scm2double (flexa_width_scm);
-       }
-      else
-       {
-         programming_error (_f ("Mensural_ligature: flexa-width undefined on flexa %d; assuming 2.0", primitive));
-         flexa_width = 2.0 * staff_space;
-       }
+      flexa_width = robust_scm2double (me->get_grob_property ("flexa-width"), 2.0 * staff_space);
     }
 
   switch (primitive)
@@ -205,29 +180,29 @@ internal_brew_primitive (Grob *me, bool ledger_take_space)
                          flexa_width, thickness, false, CENTER);
        break;
       default:
-       programming_error (_f ("Mensural_ligature: unexpected case fall-through"));
+       programming_error (_f ("Mensural_ligature:"
+                              "unexpected case fall-through"));
        return Molecule ();
     }
 
-  SCM join_left_scm = me->get_grob_property ("join-left");
+  SCM join_left_scm = me->get_grob_property ("join-left-amount");
   if (join_left_scm != SCM_EOL)
     {
       int join_left = gh_scm2int (join_left_scm);
       if (!join_left)
-       programming_error (_f ("Menusral_ligature: (join_left == 0)"));
-      Real blotdiameter = (me->paper_l ()->get_var ("blotdiameter"));
+       programming_error (_f ("Mensural_ligature: (join_left == 0)"));
+      Real blotdiameter = (me->get_paper ()->get_realvar (ly_symbol2scm ("blotdiameter")));
       Interval x_extent = Interval (0, thickness);
       Interval y_extent = (join_left > 0) ?
        Interval (-join_left * 0.5 * staff_space, 0) :
        Interval (0, -join_left * 0.5 * staff_space);
-      Box stem_box (x_extent, y_extent);
+      Box join_box (x_extent, y_extent);
 
-      Molecule stem =
-       Lookup::roundfilledbox (stem_box, blotdiameter);
-      out.add_molecule (stem);
+      Molecule join = Lookup::round_filled_box (join_box, blotdiameter);
+      out.add_molecule (join);
     }
 
-  int pos = (int)rint (Staff_symbol_referencer::position_f (me));
+  int pos = (int)rint (Staff_symbol_referencer::get_position (me));
   add_ledger_lines(me, &out, pos, 0, ledger_take_space);
   if (primitive & MLP_FLEXA)
     {
@@ -253,6 +228,7 @@ Mensural_ligature::brew_molecule (SCM)
   return SCM_EOL;
 }
 
-ADD_INTERFACE(Mensural_ligature, "mensural-ligature-interface",
-             "A mensural ligature",
-             "thickness flexa-width");
+ADD_INTERFACE (Mensural_ligature, "mensural-ligature-interface",
+              "A mensural ligature",
+              "delta-pitch flexa-width head-width join-left join-left-amount "
+              "ligature-primitive-callback primitive thickness");