]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign.cc
release: 1.1.50
[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 "breathing-sign.hh"
13 #include "string.hh"
14 #include "molecule.hh"
15 #include "paper-def.hh"
16 #include "lookup.hh"
17 #include "debug.hh"
18 #include "dimensions.hh"
19 #include "direction.hh"
20
21 #include <iostream.h>
22
23 Breathing_sign::Breathing_sign ()
24 {
25   vertical_position_i_ = UP;
26   set_elt_property (breakable_scm_sym, SCM_BOOL_T);
27   set_elt_property (break_priority_scm_sym, gh_int2scm (-4));
28   set_elt_property (visibility_lambda_scm_sym,
29                     gh_eval_str ("non_postbreak_visibility"));
30 }
31
32 void
33 Breathing_sign::set_vertical_position (Direction updown)
34 {
35   assert(updown >= -1 && updown <= +1);
36
37   if(updown != 0)
38     vertical_position_i_ = updown;
39 }
40
41 Molecule*
42 Breathing_sign::do_brew_molecule_p () const
43 {
44   Real dl = staff_line_leading_f();
45   Interval i1(0, dl / 6), i2(-dl / 2, dl / 2);
46   Box b(i1, i2);
47
48   Molecule *output = new Molecule (lookup_l()->filledbox(b));
49
50   return output;
51 }
52
53 void
54 Breathing_sign::do_post_processing()
55 {
56   Real dl = staff_line_leading_f();
57
58   translate_axis(2.0 * dl * vertical_position_i_, Y_AXIS);
59 }