]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/accidental-placement.cc
* lily/grob.cc:
[lilypond.git] / lily / accidental-placement.cc
index 013887153dfc25e0d211e5b524e6e2f77fbba05b..f05a5e67f552b34a1f5b952af9dc4ba4fe6919d0 100644 (file)
@@ -7,16 +7,17 @@
 */
 
 
-
 #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
@@ -26,10 +27,10 @@ Accidental_placement::add_accidental (Grob *me, Grob *a)
   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;
     }
 
@@ -57,8 +58,8 @@ Accidental_placement::add_accidental (Grob *me, Grob *a)
 */
 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))
@@ -82,11 +83,11 @@ Accidental_placement::get_relevant_accidental_extent (Grob *me,
                                                      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;
@@ -108,11 +109,11 @@ Accidental_placement::get_relevant_accidental_extent (Grob *me,
 
 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 ()
@@ -149,11 +150,11 @@ int ape_rcompare (Accidental_placement_entry *const &a,
   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 ();
 
@@ -162,7 +163,10 @@ stagger_apes (Link_array<Accidental_placement_entry> *apes)
     {
       Accidental_placement_entry *a = 0;
       if (parity)
-       a = asc.pop ();
+       {
+         a = asc.back ();
+         asc.pop_back ();
+       }
       else
        a = asc[i++];
 
@@ -170,7 +174,7 @@ stagger_apes (Link_array<Accidental_placement_entry> *apes)
       parity = !parity;
     }
 
-  apes->reverse ();
+  reverse (*apes);
 }
 
 /*
@@ -230,7 +234,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
     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;
@@ -248,7 +252,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
     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];
@@ -282,15 +286,15 @@ Accidental_placement::calc_positioning_done (SCM smob)
        {
          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--;)
@@ -303,9 +307,9 @@ Accidental_placement::calc_positioning_done (SCM smob)
        {
          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);
@@ -329,8 +333,8 @@ Accidental_placement::calc_positioning_done (SCM smob)
 
   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),
@@ -344,7 +348,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
 
   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));
   /*
@@ -361,7 +365,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
 
       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;