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"
#include "rhythmic-head.hh"
#include "note-head.hh"
#include "staff-symbol-referencer.hh"
-#include "paper-def.hh"
+#include "output-def.hh"
#include "font-interface.hh"
/*
virtual void build_ligature (Spanner *ligature, Array<Grob_info> primitives);
public:
- TRANSLATOR_DECLARATIONS(Mensural_ligature_engraver);
+ TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
private:
int apply_transition (Array<Grob_info> primitives,
Spanner *
Mensural_ligature_engraver::create_ligature_spanner ()
{
- return new Spanner (get_property ("MensuralLigature"));
+ return make_spanner ("MensuralLigature", SCM_EOL);
}
/*
programming_error ("last_primitive undefined");
break;
}
- last_primitive->set_grob_property ("primitive", gh_int2scm (output));
+ last_primitive->set_property ("primitive", scm_int2num (output));
break;
case MLP_BB:
case MLP_LB:
programming_error ("primitive undefined");
break;
}
- last_primitive->set_grob_property ("primitive", gh_int2scm (output));
- primitive->set_grob_property ("primitive", gh_int2scm (MLP_NONE));
+ last_primitive->set_property ("primitive", scm_int2num (output));
+ primitive->set_property ("primitive", scm_int2num (MLP_NONE));
break;
case MLP_SS:
// delayed primitive with two note heads
programming_error ("last_primitive undefined");
break;
}
- last_last_primitive->set_grob_property ("primitive", gh_int2scm (output));
- last_primitive->set_grob_property ("primitive", gh_int2scm (MLP_NONE));
+ last_last_primitive->set_property ("primitive", scm_int2num (output));
+ last_primitive->set_property ("primitive", scm_int2num (MLP_NONE));
break;
default:
programming_error (_f ("unexpected case fall-through"));
}
else
{
- pitch = *unsmob_pitch (nr->get_mus_property ("pitch"));
+ pitch = *unsmob_pitch (nr->get_property ("pitch"));
have_pitch = 1;
}
* these properties via the concrete Ligature grob (like
* MensuralLigature) and then copy these properties as necessary to
* each of the NoteHead grobs. This is what
- * propagate_properties() does.
+ * propagate_properties () does.
*/
void
Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
Array<Grob_info> primitives)
{
- Real thickness = robust_scm2double (ligature->get_grob_property ("thickness"), 1.4);
- thickness *= ligature->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
+ Real thickness = robust_scm2double (ligature->get_property ("thickness"), 1.4);
+ thickness *= ligature->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
Real head_width =
Font_interface::get_default_font (ligature)->
find_by_name ("noteheads--1mensural").extent (X_AXIS).length ();
- Real flexa_width = robust_scm2double (ligature->get_grob_property ("flexa-width"), 2);
+ Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
flexa_width *= Staff_symbol_referencer::staff_space (ligature);
Real half_flexa_width = 0.5 * (flexa_width + thickness);
for (int i = 0; i < primitives.size (); i++)
{
Item *primitive = dynamic_cast<Item*> (primitives[i].grob_);
- int output = gh_scm2int (primitive->get_grob_property ("primitive"));
- primitive->set_grob_property ("thickness",
- gh_double2scm (thickness));
+ int output = ly_scm2int (primitive->get_property ("primitive"));
+ primitive->set_property ("thickness",
+ scm_make_real (thickness));
switch (output) {
case MLP_NONE:
- primitive->set_grob_property ("head-width",
- gh_double2scm (half_flexa_width));
+ primitive->set_property ("head-width",
+ scm_make_real (half_flexa_width));
break;
case MLP_sc:
case MLP_ss:
case MLP_cs:
- primitive->set_grob_property ("head-width",
- gh_double2scm (head_width));
+ primitive->set_property ("head-width",
+ scm_make_real (head_width));
break;
case MLP_BB:
case MLP_LB:
case MLP_SS:
- primitive->set_grob_property ("head-width",
- gh_double2scm (half_flexa_width));
- primitive->set_grob_property ("flexa-width",
- gh_double2scm (flexa_width));
+ primitive->set_property ("head-width",
+ scm_make_real (half_flexa_width));
+ primitive->set_property ("flexa-width",
+ scm_make_real (flexa_width));
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);
}
distance +=
- gh_scm2double (current->get_grob_property ("head-width")) -
- gh_scm2double (current->get_grob_property ("thickness"));
+ ly_scm2double (current->get_property ("head-width")) -
+ ly_scm2double (current->get_property ("thickness"));
}
}
for (int i = 0; i < primitives.size (); i++)
{
Grob_info info = primitives[i];
- Pitch pitch = *unsmob_pitch (info.music_cause ()->get_mus_property ("pitch"));
+ Pitch pitch = *unsmob_pitch (info.music_cause ()->get_property ("pitch"));
if (i > 0)
{
Item *primitive = dynamic_cast<Item*> (info.grob_);
- int output = gh_scm2int (primitive->get_grob_property ("primitive"));
+ int output = ly_scm2int (primitive->get_property ("primitive"));
if (output & MLP_ANY)
{
int delta_pitch = (pitch.steps () - last_pitch.steps ());
- primitive->set_grob_property ("join-left-amount",
- gh_int2scm (delta_pitch));
+ primitive->set_property ("join-left-amount",
+ scm_int2num (delta_pitch));
}
}
last_pitch = pitch;
ENTER_DESCRIPTION (Mensural_ligature_engraver,
/* descr */ "Handles Mensural_ligature_events by glueing special ligature heads together.",
/* creats*/ "MensuralLigature",
-/* accepts */ "ligature-event abort-event",
+/* accepts */ "ligature-event",
/* acks */ "note-head-interface rest-interface",
/* reads */ "",
/* write */ "");