2 bow.cc -- implement Bow
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 Jan Nieuwenhuizen <janneke@gnu.org>
12 #include "paper-def.hh"
13 #include "molecule.hh"
22 dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
23 dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
26 vertical_align_drul_[MIN] = 0;
27 vertical_align_drul_[MAX] = -1;
31 Bow::do_brew_molecule_p () const
33 Real thick = paper ()->get_var ("slur_thickness");
34 Array<Offset> c = get_controls ();
35 Real dy = c[3].y () - c[0].y ();
39 a = lookup_l ()->slur (c);
41 a = lookup_l ()->dashed_slur (c, thick, dash_i_);
43 if (check_debug && !monitor->silent_b ("Bow"))
46 cout << "******" << i++ << "******" << endl;
48 // cout << "c0.y: " << c[0].y << endl;
49 cout << "c0.y: " << c[0].y () << endl;
50 cout << "c3.y: " << c[3].y () << endl;
51 cout << "dy: " << dy << endl;
52 cout << "dy_f_l: " << dy_f_drul_[LEFT] << endl;
53 cout << "dy_f_r: " << dy_f_drul_[RIGHT] << endl;
54 cout << "dy_f: " << dy_f_drul_[RIGHT] - dy_f_drul_[LEFT] << endl;
56 a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
58 Molecule* mol_p = new Molecule;
60 mol_p->translate_axis (-interstaff_f_, Y_AXIS);
68 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
70 Real dx = extent(X_AXIS).length ();
72 return Offset (dx / 2, dy);
79 ugh . Control points are too crude measures.
82 Bow::do_height () const
85 Array<Offset> c (get_controls());
86 for (int i=0; i < c.size (); i++)
88 Real y = c[i][Y_AXIS];
89 iv.unite (Interval (y,y));
96 Bow::do_width () const
98 Interval i = Spanner::do_width ();
100 return Interval (0, dx);
104 Bow::get_controls () const
106 Bezier_bow b (paper ());
107 b.set (get_encompass_offset_arr (), dir_);
109 Array<Offset> controls;
110 controls.set_size (8);
111 for (int i = 0; i < 4; i++)
112 controls[i] = b.control_[i];
113 for (int i = 0; i < 4; i++)
114 controls[i + 4] = b.return_[i];
119 Bow::get_encompass_offset_arr () const
121 Offset d (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT],
122 dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]);
123 d.x() += extent (X_AXIS). length ();
126 notes.push (Offset (0, 0));