*/
-
#include "accidental-placement.hh"
-#include "skyline.hh"
+
+#include "accidental-interface.hh"
#include "music.hh"
-#include "pitch.hh"
-#include "warn.hh"
+#include "note-collision.hh"
#include "note-column.hh"
+#include "pitch.hh"
#include "pointer-group-interface.hh"
-#include "note-collision.hh"
-#include "accidental-interface.hh"
+#include "skyline.hh"
+#include "stream-event.hh"
+#include "warn.hh"
void
a->set_property ("X-offset", Grob::x_parent_positioning_proc);
SCM cause = a->get_parent (Y_AXIS)->get_property ("cause");
- Music *mcause = unsmob_music (cause);
+ Stream_event *mcause = unsmob_stream_event (cause);
if (!mcause)
{
- programming_error ("note head has no music cause");
+ programming_error ("note head has no event cause");
return;
}
*/
void
Accidental_placement::split_accidentals (Grob *accs,
- Link_array<Grob> *break_reminder,
- Link_array<Grob> *real_acc)
+ vector<Grob*> *break_reminder,
+ vector<Grob*> *real_acc)
{
for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs);
acs = scm_cdr (acs))
Item *item_col,
Grob *left_object)
{
- Link_array<Grob> br, ra;
- Link_array<Grob> *which = 0;
+ vector<Grob*> br, ra;
+ vector<Grob*> *which = 0;
Accidental_placement::split_accidentals (me, &br, &ra);
- br.concat (ra);
+ concat (br, ra);
if (dynamic_cast<Item *> (left_object)->break_status_dir () == RIGHT)
which = &br;
struct Accidental_placement_entry
{
- std::vector<Skyline_entry> left_skyline_;
- std::vector<Skyline_entry> right_skyline_;
+ vector<Skyline_entry> left_skyline_;
+ vector<Skyline_entry> right_skyline_;
Interval vertical_extent_;
- std::vector<Box> extents_;
- Link_array<Grob> grobs_;
+ vector<Box> extents_;
+ vector<Grob*> grobs_;
Real offset_;
int notename_;
Accidental_placement_entry ()
placement
*/
void
-stagger_apes (Link_array<Accidental_placement_entry> *apes)
+stagger_apes (vector<Accidental_placement_entry*> *apes)
{
- Link_array<Accidental_placement_entry> asc = *apes;
+ vector<Accidental_placement_entry*> asc = *apes;
- asc.sort (&ape_compare);
+ vector_sort (asc, &ape_compare);
apes->clear ();
{
Accidental_placement_entry *a = 0;
if (parity)
- a = asc.pop ();
+ {
+ a = asc.back ();
+ asc.pop_back ();
+ }
else
a = asc[i++];
parity = !parity;
}
- apes->reverse ();
+ reverse (*apes);
}
/*
TODO: there is a bug in this code. If two accs are on the same
Y-position, they share an Ape, and will be printed in overstrike.
*/
- Link_array<Accidental_placement_entry> apes;
+ vector<Accidental_placement_entry*> apes;
for (SCM s = accs; scm_is_pair (s); s = scm_cdr (s))
{
Accidental_placement_entry *ape = new Accidental_placement_entry;
First we must extract *all* pointers. We can only determine
extents if we're sure that we've found the right common refpoint
*/
- Link_array<Grob> note_cols, heads;
+ vector<Grob*> note_cols, heads;
for (vsize i = apes.size (); i--;)
{
Accidental_placement_entry *ape = apes[i];
{
extract_grob_set (c, "elements", gs);
- note_cols.concat (gs);
+ concat (note_cols, gs);
}
}
for (vsize i = note_cols.size (); i--;)
- heads.concat (extract_grob_array (note_cols[i], "note-heads"));
+ concat (heads, extract_grob_array (note_cols[i], "note-heads"));
- heads.default_sort ();
- heads.uniq ();
+ vector_sort (heads, default_compare);
+ uniq (heads);
common[Y_AXIS] = common_refpoint_of_array (heads, common[Y_AXIS], Y_AXIS);
for (vsize i = apes.size (); i--;)
{
Grob *a = apes[i]->grobs_[j];
- std::vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
+ vector<Box> boxes = Accidental_interface::accurate_boxes (a, common);
- ape->extents_.concat (boxes);
+ ape->extents_.insert (ape->extents_.end (), boxes.begin (), boxes.end ());
for (vsize j = boxes.size (); j--;)
{
insert_extent_into_skyline (&ape->left_skyline_, boxes[j], Y_AXIS, LEFT);
Accidental_placement_entry *head_ape = new Accidental_placement_entry;
common[X_AXIS] = common_refpoint_of_array (heads, common[X_AXIS], X_AXIS);
- std::vector<Skyline_entry> head_skyline (empty_skyline (LEFT));
- std::vector<Box> head_extents;
+ vector<Skyline_entry> head_skyline (empty_skyline (LEFT));
+ vector<Box> head_extents;
for (vsize i = heads.size (); i--;)
{
Box b (heads[i]->extent (common[X_AXIS], X_AXIS),
Real padding = robust_scm2double (me->get_property ("padding"), 0.2);
- std::vector<Skyline_entry> left_skyline = head_ape->left_skyline_;
+ vector<Skyline_entry> left_skyline = head_ape->left_skyline_;
heighten_skyline (&left_skyline,
-robust_scm2double (me->get_property ("right-padding"), 0));
/*
apes[i]->offset_ = offset;
- std::vector<Skyline_entry> new_left_skyline = apes[i]->left_skyline_;
+ vector<Skyline_entry> new_left_skyline = apes[i]->left_skyline_;
heighten_skyline (&new_left_skyline, apes[i]->offset_);
merge_skyline (&new_left_skyline, left_skyline, LEFT);
left_skyline = new_left_skyline;