/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
Mats Bengtsson <matsb@s3.kth.se>
LilyPond is free software: you can redistribute it and/or modify
#include "side-position-interface.hh"
#include "translator.icc"
+#include "lily-imports.hh"
class Clef_engraver : public Engraver
{
protected:
void stop_translation_timestep ();
void process_music ();
- DECLARE_ACKNOWLEDGER (bar_line);
+ void acknowledge_bar_line (Grob_info);
virtual void derived_mark () const;
private:
scm_gc_mark (prev_glyph_);
}
-Clef_engraver::Clef_engraver ()
+Clef_engraver::Clef_engraver (Context *c)
+ : Engraver (c)
{
clef_ = 0;
modifier_ = 0;
scm_call_1 (fun, context->self_scm ());
for (SCM s = context->children_contexts ();
scm_is_pair (s); s = scm_cdr (s))
- apply_on_children (Context::unsmob (scm_car (s)), fun);
+ apply_on_children (unsmob<Context> (scm_car (s)), fun);
}
void
SCM transposition = get_property ("clefTransposition");
SCM force_clef = get_property ("forceClef");
- if (clefpos == SCM_EOL
- || scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
- || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
- || scm_equal_p (transposition, prev_transposition_) == SCM_BOOL_F
+ if (scm_is_null (clefpos)
+ || !ly_is_equal (glyph, prev_glyph_)
+ || !ly_is_equal (clefpos, prev_cpos_)
+ || !ly_is_equal (transposition, prev_transposition_)
|| to_boolean (force_clef))
{
- apply_on_children (context (),
- ly_lily_module_constant ("invalidate-alterations"));
+ apply_on_children (context (), Lily::invalidate_alterations);
set_glyph ();
- if (prev_cpos_ != SCM_BOOL_F || to_boolean (get_property ("firstClef")))
+ if (scm_is_true (prev_cpos_) || to_boolean (get_property ("firstClef")))
create_clef ();
if (clef_)
{
if (clef_)
{
- SCM vis = 0;
if (to_boolean (clef_->get_property ("non-default")))
- vis = get_property ("explicitClefVisibility");
+ {
+ SCM vis = get_property ("explicitClefVisibility");
- if (vis)
- clef_->set_property ("break-visibility", vis);
+ if (scm_is_vector (vis))
+ clef_->set_property ("break-visibility", vis);
+ }
clef_ = 0;
}
}
-ADD_ACKNOWLEDGER (Clef_engraver, bar_line);
+void
+Clef_engraver::boot ()
+{
+ ADD_ACKNOWLEDGER (Clef_engraver, bar_line);
+}
+
ADD_TRANSLATOR (Clef_engraver,
/* doc */
"Determine and set reference point for pitches.",