]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stencil-integral.cc
Web-ja: update introduction
[lilypond.git] / lily / stencil-integral.cc
index 747217c847024b993b307555edcca46c85b025d1..b44258b6b1973c19d117626ba769a232467dd7e4 100644 (file)
@@ -260,6 +260,7 @@ make_partial_ellipse_boxes (vector<Box> &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<Box> &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<vector<Offset> > 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<Box> &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<Box> &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<Box> &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<Box> &boxes,
 vector<Transform_matrix_and_expression>
 stencil_traverser (PangoMatrix trans, SCM expr)
 {
-  if (scm_is_null (expr))
-    return vector<Transform_matrix_and_expression> ();
-  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<Transform_matrix_and_expression> ();
   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<Transform_matrix_and_expression> out;