#include "dimensions.hh"
#include "direction.hh"
-
-Breathing_sign::Breathing_sign (SCM s)
- : Item (s)
-{
-}
-
-
-
-MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Breathing_sign);
-
-Molecule
-Breathing_sign::do_brew_molecule () const
+MAKE_SCHEME_CALLBACK (Breathing_sign,brew_molecule,1);
+SCM
+Breathing_sign::brew_molecule (SCM smob)
{
- Staff_symbol_referencer_interface si (this);
-
- Real space = si.staff_space();
+ Grob * me = unsmob_grob (smob);
+ Real space = Staff_symbol_referencer::staff_space (me);
// todo: cfg'able.
- Interval i1(0, space / 6), i2(-space / 2, space / 2);
- Box b(i1, i2);
+ Interval i1 (0, space / 6), i2 (-space / 2, space / 2);
+ Box b (i1, i2);
- return lookup_l()->filledbox(b);
+ return Lookup::filledbox (b).smobbed_copy ();
}
-void
-Breathing_sign::after_line_breaking ()
+MAKE_SCHEME_CALLBACK (Breathing_sign,offset_callback,2);
+SCM
+Breathing_sign::offset_callback (SCM element_smob, SCM)
{
- Real space = staff_symbol_referencer (this).staff_space();
- Direction d = directional_element (this). get ();
+ Grob *me = unsmob_grob (element_smob);
+
+ Direction d = Directional_element_interface::get (me);
if (!d)
{
d = UP;
- directional_element(this).set (d);
+ Directional_element_interface::set (me, d);
}
- translate_axis(2.0 * space * d, Y_AXIS);
+ Real inter_f = Staff_symbol_referencer::staff_space (me)/2;
+ int sz = Staff_symbol_referencer::line_count (me)-1;
+ return gh_double2scm (inter_f * sz * d);
}
+void
+Breathing_sign::set_interface (Grob *b)
+{
+ Staff_symbol_referencer::set_interface (b);
+
+}