- if (b.x ().length () < blotdiameter)
- blotdiameter = b.x ().length ();
- if (b.y ().length () < blotdiameter)
- blotdiameter = b.y ().length ();
+ Real width = b.x ().delta ();
+ blotdiameter = min (blotdiameter, width);
+ Real height = b.y ().delta ();
+ blotdiameter = min (blotdiameter, height);
+
+ if (blotdiameter < 0.0)
+ {
+ if (!isinf (blotdiameter))
+ warning (_f ("Not drawing a box with negative dimension, %.2f by %.2f.",
+ width, height));
+ return Stencil (b, SCM_EOL);
+ }
- 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 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 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);