2 bow.cc -- implement Bow
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
7 Jan Nieuwenhuizen <jan@digicash.com>
12 #include "paper-def.hh"
13 #include "molecule.hh"
18 IMPLEMENT_IS_TYPE_B1(Bow,Directional_spanner);
22 dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
23 dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
27 Bow::brew_molecule_p () const
29 Molecule* mol_p = new Molecule;
31 Array<Offset> c = get_controls ();
32 Atom a = paper ()->lookup_l ()->slur (c);
33 Real dy = c[3].y () - c[0].y ();
34 if (check_debug && !monitor->silent_b ("Bow"))
37 cout << "******" << i++ << "******" << endl;
39 // cout << "c0.y: " << c[0].y << endl;
40 cout << "c0.y: " << c[0].y () << endl;
41 cout << "c3.y: " << c[3].y () << endl;
42 cout << "dy: " << dy << endl;
43 cout << "dy_f_l: " << dy_f_drul_[LEFT] << endl;
44 cout << "dy_f_r: " << dy_f_drul_[RIGHT] << endl;
45 cout << "dy_f: " << dy_f_drul_[RIGHT] - dy_f_drul_[LEFT] << endl;
47 a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
57 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
59 Real dx = width ().length ();
61 return Offset (dx / 2, dy);
65 Bow::do_width () const
67 Interval i = Spanner::do_width ();
69 return Interval (0, dx);
73 Bow::get_controls () const
75 Bezier_bow b (paper ());
76 b.set (get_encompass_offset_arr (), dir_);
78 Array<Offset> controls;
79 controls.set_size (8);
80 for (int i = 0; i < 4; i++)
81 controls[i] = b.control_[i];
82 for (int i = 0; i < 4; i++)
83 controls[i + 4] = b.return_[i];
88 Bow::get_encompass_offset_arr () const
90 Offset d (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT],
91 dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]);
92 d.x() += width (). length ();
97 notes.push (Offset 0, 0));
100 Array<Offset> notes (2);
101 notes[0] = Offset (0, 0);
102 notes[1] = Offset (d);