]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign.cc
patch::: 1.3.93.jcn2
[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_CALLBACK(Breathing_sign,brew_molecule,1);
26
27 SCM 
28 Breathing_sign::brew_molecule (SCM smob)
29 {
30   Score_element * me = unsmob_element (smob);
31   Real space = Staff_symbol_referencer::staff_space (me);
32
33   // todo: cfg'able.
34   Interval i1(0, space / 6), i2(-space / 2, space / 2);
35   Box b(i1, i2);
36
37   return me->lookup_l()->filledbox(b).create_scheme ();
38 }
39
40 MAKE_SCHEME_CALLBACK(Breathing_sign,offset_callback,2);
41 SCM
42 Breathing_sign::offset_callback (SCM element_smob, SCM axis)
43 {
44   Score_element *me = unsmob_element (element_smob);
45   Axis a = (Axis) gh_scm2int (axis);
46
47   
48   Direction d = Directional_element_interface::get (me);
49   if (!d)
50     {
51       d = UP;
52       Directional_element_interface::set (me, d);
53     }
54
55   Real inter_f = Staff_symbol_referencer::staff_space (me)/2;
56   int sz = Staff_symbol_referencer::line_count (me)-1;
57   return gh_double2scm ( inter_f * sz * d);
58 }
59
60 void
61 Breathing_sign::set_interface (Score_element *b)
62 {
63   Staff_symbol_referencer::set_interface  (b);
64   b->add_offset_callback (Breathing_sign_offset_callback_proc,Y_AXIS); 
65 }