summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Eble <nine.fierce.ballads@gmail.com>2015-08-07 20:21:50 -0400
committerDan Eble <nine.fierce.ballads@gmail.com>2015-08-14 17:21:18 -0400
commit8920247a80a350aaab540166ab7a4937f45786a6 (patch)
tree1ea891c36a9919cd01538b5113d608179ee40717
parente14a171e46de06072e82513b62632bbeaa987a26 (diff)
Issue 4541 (2/2) Clean up...
* Use has_interface<Interface> (grob) * Remove DECLARE_GROB_INTERFACE() Edits to grob-interface.hh are manual and the rest is the result of the following script. for FILE in $(git grep -lw DECLARE_GROB_INTERFACE lily) do sed -i "/^ *DECLARE_GROB_INTERFACE ();.*$/d" $FILE done for FILE in $(git grep -lw "has_interface" lily) do if [ $FILE == lily/include/grob-interface.hh ] ; then continue ; fi sed -i "s/\\([_a-zA-Z]\\+\\)::has_interface\\>/has_interface<\\1>/g s/\\([_a-zA-Z]\\+\\) && has_interface<\\([_a-zA-Z]\\+\\)> (\\1)/has_interface<\\2> (\\1)/g" $FILE done
-rw-r--r--lily/accidental-placement.cc4
-rw-r--r--lily/align-interface.cc2
-rw-r--r--lily/axis-group-interface.cc12
-rw-r--r--lily/balloon.cc1
-rw-r--r--lily/beam-collision-engraver.cc4
-rw-r--r--lily/beam-quanting.cc6
-rw-r--r--lily/beam.cc2
-rw-r--r--lily/break-alignment-interface.cc2
-rw-r--r--lily/clef-modifier.cc1
-rw-r--r--lily/cluster-engraver.cc2
-rw-r--r--lily/cluster.cc1
-rw-r--r--lily/collision-engraver.cc2
-rw-r--r--lily/dot-column.cc10
-rw-r--r--lily/dynamic-align-engraver.cc4
-rw-r--r--lily/dynamic-engraver.cc4
-rw-r--r--lily/enclosing-bracket.cc1
-rw-r--r--lily/figured-bass-continuation.cc1
-rw-r--r--lily/flag.cc1
-rw-r--r--lily/grob.cc12
-rw-r--r--lily/hairpin.cc6
-rw-r--r--lily/include/accidental-interface.hh1
-rw-r--r--lily/include/accidental-placement.hh1
-rw-r--r--lily/include/align-interface.hh1
-rw-r--r--lily/include/arpeggio.hh1
-rw-r--r--lily/include/axis-group-interface.hh1
-rw-r--r--lily/include/bar-line.hh1
-rw-r--r--lily/include/beam.hh1
-rw-r--r--lily/include/break-align-interface.hh3
-rw-r--r--lily/include/breathing-sign.hh1
-rw-r--r--lily/include/chord-name.hh1
-rw-r--r--lily/include/clef.hh1
-rw-r--r--lily/include/cluster.hh1
-rw-r--r--lily/include/custos.hh1
-rw-r--r--lily/include/dot-column.hh1
-rw-r--r--lily/include/dots.hh1
-rw-r--r--lily/include/fingering-column.hh1
-rw-r--r--lily/include/font-interface.hh1
-rw-r--r--lily/include/gregorian-ligature.hh1
-rw-r--r--lily/include/grid-line-interface.hh2
-rw-r--r--lily/include/grob-interface.hh11
-rw-r--r--lily/include/grob.hh1
-rw-r--r--lily/include/hairpin.hh1
-rw-r--r--lily/include/hara-kiri-group-spanner.hh1
-rw-r--r--lily/include/horizontal-bracket.hh1
-rw-r--r--lily/include/item.hh1
-rw-r--r--lily/include/kievan-ligature.hh1
-rw-r--r--lily/include/line-interface.hh1
-rw-r--r--lily/include/lyric-extender.hh1
-rw-r--r--lily/include/lyric-hyphen.hh1
-rw-r--r--lily/include/measure-grouping-spanner.hh1
-rw-r--r--lily/include/melody-spanner.hh1
-rw-r--r--lily/include/mensural-ligature.hh1
-rw-r--r--lily/include/multi-measure-rest.hh1
-rw-r--r--lily/include/note-collision.hh1
-rw-r--r--lily/include/note-column.hh1
-rw-r--r--lily/include/note-head.hh1
-rw-r--r--lily/include/note-spacing.hh1
-rw-r--r--lily/include/paper-column.hh1
-rw-r--r--lily/include/percent-repeat-item.hh1
-rw-r--r--lily/include/pure-from-neighbor-interface.hh1
-rw-r--r--lily/include/rest-collision.hh1
-rw-r--r--lily/include/rest.hh1
-rw-r--r--lily/include/rhythmic-head.hh1
-rw-r--r--lily/include/script-column.hh1
-rw-r--r--lily/include/script-interface.hh1
-rw-r--r--lily/include/self-alignment-interface.hh1
-rw-r--r--lily/include/semi-tie-column.hh1
-rw-r--r--lily/include/semi-tie.hh1
-rw-r--r--lily/include/separation-item.hh1
-rw-r--r--lily/include/side-position-interface.hh1
-rw-r--r--lily/include/slur.hh1
-rw-r--r--lily/include/spaceable-grob.hh1
-rw-r--r--lily/include/spacing-interface.hh1
-rw-r--r--lily/include/spacing-spanner.hh1
-rw-r--r--lily/include/spanner.hh1
-rw-r--r--lily/include/staff-grouper-interface.hh1
-rw-r--r--lily/include/staff-spacing.hh1
-rw-r--r--lily/include/staff-symbol-referencer.hh1
-rw-r--r--lily/include/staff-symbol.hh1
-rw-r--r--lily/include/stem-tremolo.hh1
-rw-r--r--lily/include/stem.hh1
-rw-r--r--lily/include/system-start-delimiter.hh1
-rw-r--r--lily/include/system.hh1
-rw-r--r--lily/include/text-interface.hh1
-rw-r--r--lily/include/tie-column.hh1
-rw-r--r--lily/include/tie.hh1
-rw-r--r--lily/include/tuplet-bracket.hh1
-rw-r--r--lily/include/tuplet-number.hh1
-rw-r--r--lily/include/vaticana-ligature.hh1
-rw-r--r--lily/include/volta-bracket.hh1
-rw-r--r--lily/instrument-name-engraver.cc2
-rw-r--r--lily/key-signature-interface.cc1
-rw-r--r--lily/ledger-line-spanner.cc2
-rw-r--r--lily/line-spanner.cc5
-rw-r--r--lily/lyric-engraver.cc2
-rw-r--r--lily/note-collision.cc6
-rw-r--r--lily/note-column.cc10
-rw-r--r--lily/note-spacing.cc2
-rw-r--r--lily/ottava-bracket.cc5
-rw-r--r--lily/page-layout-problem.cc2
-rw-r--r--lily/paper-column-engraver.cc6
-rw-r--r--lily/paper-column.cc4
-rw-r--r--lily/piano-pedal-bracket.cc1
-rw-r--r--lily/pure-from-neighbor-engraver.cc2
-rw-r--r--lily/rest-collision-engraver.cc4
-rw-r--r--lily/rest-collision.cc4
-rw-r--r--lily/script-column.cc4
-rw-r--r--lily/script-interface.cc1
-rw-r--r--lily/script-row-engraver.cc2
-rw-r--r--lily/self-alignment-interface.cc4
-rw-r--r--lily/semi-tie.cc2
-rw-r--r--lily/separating-line-group-engraver.cc2
-rw-r--r--lily/separation-item.cc6
-rw-r--r--lily/side-position-interface.cc8
-rw-r--r--lily/slur-configuration.cc2
-rw-r--r--lily/slur-scoring.cc12
-rw-r--r--lily/slur.cc6
-rw-r--r--lily/spacing-determine-loose-columns.cc6
-rw-r--r--lily/spacing-interface.cc6
-rw-r--r--lily/spacing-loose-columns.cc2
-rw-r--r--lily/spacing-spanner.cc4
-rw-r--r--lily/staff-spacing.cc2
-rw-r--r--lily/staff-symbol-referencer.cc2
-rw-r--r--lily/stem-tremolo.cc2
-rw-r--r--lily/stem.cc4
-rw-r--r--lily/system.cc12
-rw-r--r--lily/tie-column.cc2
-rw-r--r--lily/tie-formatting-problem.cc2
-rw-r--r--lily/tie.cc10
-rw-r--r--lily/tuplet-bracket.cc2
-rw-r--r--lily/tuplet-number.cc2
-rw-r--r--lily/vertical-align-engraver.cc2
132 files changed, 117 insertions, 211 deletions
diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc
index 32eb54fac7..f8a0967954 100644
--- a/lily/accidental-placement.cc
+++ b/lily/accidental-placement.cc
@@ -313,7 +313,7 @@ extract_heads_and_stems (vector<Accidental_placement_entry *> const &apes)
Grob *head = acc->get_parent (Y_AXIS);
Grob *col = head->get_parent (X_AXIS);
- if (Note_column::has_interface (col))
+ if (has_interface<Note_column> (col))
note_cols.push_back (col);
else
ret.push_back (head);
@@ -327,7 +327,7 @@ extract_heads_and_stems (vector<Accidental_placement_entry *> const &apes)
for (vsize i = note_cols.size (); i--;)
{
Grob *c = note_cols[i]->get_parent (X_AXIS);
- if (Note_collision_interface::has_interface (c))
+ if (has_interface<Note_collision_interface> (c))
{
extract_grob_set (c, "elements", columns);
concat (note_cols, columns);
diff --git a/lily/align-interface.cc b/lily/align-interface.cc
index 0c140235dc..80a9dd3c08 100644
--- a/lily/align-interface.cc
+++ b/lily/align-interface.cc
@@ -106,7 +106,7 @@ get_skylines (Grob *g,
// of the system. This way, the tall treble clefs are only compared with the treble
// clefs of the other staff and they will be ignored if the staff above is, for example,
// lyrics.
- if (Axis_group_interface::has_interface (g))
+ if (has_interface<Axis_group_interface> (g))
{
extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc
index 09f6ab471b..c9c56858a1 100644
--- a/lily/axis-group-interface.cc
+++ b/lily/axis-group-interface.cc
@@ -101,7 +101,7 @@ Axis_group_interface::relative_maybe_bound_group_extent (vector<Grob *> const &e
Grob *se = elts[i];
if (!to_boolean (se->get_property ("cross-staff")))
{
- Interval dims = (bound && Axis_group_interface::has_interface (se)
+ Interval dims = (bound && has_interface<Axis_group_interface> (se)
? generic_bound_extent (se, common, a)
: se->extent (common, a));
if (!dims.is_empty ())
@@ -330,7 +330,7 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
reasonably safe to assume that if our parent is a VerticalAlignment,
we can assume additivity and cache things nicely. */
Grob *p = me->get_parent (Y_AXIS);
- if (p && Align_interface::has_interface (p))
+ if (has_interface<Align_interface> (p))
return Axis_group_interface::sum_partial_pure_heights (me, start, end);
Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
@@ -344,7 +344,7 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start
&& g->pure_is_visible (start, end)
&& !(to_boolean (g->get_property ("cross-staff"))
- && Stem::has_interface (g)))
+ && has_interface<Stem> (g)))
{
Interval dims = g->pure_y_extent (common, start, end);
if (!dims.is_empty ())
@@ -443,7 +443,7 @@ Axis_group_interface::generic_group_extent (Grob *me, Axis a)
/* trigger the callback to do skyline-spacing on the children */
if (a == Y_AXIS)
for (vsize i = 0; i < elts.size (); i++)
- if (!(Stem::has_interface (elts[i])
+ if (!(has_interface<Stem> (elts[i])
&& to_boolean (elts[i]->get_property ("cross-staff"))))
(void) elts[i]->get_property ("vertical-skylines");
@@ -535,7 +535,7 @@ Axis_group_interface::calc_pure_y_common (SCM smob)
extract_grob_set (me, "pure-relevant-grobs", elts);
Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
- if (common != me && Align_interface::has_interface (common))
+ if (common != me && has_interface<Align_interface> (common))
{
me->programming_error("My pure_y_common is a VerticalAlignment,"
" which might contain several staves.");
@@ -599,7 +599,7 @@ Axis_group_interface::get_children (Grob *me, vector<Grob *> *found)
{
found->push_back (me);
- if (!Axis_group_interface::has_interface (me))
+ if (!has_interface<Axis_group_interface> (me))
return;
extract_grob_set (me, "elements", elements);
diff --git a/lily/balloon.cc b/lily/balloon.cc
index 7e8067a577..d8519f6e39 100644
--- a/lily/balloon.cc
+++ b/lily/balloon.cc
@@ -33,7 +33,6 @@ class Balloon_interface
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (print_spanner, (SCM));
- DECLARE_GROB_INTERFACE ();
static SCM internal_balloon_print (Grob *me, Grob *p, Offset off);
};
diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc
index bb8e42e1cf..151ffacf16 100644
--- a/lily/beam-collision-engraver.cc
+++ b/lily/beam-collision-engraver.cc
@@ -115,12 +115,12 @@ Beam_collision_engraver::finalize ()
if ((covered_grob_spanned_rank[RIGHT] >= beam_spanned_rank_[LEFT])
&& !(to_boolean (beam_grob->get_property ("collision-voice-only"))
&& (covered_grob_context != beam_context))
- && !(Beam::has_interface (covered_grob)
+ && !(has_interface<Beam> (covered_grob)
&& (covered_grob_spanned_rank[LEFT] <= beam_spanned_rank_[LEFT]))
&& covered_grob_has_interface (covered_grob, beam_grob))
{
// Do not consider note heads attached to the beam.
- if (Stem::has_interface (covered_grob))
+ if (has_interface<Stem> (covered_grob))
if (unsmob<Grob> (covered_grob->get_object ("beam")))
continue;
diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc
index 856d8be0b6..f3505772f1 100644
--- a/lily/beam-quanting.cc
+++ b/lily/beam-quanting.cc
@@ -305,7 +305,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array<Real> y
edge_dirs_ = Drul_array<Direction> (stem_infos_[0].dir_,
stem_infos_.back ().dir_);
- is_xstaff_ = Align_interface::has_interface (common[Y_AXIS]);
+ is_xstaff_ = has_interface<Align_interface> (common[Y_AXIS]);
is_knee_ |= dirs_found[DOWN] && dirs_found[UP];
staff_radius_ = Staff_symbol_referencer::staff_radius (beams[i]);
@@ -343,7 +343,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array<Real> y
if (!collisions[j]->is_live ())
continue;
- if (Beam::has_interface (collisions[j]) && Beam::is_cross_staff (collisions[j]))
+ if (has_interface<Beam> (collisions[j]) && Beam::is_cross_staff (collisions[j]))
continue;
Box b;
@@ -364,7 +364,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array<Real> y
add_collision (b[X_AXIS][d], b[Y_AXIS], width_factor);
Grob *stem = unsmob<Grob> (collisions[j]->get_object ("stem"));
- if (stem && Stem::has_interface (stem) && Stem::is_normal_stem (stem))
+ if (has_interface<Stem> (stem) && Stem::is_normal_stem (stem))
{
colliding_stems.insert (stem);
}
diff --git a/lily/beam.cc b/lily/beam.cc
index c18c3d8430..206f6e9f4d 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -1232,7 +1232,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
return scm_from_double (0.0);
Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
if (!beam
- || !Beam::has_interface (beam)
+ || !has_interface<Beam> (beam)
|| !Beam::normal_stem_count (beam))
return scm_from_double (0.0);
diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc
index 58cb488d6b..e2a546f6a6 100644
--- a/lily/break-alignment-interface.cc
+++ b/lily/break-alignment-interface.cc
@@ -263,7 +263,7 @@ Break_alignable_interface::self_align_callback (SCM grob)
{
Grob *me = unsmob<Grob> (grob);
Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
- if (!Break_alignment_interface::has_interface (alignment))
+ if (!has_interface<Break_alignment_interface> (alignment))
return scm_from_int (0);
SCM symbol_list = me->get_property ("break-align-symbols");
diff --git a/lily/clef-modifier.cc b/lily/clef-modifier.cc
index 4c24dd356e..c6ce950fc0 100644
--- a/lily/clef-modifier.cc
+++ b/lily/clef-modifier.cc
@@ -22,7 +22,6 @@
struct Clef_modifier
{
DECLARE_SCHEME_CALLBACK (calc_parent_alignment, (SCM));
- DECLARE_GROB_INTERFACE ();
};
MAKE_SCHEME_CALLBACK (Clef_modifier, calc_parent_alignment, 1)
diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc
index 8af3137f90..bb5ed0dc54 100644
--- a/lily/cluster-engraver.cc
+++ b/lily/cluster-engraver.cc
@@ -135,7 +135,7 @@ Cluster_spanner_engraver::stop_translation_timestep ()
void
Cluster_spanner_engraver::acknowledge_note_column (Grob_info info)
{
- if (!beacon_ && Note_column::has_interface (info.grob ()))
+ if (!beacon_ && has_interface<Note_column> (info.grob ()))
{
finished_spanner_ = spanner_;
spanner_ = 0;
diff --git a/lily/cluster.cc b/lily/cluster.cc
index 694da482a5..9c160fd8cc 100644
--- a/lily/cluster.cc
+++ b/lily/cluster.cc
@@ -228,7 +228,6 @@ struct Cluster_beacon
{
public:
DECLARE_SCHEME_CALLBACK (height, (SCM));
- DECLARE_GROB_INTERFACE ();
};
MAKE_SCHEME_CALLBACK (Cluster_beacon, height, 1);
diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc
index d2cf95e1e8..35f8015a68 100644
--- a/lily/collision-engraver.cc
+++ b/lily/collision-engraver.cc
@@ -51,7 +51,7 @@ Collision_engraver::process_acknowledged ()
void
Collision_engraver::acknowledge_note_column (Grob_info i)
{
- if (Note_column::has_interface (i.grob ()))
+ if (has_interface<Note_column> (i.grob ()))
{
/*should check Y axis? */
if (Note_column::has_rests (i.grob ()) || i.grob ()->get_parent (X_AXIS))
diff --git a/lily/dot-column.cc b/lily/dot-column.cc
index b8f1663b10..7ac3140141 100644
--- a/lily/dot-column.cc
+++ b/lily/dot-column.cc
@@ -95,12 +95,12 @@ Dot_column::calc_positioning_done (SCM smob)
Rest collisions should wait after line breaking.
*/
Interval y;
- if (Rest::has_interface (s))
+ if (has_interface<Rest> (s))
{
base_x.unite (s->extent (commonx, X_AXIS));
continue;
}
- else if (Stem::has_interface (s))
+ else if (has_interface<Stem> (s))
{
Real y1 = Stem::head_positions (s)[-get_grob_direction (s)];
Real y2 = y1 + get_grob_direction (s) * 7;
@@ -110,7 +110,7 @@ Dot_column::calc_positioning_done (SCM smob)
stems.insert (s);
}
- else if (Note_head::has_interface (s))
+ else if (has_interface<Note_head> (s))
y = Interval (-1.1, 1.1);
else
{
@@ -200,7 +200,7 @@ Dot_column::calc_positioning_done (SCM smob)
Grob *note = dots[i]->get_parent (Y_AXIS);
if (note)
{
- if (Note_head::has_interface (note))
+ if (has_interface<Note_head> (note))
dp.dir_ = to_dir (dp.dot_->get_property ("direction"));
dp.x_extent_ = note->extent (commonx, X_AXIS);
@@ -252,7 +252,7 @@ Dot_column::add_head (Grob *me, Grob *head)
// correct X-offset of the dots for horizontal collision avoidance.
// The translation here is undone in calc_positioning_done, where we
// do the X-offset properly.
- if (Rest::has_interface (head))
+ if (has_interface<Rest> (head))
d->translate_axis (head->extent (head, X_AXIS).length (), X_AXIS);
else
d->set_property ("X-offset", Grob::x_parent_positioning_proc);
diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc
index 4a443dec5c..0abb39a7f2 100644
--- a/lily/dynamic-align-engraver.cc
+++ b/lily/dynamic-align-engraver.cc
@@ -80,7 +80,7 @@ Dynamic_align_engraver::create_line_spanner (Grob *cause)
void
Dynamic_align_engraver::acknowledge_end_dynamic (Grob_info info)
{
- if (Spanner::has_interface (info.grob ()))
+ if (has_interface<Spanner> (info.grob ()))
ended_.push_back (info.spanner ());
/* If the break flag is set, store the current spanner and let new dynamics
@@ -141,7 +141,7 @@ Dynamic_align_engraver::acknowledge_dynamic (Grob_info info)
}
create_line_spanner (info.grob ());
- if (Spanner::has_interface (info.grob ()))
+ if (has_interface<Spanner> (info.grob ()))
{
started_.push_back (info.spanner ());
current_dynamic_spanner_ = info.spanner ();
diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc
index 4b51d90414..edfd35fcb5 100644
--- a/lily/dynamic-engraver.cc
+++ b/lily/dynamic-engraver.cc
@@ -179,11 +179,11 @@ Dynamic_engraver::process_music ()
}
if (finished_spanner_)
{
- if (Hairpin::has_interface (finished_spanner_))
+ if (has_interface<Hairpin> (finished_spanner_))
Pointer_group_interface::add_grob (finished_spanner_,
ly_symbol2scm ("adjacent-spanners"),
current_spanner_);
- if (Hairpin::has_interface (current_spanner_))
+ if (has_interface<Hairpin> (current_spanner_))
Pointer_group_interface::add_grob (current_spanner_,
ly_symbol2scm ("adjacent-spanners"),
finished_spanner_);
diff --git a/lily/enclosing-bracket.cc b/lily/enclosing-bracket.cc
index 57593649d3..dd551e3841 100644
--- a/lily/enclosing-bracket.cc
+++ b/lily/enclosing-bracket.cc
@@ -26,7 +26,6 @@
struct Enclosing_bracket
{
- DECLARE_GROB_INTERFACE ();
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
diff --git a/lily/figured-bass-continuation.cc b/lily/figured-bass-continuation.cc
index 371c4d24ba..bb84bb3c3e 100644
--- a/lily/figured-bass-continuation.cc
+++ b/lily/figured-bass-continuation.cc
@@ -30,7 +30,6 @@
struct Figured_bass_continuation
{
- DECLARE_GROB_INTERFACE ();
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
diff --git a/lily/flag.cc b/lily/flag.cc
index 7333bf299f..4b90be8be0 100644
--- a/lily/flag.cc
+++ b/lily/flag.cc
@@ -38,7 +38,6 @@ public:
DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM));
- DECLARE_GROB_INTERFACE ();
static SCM internal_calc_y_offset (SCM smob, bool pure);
};
diff --git a/lily/grob.cc b/lily/grob.cc
index 83b78edac4..f7bf31f286 100644
--- a/lily/grob.cc
+++ b/lily/grob.cc
@@ -391,7 +391,7 @@ Grob::pure_relative_y_coordinate (Grob const *refp, int start, int end)
if (Grob *p = get_parent (Y_AXIS))
{
Real trans = 0;
- if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_)
+ if (has_interface<Align_interface> (p) && !dim_cache_[Y_AXIS].offset_)
trans = Align_interface::get_pure_child_y_translation (p, this, start, end);
return off + trans + p->pure_relative_y_coordinate (refp, start, end);
@@ -638,7 +638,7 @@ get_maybe_root_vertical_alignment (Grob *g, Grob *maybe)
{
if (!g)
return maybe;
- if (Align_interface::has_interface (g))
+ if (has_interface<Align_interface> (g))
return get_maybe_root_vertical_alignment (g->get_parent (Y_AXIS), g);
return get_maybe_root_vertical_alignment (g->get_parent (Y_AXIS), maybe);
@@ -657,8 +657,8 @@ Grob::get_vertical_axis_group (Grob *g)
return 0;
if (!g->get_parent (Y_AXIS))
return 0;
- if (Axis_group_interface::has_interface (g)
- && Align_interface::has_interface (g->get_parent (Y_AXIS)))
+ if (has_interface<Axis_group_interface> (g)
+ && has_interface<Align_interface> (g->get_parent (Y_AXIS)))
return g;
return get_vertical_axis_group (g->get_parent (Y_AXIS));
@@ -965,11 +965,11 @@ robust_relative_extent (Grob *me, Grob *refpoint, Axis a)
bool
Grob::check_cross_staff (Grob *commony)
{
- if (Align_interface::has_interface (commony))
+ if (has_interface<Align_interface> (commony))
return true;
for (Grob *g = this; g && g != commony; g = g->get_parent (Y_AXIS))
- if (Align_interface::has_interface (g))
+ if (has_interface<Align_interface> (g))
return true;
return false;
diff --git a/lily/hairpin.cc b/lily/hairpin.cc
index a083062e39..01d8fd93de 100644
--- a/lily/hairpin.cc
+++ b/lily/hairpin.cc
@@ -185,7 +185,7 @@ Hairpin::print (SCM smob)
}
else
{
- if (Text_interface::has_interface (b))
+ if (has_interface<Text_interface> (b))
{
if (!e.is_empty ())
x_points[d] = e[-d] - d * padding;
@@ -214,7 +214,7 @@ Hairpin::print (SCM smob)
if (neighbor_found)
{
- if (Hairpin::has_interface (adjacent))
+ if (has_interface<Hairpin> (adjacent))
{
/*
Handle back-to-back hairpins with a circle in the middle
@@ -237,7 +237,7 @@ Hairpin::print (SCM smob)
else
{
if (d == RIGHT // end at the left edge of a rest
- && Note_column::has_interface (b)
+ && has_interface<Note_column> (b)
&& Note_column::has_rests (b))
x_points[d] = e[-d];
else
diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh
index f5c36c5583..ef5e07ea66 100644
--- a/lily/include/accidental-interface.hh
+++ b/lily/include/accidental-interface.hh
@@ -34,7 +34,6 @@ public:
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (remove_tied, (SCM));
- DECLARE_GROB_INTERFACE ();
static SCM get_stencil (Grob *me);
};
diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh
index bb47efdb0a..4c362cbd93 100644
--- a/lily/include/accidental-placement.hh
+++ b/lily/include/accidental-placement.hh
@@ -35,7 +35,6 @@ public:
vector<Grob *> *real_acc);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* ACCIDENTAL_PLACEMENT_HH */
diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh
index 66548410f4..612c31c0d5 100644
--- a/lily/include/align-interface.hh
+++ b/lily/include/align-interface.hh
@@ -40,7 +40,6 @@ public:
static void add_element (Grob *, Grob *);
static int get_count (Grob *, Grob *);
- DECLARE_GROB_INTERFACE ();
static Real get_pure_child_y_translation (Grob *, Grob *child, int start, int end);
diff --git a/lily/include/arpeggio.hh b/lily/include/arpeggio.hh
index 6a59b56000..4624529098 100644
--- a/lily/include/arpeggio.hh
+++ b/lily/include/arpeggio.hh
@@ -34,7 +34,6 @@ public:
DECLARE_SCHEME_CALLBACK (brew_chord_slur, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* ARPEGGIO_HH */
diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh
index 1987d9289b..5e5152d237 100644
--- a/lily/include/axis-group-interface.hh
+++ b/lily/include/axis-group-interface.hh
@@ -69,7 +69,6 @@ class Axis_group_interface
static SCM calc_common (Grob *, Axis);
static Real minimum_distance (Grob *, Grob *, Axis);
static SCM calc_maybe_pure_staff_staff_spacing (Grob *, bool, int, int);
- DECLARE_GROB_INTERFACE ();
};
#endif /* AXIS_GROUP_INTERFACE_HH */
diff --git a/lily/include/bar-line.hh b/lily/include/bar-line.hh
index 1a157f3c44..ef3739faf0 100644
--- a/lily/include/bar-line.hh
+++ b/lily/include/bar-line.hh
@@ -26,7 +26,6 @@
class Bar_line
{
public:
- DECLARE_GROB_INTERFACE ();
static bool non_empty_barline (Grob *me);
};
diff --git a/lily/include/beam.hh b/lily/include/beam.hh
index afa3a805ab..6dbdf4b23f 100644
--- a/lily/include/beam.hh
+++ b/lily/include/beam.hh
@@ -57,7 +57,6 @@ public:
static int normal_stem_count (Grob *);
static Grob *first_normal_stem (Grob *);
static Grob *last_normal_stem (Grob *);
- DECLARE_GROB_INTERFACE ();
static void add_stem (Grob *, Grob *);
static bool is_cross_staff (Grob *);
static bool is_knee (Grob *);
diff --git a/lily/include/break-align-interface.hh b/lily/include/break-align-interface.hh
index 5eba16efee..cbb7f00c74 100644
--- a/lily/include/break-align-interface.hh
+++ b/lily/include/break-align-interface.hh
@@ -27,7 +27,6 @@ class Break_alignment_interface
{
public:
static vector<Grob *> ordered_elements (Grob *me);
- DECLARE_GROB_INTERFACE ();
static void add_element (Grob *me, Grob *add);
static SCM break_align_order (Item *me);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element));
@@ -38,13 +37,11 @@ struct Break_aligned_interface
DECLARE_SCHEME_CALLBACK (calc_average_anchor, (SCM));
DECLARE_SCHEME_CALLBACK (calc_extent_aligned_anchor, (SCM));
DECLARE_SCHEME_CALLBACK (calc_break_visibility, (SCM));
- DECLARE_GROB_INTERFACE ();
};
struct Break_alignable_interface
{
DECLARE_SCHEME_CALLBACK (self_align_callback, (SCM element));
- DECLARE_GROB_INTERFACE ();
};
#endif // BREAK_ALIGN_INTERFACE_HH
diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh
index 5718bf2473..84b33cd1b3 100644
--- a/lily/include/breathing-sign.hh
+++ b/lily/include/breathing-sign.hh
@@ -27,7 +27,6 @@ public:
DECLARE_SCHEME_CALLBACK (finalis, (SCM));
DECLARE_SCHEME_CALLBACK (offset_callback, (SCM element));
- DECLARE_GROB_INTERFACE ();
};
#endif // BREATHING_SIGN_HH
diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh
index 5a289e223f..0df71f2fb4 100644
--- a/lily/include/chord-name.hh
+++ b/lily/include/chord-name.hh
@@ -27,7 +27,6 @@ class Chord_name
{
public:
DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // CHORD_NAME_HH
diff --git a/lily/include/clef.hh b/lily/include/clef.hh
index 240086ce8b..8e3d10c0d3 100644
--- a/lily/include/clef.hh
+++ b/lily/include/clef.hh
@@ -27,7 +27,6 @@ struct Clef
{
DECLARE_SCHEME_CALLBACK (calc_glyph_name, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* CLEF_HH */
diff --git a/lily/include/cluster.hh b/lily/include/cluster.hh
index b9d6cf0e07..81aec746f9 100644
--- a/lily/include/cluster.hh
+++ b/lily/include/cluster.hh
@@ -28,7 +28,6 @@ class Cluster
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // CLUSTER_HH
diff --git a/lily/include/custos.hh b/lily/include/custos.hh
index fcb9e9e146..ddf38b0b8a 100644
--- a/lily/include/custos.hh
+++ b/lily/include/custos.hh
@@ -26,7 +26,6 @@
struct Custos
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
private:
static void add_streepjes (Grob *me, int pos, int interspaces, Stencil *custos_);
diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh
index a816f426ae..6c975b1c56 100644
--- a/lily/include/dot-column.hh
+++ b/lily/include/dot-column.hh
@@ -34,7 +34,6 @@ public:
static int compare (Grob *const &, Grob *const &);
static void add_head (Grob *dotcol, Grob *rh);
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (side_position, (SCM));
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
};
diff --git a/lily/include/dots.hh b/lily/include/dots.hh
index fdd0673af9..7e1a1f6b52 100644
--- a/lily/include/dots.hh
+++ b/lily/include/dots.hh
@@ -27,7 +27,6 @@ class Dots
{
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // DOTS_HH
diff --git a/lily/include/fingering-column.hh b/lily/include/fingering-column.hh
index e7d47c0b43..f422da99eb 100644
--- a/lily/include/fingering-column.hh
+++ b/lily/include/fingering-column.hh
@@ -28,7 +28,6 @@ struct Fingering_column
{
static void add_fingering (Grob *, Grob *);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
- DECLARE_GROB_INTERFACE ();
static void do_x_positioning (Grob *me);
static void do_y_positioning (Grob *me);
};
diff --git a/lily/include/font-interface.hh b/lily/include/font-interface.hh
index 96b6b0b8d9..43fd271dd6 100644
--- a/lily/include/font-interface.hh
+++ b/lily/include/font-interface.hh
@@ -28,7 +28,6 @@ struct Font_interface
static SCM text_font_alist_chain (Grob *);
static SCM music_font_alist_chain (Grob *);
static Font_metric *get_default_font (Grob *);
- DECLARE_GROB_INTERFACE ();
};
#endif /* FONT_INTERFACE_HH */
diff --git a/lily/include/gregorian-ligature.hh b/lily/include/gregorian-ligature.hh
index b0cfd7afda..0089434163 100644
--- a/lily/include/gregorian-ligature.hh
+++ b/lily/include/gregorian-ligature.hh
@@ -27,7 +27,6 @@ class Grob;
class Gregorian_ligature
{
public:
- DECLARE_GROB_INTERFACE ();
static string prefixes_to_str (Grob *);
};
diff --git a/lily/include/grid-line-interface.hh b/lily/include/grid-line-interface.hh
index 75ed7a7cdf..2a4760a717 100644
--- a/lily/include/grid-line-interface.hh
+++ b/lily/include/grid-line-interface.hh
@@ -29,13 +29,11 @@ public:
static void add_grid_point (Grob *me, Grob *b);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
- DECLARE_GROB_INTERFACE ();
};
class Grid_point_interface
{
public:
- DECLARE_GROB_INTERFACE ();
};
#endif /* GRID_LINE_INTERFACE_HH */
diff --git a/lily/include/grob-interface.hh b/lily/include/grob-interface.hh
index 8590373a0a..9c3eadb4b0 100644
--- a/lily/include/grob-interface.hh
+++ b/lily/include/grob-interface.hh
@@ -24,20 +24,11 @@
class Grob;
-// TODO: remove DECLARE_GROB_INTERFACE
-#define DECLARE_GROB_INTERFACE() \
- static bool has_interface (Grob *g)
-
-// TODO: remove cl::has_interface and use ::has_interface directly
#define ADD_INTERFACE(cl, b, c) \
Grob_interface<cl> cl ## _interface_initializer; \
template <> char const *Grob_interface<cl>::cxx_name_ (#cl); \
template <> char const *Grob_interface<cl>::description_ (b); \
- template <> char const *Grob_interface<cl>::variables_ (c); \
- bool cl::has_interface (Grob *me) \
- { \
- return ::has_interface<cl> (me); \
- }
+ template <> char const *Grob_interface<cl>::variables_ (c);
SCM add_interface (char const *cxx_name,
char const *descr,
diff --git a/lily/include/grob.hh b/lily/include/grob.hh
index 5ef3722766..db51e02e73 100644
--- a/lily/include/grob.hh
+++ b/lily/include/grob.hh
@@ -137,7 +137,6 @@ public:
/* interfaces */
bool internal_has_interface (SCM intf);
- DECLARE_GROB_INTERFACE ();
/* offsets */
void translate_axis (Real, Axis);
diff --git a/lily/include/hairpin.hh b/lily/include/hairpin.hh
index 8807bc8cc8..a2e2f8bf9e 100644
--- a/lily/include/hairpin.hh
+++ b/lily/include/hairpin.hh
@@ -30,7 +30,6 @@ public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (broken_bound_padding, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // HAIRPIN_HH
diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh
index b8ccba5bee..ad5c1d64a2 100644
--- a/lily/include/hara-kiri-group-spanner.hh
+++ b/lily/include/hara-kiri-group-spanner.hh
@@ -31,7 +31,6 @@ public:
DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM smob));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end));
DECLARE_SCHEME_CALLBACK (force_hara_kiri_in_y_parent_callback, (SCM));
- DECLARE_GROB_INTERFACE ();
static bool request_suicide (Grob *me, int start, int end);
static bool request_suicide_alone (Grob *me, int start, int end);
static void consider_suicide (Grob *me);
diff --git a/lily/include/horizontal-bracket.hh b/lily/include/horizontal-bracket.hh
index e2fbb22b09..3a1692fc11 100644
--- a/lily/include/horizontal-bracket.hh
+++ b/lily/include/horizontal-bracket.hh
@@ -31,7 +31,6 @@ struct Horizontal_bracket
static Stencil make_enclosing_bracket (Grob *me, Grob *refpoint,
vector<Grob *> grobs,
Axis a, Direction dir);
- DECLARE_GROB_INTERFACE ();
};
#endif /* HORIZONTAL_BRACKET_HH */
diff --git a/lily/include/item.hh b/lily/include/item.hh
index e987d89bca..07f1261a52 100644
--- a/lily/include/item.hh
+++ b/lily/include/item.hh
@@ -54,7 +54,6 @@ public:
virtual Interval_t<int> spanned_rank_interval () const;
virtual Interval pure_y_extent (Grob *ref, int start, int end);
virtual void cache_pure_height (Interval height);
- DECLARE_GROB_INTERFACE ();
protected:
virtual void discretionary_processing ();
void copy_breakable_items ();
diff --git a/lily/include/kievan-ligature.hh b/lily/include/kievan-ligature.hh
index a74387a89b..d3d425a515 100644
--- a/lily/include/kievan-ligature.hh
+++ b/lily/include/kievan-ligature.hh
@@ -26,7 +26,6 @@
struct Kievan_ligature
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* KIEVAN_LIGATURE_HH */
diff --git a/lily/include/line-interface.hh b/lily/include/line-interface.hh
index f45aca5b22..b805f7262a 100644
--- a/lily/include/line-interface.hh
+++ b/lily/include/line-interface.hh
@@ -26,7 +26,6 @@
struct Line_interface
{
static Stencil line (Grob *me, Offset from, Offset to);
- DECLARE_GROB_INTERFACE ();
static Stencil make_zigzag_line (Grob *me,
Offset from,
Offset to);
diff --git a/lily/include/lyric-extender.hh b/lily/include/lyric-extender.hh
index 88135421e4..8ae8c97553 100644
--- a/lily/include/lyric-extender.hh
+++ b/lily/include/lyric-extender.hh
@@ -27,7 +27,6 @@
class Lyric_extender
{
public:
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
};
diff --git a/lily/include/lyric-hyphen.hh b/lily/include/lyric-hyphen.hh
index 95418bc36a..fb03c6df51 100644
--- a/lily/include/lyric-hyphen.hh
+++ b/lily/include/lyric-hyphen.hh
@@ -27,7 +27,6 @@ struct Lyric_hyphen
{
public:
DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
};
diff --git a/lily/include/measure-grouping-spanner.hh b/lily/include/measure-grouping-spanner.hh
index 44eb334b17..0e67f22822 100644
--- a/lily/include/measure-grouping-spanner.hh
+++ b/lily/include/measure-grouping-spanner.hh
@@ -28,7 +28,6 @@ class Measure_grouping
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* MEASURE_GROUPING_SPANNER_HH */
diff --git a/lily/include/melody-spanner.hh b/lily/include/melody-spanner.hh
index 4609a4c90d..6ce6a2733b 100644
--- a/lily/include/melody-spanner.hh
+++ b/lily/include/melody-spanner.hh
@@ -26,7 +26,6 @@
class Melody_spanner
{
public:
- DECLARE_GROB_INTERFACE ();
static void add_stem (Grob *, Grob *);
DECLARE_SCHEME_CALLBACK (calc_neutral_stem_direction, (SCM));
};
diff --git a/lily/include/mensural-ligature.hh b/lily/include/mensural-ligature.hh
index 97b8e2e216..3e4e46a641 100644
--- a/lily/include/mensural-ligature.hh
+++ b/lily/include/mensural-ligature.hh
@@ -45,7 +45,6 @@ struct Mensural_ligature
{
DECLARE_SCHEME_CALLBACK (brew_ligature_primitive, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* MENSURAL_LIGATURE_HH */
diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh
index bf3c7083a7..f4d379ade4 100644
--- a/lily/include/multi-measure-rest.hh
+++ b/lily/include/multi-measure-rest.hh
@@ -26,7 +26,6 @@
class Multi_measure_rest
{
public:
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (percent, (SCM));
diff --git a/lily/include/note-collision.hh b/lily/include/note-collision.hh
index fcdece0a59..ad2ed5345d 100644
--- a/lily/include/note-collision.hh
+++ b/lily/include/note-collision.hh
@@ -44,6 +44,5 @@ public:
static Drul_array<vector<Grob *> > get_clash_groups (Grob *me);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM smob));
static void add_column (Grob *me, Grob *ncol);
- DECLARE_GROB_INTERFACE ();
};
#endif // COLLISION_HH
diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh
index cd09b076af..1cf08545bf 100644
--- a/lily/include/note-column.hh
+++ b/lily/include/note-column.hh
@@ -43,7 +43,6 @@ public:
static bool has_rests (Grob *me);
static Grob *dot_column (Grob *me);
static Interval cross_staff_extent (Grob *me, Grob *refp);
- DECLARE_GROB_INTERFACE ();
static Item *get_stem (Grob *);
static Item *get_flag (Grob *);
diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh
index d14fbcfe77..1e167d58b2 100644
--- a/lily/include/note-head.hh
+++ b/lily/include/note-head.hh
@@ -30,7 +30,6 @@ public:
DECLARE_SCHEME_CALLBACK (stem_x_shift, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_attachment, (SCM));
DECLARE_SCHEME_CALLBACK (include_ledger_line_height, (SCM));
- DECLARE_GROB_INTERFACE ();
static Real stem_attachment_coordinate (Grob *, Axis a);
static int get_balltype (Grob *);
diff --git a/lily/include/note-spacing.hh b/lily/include/note-spacing.hh
index 7fde934f51..df063b382e 100644
--- a/lily/include/note-spacing.hh
+++ b/lily/include/note-spacing.hh
@@ -27,7 +27,6 @@
class Note_spacing
{
public:
- DECLARE_GROB_INTERFACE ();
static Spring get_spacing (Grob *me, Item *, Spring, Real);
static void stem_dir_correction (Grob *me, Item *next_col, Real incr,
diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh
index 03c503f9a8..f1cb01e740 100644
--- a/lily/include/paper-column.hh
+++ b/lily/include/paper-column.hh
@@ -50,7 +50,6 @@ public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM));
- DECLARE_GROB_INTERFACE ();
static int get_rank (Grob const *);
static bool is_musical (Grob *);
static Moment when_mom (Grob *);
diff --git a/lily/include/percent-repeat-item.hh b/lily/include/percent-repeat-item.hh
index 448b811034..85b1cdb446 100644
--- a/lily/include/percent-repeat-item.hh
+++ b/lily/include/percent-repeat-item.hh
@@ -26,7 +26,6 @@
class Percent_repeat_item_interface
{
public:
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (beat_slash, (SCM));
DECLARE_SCHEME_CALLBACK (double_percent, (SCM));
static Stencil x_percent (Grob *, int);
diff --git a/lily/include/pure-from-neighbor-interface.hh b/lily/include/pure-from-neighbor-interface.hh
index ec53a97f47..f125d217e4 100644
--- a/lily/include/pure-from-neighbor-interface.hh
+++ b/lily/include/pure-from-neighbor-interface.hh
@@ -27,7 +27,6 @@ class Pure_from_neighbor_interface
{
public:
DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM));
- DECLARE_GROB_INTERFACE ();
};
diff --git a/lily/include/rest-collision.hh b/lily/include/rest-collision.hh
index b9cfc17b8e..3946f9b933 100644
--- a/lily/include/rest-collision.hh
+++ b/lily/include/rest-collision.hh
@@ -28,7 +28,6 @@ class Rest_collision
public:
static void add_column (Grob *me, Grob *);
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element));
DECLARE_SCHEME_CALLBACK (force_shift_callback_rest, (SCM element, SCM off));
static SCM do_shift (Grob *);
diff --git a/lily/include/rest.hh b/lily/include/rest.hh
index 548e031e55..644aa1450c 100644
--- a/lily/include/rest.hh
+++ b/lily/include/rest.hh
@@ -29,7 +29,6 @@ class Rest
public:
DECLARE_SCHEME_CALLBACK (y_offset_callback, (SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
static string glyph_name (Grob *, int durlog, const string &style, bool, Real);
static Real staff_position_internal (Grob *, int /* duration_log */,
int /* dir */);
diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh
index e7cb7cfc4a..17eecd4f22 100644
--- a/lily/include/rhythmic-head.hh
+++ b/lily/include/rhythmic-head.hh
@@ -32,7 +32,6 @@ public:
static Item *get_dots (Grob *);
static int dot_count (Grob *);
DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // RHYTHMIC_HEAD_HH
diff --git a/lily/include/script-column.hh b/lily/include/script-column.hh
index 51f2eb9206..fe4816eae1 100644
--- a/lily/include/script-column.hh
+++ b/lily/include/script-column.hh
@@ -30,7 +30,6 @@ public:
static void add_side_positioned (Grob *, Grob *);
DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM));
DECLARE_SCHEME_CALLBACK (row_before_line_breaking, (SCM));
- DECLARE_GROB_INTERFACE ();
static void order_grobs (vector<Grob *> grobs);
};
diff --git a/lily/include/script-interface.hh b/lily/include/script-interface.hh
index 2839010b0d..9154aea6cc 100644
--- a/lily/include/script-interface.hh
+++ b/lily/include/script-interface.hh
@@ -34,7 +34,6 @@ public:
static Stencil get_stencil (Grob *, Direction d);
static Direction get_direction (Grob *);
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
diff --git a/lily/include/self-alignment-interface.hh b/lily/include/self-alignment-interface.hh
index ffdfb82501..4cf683fd36 100644
--- a/lily/include/self-alignment-interface.hh
+++ b/lily/include/self-alignment-interface.hh
@@ -25,7 +25,6 @@
struct Self_alignment_interface
{
- DECLARE_GROB_INTERFACE ();
static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end);
static SCM centered_on_object (Grob *me, Axis a);
diff --git a/lily/include/semi-tie-column.hh b/lily/include/semi-tie-column.hh
index 7ad63e80d1..e02b57a11e 100644
--- a/lily/include/semi-tie-column.hh
+++ b/lily/include/semi-tie-column.hh
@@ -26,7 +26,6 @@
struct Semi_tie_column
{
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
DECLARE_SCHEME_CALLBACK (calc_head_direction, (SCM));
diff --git a/lily/include/semi-tie.hh b/lily/include/semi-tie.hh
index 97a3dcbe04..1e8db8bdb8 100644
--- a/lily/include/semi-tie.hh
+++ b/lily/include/semi-tie.hh
@@ -25,7 +25,6 @@
struct Semi_tie
{
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
static bool less (Grob *s1, Grob *s2);
diff --git a/lily/include/separation-item.hh b/lily/include/separation-item.hh
index f78fd0d6a9..81ea523fe2 100644
--- a/lily/include/separation-item.hh
+++ b/lily/include/separation-item.hh
@@ -27,7 +27,6 @@
struct Separation_item
{
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh
index c98189f087..c0330e795d 100644
--- a/lily/include/side-position-interface.hh
+++ b/lily/include/side-position-interface.hh
@@ -42,7 +42,6 @@ public:
static Axis get_axis (Grob *);
static void set_axis (Grob *, Axis);
- DECLARE_GROB_INTERFACE ();
static void add_support (Grob *, Grob *);
static void recursive_add_support (Grob *, Grob *);
static void add_staff_support (Grob *);
diff --git a/lily/include/slur.hh b/lily/include/slur.hh
index 000c07dce8..ae85ac24d3 100644
--- a/lily/include/slur.hh
+++ b/lily/include/slur.hh
@@ -41,7 +41,6 @@ public:
DECLARE_SCHEME_CALLBACK (pure_outside_slur_callback, (SCM, SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (outside_slur_cross_staff, (SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
static Bezier get_curve (Grob *me);
};
diff --git a/lily/include/spaceable-grob.hh b/lily/include/spaceable-grob.hh
index ba219c28a9..5c6427e658 100644
--- a/lily/include/spaceable-grob.hh
+++ b/lily/include/spaceable-grob.hh
@@ -31,7 +31,6 @@ struct Spaceable_grob
static void add_spring (Grob *me, Grob *to, Spring sp);
static Spring get_spring (Grob *me, Grob *other);
- DECLARE_GROB_INTERFACE ();
static SCM get_minimum_distances (Grob *);
static SCM get_ideal_distances (Grob *);
};
diff --git a/lily/include/spacing-interface.hh b/lily/include/spacing-interface.hh
index 2ade005a22..ddfe2efb1c 100644
--- a/lily/include/spacing-interface.hh
+++ b/lily/include/spacing-interface.hh
@@ -32,7 +32,6 @@ struct Spacing_interface
static Drul_array<Skyline> skylines (Grob *me, Grob *right_col);
static Grob *extremal_break_aligned_grob (Grob *me, Direction, Direction, Interval *);
- DECLARE_GROB_INTERFACE ();
};
#endif /* SPACING_INTERFACE_HH */
diff --git a/lily/include/spacing-spanner.hh b/lily/include/spacing-spanner.hh
index 61ed8dc4ac..fcfba90417 100644
--- a/lily/include/spacing-spanner.hh
+++ b/lily/include/spacing-spanner.hh
@@ -50,7 +50,6 @@ public:
DECLARE_SCHEME_CALLBACK (set_springs, (SCM));
DECLARE_SCHEME_CALLBACK (calc_common_shortest_duration, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif /* SPACING_SPANNER_HH */
diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh
index 7ee27abcb1..79032dfb30 100644
--- a/lily/include/spanner.hh
+++ b/lily/include/spanner.hh
@@ -76,7 +76,6 @@ public:
static bool less (Spanner *const &, Spanner *const &);
virtual Grob *find_broken_piece (System *) const;
virtual void derived_mark () const;
- DECLARE_GROB_INTERFACE ();
virtual System *get_system () const;
SCM get_cached_pure_property (SCM sym, int start, int end);
diff --git a/lily/include/staff-grouper-interface.hh b/lily/include/staff-grouper-interface.hh
index 3ad0ccf568..0e00d4280f 100644
--- a/lily/include/staff-grouper-interface.hh
+++ b/lily/include/staff-grouper-interface.hh
@@ -25,7 +25,6 @@
class Staff_grouper_interface
{
public:
- DECLARE_GROB_INTERFACE ();
static bool maybe_pure_within_group (Grob *, Grob *child, bool, int, int);
};
diff --git a/lily/include/staff-spacing.hh b/lily/include/staff-spacing.hh
index 521be99d19..11a81a998e 100644
--- a/lily/include/staff-spacing.hh
+++ b/lily/include/staff-spacing.hh
@@ -30,7 +30,6 @@ class Staff_spacing
static Real next_notes_correction (Grob *, Grob *);
public:
- DECLARE_GROB_INTERFACE ();
static Spring get_spacing (Grob *, Grob *, Real);
static Interval bar_y_positions (Grob *);
};
diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh
index 3c5f55b836..64d41014d7 100644
--- a/lily/include/staff-symbol-referencer.hh
+++ b/lily/include/staff-symbol-referencer.hh
@@ -30,7 +30,6 @@
class Staff_symbol_referencer
{
public:
- DECLARE_GROB_INTERFACE ();
static bool ugly_hack (Grob *);
static void set_position (Grob *, Real);
static void pure_set_position (Grob *, Real);
diff --git a/lily/include/staff-symbol.hh b/lily/include/staff-symbol.hh
index 19e826d3d0..9454ebe7f4 100644
--- a/lily/include/staff-symbol.hh
+++ b/lily/include/staff-symbol.hh
@@ -40,6 +40,5 @@ public:
static Interval line_span (Grob *);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
- DECLARE_GROB_INTERFACE ();
};
#endif // STAFF_SYMBOL_HH
diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh
index 2495bb695a..ead984dc38 100644
--- a/lily/include/stem-tremolo.hh
+++ b/lily/include/stem-tremolo.hh
@@ -27,7 +27,6 @@ class Stem_tremolo
{
public:
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_slope, (SCM));
DECLARE_SCHEME_CALLBACK (calc_width, (SCM));
DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
diff --git a/lily/include/stem.hh b/lily/include/stem.hh
index 0aeb83ee6a..7c4612552a 100644
--- a/lily/include/stem.hh
+++ b/lily/include/stem.hh
@@ -58,7 +58,6 @@ public:
static Real internal_calc_stem_end_position (Grob *, bool);
static Real internal_calc_stem_begin_position (Grob *, bool);
- DECLARE_GROB_INTERFACE ();
static void set_spacing_hints (Grob *);
static Grob *flag (Grob *);
diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh
index 3e1848c530..bf1fd0d28c 100644
--- a/lily/include/system-start-delimiter.hh
+++ b/lily/include/system-start-delimiter.hh
@@ -31,7 +31,6 @@ class System_start_delimiter
public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
static void try_collapse (Grob *);
static Stencil staff_bracket (Grob *, Real);
static Stencil old_staff_bracket (Grob *, Real);
diff --git a/lily/include/system.hh b/lily/include/system.hh
index 84b39bd02f..4e402ffeca 100644
--- a/lily/include/system.hh
+++ b/lily/include/system.hh
@@ -74,7 +74,6 @@ public:
int spanner_count () const;
void break_into_pieces (vector<Column_x_positions> const &);
- DECLARE_GROB_INTERFACE ();
vector<Item *> broken_col_range (Item const *, Item const *) const;
vector<Grob *> used_columns () const;
diff --git a/lily/include/text-interface.hh b/lily/include/text-interface.hh
index f8f86d6f33..c653495be8 100644
--- a/lily/include/text-interface.hh
+++ b/lily/include/text-interface.hh
@@ -30,7 +30,6 @@ public:
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (interpret_markup, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (interpret_string, (SCM, SCM, SCM));
- DECLARE_GROB_INTERFACE ();
static bool is_markup (SCM);
static bool is_markup_list (SCM);
};
diff --git a/lily/include/tie-column.hh b/lily/include/tie-column.hh
index 0485cd0bcf..025cf8433a 100644
--- a/lily/include/tie-column.hh
+++ b/lily/include/tie-column.hh
@@ -26,7 +26,6 @@
class Tie_column
{
public:
- DECLARE_GROB_INTERFACE ();
static void add_tie (Grob *me, Spanner *);
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM));
diff --git a/lily/include/tie.hh b/lily/include/tie.hh
index 186c0a4d38..e92ca61947 100644
--- a/lily/include/tie.hh
+++ b/lily/include/tie.hh
@@ -28,7 +28,6 @@ class Tie
{
public:
static void set_head (Spanner *, Direction, Grob *head);
- DECLARE_GROB_INTERFACE ();
static Item *head (Spanner *, Direction);
static int get_column_rank (Spanner *, Direction);
static int get_position (Spanner *);
diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh
index 72daae4da9..1e41154fbf 100644
--- a/lily/include/tuplet-bracket.hh
+++ b/lily/include/tuplet-bracket.hh
@@ -34,7 +34,6 @@ public:
DECLARE_SCHEME_CALLBACK (calc_connect_to_neighbors, (SCM smob));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
static Grob *get_common_x (Spanner *);
static void add_tuplet_bracket (Grob *me, Grob *smaller_bracket);
static void get_bounds (Grob *, Grob **, Grob **);
diff --git a/lily/include/tuplet-number.hh b/lily/include/tuplet-number.hh
index 9780beefb2..24ba77a377 100644
--- a/lily/include/tuplet-number.hh
+++ b/lily/include/tuplet-number.hh
@@ -30,7 +30,6 @@ struct Tuplet_number
DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM));
DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_GROB_INTERFACE ();
static Real calc_offset (Spanner *me, Axis a); // not used
diff --git a/lily/include/vaticana-ligature.hh b/lily/include/vaticana-ligature.hh
index 912b54dece..25e994753f 100644
--- a/lily/include/vaticana-ligature.hh
+++ b/lily/include/vaticana-ligature.hh
@@ -27,7 +27,6 @@ struct Vaticana_ligature
{
DECLARE_SCHEME_CALLBACK (brew_ligature_primitive, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
/*
diff --git a/lily/include/volta-bracket.hh b/lily/include/volta-bracket.hh
index 1a934d4a4a..ffde225d2f 100644
--- a/lily/include/volta-bracket.hh
+++ b/lily/include/volta-bracket.hh
@@ -26,7 +26,6 @@
class Volta_bracket_interface
{
public:
- DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (print, (SCM));
static void modify_edge_height (Spanner *);
static void add_bar (Grob *me, Item *bar);
diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc
index 8b1a4c3003..d339fbce61 100644
--- a/lily/instrument-name-engraver.cc
+++ b/lily/instrument-name-engraver.cc
@@ -133,7 +133,7 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info)
&& !info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface"))
&& !info.grob ()->internal_has_interface (ly_symbol2scm ("piano-pedal-interface"))
&& !info.grob ()->internal_has_interface (ly_symbol2scm ("volta-interface"))
- && (!Align_interface::has_interface (info.grob ())))
+ && (!has_interface<Align_interface> (info.grob ())))
{
if (Page_layout_problem::is_spaceable (info.grob ()))
axis_groups_.push_back (info.grob ());
diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc
index 56af49da39..3249a736c3 100644
--- a/lily/key-signature-interface.cc
+++ b/lily/key-signature-interface.cc
@@ -32,7 +32,6 @@
struct Key_signature_interface
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
/*
diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc
index 5cb5462351..b0e8fee3c2 100644
--- a/lily/ledger-line-spanner.cc
+++ b/lily/ledger-line-spanner.cc
@@ -32,7 +32,6 @@ struct Ledger_line_spanner
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
- DECLARE_GROB_INTERFACE ();
};
static void
@@ -339,7 +338,6 @@ ADD_INTERFACE (Ledger_line_spanner,
struct Ledgered_interface
{
- DECLARE_GROB_INTERFACE ();
};
ADD_INTERFACE (Ledgered_interface,
diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc
index be20f25d98..925e578e35 100644
--- a/lily/line-spanner.cc
+++ b/lily/line-spanner.cc
@@ -43,12 +43,11 @@ public:
DECLARE_SCHEME_CALLBACK (calc_left_bound_info_and_text, (SCM));
DECLARE_SCHEME_CALLBACK (calc_right_bound_info, (SCM));
DECLARE_SCHEME_CALLBACK (calc_bound_info, (SCM, Direction));
- DECLARE_GROB_INTERFACE ();
};
Spanner *parent_spanner (Grob *g)
{
- if (Spanner::has_interface (g))
+ if (has_interface<Spanner> (g))
return dynamic_cast<Spanner *> (g);
return parent_spanner (g->get_parent (Y_AXIS));
}
@@ -110,7 +109,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir)
? columns[0] : columns.back ();
}
- Real x_coord = (Paper_column::has_interface (bound_grob)
+ Real x_coord = (has_interface<Paper_column> (bound_grob)
? Axis_group_interface::generic_bound_extent (bound_grob, commonx, X_AXIS)
: robust_relative_extent (bound_grob, commonx, X_AXIS)).linear_combination (attach);
diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc
index bc576bf3cc..cdee61517e 100644
--- a/lily/lyric-engraver.cc
+++ b/lily/lyric-engraver.cc
@@ -158,7 +158,7 @@ get_current_note_head (Context *voice)
// here. Not with this mechanism.
if ((*end_mom == end_from_now)
&& dynamic_cast<Item *> (g)
- && Note_head::has_interface (g))
+ && has_interface<Note_head> (g))
{
return g;
}
diff --git a/lily/note-collision.cc b/lily/note-collision.cc
index 0ef6b7b4e0..f98cb5a3a0 100644
--- a/lily/note-collision.cc
+++ b/lily/note-collision.cc
@@ -309,14 +309,14 @@ check_meshing_chords (Grob *me,
{
Grob *d = unsmob<Grob> (head_up->get_object ("dot"));
Grob *parent = d->get_parent (X_AXIS);
- if (Dot_column::has_interface (parent))
+ if (has_interface<Dot_column> (parent))
Side_position_interface::add_support (parent, head_down);
}
else if (Rhythmic_head::dot_count (head_down))
{
Grob *d = unsmob<Grob> (head_down->get_object ("dot"));
Grob *parent = d->get_parent (X_AXIS);
- if (Dot_column::has_interface (parent))
+ if (has_interface<Dot_column> (parent))
{
Grob *stem = unsmob<Grob> (head_up->get_object ("stem"));
// Loop over all heads on an up-pointing-stem to see if dots
@@ -433,7 +433,7 @@ Note_collision_interface::get_clash_groups (Grob *me)
for (vsize i = 0; i < elements.size (); i++)
{
Grob *se = elements[i];
- if (Note_column::has_interface (se))
+ if (has_interface<Note_column> (se))
{
if (!Note_column::dir (se))
se->programming_error ("note-column has no direction");
diff --git a/lily/note-column.cc b/lily/note-column.cc
index a5da30a8c7..1d79fee652 100644
--- a/lily/note-column.cc
+++ b/lily/note-column.cc
@@ -98,7 +98,7 @@ Direction
Note_column::dir (Grob *me)
{
Grob *stem = unsmob<Grob> (me->get_object ("stem"));
- if (stem && Stem::has_interface (stem))
+ if (has_interface<Stem> (stem))
return get_grob_direction (stem);
else
{
@@ -107,7 +107,7 @@ Note_column::dir (Grob *me)
return (Direction)sign (head_positions_interval (me).center ());
}
- if (Note_column::has_interface (me))
+ if (has_interface<Note_column> (me))
programming_error ("Note_column without heads and stem");
else
programming_error ("dir() given grob without Note_column interface");
@@ -131,7 +131,7 @@ void
Note_column::add_head (Grob *me, Grob *h)
{
bool both = false;
- if (Rest::has_interface (h))
+ if (has_interface<Rest> (h))
{
extract_grob_set (me, "note-heads", heads);
if (heads.size ())
@@ -139,7 +139,7 @@ Note_column::add_head (Grob *me, Grob *h)
else
me->set_object ("rest", h->self_scm ());
}
- else if (Note_head::has_interface (h))
+ else if (has_interface<Note_head> (h))
{
if (unsmob<Grob> (me->get_object ("rest")))
both = true;
@@ -205,7 +205,7 @@ Note_column::accidentals (Grob *me)
if (!acc)
return 0;
- if (Accidental_placement::has_interface (acc->get_parent (X_AXIS)))
+ if (has_interface<Accidental_placement> (acc->get_parent (X_AXIS)))
return acc->get_parent (X_AXIS);
/* compatibility. */
diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc
index 91859fb6ec..a894be2539 100644
--- a/lily/note-spacing.cc
+++ b/lily/note-spacing.cc
@@ -228,7 +228,7 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
for (vsize i = 0; i < items.size (); i++)
{
Item *it = dynamic_cast<Item *> (items[i]);
- if (!Note_column::has_interface (it))
+ if (!has_interface<Note_column> (it))
continue;
if (d == RIGHT && it->get_column () != rcolumn)
continue;
diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc
index 5e962a6bb3..63a9d3ebca 100644
--- a/lily/ottava-bracket.cc
+++ b/lily/ottava-bracket.cc
@@ -35,7 +35,6 @@
struct Ottava_bracket
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
/*
@@ -61,7 +60,7 @@ Ottava_bracket::print (SCM smob)
Item *b = me->get_bound (d);
broken[d] = (b->break_status_dir () != CENTER);
- if (Note_column::has_interface (b))
+ if (has_interface<Note_column> (b))
{
extract_grob_set (b, "note-heads", heads);
common = common_refpoint_of_array (heads, common, X_AXIS);
@@ -94,7 +93,7 @@ Ottava_bracket::print (SCM smob)
Item *b = me->get_bound (d);
Interval ext;
- if (Note_column::has_interface (b))
+ if (has_interface<Note_column> (b))
{
extract_grob_set (b, "note-heads", heads);
for (vsize i = 0; i < heads.size (); i++)
diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc
index 3f4fca05f1..8f1951223c 100644
--- a/lily/page-layout-problem.cc
+++ b/lily/page-layout-problem.cc
@@ -1232,7 +1232,7 @@ Page_layout_problem::filter_dead_elements (vector<Grob *> const &input)
vector<Grob *> output;
for (vsize i = 0; i < input.size (); ++i)
{
- if (Hara_kiri_group_spanner::has_interface (input[i]))
+ if (has_interface<Hara_kiri_group_spanner> (input[i]))
Hara_kiri_group_spanner::consider_suicide (input[i]);
if (input[i]->is_live ())
diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc
index 334861844c..7c44f173d7 100644
--- a/lily/paper-column-engraver.cc
+++ b/lily/paper-column-engraver.cc
@@ -241,10 +241,10 @@ Paper_column_engraver::stop_translation_timestep ()
if (!unsmob<Grob> (elem->get_object ("axis-group-parent-X")))
elem->set_object ("axis-group-parent-X", col->self_scm ());
- if (Accidental_placement::has_interface (elem)
- || Arpeggio::has_interface (elem))
+ if (has_interface<Accidental_placement> (elem)
+ || has_interface<Arpeggio> (elem))
Separation_item::add_conditional_item (col, elem);
- else if (!Accidental_interface::has_interface (elem))
+ else if (!has_interface<Accidental_interface> (elem))
Separation_item::add_item (col, elem);
}
items_.clear ();
diff --git a/lily/paper-column.cc b/lily/paper-column.cc
index d907acdf24..3ea5a89f05 100644
--- a/lily/paper-column.cc
+++ b/lily/paper-column.cc
@@ -203,7 +203,7 @@ Paper_column::break_align_width (Grob *me, SCM align_syms)
(me, ly_symbol2scm ("elements"),
(scm_is_eq (align_sym, ly_symbol2scm ("staff-bar"))
? Bar_line::non_empty_barline
- : Break_alignment_interface::has_interface));
+ : has_interface<Break_alignment_interface>));
else
{
extract_grob_set (me, "elements", elts);
@@ -440,7 +440,7 @@ Paper_column::is_extraneous_column_from_ligature (Grob *me)
bool has_notehead = false;
for (vsize i = 0; i < elts.size (); i++)
{
- if (Rhythmic_head::has_interface (elts[i]))
+ if (has_interface<Rhythmic_head> (elts[i]))
{
has_notehead = true;
if (dynamic_cast<Item *> (elts[i])->get_column () == me)
diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc
index f58a130f75..b47e5e3b6d 100644
--- a/lily/piano-pedal-bracket.cc
+++ b/lily/piano-pedal-bracket.cc
@@ -26,7 +26,6 @@
struct Piano_pedal_bracket
{
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_GROB_INTERFACE ();
};
MAKE_SCHEME_CALLBACK (Piano_pedal_bracket, print, 1);
diff --git a/lily/pure-from-neighbor-engraver.cc b/lily/pure-from-neighbor-engraver.cc
index 7061a92684..e073785006 100644
--- a/lily/pure-from-neighbor-engraver.cc
+++ b/lily/pure-from-neighbor-engraver.cc
@@ -46,7 +46,7 @@ Pure_from_neighbor_engraver::Pure_from_neighbor_engraver ()
void
Pure_from_neighbor_engraver::acknowledge_item (Grob_info i)
{
- if (!Pure_from_neighbor_interface::has_interface (i.item ()))
+ if (!has_interface<Pure_from_neighbor_interface> (i.item ()))
pure_relevants_.push_back (i.item ());
}
diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc
index 20e7eb9fc7..e261502201 100644
--- a/lily/rest-collision-engraver.cc
+++ b/lily/rest-collision-engraver.cc
@@ -62,7 +62,7 @@ Rest_collision_engraver::process_acknowledged ()
if (!g || !m)
continue;
- if (Rhythmic_head::has_interface (g) && (*m) > now)
+ if (has_interface<Rhythmic_head> (g) && (*m) > now)
{
Grob *column = g->get_parent (X_AXIS);
if (!column)
@@ -70,7 +70,7 @@ Rest_collision_engraver::process_acknowledged ()
// Only include rests that start now. Include notes that started any time.
Paper_column *paper_column = dynamic_cast<Item *> (column)->get_column ();
- if (!Rest::has_interface (g) || !paper_column || Paper_column::when_mom (paper_column) == now)
+ if (!has_interface<Rest> (g) || !paper_column || Paper_column::when_mom (paper_column) == now)
{
columns.insert (column);
rest_count += Note_column::has_rests (column);
diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc
index 300dcfc3c4..536ced40e5 100644
--- a/lily/rest-collision.cc
+++ b/lily/rest-collision.cc
@@ -52,7 +52,7 @@ Rest_collision::force_shift_callback_rest (SCM rest, SCM offset)
if (scm_is_number (offset))
rest_grob->translate_axis (scm_to_double (offset), Y_AXIS);
- if (Note_column::has_interface (parent) && Note_column::has_rests (parent))
+ if (has_interface<Note_column> (parent) && Note_column::has_rests (parent))
{
Grob *collision = unsmob<Grob> (parent->get_object ("rest-collision"));
@@ -109,7 +109,7 @@ Rest_collision::calc_positioning_done (SCM smob)
for (vsize i = 0; i < elts.size (); i++)
{
Grob *e = elts[i];
- if (Note_column::has_interface (e))
+ if (has_interface<Note_column> (e))
{
if (unsmob<Grob> (e->get_object ("rest")))
rests.push_back (e);
diff --git a/lily/script-column.cc b/lily/script-column.cc
index 3a288dac72..94aa8908e7 100644
--- a/lily/script-column.cc
+++ b/lily/script-column.cc
@@ -72,8 +72,8 @@ Script_column::row_before_line_breaking (SCM smob)
/*
Don't want to consider scripts horizontally next to notes.
*/
- if (Accidental_placement::has_interface (sc)
- || Arpeggio::has_interface (sc))
+ if (has_interface<Accidental_placement> (sc)
+ || has_interface<Arpeggio> (sc))
{
affect_all_grobs.push_back (sc);
}
diff --git a/lily/script-interface.cc b/lily/script-interface.cc
index eaba157f34..24fe4dc082 100644
--- a/lily/script-interface.cc
+++ b/lily/script-interface.cc
@@ -131,7 +131,6 @@ Script_interface::print (SCM smob)
struct Text_script
{
- DECLARE_GROB_INTERFACE ();
};
ADD_INTERFACE (Text_script,
diff --git a/lily/script-row-engraver.cc b/lily/script-row-engraver.cc
index dc81f38b7f..35b5038020 100644
--- a/lily/script-row-engraver.cc
+++ b/lily/script-row-engraver.cc
@@ -56,7 +56,7 @@ Script_row_engraver::stop_translation_timestep ()
if (script_row_)
{
for (vsize i = 0; i < scripts_.size (); i++)
- if (Accidental_placement::has_interface (scripts_[i])
+ if (has_interface<Accidental_placement> (scripts_[i])
|| Side_position_interface::get_axis (scripts_[i]) == X_AXIS)
Script_column::add_side_positioned (script_row_, scripts_[i]);
}
diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc
index 49b4125364..512f970e0e 100644
--- a/lily/self-alignment-interface.cc
+++ b/lily/self-alignment-interface.cc
@@ -104,7 +104,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
{
Grob *him = me->get_parent (a);
Interval he;
- if (Paper_column::has_interface (him))
+ if (has_interface<Paper_column> (him))
/*
PaperColumn extents aren't reliable (they depend on size and alignment
of PaperColumn's children), so we align on NoteColumn instead.
@@ -115,7 +115,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
else
{
if (to_boolean (me->get_property ("X-align-on-main-noteheads"))
- && Note_column::has_interface (him))
+ && has_interface<Note_column> (him))
he = Note_column::calc_main_extent(him);
else
he = him->extent (him, a);
diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc
index 049cd029d6..0669c277f7 100644
--- a/lily/semi-tie.cc
+++ b/lily/semi-tie.cc
@@ -60,7 +60,7 @@ Semi_tie::calc_control_points (SCM smob)
(void) me->get_property ("direction");
Grob *yparent = me->get_parent (Y_AXIS);
- if (Semi_tie_column::has_interface (yparent))
+ if (has_interface<Semi_tie_column> (yparent))
{
/* trigger positioning. */
yparent->get_property ("positioning-done");
diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc
index 5355f5cc43..08069afda8 100644
--- a/lily/separating-line-group-engraver.cc
+++ b/lily/separating-line-group-engraver.cc
@@ -78,7 +78,7 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i)
{
Item *it = i.item ();
- if (Note_spacing::has_interface (it))
+ if (has_interface<Note_spacing> (it))
{
current_spacings_.note_spacings_.push_back (it);
return;
diff --git a/lily/separation-item.cc b/lily/separation-item.cc
index 01490fa1a0..e29b8a9129 100644
--- a/lily/separation-item.cc
+++ b/lily/separation-item.cc
@@ -129,7 +129,7 @@ Separation_item::boxes (Grob *me, Grob *left)
vector<Grob *> other_elts; // for now only arpeggios
for (vsize i = 0; i < read_only_elts.size (); i++)
{
- if (Accidental_placement::has_interface (read_only_elts[i]))
+ if (has_interface<Accidental_placement> (read_only_elts[i]))
accidental_elts.push_back (read_only_elts[i]);
else
other_elts.push_back (read_only_elts[i]);
@@ -153,8 +153,8 @@ Separation_item::boxes (Grob *me, Grob *left)
bounds all of them). However, we can't exclude an axis-group that
adds to its childrens' stencil. Currently, this is just TrillPitchGroup;
hence the check for note-head-interface. */
- if (Axis_group_interface::has_interface (il)
- && !Note_head::has_interface (il))
+ if (has_interface<Axis_group_interface> (il)
+ && !has_interface<Note_head> (il))
continue;
Interval y (il->pure_y_extent (ycommon, 0, very_large));
diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc
index 08ac17285d..16e2929a66 100644
--- a/lily/side-position-interface.cc
+++ b/lily/side-position-interface.cc
@@ -65,7 +65,7 @@ get_support_set (Grob *me)
for (vsize i = 0; i < proto_support.size (); i++)
{
- if (Accidental_placement::has_interface (proto_support[i]))
+ if (has_interface<Accidental_placement> (proto_support[i]))
{
Grob *accs = proto_support[i];
for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs);
@@ -252,7 +252,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
continue; // so 'me' may not move in response to 'e'
if (a == Y_AXIS
- && Stem::has_interface (e))
+ && has_interface<Stem> (e))
{
// If called as 'pure' we may not force a stem to set its direction,
if (pure && !is_direction (e->get_property_data ("direction")))
@@ -283,7 +283,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
: e->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end);
Skyline_pair copy = *unsmob<Skyline_pair> (sp);
if (a == Y_AXIS
- && Stem::has_interface (e)
+ && has_interface<Stem> (e)
&& to_boolean (me->get_maybe_pure_property ("add-stem-support", pure, start, end)))
copy[dir].set_minimum_height (copy[dir].max_height ());
copy.shift (a == X_AXIS ? yc : xc);
@@ -381,7 +381,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
staff_span.widen (1);
if (staff_span.contains (position)
/* If we are between notehead and staff, quantize for ledger lines. */
- || (Note_head::has_interface (head)
+ || (has_interface<Note_head> (head)
&& dir * position < 0))
{
total_off += (rounded - position) * 0.5 * ss;
diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc
index 8e1db97d84..dc453a9729 100644
--- a/lily/slur-configuration.cc
+++ b/lily/slur-configuration.cc
@@ -334,7 +334,7 @@ Slur_configuration::score_extra_encompass (Slur_score_state const &state)
// we find forbidden attachments
vector<Offset> forbidden_attachments;
for (vsize i = 0; i < state.extra_encompass_infos_.size (); i++)
- if (Tie::has_interface (state.extra_encompass_infos_[i].grob_))
+ if (has_interface<Tie> (state.extra_encompass_infos_[i].grob_))
{
Grob *t = state.extra_encompass_infos_[i].grob_;
Grob *common_x = Grob::get_vertical_axis_group (t);
diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc
index cca56781aa..edd45f6427 100644
--- a/lily/slur-scoring.cc
+++ b/lily/slur-scoring.cc
@@ -161,7 +161,7 @@ Slur_score_state::get_bound_info () const
for (LEFT_and_RIGHT (d))
{
extremes[d].bound_ = slur_->get_bound (d);
- if (Note_column::has_interface (extremes[d].bound_))
+ if (has_interface<Note_column> (extremes[d].bound_))
{
extremes[d].note_column_ = extremes[d].bound_;
extremes[d].stem_ = Note_column::get_stem (extremes[d].note_column_);
@@ -285,7 +285,7 @@ Slur_score_state::fill (Grob *me)
ly_symbol2scm ("inside"))
&& minmax (dir_, encompass_place, y_place) == encompass_place
&& (!extra_encompass_infos_[i].grob_->internal_has_interface (ly_symbol2scm ("key-signature-interface"))
- && !Clef::has_interface (extra_encompass_infos_[i].grob_)
+ && !has_interface<Clef> (extra_encompass_infos_[i].grob_)
&& !extra_encompass_infos_[i].grob_->internal_has_interface (ly_symbol2scm ("time-signature-interface"))))
{
for (LEFT_and_RIGHT (d))
@@ -627,7 +627,7 @@ Slur_score_state::generate_avoid_offsets () const
extract_grob_set (slur_, "encompass-objects", extra_encompasses);
for (vsize i = 0; i < extra_encompasses.size (); i++)
{
- if (Slur::has_interface (extra_encompasses[i]))
+ if (has_interface<Slur> (extra_encompasses[i]))
{
Grob *small_slur = extra_encompasses[i];
Bezier b = Slur::get_curve (small_slur);
@@ -756,7 +756,7 @@ Slur_score_state::get_extra_encompass_infos () const
vector<Extra_collision_info> collision_infos;
for (vsize i = encompasses.size (); i--;)
{
- if (Slur::has_interface (encompasses[i]))
+ if (has_interface<Slur> (encompasses[i]))
{
Spanner *small_slur = dynamic_cast<Spanner *> (encompasses[i]);
Bezier b = Slur::get_curve (small_slur);
@@ -797,12 +797,12 @@ Slur_score_state::get_extra_encompass_infos () const
Grob *g = encompasses [i];
Interval xe = g->extent (common_[X_AXIS], X_AXIS);
Interval ye = g->extent (common_[Y_AXIS], Y_AXIS);
- if (Dots::has_interface (g))
+ if (has_interface<Dots> (g))
ye.widen (0.2);
Real xp = 0.0;
Real penalty = parameters_.extra_object_collision_penalty_;
- if (Accidental_interface::has_interface (g))
+ if (has_interface<Accidental_interface> (g))
{
penalty = parameters_.accidental_collision_;
diff --git a/lily/slur.cc b/lily/slur.cc
index 39059a59b6..a11a30258e 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -204,7 +204,7 @@ Slur::replace_breakable_encompass_objects (Grob *me)
{
Grob *g = extra_objects[i];
- if (Separation_item::has_interface (g))
+ if (has_interface<Separation_item> (g))
{
extract_grob_set (g, "elements", breakables);
for (vsize j = 0; j < breakables.size (); j++)
@@ -409,7 +409,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
else
slur = slurs[0];
- if (Tie::has_interface (e)
+ if (has_interface<Tie> (e)
|| scm_is_eq (avoid, ly_symbol2scm ("inside")))
{
for (vsize i = slurs.size (); i--;)
@@ -478,7 +478,7 @@ Slur::calc_cross_staff (SCM smob)
so we can ignore them here */
vector<Grob *> non_sep_extras;
for (vsize i = 0; i < extras.size (); i++)
- if (!Separation_item::has_interface (extras[i]))
+ if (!has_interface<Separation_item> (extras[i]))
non_sep_extras.push_back (extras[i]);
Grob *common = common_refpoint_of_array (cols, me, Y_AXIS);
diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc
index c7990558dd..4be23042ad 100644
--- a/lily/spacing-determine-loose-columns.cc
+++ b/lily/spacing-determine-loose-columns.cc
@@ -108,7 +108,7 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
for (vsize i = elts.size (); i--;)
{
Grob *g = elts[i];
- if (g && Break_alignment_interface::has_interface (g))
+ if (has_interface<Break_alignment_interface> (g))
{
extract_grob_set (g, "elements", gelts);
for (vsize j = gelts.size (); j--;)
@@ -150,7 +150,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c,
|| Spacing_interface::right_column (sp) != rc)
continue;
- if (Note_spacing::has_interface (sp))
+ if (has_interface<Note_spacing> (sp))
{
/*
The note spacing should be taken from the musical
@@ -161,7 +161,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c,
dists[d] = max (dists[d], spring.min_distance ());
}
- else if (Staff_spacing::has_interface (sp))
+ else if (has_interface<Staff_spacing> (sp))
{
Spring spring = Staff_spacing::get_spacing (sp, rc, 0.0);
diff --git a/lily/spacing-interface.cc b/lily/spacing-interface.cc
index 1ade62b0e5..030d02e727 100644
--- a/lily/spacing-interface.cc
+++ b/lily/spacing-interface.cc
@@ -64,7 +64,7 @@ Spacing_interface::skylines (Grob *me, Grob *right_col)
if (Item *piece = g->find_prebroken_piece (break_dirs[d]))
g = piece;
- if (g && Separation_item::has_interface (g) && g->get_column () == columns[d])
+ if (has_interface<Separation_item> (g) && g->get_column () == columns[d])
{
SCM sky_scm = g->get_property ("horizontal-skylines");
Skyline_pair *sky = unsmob<Skyline_pair> (sky_scm);
@@ -144,9 +144,9 @@ get_note_columns (vector<Grob *> const &elts)
for (vsize i = 0; i < elts.size (); i++)
{
- if (Note_column::has_interface (elts[i]))
+ if (has_interface<Note_column> (elts[i]))
ret.push_back (dynamic_cast<Item *> (elts[i]));
- else if (Separation_item::has_interface (elts[i]))
+ else if (has_interface<Separation_item> (elts[i]))
{
extract_grob_set (elts[i], "elements", more_elts);
vector<Item *> ncs = get_note_columns (more_elts);
diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc
index c3846e694d..15f77f34a0 100644
--- a/lily/spacing-loose-columns.cc
+++ b/lily/spacing-loose-columns.cc
@@ -155,7 +155,7 @@ set_loose_columns (System *which, Column_x_positions const *posns)
{
Spring spring = Spacing_spanner::note_spacing (spacing, loose_col,
next_col, &options);
- if (Note_spacing::has_interface (spacing))
+ if (has_interface<Note_spacing> (spacing))
spring = Note_spacing::get_spacing (spacing, next_col,
spring, options.increment_);
diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc
index f6f532125a..cc353bc365 100644
--- a/lily/spacing-spanner.cc
+++ b/lily/spacing-spanner.cc
@@ -351,7 +351,7 @@ Spacing_spanner::musical_column_spacing (Grob *me,
/*
This is probably a waste of time in the case of polyphonic
music. */
- if (found_matching_column && Note_spacing::has_interface (wish))
+ if (found_matching_column && has_interface<Note_spacing> (wish))
{
Real inc = options->increment_;
Grob *gsp = unsmob<Grob> (left_col->get_object ("grace-spacing"));
@@ -489,7 +489,7 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
{
Item *spacing_grob = dynamic_cast<Item *> (wishes[i]);
- if (!spacing_grob || !Staff_spacing::has_interface (spacing_grob))
+ if (!spacing_grob || !has_interface<Staff_spacing> (spacing_grob))
continue;
/*
diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc
index 11fb185a87..c8e51f56f8 100644
--- a/lily/staff-spacing.cc
+++ b/lily/staff-spacing.cc
@@ -44,7 +44,7 @@ using namespace std;
Real
Staff_spacing::optical_correction (Grob *me, Grob *g, Interval bar_height)
{
- if (!g || !Note_column::has_interface (g))
+ if (!g || !has_interface<Note_column> (g))
return 0;
Grob *stem = Note_column::get_stem (g);
diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc
index 2f245fda9b..09b3d2856e 100644
--- a/lily/staff-symbol-referencer.cc
+++ b/lily/staff-symbol-referencer.cc
@@ -48,7 +48,7 @@ Staff_symbol_referencer::on_staff_line (Grob *me, int pos)
Grob *
Staff_symbol_referencer::get_staff_symbol (Grob *me)
{
- if (Staff_symbol::has_interface (me))
+ if (has_interface<Staff_symbol> (me))
return me;
SCM st = me->get_object ("staff-symbol");
diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc
index 75d25f43cf..5f71607a37 100644
--- a/lily/stem-tremolo.cc
+++ b/lily/stem-tremolo.cc
@@ -261,7 +261,7 @@ Stem_tremolo::calc_direction (SCM smob)
*/
Grob *maybe_nc = stem->get_parent (X_AXIS)->get_parent (X_AXIS);
bool whole_note = Stem::duration_log (stem) <= 0;
- if (whole_note && Note_collision_interface::has_interface (maybe_nc))
+ if (whole_note && has_interface<Note_collision_interface> (maybe_nc))
{
Drul_array<bool> avoid_me (false, false);
vector<int> all_nhps = Note_collision_interface::note_head_positions (maybe_nc);
diff --git a/lily/stem.cc b/lily/stem.cc
index 2fad60d105..9cb84f57fa 100644
--- a/lily/stem.cc
+++ b/lily/stem.cc
@@ -266,9 +266,9 @@ Stem::add_head (Grob *me, Grob *n)
{
n->set_object ("stem", me->self_scm ());
- if (Note_head::has_interface (n))
+ if (has_interface<Note_head> (n))
Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), n);
- else if (Rest::has_interface (n))
+ else if (has_interface<Rest> (n))
Pointer_group_interface::add_grob (me, ly_symbol2scm ("rests"), n);
}
diff --git a/lily/system.cc b/lily/system.cc
index a511a32b67..4a18ab52b7 100644
--- a/lily/system.cc
+++ b/lily/system.cc
@@ -414,7 +414,7 @@ System::vertical_skyline_elements (SCM smob)
vector<Grob *> vertical_skyline_grobs;
extract_grob_set (me_grob, "elements", my_elts);
for (vsize i = 0; i < my_elts.size (); i++)
- if (System_start_delimiter::has_interface (my_elts[i]))
+ if (has_interface<System_start_delimiter> (my_elts[i]))
vertical_skyline_grobs.push_back (my_elts[i]);
System *me = dynamic_cast<System *> (me_grob);
@@ -429,7 +429,7 @@ System::vertical_skyline_elements (SCM smob)
extract_grob_set (align, "elements", elts);
for (vsize i = 0; i < elts.size (); i++)
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
vertical_skyline_grobs.push_back (elts[i]);
SCM grobs_scm = Grob_array::make_array ();
@@ -763,7 +763,7 @@ System::get_vertical_alignment (SCM smob)
extract_grob_set (me, "elements", elts);
Grob *ret = 0;
for (vsize i = 0; i < elts.size (); i++)
- if (Align_interface::has_interface (elts[i]))
+ if (has_interface<Align_interface> (elts[i]))
{
if (ret)
me->programming_error ("found multiple vertical alignments in this system");
@@ -792,7 +792,7 @@ System::get_extremal_staff (Direction dir, Interval const &iv)
vsize end = (dir == UP) ? elts.size () : VPOS;
for (vsize i = start; i != end; i += dir)
{
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
Hara_kiri_group_spanner::consider_suicide (elts[i]);
Interval intersection = elts[i]->extent (this, X_AXIS);
@@ -822,7 +822,7 @@ System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interva
if (elts[i] == vertical_axis_group)
return out;
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
Hara_kiri_group_spanner::consider_suicide (elts[i]);
bounds.intersect (elts[i]->spanned_rank_interval ());
@@ -917,7 +917,7 @@ System::calc_pure_relevant_grobs (SCM smob)
for (vsize i = 0; i < elts.size (); ++i)
{
- if (!Axis_group_interface::has_interface (elts[i]))
+ if (!has_interface<Axis_group_interface> (elts[i]))
{
relevant_grobs.push_back (elts[i]);
diff --git a/lily/tie-column.cc b/lily/tie-column.cc
index 8a0ef24139..5f111a8581 100644
--- a/lily/tie-column.cc
+++ b/lily/tie-column.cc
@@ -40,7 +40,7 @@ Tie_column::add_tie (Grob *tc, Spanner *tie)
Spanner *me = dynamic_cast<Spanner *> (tc);
if (tie->get_parent (Y_AXIS)
- && Tie_column::has_interface (tie->get_parent (Y_AXIS)))
+ && has_interface<Tie_column> (tie->get_parent (Y_AXIS)))
return;
if (!me->get_bound (LEFT)
diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc
index ad08638ebb..905718469c 100644
--- a/lily/tie-formatting-problem.cc
+++ b/lily/tie-formatting-problem.cc
@@ -99,7 +99,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item *> bounds,
for (vsize i = 0; i < bounds.size (); i++)
{
Grob *head = bounds[i];
- if (!Note_head::has_interface (head))
+ if (!has_interface<Note_head> (head))
continue;
if (!stem)
diff --git a/lily/tie.cc b/lily/tie.cc
index ae81317e39..849e859eb5 100644
--- a/lily/tie.cc
+++ b/lily/tie.cc
@@ -64,7 +64,7 @@ Item *
Tie::head (Spanner *me, Direction d)
{
Item *it = me->get_bound (d);
- return Note_head::has_interface (it) ? it : 0;
+ return has_interface<Note_head> (it) ? it : 0;
}
int
@@ -146,8 +146,8 @@ Tie::calc_direction (SCM smob)
// types. It might be clearer to use a template.
Grob *me = unsmob<Grob> (smob);
Grob *yparent = me->get_parent (Y_AXIS);
- if ((Tie_column::has_interface (yparent)
- || Semi_tie_column::has_interface (yparent))
+ if ((has_interface<Tie_column> (yparent)
+ || has_interface<Semi_tie_column> (yparent))
&& unsmob<Grob_array> (yparent->get_object ("ties"))
// && unsmob<Grob_array> (yparent->get_object ("ties"))->size () > 1
)
@@ -209,8 +209,8 @@ Tie::calc_control_points (SCM smob)
Spanner *me = LY_ASSERT_SMOB(Spanner, smob, 1);
Grob *yparent = me->get_parent (Y_AXIS);
- if ((Tie_column::has_interface (yparent)
- || Semi_tie_column::has_interface (yparent))
+ if ((has_interface<Tie_column> (yparent)
+ || has_interface<Semi_tie_column> (yparent))
&& unsmob<Grob_array> (yparent->get_object ("ties")))
{
extract_grob_set (yparent, "ties", ties);
diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc
index a1ad69c72a..17e1194de8 100644
--- a/lily/tuplet-bracket.cc
+++ b/lily/tuplet-bracket.cc
@@ -64,7 +64,7 @@ get_x_bound_item (Grob *me_grob, Direction hdir, Direction my_dir)
{
Spanner *me = dynamic_cast<Spanner *> (me_grob);
Item *g = me->get_bound (hdir);
- if (Note_column::has_interface (g)
+ if (has_interface<Note_column> (g)
&& Note_column::get_stem (g)
&& Note_column::dir (g) == my_dir)
g = Note_column::get_stem (g);
diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc
index c8781ca14d..4d879ade4c 100644
--- a/lily/tuplet-number.cc
+++ b/lily/tuplet-number.cc
@@ -272,7 +272,7 @@ Tuplet_number::calc_x_offset (SCM smob)
for (LEFT_and_RIGHT (d))
{
- if (Note_column::has_interface (bounds[d])
+ if (has_interface<Note_column> (bounds[d])
&& Note_column::get_stem (bounds[d]))
bounds[d] = Note_column::get_stem (bounds[d]);
bound_poss[d] = Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d];
diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc
index d28d0d74a3..6a47809fd7 100644
--- a/lily/vertical-align-engraver.cc
+++ b/lily/vertical-align-engraver.cc
@@ -120,7 +120,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const
{
int sz = i.origin_contexts ((Translator *)this).size ();
- return sz > 0 && Axis_group_interface::has_interface (i.grob ())
+ return sz > 0 && has_interface<Axis_group_interface> (i.grob ())
&& !i.grob ()->get_parent (Y_AXIS)
&& !to_boolean (i.grob ()->get_property ("no-alignment"))
&& Axis_group_interface::has_axis (i.grob (), Y_AXIS);