source file of the GNU LilyPond music typesetter
- (c) 1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include <math.h>
#include "warn.hh"
#include "staff-symbol-referencer.hh"
#include "directional-element-interface.hh"
-#include "molecule.hh"
+#include "stencil.hh"
#include "bezier-bow.hh"
#include "stem.hh"
#include "note-head.hh"
+#include "tie-column.hh"
/*
tie: Connect two noteheads.
Tie::head (Grob*me, Direction d)
{
SCM c = me->get_grob_property ("head-pair");
- c = index_get_cell (c, d);
- return unsmob_grob (c);
+ if (gh_pair_p (c))
+ return unsmob_grob (index_get_cell (c, d));
+ else
+ return 0;
}
Real
return UP;
}
+
+void
+Tie::set_direction (Grob*me)
+{
+ if (!get_grob_direction (me))
+ {
+ if (Tie_column::has_interface (me->get_parent (Y_AXIS)))
+ Tie_column::set_directions (me->get_parent (Y_AXIS));
+ else
+ set_grob_direction (me, Tie::get_default_dir (me));
+ }
+}
+
/*
TODO: we should also use thickness for computing the clearance
between head and tie. Very thick ties will now touch the note head.
{
programming_error ("Tie without heads.");
me->suicide ();
- return SCM_UNSPECIFIED;
+ return SCM_EOL;
}
-
- if (!get_grob_direction (me))
- set_grob_direction (me, Tie::get_default_dir (me));
+ set_direction (me);
+
Direction dir = get_grob_direction (me);
Real staff_space = Staff_symbol_referencer::staff_space (me);
- Real x_gap_f = gh_scm2double (me->get_grob_property ("x-gap"));
+ Real x_gap_f = robust_scm2double (me->get_grob_property ("x-gap"), 0);
Grob* l = me->get_bound (LEFT);
Grob* r = me->get_bound (RIGHT);
}
-MAKE_SCHEME_CALLBACK (Tie,brew_molecule,1);
+MAKE_SCHEME_CALLBACK (Tie,print,1);
SCM
-Tie::brew_molecule (SCM smob)
+Tie::print (SCM smob)
{
Grob*me = unsmob_grob (smob);
SCM cp = me->get_grob_property ("control-points");
- if (cp == SCM_EOL)
+ if (!gh_pair_p (cp)) // list is more accurate
{
cp = get_control_points (smob);
me->set_grob_property ("control-points", cp);
}
+
+ if (!gh_pair_p (cp))
+ return Stencil ().smobbed_copy ();
- Real thick =
- gh_scm2double (me->get_grob_property ("thickness"))
- * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
+ Real thick
+ = Staff_symbol_referencer::line_thickness (me)
+ * robust_scm2double (me->get_grob_property ("thickness"), 1);
Bezier b;
int i = 0;
i++;
}
- Molecule a = Lookup::slur (b, get_grob_direction (me) * thick, thick);
+ Stencil a = Lookup::slur (b, get_grob_direction (me) * thick, thick);
return a.smobbed_copy ();
}