]> git.donarmstrong.com Git - lilypond.git/blob - lily/bow.cc
release: 0.1.11
[lilypond.git] / lily / bow.cc
1 /*
2   bow.cc -- implement Bow
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "bow.hh"
10 #include "paper-def.hh"
11 #include "molecule.hh"
12 #include "lookup.hh"
13
14 Bow::Bow()
15 {
16   pos_i_drul_[LEFT] = pos_i_drul_[RIGHT] = 0;
17   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
18 }
19
20
21 Offset
22 Bow::center() const
23 {
24   int dy =  pos_i_drul_[RIGHT]-pos_i_drul_[LEFT];
25
26   Real w = width().length ();
27
28   return Offset (w/2,dy * paper()->internote_f ());
29 }
30
31
32 Molecule*
33 Bow::brew_molecule_p() const
34 {
35   Molecule*output = new Molecule;
36   Real w = width().length ();
37   
38   int dy = pos_i_drul_[RIGHT] - pos_i_drul_[LEFT];
39   
40   Real nw_f = paper()->note_width ();
41   Real nh_f = paper()->internote_f ();
42
43   
44   w+= (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]) * nw_f ;
45   Real round_w = w;             // slur lookup rounds the slurwidth .
46   
47   Symbol sl = paper()->lookup_l ()->slur (dy , round_w, dir_);
48
49   Real error = w-round_w;
50   
51   Atom a (sl);
52   a.translate (Offset ((dx_f_drul_[LEFT] + 0.5)*nw_f + error/2,
53                        pos_i_drul_[LEFT] * nh_f));
54   output->add (a);
55   return output;
56 }
57
58
59 IMPLEMENT_IS_TYPE_B1(Bow,Directional_spanner);