]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/line-interface.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / line-interface.cc
index 8262a014f900e6f47d33c9fda7e34ede6fd1a054..6401b3896ae942ced9333c9b101ab43582275ef4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "line-interface.hh"
@@ -17,16 +17,16 @@ Line_interface::make_arrow (Offset begin, Offset end,
                            Real thick,
                            Real length, Real width)
 {
-  Real angle = (end - begin).arg();
-  Array<Offset> points;
-  
-  points.push (Offset (0, 0));
-  points.push (Offset (-length, width));
-  points.push (Offset (-length, -width));
-
-  for (int i = 0; i < points.size(); i++)
+  Real angle = (end - begin).arg ();
+  vector<Offset> points;
+
+  points.push_back (Offset (0, 0));
+  points.push_back (Offset (-length, width));
+  points.push_back (Offset (-length, -width));
+
+  for (vsize i = 0; i < points.size (); i++)
     points[i] = points[i] * complex_exp (Offset (0, angle)) + end;
-    
+
   return Lookup::round_filled_polygon (points, thick);
 }
 
@@ -34,16 +34,16 @@ Stencil
 Line_interface::make_dashed_line (Real thick, Offset from, Offset to,
                                  Real dash_period, Real dash_fraction)
 {
-  dash_fraction = (dash_fraction >? 0) <? 1.0;
+  dash_fraction = min (max (dash_fraction, 0.0), 1.0);
   Real on = dash_fraction * dash_period + thick;
   Real off = dash_period - on;
 
   SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
-                      scm_make_real (thick),
-                      scm_make_real (on),
-                      scm_make_real (off),
-                      scm_make_real (to[X_AXIS] - from[X_AXIS]),
-                      scm_make_real (to[Y_AXIS] - from[Y_AXIS]),
+                      scm_from_double (thick),
+                      scm_from_double (on),
+                      scm_from_double (off),
+                      scm_from_double (to[X_AXIS] - from[X_AXIS]),
+                      scm_from_double (to[Y_AXIS] - from[Y_AXIS]),
                       SCM_UNDEFINED);
 
   Box box;
@@ -62,11 +62,11 @@ Stencil
 Line_interface::make_line (Real th, Offset from, Offset to)
 {
   SCM at = scm_list_n (ly_symbol2scm ("draw-line"),
-                      scm_make_real (th),
-                      scm_make_real (from[X_AXIS]),
-                      scm_make_real (from[Y_AXIS]),
-                      scm_make_real (to[X_AXIS]),
-                      scm_make_real (to[Y_AXIS]),
+                      scm_from_double (th),
+                      scm_from_double (from[X_AXIS]),
+                      scm_from_double (from[Y_AXIS]),
+                      scm_from_double (to[X_AXIS]),
+                      scm_from_double (to[Y_AXIS]),
                       SCM_UNDEFINED);
 
   Box box;
@@ -89,21 +89,20 @@ Line_interface::arrows (Grob *me, Offset from, Offset to,
     {
       Real thick = Staff_symbol_referencer::line_thickness (me)
        * robust_scm2double (me->get_property ("thickness"), 1);
-      Real ss =  Staff_symbol_referencer::staff_space (me);
-      
+      Real ss = Staff_symbol_referencer::staff_space (me);
+
       Real len = robust_scm2double (me->get_property ("arrow-length"), 1.3 * ss);
       Real wid = robust_scm2double (me->get_property ("arrow-width"), 0.5 * ss);
 
       if (to_arrow)
-        a.add_stencil (make_arrow (from, to, thick, len, wid));
-       
+       a.add_stencil (make_arrow (from, to, thick, len, wid));
+
       if (from_arrow)
-        a.add_stencil (make_arrow (to, from, thick, len, wid));
+       a.add_stencil (make_arrow (to, from, thick, len, wid));
     }
 
   return a;
 }
-                       
 
 Stencil
 Line_interface::line (Grob *me, Offset from, Offset to)
@@ -113,8 +112,8 @@ Line_interface::line (Grob *me, Offset from, Offset to)
 
   SCM type = me->get_property ("style");
 
-  Stencil l;
-  
+  Stencil stil;
+
   SCM dash_fraction = me->get_property ("dash-fraction");
   if (scm_is_number (dash_fraction) || type == ly_symbol2scm ("dotted-line"))
     {
@@ -124,21 +123,19 @@ Line_interface::line (Grob *me, Offset from, Offset to)
        ? 0.0
        : robust_scm2double (dash_fraction, 0.4);
 
-      fraction = (fraction >? 0) <? 1.0;
+      fraction = min (max (fraction, 0.0), 1.0);
       Real period = Staff_symbol_referencer::staff_space (me)
        * robust_scm2double (me->get_property ("dash-period"), 1.0);
 
       if (period < 0)
        return Stencil ();
 
-      l =  make_dashed_line (thick, from, to, period, fraction);
+      stil = make_dashed_line (thick, from, to, period, fraction);
     }
   else
-    {
-      l =  make_line (thick, from, to);
-    }
+    stil = make_line (thick, from, to);
 
-  return l;
+  return stil;
 }
 
 ADD_INTERFACE (Line_interface, "line-interface",
@@ -149,4 +146,10 @@ ADD_INTERFACE (Line_interface, "line-interface",
               "produced. If @code{dash-fraction} is negative, the line is made "
               "transparent.",
 
-              "dash-period dash-fraction thickness style arrow-length arrow-width")
+              /* properties */
+              "dash-period "
+              "dash-fraction "
+              "thickness "
+              "style "
+              "arrow-length "
+              "arrow-width")