]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign.cc
release: 1.3.68
[lilypond.git] / lily / breathing-sign.cc
1 /*
2   breathing_sign.cc -- implement Breathing_sign
3
4   Copyright (C) 1999 Michael Krause
5
6   written for the GNU LilyPond music typesetter
7
8   TODO: --> see breathing-sign-engraver.cc
9
10 */
11
12 #include "staff-symbol-referencer.hh"
13 #include "directional-element-interface.hh"
14 #include "breathing-sign.hh"
15 #include "string.hh"
16 #include "molecule.hh"
17 #include "paper-def.hh"
18 #include "lookup.hh"
19 #include "debug.hh"
20 #include "dimensions.hh"
21 #include "direction.hh"
22
23
24
25 MAKE_SCHEME_SCORE_ELEMENT_CALLBACK(Breathing_sign,brew_molecule);
26
27 SCM 
28 Breathing_sign::brew_molecule (SCM smob)
29 {
30   Score_element * sc = unsmob_element (smob);
31   Staff_symbol_referencer_interface si (sc);
32   
33   Real space = si.staff_space();
34
35   // todo: cfg'able.
36   Interval i1(0, space / 6), i2(-space / 2, space / 2);
37   Box b(i1, i2);
38
39   return sc->lookup_l()->filledbox(b).create_scheme ();
40 }
41
42 Real
43 Breathing_sign::offset_callback (Score_element * b, Axis a)
44 {
45   Score_element * me = (Score_element*)b;
46   
47   Real space = Staff_symbol_referencer_interface (b).staff_space();
48   Direction d = Directional_element_interface (b). get ();
49   if (!d)
50     {
51       d = UP;
52       Directional_element_interface (me).set (d);
53     }
54
55   return 2.0 * space * d;
56 }
57
58 void
59 Breathing_sign::set_interface (Score_element *b)
60 {
61   Staff_symbol_referencer_interface::set_interface  (b);
62   b->add_offset_callback (Breathing_sign::offset_callback,Y_AXIS); 
63 }