]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/separating-line-group-engraver.cc
* lily/note-column.cc (dir): idem.
[lilypond.git] / lily / separating-line-group-engraver.cc
index 50648340d2b7edfef46feb1b80eb4aae75aed86f..415f3aa3f5d011a01eabbe2ee94e7e893781a3cb 100644 (file)
@@ -6,15 +6,18 @@
   (c) 1998--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
+#include "engraver.hh"
+
 #include "separating-group-spanner.hh"
 #include "separation-item.hh"
 #include "paper-column.hh"
 #include "output-def.hh"
-#include "engraver.hh"
 #include "axis-group-interface.hh"
 #include "note-spacing.hh"
 #include "accidental-placement.hh"
 #include "context.hh"
+#include "grob-array.hh"
+#include "pointer-group-interface.hh"
 
 struct Spacings
 {
@@ -50,10 +53,10 @@ protected:
   Spanner *sep_span_;
 
   virtual void acknowledge_grob (Grob_info);
-  virtual void process_music ();
+  PRECOMPUTED_VIRTUAL void process_music ();
   virtual void finalize ();
-  virtual void stop_translation_timestep ();
-  virtual void start_translation_timestep ();
+  PRECOMPUTED_VIRTUAL void stop_translation_timestep ();
+  PRECOMPUTED_VIRTUAL void start_translation_timestep ();
 public:
   TRANSLATOR_DECLARATIONS (Separating_line_group_engraver);
 };
@@ -141,7 +144,8 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
        {
          Item *it = make_item ("StaffSpacing", SCM_EOL);
          current_spacings_.staff_spacing_ = it;
-         it->set_property ("left-items", scm_cons (break_item_->self_scm (), SCM_EOL));
+         Pointer_group_interface::add_grob (it,  ly_symbol2scm ("left-items"),
+                                            break_item_);
 
          if (int i = last_spacings_.note_spacings_.size ())
            {
@@ -152,8 +156,17 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
            }
          else if (last_spacings_.staff_spacing_)
            {
-             last_spacings_.staff_spacing_->set_property ("right-items",
-                                                          scm_cons (break_item_->self_scm (), SCM_EOL));
+             SCM ri = last_spacings_.staff_spacing_->get_object ("right-items");
+             Grob_array *ga  = unsmob_grob_array (ri);
+             if (!ga)
+               {
+                 SCM ga_scm = Grob_array::make_array ();
+                 last_spacings_.staff_spacing_->set_object ("right-items", ga_scm);
+                 ga = unsmob_grob_array (ga_scm);
+               }
+
+             ga->clear ();
+             ga->add (break_item_);
            }
        }
     }
@@ -168,8 +181,10 @@ void
 Separating_line_group_engraver::start_translation_timestep ()
 {
   if (break_item_)
-    context ()->unset_property (ly_symbol2scm ("breakableSeparationItem"));
-  break_item_ = 0;
+    {
+      context ()->unset_property (ly_symbol2scm ("breakableSeparationItem"));
+      break_item_ = 0;
+    }
 }
 
 void
@@ -206,6 +221,8 @@ Separating_line_group_engraver::stop_translation_timestep ()
   musical_item_ = 0;
 }
 
+#include "translator.icc"
+
 ADD_TRANSLATOR (Separating_line_group_engraver,
                /* descr */ "Generates objects for computing spacing parameters.",
                /* creats*/ "SeparationItem SeparatingGroupSpanner StaffSpacing",