2 breathing_sign.cc -- implement Breathing_sign
4 Copyright (C) 1999 Michael Krause
6 written for the GNU LilyPond music typesetter
8 TODO: --> see breathing-sign-engraver.cc
12 #include "staff-symbol-referencer.hh"
13 #include "directional-element-interface.hh"
14 #include "breathing-sign.hh"
16 #include "molecule.hh"
17 #include "paper-def.hh"
20 #include "dimensions.hh"
21 #include "direction.hh"
23 MAKE_SCHEME_CALLBACK (Breathing_sign,brew_molecule,1);
25 Breathing_sign::brew_molecule (SCM smob)
27 Grob * me = unsmob_grob (smob);
28 Real space = Staff_symbol_referencer::staff_space (me);
31 Interval i1 (0, space / 6), i2 (-space / 2, space / 2);
34 return Lookup::filledbox (b).smobbed_copy ();
40 MAKE_SCHEME_CALLBACK (Breathing_sign,railtracks,1);
42 Breathing_sign::railtracks (SCM smob)
44 Grob * me = unsmob_grob (smob);
45 Real space = Staff_symbol_referencer::staff_space (me);
46 Real th = me->get_paper ()->get_var ("linethickness");
47 SCM lt = me->get_grob_property ("thickness");
49 th *= gh_scm2double (lt);
51 Offset x1 (0, -space);
52 Offset x2 (space / 3, space);
53 Molecule l1 (Lookup::line (th, x1, x2));
55 l2.translate_axis (space *0.6 , X_AXIS);
57 return l1.smobbed_copy();
61 MAKE_SCHEME_CALLBACK (Breathing_sign,offset_callback,2);
63 Breathing_sign::offset_callback (SCM element_smob, SCM)
65 Grob *me = unsmob_grob (element_smob);
67 Direction d = Directional_element_interface::get (me);
71 Directional_element_interface::set (me, d);
74 Real inter_f = Staff_symbol_referencer::staff_space (me)/2;
75 int sz = Staff_symbol_referencer::line_count (me)-1;
76 return gh_double2scm (inter_f * sz * d);
80 ADD_INTERFACE(Breathing_sign, "breathing-sign-interface",