]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/grob.cc
filter lilypond version from midi events
[lilypond.git] / lily / grob.cc
index ecbaa74a579dbb3f603c26a5293c153c2097fe6e..0591ab115f6cc6ac8ed0ffddb2960141c4e77695 100644 (file)
@@ -59,7 +59,16 @@ Grob::Grob (SCM basicprops,
 
   SCM meta = get_property ("meta");
   if (scm_is_pair (meta))
-    interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+    {
+      interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+
+      SCM object_cbs = scm_assq (ly_symbol2scm ("object-callbacks"), meta);
+      if (scm_is_pair (object_cbs))
+       {
+         for (SCM s = scm_cdr (object_cbs); scm_is_pair (s); s = scm_cdr (s))
+           set_object (scm_caar (s), scm_cdar (s)); 
+       }
+    }
   
   if (get_property_data ("X-extent") == SCM_EOL)
     set_property ("X-extent", Grob::stencil_width_proc);
@@ -309,13 +318,15 @@ Grob::pure_relative_y_coordinate (Grob const *refp, int start, int end)
      it probably means that the Alignment was fixed and it has already been
      calculated.
   */
-  Grob *p = get_parent (Y_AXIS);
-  Real trans = 0;
-  if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_)
-    trans = Align_interface::get_pure_child_y_translation (p, this, start, end);
+  if (Grob *p = get_parent (Y_AXIS))
+    {
+      Real trans = 0;
+      if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_)
+       trans = Align_interface::get_pure_child_y_translation (p, this, start, end);
 
-  return off + trans
-    + dim_cache_[Y_AXIS].parent_->pure_relative_y_coordinate (refp, start, end);
+      return off + trans + p->pure_relative_y_coordinate (refp, start, end);
+    }
+  return off;
 }
 
 /* Invoke callbacks to get offset relative to parent.  */
@@ -566,7 +577,7 @@ Grob::programming_error (string s) const
 }
 
 
-ADD_INTERFACE (Grob, "grob-interface",
+ADD_INTERFACE (Grob,
               "A grob represents a piece of music notation\n"
               "\n"
               "All grobs have an X and Y-position on the page.  These X and Y positions\n"
@@ -607,6 +618,7 @@ ADD_INTERFACE (Grob, "grob-interface",
               "Y-extent "
               "Y-offset "
               "after-line-breaking "
+              "avoid-slur "
               "axis-group-parent-X "
               "axis-group-parent-Y "
               "before-line-breaking "
@@ -620,6 +632,9 @@ ADD_INTERFACE (Grob, "grob-interface",
               "meta "
               "minimum-X-extent "
               "minimum-Y-extent "
+              "outside-staff-horizontal-padding "
+              "outside-staff-padding "
+              "outside-staff-priority "
               "rotation "
               "springs-and-rods "
               "staff-symbol "
@@ -627,15 +642,10 @@ ADD_INTERFACE (Grob, "grob-interface",
               "transparent "
               );
 
-
-
-
-
 /****************************************************************
   CALLBACKS
 ****************************************************************/
 
-
 static SCM
 grob_stencil_extent (Grob *me, Axis a)
 {