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 Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
31 Real dx_f = width ().length ();
32 dx_f += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
34 Atom a = paper ()->lookup_l ()->slur (get_controls ());
36 a.translate (Offset (dx_f + dx_f_drul_[LEFT], dy_f + dy_f_drul_[LEFT]));
44 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
46 Real dx = width ().length ();
48 return Offset (dx / 2, dy);
52 Bow::do_width () const
54 Interval i = Spanner::do_width ();
56 return Interval (0, dx);
60 Bow::get_controls () const
62 Bezier_bow b (paper ());
63 b.set (get_encompass_offset_arr (), dir_);
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];
75 Bow::get_encompass_offset_arr () const
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];
82 notes.push (Offset (0,0));
83 notes.push (Offset (dx, dy));