]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-symbol-referencer-scheme.cc
Merge master into nested-bookparts
[lilypond.git] / lily / staff-symbol-referencer-scheme.cc
index 134e6cc18489977eadc610eba15cf07dad0cc44f..d8f2e6386203f4851ac7332f978943cdb7abe9d7 100644 (file)
@@ -8,13 +8,14 @@
 
 #include "grob.hh"
 #include "staff-symbol-referencer.hh"
+#include "staff-symbol.hh"
 #include "libc-extension.hh"
 
 LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position",
           1, 0, 0, (SCM sg),
           "Return the Y-position of @var{sg} relative to the staff.")
 {
-  LY_ASSERT_FIRST_SMOB (Grob, sg);
+  LY_ASSERT_SMOB (Grob, sg, 1);
   Grob *g = unsmob_grob (sg);
   Real pos = Staff_symbol_referencer::get_position (g);
 
@@ -23,3 +24,26 @@ LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position",
   else
     return scm_from_double (pos);
 }
+
+LY_DEFINE (ly_position_on_line_p, "ly:position-on-line?",
+           2, 0, 0, (SCM sg, SCM spos),
+           "Return whether @var{pos} is on a line of the staff associated with the the grob @var{sg} (even on an extender line).")
+{
+  LY_ASSERT_SMOB (Grob, sg, 1);
+  LY_ASSERT_TYPE (scm_is_number, spos, 2);
+  Grob *g = unsmob_grob (sg);
+  Grob *st = Staff_symbol_referencer::get_staff_symbol (g);
+  int pos = scm_to_int (spos);
+  bool on_line = st ? Staff_symbol::on_line (g, pos) : false;
+  return scm_from_bool (on_line);
+}
+
+LY_DEFINE (ly_staff_symbol_line_thickness, "ly:staff-symbol-line-thickness",
+           1, 0, 0, (SCM grob),
+           "Returns the line-thickness of the staff associated with @var{grob}.")
+{
+  LY_ASSERT_SMOB (Grob, grob, 1);
+  Grob *g = unsmob_grob (grob);
+  Real thickness = Staff_symbol_referencer::line_thickness (g);
+  return scm_from_double (thickness);
+}