]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/align-interface.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / align-interface.cc
index 2355ce11f465b913591519b0118ab22fffa0cac9..c315e4ec32258ff19eec3acea76b8ed89f8c7738 100644 (file)
@@ -13,6 +13,7 @@
 #include "pointer-group-interface.hh"
 #include "hara-kiri-group-spanner.hh"
 #include "grob-array.hh"
+#include "international.hh"
 
 /*
   TODO: for vertical spacing, should also include a rod & spring
@@ -27,7 +28,7 @@ Align_interface::calc_positioning_done (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   SCM axis = scm_car (me->get_property ("axes"));
-  Axis ax = (Axis)scm_to_int (axis);
+  Axis ax = Axis (scm_to_int (axis));
 
   SCM force = me->get_property ("forced-distance");
   if (scm_is_number (force))
@@ -49,6 +50,7 @@ Align_interface::stretch_after_break (SCM grob)
 
   Spanner *me_spanner = dynamic_cast<Spanner *> (me);
   extract_grob_set (me, "elements", elems);
+
   if (me_spanner && elems.size ())
     {
       Grob *common = common_refpoint_of_array (elems, me, Y_AXIS);
@@ -88,13 +90,13 @@ Align_interface::align_to_fixed_distance (Grob *me, Axis a)
 
   extract_grob_set (me, "elements", elem_source);
 
-  Link_array<Grob> elems (elem_source); // writable..
+  vector<Grob*> elems (elem_source); // writable..
 
   Real where_f = 0;
 
   Interval v;
   v.set_empty ();
-  std::vector<Real> translates;
+  vector<Real> translates;
 
   for (vsize j = elems.size (); j--;)
     {
@@ -151,7 +153,14 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
 
   SCM line_break_details = SCM_EOL;
   if (a == Y_AXIS && me_spanner)
-    line_break_details =  me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+    {
+      line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+
+      if (!me->get_system ())
+       me->warning (_ ("vertical alignment called before line-breaking.\n"
+                       "Only do cross-staff spanners with PianoStaff."));
+
+    }
   
   Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
                                           DOWN);
@@ -159,8 +168,8 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
   Interval threshold = robust_scm2interval (me->get_property ("threshold"),
                                            Interval (0, Interval::infinity ()));
 
-  std::vector<Interval> dims;
-  Link_array<Grob> elems;
+  vector<Interval> dims;
+  vector<Grob*> elems;
 
   extract_grob_set (me, "elements", all_grobs);
   for (vsize i = 0; i < all_grobs.size (); i++)
@@ -195,7 +204,7 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
                                   : SCM_EOL,
                                   extra_space);
   
-  std::vector<Real> translates;
+  vector<Real> translates;
   for (vsize j = 0; j < elems.size (); j++)
     {
       Real dy = -dims[j][-stacking_dir];
@@ -232,7 +241,7 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
   /*
     also move the grobs that were empty, to maintain spatial order.
   */
-  std::vector<Real> all_translates;
+  vector<Real> all_translates;
   if (translates.size ())
     {
       Real w = translates[0];