X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil-integral.cc;h=b44258b6b1973c19d117626ba769a232467dd7e4;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=747217c847024b993b307555edcca46c85b025d1;hpb=24107d843c902a8101fbb696f47bf7538dd4493a;p=lilypond.git diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc index 747217c847..b44258b6b1 100644 --- a/lily/stencil-integral.cc +++ b/lily/stencil-integral.cc @@ -260,6 +260,7 @@ make_partial_ellipse_boxes (vector &boxes, expr = scm_cdr (expr); Real y_rad = robust_scm2double (scm_car (expr), 0.0); expr = scm_cdr (expr); + Offset rad (x_rad, y_rad); Real start = robust_scm2double (scm_car (expr), 0.0); expr = scm_cdr (expr); Real end = robust_scm2double (scm_car (expr), 0.0); @@ -270,12 +271,10 @@ make_partial_ellipse_boxes (vector &boxes, expr = scm_cdr (expr); bool fill = to_boolean (scm_car (expr)); ////////////////////// - start = M_PI * start / 180; - end = M_PI * end / 180; if (end == start) - end += (2 * M_PI); - Offset sp (cos (start) * x_rad, sin (start) * y_rad); - Offset ep (cos (end) * x_rad, sin (end) * y_rad); + end += 360; + Offset sp (offset_directed (start).scale (rad)); + Offset ep (offset_directed (end).scale (rad)); ////////////////////// Drul_array > points; int quantization = max (1, (int) (((x_rad * trans.xx) + (y_rad * trans.yy)) * M_PI / QUANTIZATION_UNIT)); @@ -284,7 +283,7 @@ make_partial_ellipse_boxes (vector &boxes, for (vsize i = 0; i < 1 + (vsize) quantization; i++) { Real ang = linear_map (start, end, 0, quantization, i); - Offset pt (cos (ang) * x_rad, sin (ang) * y_rad); + Offset pt (offset_directed (ang).scale (rad)); Offset inter = pt + d * get_normal ((th/2) * pt.direction ()); pango_matrix_transform_point (&trans, &inter[X_AXIS], &inter[Y_AXIS]); points[d].push_back (inter); @@ -316,7 +315,7 @@ make_partial_ellipse_boxes (vector &boxes, if (th > 0.0) { // beg line cap - Offset pt (cos (start) * x_rad, sin (start) * y_rad); + Offset pt (offset_directed (start).scale (rad)); create_path_cap (boxes, buildings, trans, @@ -325,7 +324,7 @@ make_partial_ellipse_boxes (vector &boxes, -get_normal (pt)); // end line cap - pt = Offset (cos (end) * x_rad, sin (end) * y_rad); + pt = offset_directed (end).scale (rad); create_path_cap (boxes, buildings, trans, @@ -895,9 +894,8 @@ stencil_dispatcher (vector &boxes, vector stencil_traverser (PangoMatrix trans, SCM expr) { - if (scm_is_null (expr)) - return vector (); - else if (scm_is_eq (expr, ly_string2scm (""))) + if (scm_is_null (expr) + || (scm_is_string (expr) && scm_is_true (scm_string_null_p (expr)))) return vector (); else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("combine-stencil"))) { @@ -945,8 +943,10 @@ stencil_traverser (PangoMatrix trans, SCM expr) return stencil_traverser (trans, scm_caddr (expr)); else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("transparent-stencil"))) return stencil_traverser (trans, scm_cadr (expr)); - else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("id"))) + else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("output-attributes"))) return stencil_traverser (trans, scm_caddr (expr)); + else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("with-outline"))) + return stencil_traverser (trans, scm_cadr (expr)); else { vector out;