]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/align-interface.cc
Nitpick run.
[lilypond.git] / lily / align-interface.cc
index 59575bba43fdd4cd02bfd6525ce1d6b7b9a21907..adbe9d199cf14d5a19f118ef6f360f827ae15986 100644 (file)
@@ -11,7 +11,9 @@
 #include "spanner.hh"
 #include "item.hh"
 #include "axis-group-interface.hh"
+#include "pointer-group-interface.hh"
 #include "hara-kiri-group-spanner.hh"
+#include "grob-array.hh"
 
 MAKE_SCHEME_CALLBACK (Align_interface, alignment_callback, 2);
 SCM
@@ -21,10 +23,8 @@ Align_interface::alignment_callback (SCM element_smob, SCM axis)
   Axis ax = (Axis)scm_to_int (axis);
   Grob *par = me->get_parent (ax);
   if (par && !to_boolean (par->get_property ("positioning-done")))
-    {
-      Align_interface::align_elements_to_extents (par, ax);
-    }
-  return scm_make_real (0.0);
+    Align_interface::align_elements_to_extents (par, ax);
+  return scm_from_double (0.0);
 }
 
 MAKE_SCHEME_CALLBACK (Align_interface, fixed_distance_alignment_callback, 2);
@@ -35,10 +35,8 @@ Align_interface::fixed_distance_alignment_callback (SCM element_smob, SCM axis)
   Axis ax = (Axis)scm_to_int (axis);
   Grob *par = me->get_parent (ax);
   if (par && !to_boolean (par->get_property ("positioning-done")))
-    {
-      Align_interface::align_to_fixed_distance (par, ax);
-    }
-  return scm_make_real (0.0);
+    Align_interface::align_to_fixed_distance (par, ax);
+  return scm_from_double (0.0);
 }
 
 /*
@@ -57,8 +55,9 @@ Align_interface::align_to_fixed_distance (Grob *me, Axis a)
 
   Real dy = robust_scm2double (me->get_property ("forced-distance"), 0.0);
 
-  Link_array<Grob> elems
-    = extract_grob_array (me, ly_symbol2scm ("elements"));
+  extract_grob_set (me, "elements", elem_source);
+
+  Link_array<Grob> elems (elem_source); // writable..
 
   Real where_f = 0;
 
@@ -96,9 +95,7 @@ Align_interface::align_to_fixed_distance (Grob *me, Axis a)
     TODO: support self-alignment-{Y, X}
   */
   for (int i = 0; i < translates.size (); i++)
-    {
-      elems[i]->translate_axis (translates[i] - v.center (), a);
-    }
+    elems[i]->translate_axis (translates[i] - v.center (), a);
 }
 
 /*
@@ -123,10 +120,8 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
   if (a == Y_AXIS
       && me_spanner
       && me_spanner->get_bound (LEFT)->break_status_dir () == CENTER)
-    {
-      me_spanner->warning (_("vertical alignment called before line-breaking. Only do cross-staff spanners with PianoStaff."));
-    }
-  
+    me_spanner->warning (_ ("vertical alignment called before line-breaking. Only do cross-staff spanners with PianoStaff."));
+
   me->set_property ("positioning-done", SCM_BOOL_T);
 
   SCM d = me->get_property ("stacking-dir");
@@ -141,8 +136,8 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
   Array<Interval> dims;
 
   Link_array<Grob> elems;
-  Link_array<Grob> all_grobs
-    = extract_grob_array (me, ly_symbol2scm ("elements"));
+
+  extract_grob_set (me, "elements", all_grobs);
   for (int i = 0; i < all_grobs.size (); i++)
     {
       Interval y = all_grobs[i]->extent (me, a);
@@ -209,9 +204,7 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
       while (j < all_grobs.size ())
        {
          if (i < elems.size () && all_grobs[j] == elems[i])
-           {
-             w = translates[i++];
-           }
+           w = translates[i++];
          all_translates.push (w);
          j++;
        }
@@ -244,6 +237,16 @@ void
 Align_interface::set_axis (Grob *me, Axis a)
 {
   Axis_group_interface::set_axes (me, a, a);
+  SCM ga_scm = me->get_object ("elements");
+  Grob_array *ga = unsmob_grob_array (ga_scm);
+  if (!ga)
+    {
+      ga_scm = Grob_array::make_array ();
+      ga = unsmob_grob_array (ga_scm);
+      me->set_object ("elements", ga_scm);
+    }
+
+  ga->set_ordered (true);
 }
 
 /*
@@ -269,7 +272,7 @@ ADD_INTERFACE (Align_interface, "align-interface",
               "Order grobs from top to bottom, left to right, right to left or bottom"
               "to top.",
               "forced-distance stacking-dir align-dir threshold positioning-done "
-              "center-element elements axes");
+              "elements axes");
 
 struct Foobar
 {