]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/bow.cc
release: 1.2.7
[lilypond.git] / lily / bow.cc
index c634746b1f6cc2a7047485e166301ad6da6be32b..f3c4e59eeb638649971f9c386b04899fedc560c9 100644 (file)
 #include "bezier.hh"
 #include "main.hh"
 
-
-
 Bow::Bow ()
 {
   dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
-  dash_i_ = 0;
-  interstaff_f_ = 0;
-  vertical_align_drul_[MIN] = 0;
-  vertical_align_drul_[MAX] = -1;
 }
 
 Molecule*
@@ -32,46 +26,27 @@ Bow::do_brew_molecule_p () const
 {
   Real thick = paper_l ()->get_var ("slur_thickness");
   Array<Offset> c = get_controls ();
-  Real dy = c[3].y () - c[0].y ();
+
   Molecule a;
 
-  if (!dash_i_)
-    a = lookup_l ()->slur (c);
+  SCM d =  get_elt_property (dashed_scm_sym);
+  if (d == SCM_BOOL_F)
+    a = lookup_l ()->slur (c, thick);
   else
-    a = lookup_l ()->dashed_slur (c, thick, dash_i_);
+    a = lookup_l ()->dashed_slur (c, thick, gh_scm2int (SCM_CDR(d)));
 
-  if (check_debug && !monitor->silent_b ("Bow"))
-    {
-      static int i = 1;
-      cout << "******" << i++ << "******" << endl;
-      cout << "c0.y: " << c[0].y () << endl;
-      cout << "c3.y: " << c[3].y () << endl;
-      cout << "dy: " << dy << endl;
-      cout << "dy_f_l: " << dy_f_drul_[LEFT] << endl;
-      cout << "dy_f_r: " << dy_f_drul_[RIGHT] << endl;
-      cout << "dy_f: " << dy_f_drul_[RIGHT] - dy_f_drul_[LEFT] << endl;
-    }
-  a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
-
-  Molecule* mol_p = new Molecule;
-  mol_p->add_molecule (a);
-  mol_p->translate_axis (-interstaff_f_, Y_AXIS);
-
-  return mol_p;
+  return new Molecule (a); 
 }
 
 Offset
 Bow::center () const
 {
   Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
-
   Real dx =  extent(X_AXIS).length ();
 
   return Offset (dx / 2, dy);
 }
 
-
-
 /*
    Ugh.  Control points are too crude measures.
  */
@@ -85,10 +60,17 @@ Bow::do_height () const
       Real y = c[i][Y_AXIS];
       iv.unite (Interval (y,y));
     }
-  iv -= interstaff_f_;
   return iv;
 }
 
+Drul_array<Interval>
+Bow::curve_extent_drul () const
+{
+  Bezier_bow b (paper_l ());
+  b.set (get_encompass_offset_arr (), dir_);
+  b.calc ();
+  return b.curve_extent_drul_;
+}
 
 Array<Offset>
 Bow::get_controls () const
@@ -108,14 +90,11 @@ Bow::get_controls () const
 Array<Offset>
 Bow::get_encompass_offset_arr () const
 {
-  Offset d (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT],
-    dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]);
-  d.x() += extent (X_AXIS). length ();
-
-  Array<Offset> notes;
-  notes.push (Offset (0, 0));
-  notes.push (d);
-
-  return notes;
+  Array<Offset> offset_arr;
+  offset_arr.push (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
+  offset_arr.push (Offset (do_width ().length () + dx_f_drul_[RIGHT],
+                     dy_f_drul_[RIGHT]));
+                     
+  return offset_arr;
 }