]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign.cc
release: 1.3.61
[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 Breathing_sign::Breathing_sign (SCM  s)
25   : Item (s)
26 {
27 }
28
29
30
31 MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Breathing_sign);
32
33 SCM 
34 Breathing_sign::scheme_molecule (SCM smob)
35 {
36   Score_element * sc = unsmob_element (smob);
37   Staff_symbol_referencer_interface si (sc);
38   
39   Real space = si.staff_space();
40
41   // todo: cfg'able.
42   Interval i1(0, space / 6), i2(-space / 2, space / 2);
43   Box b(i1, i2);
44
45   return sc->lookup_l()->filledbox(b).create_scheme ();
46 }
47
48 void
49 Breathing_sign::after_line_breaking ()
50 {
51   Real space = staff_symbol_referencer (this).staff_space();
52   Direction d = directional_element (this). get ();
53   if (!d)
54     {
55       d = UP;
56       directional_element(this).set (d);
57     }
58
59   translate_axis(2.0 * space * d, Y_AXIS);
60 }
61