]> git.donarmstrong.com Git - lilypond.git/blob - lily/bow.cc
release: 0.1.58
[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       Jan Nieuwenhuizen <jan@digicash.com>
8 */
9
10 #include "bow.hh"
11 #include "paper-def.hh"
12 #include "molecule.hh"
13 #include "lookup.hh"
14 #include "bezier.hh"
15
16 IMPLEMENT_IS_TYPE_B1(Bow,Directional_spanner);
17
18 Bow::Bow ()
19 {
20   dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
21   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
22 }
23
24 Molecule*
25 Bow::brew_molecule_p () const
26 {
27   Molecule* mol_p = new Molecule;
28   
29   Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
30   
31   Real dx_f = width ().length ();
32   dx_f += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
33   
34   Atom a = paper ()->lookup_l ()->slur (get_controls ());
35
36   a.translate (Offset (dx_f + dx_f_drul_[LEFT], dy_f + dy_f_drul_[LEFT]));
37   mol_p->add (a);
38   return mol_p;
39 }
40
41 Offset
42 Bow::center () const
43 {
44   Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
45
46   Real dx = width ().length ();
47
48   return Offset (dx / 2, dy);
49 }
50
51 Interval
52 Bow::do_width () const    
53 {
54   Interval i = Spanner::do_width ();
55   Real dx = i.length();
56   return Interval (0, dx);
57 }
58
59 Array<Offset>
60 Bow::get_controls () const
61 {
62   Bezier_bow b (paper ());
63   b.set (get_encompass_offset_arr (), dir_);
64   b.calc ();
65   Array<Offset> controls;
66   controls.set_size (8);
67   for (int i = 0; i < 4; i++)
68     controls[i] = b.control_[i];
69   for (int i = 0; i < 4; i++)
70     controls[i + 4] = b.return_[i];
71   return controls;
72 }
73
74 Array<Offset>
75 Bow::get_encompass_offset_arr () const
76 {
77   Real dx = width (). length ();
78   dx += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
79   Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
80
81   Array<Offset> notes;
82   notes.push (Offset (0,0));
83   notes.push (Offset (dx, dy));
84
85   return notes;
86 }
87