]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tex-slur.cc
release: 0.1.52
[lilypond.git] / lily / tex-slur.cc
index eb140c476853b1de5e86a2d232996baef293ecfd..9e116df08ee99c1a93ebb9a4ebb01e35a0b5de1d 100644 (file)
@@ -127,28 +127,47 @@ Lookup::half_slur (int dy, Real &dx, Direction dir, int xpart) const
   assert (idx < 256);
   f+=String ("{") + String (idx) + "}";
 
-
   s.tex_ = f;
 
   return s;
 }
 
 Atom
-Lookup::ps_slur (Real dy , Real dx, Real dir) const
+Lookup::ps_slur (Real dy , Real dx, Real ht, Real dir) const
 {
   String ps = "\\embeddedps{\n";
   
   ps += String_convert::double_str (dx) + " " 
     + String_convert::double_str (dy) + " "
+    + String_convert::double_str (ht) + " "
     + String_convert::double_str (dir) +
     " draw_slur}";
 
-  String mf = "\\embeddedmf{\n";
+  /*
+   slurs are rarely wider than 100pt: 
+   precision of 3 yields maximum (slur spanning page)
+   error of: 1%% * 6*72pt === 0.4pt = 0.14 mm
+   */
+  String dx_str = String_convert::precision_str (dx, 4);
+  String dy_str = String_convert::precision_str (dy, 3);
+  String dir_str = String_convert::int_str ((int)dir);
+  String name = "feta-sleur-" + dx_str + "-" + dy_str + "-" + dir_str;
+  int i = name.index_i ('.');
+  while (i != -1)
+    {
+      *(name.ch_l () + i) = 'x';
+      i = name.index_i ('.');
+    }
+
+  String mf = "\\embeddedmf{" + name + "}{\n";
+  mf += "mode_setup;\n";
+  mf += "staffsize\\#:=" 
+    + String_convert::int_str ((int)paper_l_->get_var ("barsize"), "%d")
+    + "pt\\#;\n";
+  mf += "interline#:=staffsize#/4;\n";
+  mf += "stafflinethickness#:=0.1interline#;\n";
   mf += "input feta-sleur;\n";
-  mf += "draw_slur((0,0),";
-  mf += "(" + String_convert::double_str (dx) + "," 
-    + String_convert::double_str (dy) + "),";
-  mf += String_convert::double_str (dir) + ");\n";
+  mf += "slurchar(" + dx_str + "," + dy_str + "," + dir_str + ");\n";
   mf += "end.\n";
   mf += "}\n";
 
@@ -160,7 +179,7 @@ Lookup::ps_slur (Real dy , Real dx, Real dir) const
 Atom
 Lookup::tex_slur (int dy , Real &dx, Direction dir) const
 {
-  assert (abs (dir) <= 1);
+  assert (abs ((int)dir) <= 1);
   Atom s;
   Direction y_sign = (Direction) sign (dy);
 
@@ -264,7 +283,7 @@ Lookup::big_slur (int dy , Real &dx, Direction dir) const
 
 
 Atom
-Lookup::slur  (Real &dy_f , Real &dx, Direction dir) const
+Lookup::slur  (Real &dy_f , Real &dx, Real ht, Direction dir) const
 {
   if  (dx < 0)
     {
@@ -274,7 +293,7 @@ Lookup::slur  (Real &dy_f , Real &dx, Direction dir) const
   Atom s;
   
   if (postscript_global_b)
-    s = ps_slur (dy_f, dx, dir);
+    s = ps_slur (dy_f, dx, ht, dir);
   else
     {
       Real nh =  paper_l_->internote_f ();