]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/line-interface.cc
Imported Upstream version 2.14.2
[lilypond.git] / lily / line-interface.cc
index 8720bba596f14eb5085318c184057353c45107f9..ebbd62ef4f2b61ac9bff1824b9e102b15c3edb4d 100644 (file)
@@ -1,18 +1,29 @@
 /*
-  line-interface.cc -- implement Line_interface
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "line-interface.hh"
 
-#include "staff-symbol-referencer.hh"
+#include "font-interface.hh"
+#include "grob.hh"
 #include "lookup.hh"
 #include "output-def.hh"
-#include "grob.hh"
-#include "font-interface.hh"
+#include "staff-symbol-referencer.hh"
 
 Stencil
 Line_interface::make_arrow (Offset begin, Offset end,
@@ -37,15 +48,9 @@ Line_interface::make_trill_line (Grob *me,
                                 Offset from,
                                 Offset to)
 {
-  Offset dz = (to-from);
-  SCM alist_chain = Font_interface::text_font_alist_chain (me);
-  SCM style_alist = scm_list_n (scm_cons (ly_symbol2scm ("font-encoding"),
-                                         ly_symbol2scm ("fetaMusic")),
-                               SCM_UNDEFINED);
+  Offset dz = (to - from);
 
-  Font_metric *fm = select_font (me->layout (),
-                                scm_cons (style_alist,
-                                          alist_chain));
+  Font_metric *fm = Font_interface::get_default_font (me);
 
   Stencil elt = fm->find_by_name ("scripts.trill_element");
   elt.align_to (Y_AXIS, CENTER);
@@ -77,7 +82,7 @@ Line_interface::make_zigzag_line (Grob *me,
                                  Offset from,
                                  Offset to)
 {
-  Offset dz = to -from;
+  Offset dz = to - from;
 
   Real thick = Staff_symbol_referencer::line_thickness (me);
   thick *= robust_scm2double (me->get_property ("thickness"), 1.0); // todo: staff sym referencer? 
@@ -111,13 +116,7 @@ Line_interface::make_zigzag_line (Grob *me,
       total.add_stencil (moved_squiggle);
     }
 
-  Box b;
-  b.add_point (Offset (0, 0));
-  b.add_point (dz);
-  b[X_AXIS].widen (thick / 2);
-  b[Y_AXIS].widen (thick / 2);
-
-  return Stencil (b, total.expr ());
+  return total;
 }
 
 
@@ -127,7 +126,7 @@ Line_interface::make_dashed_line (Real thick, Offset from, Offset to,
 {
   dash_fraction = min (max (dash_fraction, 0.0), 1.0);
   Real on = dash_fraction * dash_period + thick;
-  Real off = dash_period - on;
+  Real off = max (0.0, dash_period - on);
 
   SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
                       scm_from_double (thick),
@@ -204,22 +203,21 @@ Line_interface::line (Grob *me, Offset from, Offset to)
 
   SCM type = me->get_property ("style");
   if (type == ly_symbol2scm ("zigzag"))
-    {
-      return make_zigzag_line (me, from, to);
-    }
+    return make_zigzag_line (me, from, to);
   else if (type == ly_symbol2scm ("trill"))
     return make_trill_line (me, from, to);
+  else if (type == ly_symbol2scm ("none"))
+    return Stencil ();
   
-  Stencil stil;
+  Stencil stencil;
 
-  SCM dash_fraction = me->get_property ("dash-fraction");
-  if (scm_is_number (dash_fraction) || type == ly_symbol2scm ("dotted-line"))
+  if (type == ly_symbol2scm ("dashed-line") || type == ly_symbol2scm ("dotted-line"))
     {
 
       Real fraction
        = type == ly_symbol2scm ("dotted-line")
        ? 0.0
-       : robust_scm2double (dash_fraction, 0.4);
+       : robust_scm2double (me->get_property ("dash-fraction"), 0.4);
 
       fraction = min (max (fraction, 0.0), 1.0);
       Real period = Staff_symbol_referencer::staff_space (me)
@@ -228,40 +226,43 @@ Line_interface::line (Grob *me, Offset from, Offset to)
       if (period <= 0)
        return Stencil ();
 
-      Real len = (to-from).length ();
+      Real len = (to - from).length ();
       
       int n = (int) rint ((len - period * fraction) / period);
+      n = max (0, n);
       if (n > 0)
        {
          /*
            TODO: figure out something intelligent for really short
            sections.
           */
-         period = ((to-from).length () - period * fraction) / n;
+         period = ((to - from).length () - period * fraction) / n;
        }
-      stil = make_dashed_line (thick, from, to, period, fraction);
+      stencil = make_dashed_line (thick, from, to, period, fraction);
     }
   else
-    stil = make_line (thick, from, to);
+    stencil = make_line (thick, from, to);
 
-  return stil;
+  return stencil;
 }
 
 ADD_INTERFACE (Line_interface,
-              "Generic line objects. Any object using lines supports this.  Normally, "
-              "you get a straight line. If @code{dash-period} is defined, a dashed line is "
-              "produced; the length of the dashes is tuned with "
-              "@code{dash-fraction}. If the latter is set to 0, a dotted line is "
-              "produced. If @code{dash-fraction} is negative, the line is made "
-              "transparent.",
+              "Generic line objects.  Any object using lines supports this."
+              "  The property @code{style} can be @code{line},"
+              " @code{dashed-line}, @code{trill}, @code{dotted-line},"
+              " @code{zigzag} or @code{none} (a transparent line).\n"
+              "\n"
+              "For @code{dashed-line}, the length of the dashes is tuned"
+              " with @code{dash-fraction}.  If the latter is set to@tie{}0, a"
+              " dotted line is produced.",
 
               /* properties */
-              "dash-period "
+              "arrow-length "
+              "arrow-width "
               "dash-fraction "
-              "thickness "
+              "dash-period "
               "style "
+              "thickness "
               "zigzag-length "
               "zigzag-width "
-              "arrow-length "
-              "arrow-width ")
-
+              );