2 bow.cc -- implement Bow
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 Jan Nieuwenhuizen <janneke@gnu.org>
12 #include "paper-def.hh"
13 #include "molecule.hh"
20 dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
21 dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
25 Bow::do_brew_molecule_p () const
27 Real thick = paper_l ()->get_var ("slur_thickness");
28 Array<Offset> c = get_controls ();
32 SCM d = get_elt_property (dashed_scm_sym);
34 a = lookup_l ()->slur (c, thick);
36 a = lookup_l ()->dashed_slur (c, thick, gh_scm2int (SCM_CDR(d)));
38 return new Molecule (a);
44 Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
45 Real dx = extent(X_AXIS).length ();
47 return Offset (dx / 2, dy);
51 Ugh. Control points are too crude measures.
54 Bow::do_height () const
57 Array<Offset> c (get_controls());
58 for (int i=0; i < c.size (); i++)
60 Real y = c[i][Y_AXIS];
61 iv.unite (Interval (y,y));
67 Bow::curve_extent_drul () const
69 Bezier_bow b (paper_l ());
70 b.set (get_encompass_offset_arr (), dir_);
72 return b.curve_extent_drul_;
76 Bow::get_controls () const
78 Bezier_bow b (paper_l ());
79 b.set (get_encompass_offset_arr (), dir_);
81 Array<Offset> controls;
82 controls.set_size (8);
83 for (int i = 0; i < 4; i++)
84 controls[i] = b.control_[i];
85 for (int i = 0; i < 4; i++)
86 controls[i + 4] = b.return_[i];
91 Bow::get_encompass_offset_arr () const
93 Array<Offset> offset_arr;
94 offset_arr.push (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
95 offset_arr.push (Offset (do_width ().length () + dx_f_drul_[RIGHT],