]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lookup.cc
Merge remote-tracking branch 'origin/release/unstable' into HEAD
[lilypond.git] / lily / lookup.cc
index 3f393e05ac058d3d0115e4934589543a1cc4b744..4d4c0bdf6a6966925a91ec7d254808fa60554a57 100644 (file)
@@ -449,22 +449,32 @@ Lookup::slur (Bezier curve, Real curvethick, Real linethick,
 Stencil
 Lookup::bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real thickness)
 {
-  /*
-    Need the weird order b.o. the way PS want its arguments
-  */
-  SCM list = SCM_EOL;
-  list = scm_cons (ly_offset2scm (bottom_curve.control_[3]), list);
-  list = scm_cons (ly_offset2scm (bottom_curve.control_[0]), list);
-  list = scm_cons (ly_offset2scm (bottom_curve.control_[1]), list);
-  list = scm_cons (ly_offset2scm (bottom_curve.control_[2]), list);
-  list = scm_cons (ly_offset2scm (top_curve.control_[0]), list);
-  list = scm_cons (ly_offset2scm (top_curve.control_[3]), list);
-  list = scm_cons (ly_offset2scm (top_curve.control_[2]), list);
-  list = scm_cons (ly_offset2scm (top_curve.control_[1]), list);
-
-  SCM horizontal_bend = scm_list_n (ly_symbol2scm ("bezier-sandwich"),
-                                    ly_quote_scm (list),
+  SCM commands = scm_list_n (ly_symbol2scm ("moveto"),
+                             scm_from_double (top_curve.control_[0][X_AXIS]),
+                             scm_from_double (top_curve.control_[0][Y_AXIS]),
+                             ly_symbol2scm ("curveto"),
+                             scm_from_double (top_curve.control_[1][X_AXIS]),
+                             scm_from_double (top_curve.control_[1][Y_AXIS]),
+                             scm_from_double (top_curve.control_[2][X_AXIS]),
+                             scm_from_double (top_curve.control_[2][Y_AXIS]),
+                             scm_from_double (top_curve.control_[3][X_AXIS]),
+                             scm_from_double (top_curve.control_[3][Y_AXIS]),
+                             ly_symbol2scm ("curveto"),
+                             scm_from_double (bottom_curve.control_[2][X_AXIS]),
+                             scm_from_double (bottom_curve.control_[2][Y_AXIS]),
+                             scm_from_double (bottom_curve.control_[1][X_AXIS]),
+                             scm_from_double (bottom_curve.control_[1][Y_AXIS]),
+                             scm_from_double (bottom_curve.control_[0][X_AXIS]),
+                             scm_from_double (bottom_curve.control_[0][Y_AXIS]),
+                             ly_symbol2scm ("closepath"),
+                             SCM_UNDEFINED);
+
+  SCM horizontal_bend = scm_list_n (ly_symbol2scm ("path"),
                                     scm_from_double (thickness),
+                                    ly_quote_scm (commands),
+                                    ly_quote_scm (ly_symbol2scm ("round")),
+                                    ly_quote_scm (ly_symbol2scm ("round")),
+                                    SCM_BOOL_T,
                                     SCM_UNDEFINED);
 
   Interval x_extent = top_curve.extent (X_AXIS);
@@ -480,21 +490,32 @@ Lookup::bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real thickness)
 Stencil
 Lookup::repeat_slash (Real w, Real s, Real t)
 {
-#if 0 /*  TODO */
-  vector<Offset> points;
-  Real blotdiameter = 0.0;
-
-  Offset p1 (0, 0);
-  Offset p2 (w, w * s);
-
-  return Lookup::round_filled_polygon (points, blotdiameter);
-#endif
 
-  SCM wid = scm_from_double (w);
-  SCM sl = scm_from_double (s);
-  SCM thick = scm_from_double (t);
-  SCM slashnodot = scm_list_n (ly_symbol2scm ("repeat-slash"),
-                               wid, sl, thick, SCM_UNDEFINED);
+  Real x_width = sqrt ((t * t) + ((t / s) * (t / s)));
+  Real height = w * s;
+
+  SCM controls = scm_list_n (ly_symbol2scm ("moveto"),
+                             scm_from_double (0),
+                             scm_from_double (0),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (x_width),
+                             scm_from_double (0),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (w),
+                             scm_from_double (height),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (-x_width),
+                             scm_from_double (0),
+                             ly_symbol2scm ("closepath"),
+                             SCM_UNDEFINED);
+
+  SCM slashnodot = scm_list_n (ly_symbol2scm ("path"),
+                               scm_from_double (0),
+                               ly_quote_scm (controls),
+                               ly_quote_scm (ly_symbol2scm ("round")),
+                               ly_quote_scm (ly_symbol2scm ("round")),
+                               SCM_BOOL_T,
+                               SCM_UNDEFINED);
 
   Box b (Interval (0, w + sqrt (sqr (t / s) + sqr (t))),
          Interval (0, w * s));