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"
Spanner *
Mensural_ligature_engraver::create_ligature_spanner ()
{
- return new Spanner (get_property ("MensuralLigature"));
+ return make_spanner ("MensuralLigature");
}
/*
// 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);
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"));
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);
}
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));
}
}
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 */ "");