]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/grid-line-interface.cc
Release: bump Welcome versions.
[lilypond.git] / lily / grid-line-interface.cc
index 47d8b58587e372e64c7b5383dd6a8a534464d818..8fb2690caa7cb8202ca02c6641664689b7e12249 100644 (file)
@@ -1,34 +1,43 @@
 /*
-  grid-line-interface.cc --  implement Grid_line_interface
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-  (c) 2005 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 "group-interface.hh"
-#include "output-def.hh"
-#include "stencil.hh"
-#include "lookup.hh"
 #include "grid-line-interface.hh"
-#include "grob.hh"
 
+#include "grob.hh"
+#include "pointer-group-interface.hh"
+#include "lookup.hh"
+#include "output-def.hh"
 
 MAKE_SCHEME_CALLBACK (Grid_line_interface, print, 1);
 SCM
 Grid_line_interface::print (SCM smobbed_me)
 {
-  Grob *me = unsmob_grob (smobbed_me);
-  SCM first_elt = me->get_property ("elements");
+  Grob *me = unsmob<Grob> (smobbed_me);
 
+  extract_grob_set (me, "elements", elts);
   /* compute common refpoint of elements */
-  Grob *refp = common_refpoint_of_list (first_elt, me, Y_AXIS);
+  Grob *refp = common_refpoint_of_array (elts, me, Y_AXIS);
   Interval iv;
-  
-  for (SCM elts = first_elt; scm_is_pair (elts); elts = scm_cdr (elts))
+
+  for (vsize i = 0; i < elts.size (); i++)
     {
-      Grob *point = unsmob_grob (scm_car (elts));
+      Grob *point = elts[i];
 
       iv.unite (point->extent (refp, Y_AXIS));
     }
@@ -39,26 +48,47 @@ Grid_line_interface::print (SCM smobbed_me)
       return SCM_EOL;
     }
 
-  Real staffline = me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+  Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   Real thick = robust_scm2double (me->get_property ("thickness"), 1.0)
-    * staffline;
-
+               * staffline;
 
-  iv += - me->relative_coordinate (refp, Y_AXIS);
+  iv += -me->relative_coordinate (refp, Y_AXIS);
   Stencil st = Lookup::filled_box (Box (Interval (0, thick),
-                                       iv));
+                                        iv));
 
   return st.smobbed_copy ();
 }
 
+MAKE_SCHEME_CALLBACK (Grid_line_interface, width, 1);
+SCM
+Grid_line_interface::width (SCM smob)
+{
+  Grob *me = unsmob<Grob> (smob);
+
+  Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+  Real thick = robust_scm2double (me->get_property ("thickness"), 1.0)
+               * staffline;
+
+  return ly_interval2scm (Interval (0, thick));
+}
+
 void
 Grid_line_interface::add_grid_point (Grob *me, Grob *b)
 {
   Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), b);
-  me->add_dependency (b);
 }
 
-ADD_INTERFACE (Grid_line_interface, "grid-line-interface",
-              "A  line that spanned between grid-points. ",
-              "elements thickness");
+ADD_INTERFACE (Grid_line_interface,
+               "A line that is spanned between grid-points.",
+
+               /* properties */
+               "elements "
+               "thickness "
+              );
+
+ADD_INTERFACE (Grid_point_interface,
+               "A spanning point for grid lines.",
 
+               /* properties */
+               ""
+              );