/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
#include "misc.hh"
#include "note-head.hh"
#include "rhythmic-head.hh"
+#include "semi-tie.hh"
#include "spanner.hh"
#include "staff-symbol-referencer.hh"
#include "stem.hh"
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)
- stem = unsmob_grob (head->get_object ("stem"));
+ stem = unsmob<Grob> (head->get_object ("stem"));
Real p = Staff_symbol_referencer::get_position (head);
Interval y ((p - 1) * 0.5 * staff_space,
stem_end_position = stem->extent (stem, Y_AXIS)[get_grob_direction (stem)];
else
// May want to change this to the stem's pure height...
- stem_end_position = Stem::note_head_positions (stem)[get_grob_direction (stem)]
+ stem_end_position = Stem::head_positions (stem)[get_grob_direction (stem)]
* staff_space * .5;
}
boxes.push_back (Box (x, y));
}
- Grob *acc = unsmob_grob (heads[i]->get_object ("accidental-grob"));
+ Grob *acc = unsmob<Grob> (heads[i]->get_object ("accidental-grob"));
if (acc)
- acc->get_property ("stencil"); /* trigger tie-related suicide */
+ acc->get_property ("after-line-breaking"); /* trigger tie-related suicide */
if (acc && acc->is_live () && dir == RIGHT)
{
boxes.push_back (Box (x, y));
}
- /* todo: the horizon_padding is somewhat arbitrary */
- chord_outlines_[key] = Skyline (boxes, details_.skyline_padding_, Y_AXIS, -dir);
+ chord_outlines_[key] = Skyline (boxes, Y_AXIS, -dir).padded (details_.skyline_padding_);
if (bounds[0]->break_status_dir ())
{
Interval iv (Axis_group_interface::staff_extent (bounds[0], x_refpoint_, X_AXIS, y_refpoint_, Y_AXIS));
for (vsize i = 0; i < ties.size (); i++)
{
- Item *it = dynamic_cast<Spanner *> (ties[i])->get_bound (d);
+ Spanner *tie = dynamic_cast<Spanner *> (ties[i]);
+ Item *it = tie->get_bound (d);
if (it->break_status_dir ())
it = it->get_column ();
for (vsize i = 0; i < ties.size (); i++)
{
+ Spanner *tie = dynamic_cast<Spanner *> (ties[i]);
Tie_specification spec;
- spec.from_grob (ties[i]);
+ spec.from_grob (tie);
for (LEFT_and_RIGHT (d))
{
- spec.note_head_drul_[d] = Tie::head (ties[i], d);
- spec.column_ranks_[d] = Tie::get_column_rank (ties[i], d);
+ spec.note_head_drul_[d] = Tie::head (tie, d);
+ spec.column_ranks_[d] = Tie::get_column_rank (tie, d);
}
specifications_.push_back (spec);
}
int column_rank = -1;
for (vsize i = 0; i < semi_ties.size (); i++)
{
+ Item *semi_tie = dynamic_cast<Item *> (semi_ties[i]);
Tie_specification spec;
- Item *head = unsmob_item (semi_ties[i]->get_object ("note-head"));
+ Item *head = Semi_tie::head (semi_tie);
if (!head)
programming_error ("LV tie without head?!");
spec.position_ = int (Staff_symbol_referencer::get_position (head));
}
- spec.from_grob (semi_ties[i]);
+ spec.from_grob (semi_tie);
spec.note_head_drul_[head_dir] = head;
- column_rank = Tie::get_column_rank (semi_ties[i], head_dir);
+ column_rank = Semi_tie::get_column_rank (semi_tie);
spec.column_ranks_ = Drul_array<int> (column_rank, column_rank);
heads.push_back (head);
specifications_.push_back (spec);
size.
*/
- Interval staff_span =
- Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
+ Interval staff_span
+ = Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
staff_span.widen (-1);
- bool const within_staff = staff_span.contains(pos);
+ bool const within_staff = staff_span.contains (pos);
if (head_positions_slice (columns[LEFT]).contains (pos)
|| head_positions_slice (columns[RIGHT]).contains (pos)
|| within_staff)
if (!spec.note_head_drul_[d])
continue;
- Grob *stem = unsmob_grob (spec.note_head_drul_[d]->get_object ("stem"));
+ Grob *stem = unsmob<Grob> (spec.note_head_drul_[d]->get_object ("stem"));
if (stem
&& Stem::is_normal_stem (stem))
stems[d] = stem;
Real top_y = tip_y + conf->dir_ * height;
Real top_pos = 2 * top_y / details_.staff_space_;
Real round_top_pos = rint (top_pos);
- Interval staff_span =
- Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
+ Interval staff_span
+ = Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_,
int (round_top_pos))
&& staff_span[UP] * 0.5 > top_y)
{
spec.has_manual_position_ = true;
spec.manual_position_ = scm_to_double (scm_car (entry));
- spec.has_manual_delta_y_ = (scm_inexact_p (scm_car (entry)) == SCM_BOOL_T);
+ /* TODO: check whether inexact? is an appropriate condition here */
+ spec.has_manual_delta_y_ = (scm_is_true (scm_inexact_p (scm_car (entry))));
}
if (scm_is_number (scm_cdr (entry)))