-ADD_INTERFACE (Cluster,"cluster-interface",
- "A graphically drawn musical cluster. "
-"\n\n"
-"@code{padding} adds to the vertical extent of the shape (top and "
-"bottom) and is expressed in units of staffspace. Since the pitch "
-"range of a single pitch is infinitely small, if padding is set to "
-"@code{0.0}, this possibly results in an invisible shape, if you,for "
-"example, say @code{c-\\startCluster d e-\\endCluster}. The default "
-"value for @code{padding} therefore is @code{0.25}, such that a single "
-"pitch roughly shows the same height as a note head. "
-"\n\n"
-"@code{style} controls the shape of cluster segments. Valid values include 'leftsided-stairs', 'rightsided-stairs', 'centered-stairs', and 'ramp'.\n"
-,
- "style padding columns");
+ADD_INTERFACE (Cluster,
+ "A graphically drawn musical cluster. "
+ "\n\n"
+ "@code{padding} adds to the vertical extent of the shape (top and "
+ "bottom). \n\n"
+ "The property @code{style} controls the shape of cluster segments. Valid values "
+ "include @code{leftsided-stairs}, @code{rightsided-stairs}, @code{centered-stairs}, "
+ "and @code{ramp}.\n",
+
+ /* props */
+ "style "
+ "padding "
+ "columns "
+ );
+
+struct Cluster_beacon
+{
+public:
+ DECLARE_SCHEME_CALLBACK (height, (SCM));
+ DECLARE_GROB_INTERFACE();
+};
+
+MAKE_SCHEME_CALLBACK (Cluster_beacon, height, 1);
+SCM
+Cluster_beacon::height (SCM g)
+{
+ Grob *me = unsmob_grob (g);
+ Interval v = robust_scm2interval (me->get_property ("positions"),
+ Interval (0, 0));
+ return ly_interval2scm (Staff_symbol_referencer::staff_space (me) * 0.5 * v);
+}
+
+ADD_INTERFACE (Cluster_beacon,
+ "A place holder for the cluster spanner to determine the vertical "
+ "extents of a cluster spanner at this X position.",
+
+ /* properties */
+ "positions ");