2 bow.cc -- implement Bow
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 Jan Nieuwenhuizen <jan@digicash.com>
11 #include "paper-def.hh"
12 #include "molecule.hh"
16 IMPLEMENT_IS_TYPE_B1(Bow,Directional_spanner);
20 dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
21 dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
25 Bow::brew_molecule_p () const
27 Molecule* mol_p = new Molecule;
29 Array<Offset> c = get_controls ();
30 Atom a = paper ()->lookup_l ()->slur (c);
31 // a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
32 a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT] - c[0].y ()));
42 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
44 Real dx = width ().length ();
46 return Offset (dx / 2, dy);
50 Bow::do_width () const
52 Interval i = Spanner::do_width ();
54 return Interval (0, dx);
58 Bow::get_controls () const
60 Bezier_bow b (paper ());
61 b.set (get_encompass_offset_arr (), dir_);
63 Array<Offset> controls;
64 controls.set_size (8);
65 for (int i = 0; i < 4; i++)
66 controls[i] = b.control_[i];
67 for (int i = 0; i < 4; i++)
68 controls[i + 4] = b.return_[i];
73 Bow::get_encompass_offset_arr () const
75 Real dx = width (). length ();
76 dx += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
77 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
80 notes.push (Offset (0,0));
81 notes.push (Offset (dx, dy));