scm_from_double (1.0));
}
g_free (pango_fn);
- return dynamic_cast<Pango_font *> (Font_metric::unsmob (val));
+ return derived_unsmob<Pango_font> (val);
}
#endif
Font_metric::unsmob (val)->unprotect ();
}
- return dynamic_cast<Open_type_font *> (Font_metric::unsmob (val));
+ return derived_unsmob<Open_type_font> (val);
}
Font_metric *
Context *origin = inf.origin_contexts (this)[0];
Translator_group *tg = origin->implementation ();
- Engraver *random_source = dynamic_cast<Engraver *> (Translator::unsmob (scm_car (tg->get_simple_trans_list ())));
+ Engraver *random_source = Engraver::unsmob (scm_car (tg->get_simple_trans_list ()));
if (!random_source)
random_source = this;
else
{
System *line
- = dynamic_cast<System *> (Grob::unsmob (break_criterion));
+ = derived_unsmob<System> (break_criterion);
if (sc->get_system () != line)
sc = sc->find_broken_piece (line);
SCM
Figured_bass_continuation::center_on_figures (SCM grob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (grob));
+ Spanner *me = Spanner::unsmob (grob);
extract_grob_set (me, "figures", figures);
if (figures.empty ())
return scm_from_double (0.0);
SCM
Figured_bass_continuation::print (SCM grob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (grob));
+ Spanner *me = Spanner::unsmob (grob);
Real thick
= me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
Figured_bass_engraver::create_grobs ()
{
Grob *muscol
- = dynamic_cast<Item *> (Grob::unsmob (get_property ("currentMusicalColumn")));
+ = Item::unsmob (get_property ("currentMusicalColumn"));
if (!alignment_)
{
alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
" process it and return the @code{Music_output} object"
" in its final state.")
{
- Global_context *g = dynamic_cast<Global_context *> (Context::unsmob (context));
+ Global_context *g = Global_context::unsmob (context);
LY_ASSERT_SMOB (Global_context, context, 1);
"Create a translator group and connect it to the global context"
" @var{global}. The translator group is returned.")
{
- Global_context *g = dynamic_cast<Global_context *> (Context::unsmob (global));
+ Global_context *g = Global_context::unsmob (global);
LY_ASSERT_SMOB (Global_context, global, 1);
Translator_group *tg = new Translator_group ();
return SCM_BOOL_F;
}
- Global_context *g = dynamic_cast<Global_context *> (Context::unsmob (ctx));
+ Global_context *g = Global_context::unsmob (ctx);
Cpu_timer timer;
SCM
Key_signature_interface::print (SCM smob)
{
- Item *me = dynamic_cast<Item *> (Grob::unsmob (smob));
+ Item *me = Item::unsmob (smob);
Real inter = Staff_symbol_referencer::staff_space (me) / 2.0;
SCM
Ledger_line_spanner::set_spacing_rods (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
// find size of note heads.
Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
SCM
Ledger_line_spanner::print (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
extract_grob_set (me, "note-heads", heads);
SCM
Line_spanner::print (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
// Triggers simple-Y calculations
bool simple_y = to_boolean (me->get_property ("simple-Y")) && !to_boolean (me->get_property ("cross-staff"));
SCM
Measure_grouping::print (SCM grob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (grob));
+ Spanner *me = Spanner::unsmob (grob);
SCM which = me->get_property ("style");
Real height = robust_scm2double (me->get_property ("height"), 1);
" information about named glyph @var{glyph} (a string).")
{
Modified_font_metric *fm
- = dynamic_cast<Modified_font_metric *> (Font_metric::unsmob (font));
+ = derived_unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+ : derived_unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
LY_ASSERT_TYPE (scm_is_string, glyph, 2);
" for non-existent @var{tag}.")
{
Modified_font_metric *fm
- = dynamic_cast<Modified_font_metric *> (Font_metric::unsmob (font));
+ = derived_unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+ : derived_unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
LY_ASSERT_TYPE (scm_is_string, tag, 2);
"Is @var{font} an OpenType font?")
{
Modified_font_metric *fm
- = dynamic_cast<Modified_font_metric *> (Font_metric::unsmob (font));
+ = derived_unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+ : derived_unsmob<Open_type_font> (font);
return scm_from_bool (otf);
}
"Return the number of glyphs in @var{font}.")
{
Modified_font_metric *fm
- = dynamic_cast<Modified_font_metric *> (Font_metric::unsmob (font));
+ = derived_unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+ : derived_unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
"Return a list of glyph names for @var{font}.")
{
Modified_font_metric *fm
- = dynamic_cast<Modified_font_metric *> (Font_metric::unsmob (font));
+ = derived_unsmob<Modified_font_metric> (font);
Open_type_font *otf = fm
? dynamic_cast<Open_type_font *> (fm->original_font ())
- : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+ : derived_unsmob<Open_type_font> (font);
SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
SCM
Ottava_bracket::print (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
Interval span_points;
Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
SCM specs = book_->get_system_specs ();
for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
{
- if (Paper_score *ps = dynamic_cast<Paper_score *> (Music_output::unsmob (scm_car (s))))
+ if (Paper_score *ps = Paper_score::unsmob (scm_car (s)))
{
system_specs_.push_back (System_spec (ps));
}
(SCM f),
"Is @var{f} a pango font?")
{
- return scm_from_bool (dynamic_cast<Pango_font *> (Font_metric::unsmob (f)));
+ return scm_from_bool (derived_unsmob<Pango_font> (f));
}
LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts",
"Return alist of @code{(ps-name file-name font-index)} lists"
" for Pango font@tie{}@var{f}.")
{
- Pango_font *pf = dynamic_cast<Pango_font *> (Font_metric::unsmob (f));
+ Pango_font *pf = derived_unsmob<Pango_font> (f);
SCM alist = SCM_EOL;
if (pf)
void
set_page_permission (SCM sys, SCM symbol, SCM permission)
{
- if (Paper_score *ps = dynamic_cast<Paper_score *> (Music_output::unsmob (sys)))
+ if (Paper_score *ps = Paper_score::unsmob (sys))
{
vector<Grob *> cols = ps->get_columns ();
if (cols.size ())
void
set_labels (SCM sys, SCM labels)
{
- if (Paper_score *ps = dynamic_cast<Paper_score *> (Music_output::unsmob (sys)))
+ if (Paper_score *ps = Paper_score::unsmob (sys))
{
vector<Grob *> cols = ps->get_columns ();
if (cols.size ())
for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
{
if (Paper_score * pscore
- = dynamic_cast<Paper_score *> (Music_output::unsmob (scm_car (s))))
+ = Paper_score::unsmob (scm_car (s)))
{
SCM system_list
= scm_vector_to_list (pscore->get_paper_systems ());
void
Paper_column_engraver::initialize ()
{
- system_ = dynamic_cast<System *> (Grob::unsmob (get_property ("rootSystem")));
+ system_ = derived_unsmob<System> (get_property ("rootSystem"));
make_columns ();
system_->set_bound (LEFT, command_column_);
SCM
Paper_column::print (SCM p)
{
- Paper_column *me = dynamic_cast<Paper_column *> (Grob::unsmob (p));
+ Paper_column *me = derived_unsmob<Paper_column> (p);
string r = ::to_string (Paper_column::get_rank (me));
{
LY_ASSERT_SMOB (Paper_score, paper_score, 1);
- Paper_score *pscore = dynamic_cast<Paper_score *> (Music_output::unsmob (paper_score));
+ Paper_score *pscore = Paper_score::unsmob (paper_score);
return pscore->get_paper_systems ();
}
{
for (SCM p = list; scm_is_pair (p); p = scm_cdr (p))
{
- Performer *e = dynamic_cast<Performer *> (Translator::unsmob (scm_car (p)));
+ Performer *e = Performer::unsmob (scm_car (p));
if (e)
(e->*method) ();
}
SCM
Piano_pedal_bracket::print (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
Spanner *orig = dynamic_cast<Spanner *> (me->original ());
Drul_array<bool> broken (false, false);
/* TODO: fix or junk --no-layout. */
SCM context = ly_run_translator (music_, scaled);
- if (dynamic_cast<Global_context *> (Context::unsmob (context)))
+ if (Global_context::unsmob (context))
{
SCM s = ly_format_output (context);
Spacing_engraver::stop_translation_timestep ()
{
Paper_column *musical_column
- = dynamic_cast<Paper_column *> (Grob::unsmob (get_property ("currentMusicalColumn")));
+ = derived_unsmob<Paper_column> (get_property ("currentMusicalColumn"));
if (!spacing_)
start_spanner ();
if (!loose->get_system ())
break;
- Paper_column *le = dynamic_cast<Paper_column *> (Grob::unsmob (scm_car (between)));
- Paper_column *re = dynamic_cast<Paper_column *> (Grob::unsmob (scm_cdr (between)));
+ Paper_column *le = derived_unsmob<Paper_column> (scm_car (between));
+ Paper_column *re = derived_unsmob<Paper_column> (scm_cdr (between));
if (! (le && re))
break;
"Return broken-into list for @var{spanner}.")
{
LY_ASSERT_TYPE (Spanner::unsmob, spanner, 1);
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (spanner));
+ Spanner *me = Spanner::unsmob (spanner);
SCM s = SCM_EOL;
for (vsize i = me->broken_intos_.size (); i--;)
Stem::get_beam (Grob *me)
{
SCM b = me->get_object ("beam");
- return dynamic_cast<Spanner *> (Grob::unsmob (b));
+ return Spanner::unsmob (b);
}
Stem_info
SCM
System::calc_pure_height (SCM smob, SCM start_scm, SCM end_scm)
{
- System *me = dynamic_cast<System *> (Grob::unsmob (smob));
+ System *me = derived_unsmob<System> (smob);
int start = scm_to_int (start_scm);
int end = scm_to_int (end_scm);
static SCM
get_maybe_spaceable_staves (SCM smob, int filter)
{
- System *me = dynamic_cast<System *> (Grob::unsmob (smob));
+ System *me = derived_unsmob<System> (smob);
Grob *align = Grob::unsmob (me->get_object ("vertical_alignment"));
SCM ret = SCM_EOL;
SCM
Tie_column::before_line_breaking (SCM smob)
{
- Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+ Spanner *me = Spanner::unsmob (smob);
for (SCM s = me->get_property ("ties"); scm_is_pair (s); s = scm_cdr (s))
{
- Spanner *tie = dynamic_cast<Spanner *> (Grob::unsmob (scm_car (s)));
+ Spanner *tie = Spanner::unsmob (scm_car (s));
for (LEFT_and_RIGHT (dir))
{
if (dir * tie->get_bound (dir)->get_column ()->get_rank ()
for (SCM s = trans_list; scm_is_pair (s); s = scm_cdr (s))
{
Engraver *eng
- = dynamic_cast<Engraver *> (Translator::unsmob (scm_car (s)));
+ = Engraver::unsmob (scm_car (s));
if (!eng)
continue;
Both filter_performers and filter_engravers used to use a direct dynamic_cast
on the unsmobbed translator to be filtered, i.e.,
- if (dynamic_cast<Performer *> (Translator::unsmob (scm_car (*tail))))
+ if (Performer::unsmob (scm_car (*tail)))
but this caused mysterious optimisation issues in several GUB builds. See
issue #818 for the background to this change.