]> git.donarmstrong.com Git - lilypond.git/commitdiff
use PaperColumns instead of SeparationItems
authorJoe Neeman <joeneeman@gmail.com>
Fri, 29 Jun 2007 12:56:37 +0000 (15:56 +0300)
committerJoe Neeman <joeneeman@gmail.com>
Fri, 29 Jun 2007 12:56:37 +0000 (15:56 +0300)
lily/dynamic-engraver.cc
lily/multi-measure-rest-engraver.cc
lily/note-spacing-engraver.cc
lily/separating-line-group-engraver.cc
lily/separation-item.cc
lily/slur-engraver.cc
lily/spacing-spanner.cc
lily/staff-spacing.cc
lily/tie-engraver.cc
lily/tie-formatting-problem.cc
scm/define-grobs.scm

index 18ebeda94301a50fa6bf962f50da52b6dd633a09..5de751602481e8e732951b1ceabbc8f6b1b5320c 100644 (file)
@@ -344,16 +344,9 @@ Dynamic_engraver::typeset_all ()
          || use_bar)
        {
                  
-         Grob *column_bound = 0;
-         if (use_bar)
-           {
-             column_bound = unsmob_grob (get_property ("breakableSeparationItem"));
-           }
-         
-         if (!column_bound)
-           column_bound = unsmob_grob (use_bar
-                                       ? get_property ("currentCommandColumn")
-                                       : get_property ("currentMusicalColumn"));
+         Grob *column_bound = unsmob_grob (use_bar
+                                           ? get_property ("currentCommandColumn")
+                                           : get_property ("currentMusicalColumn"));
          
          finished_cresc_->set_bound (RIGHT, script_
                                      ? script_
index c8ea549701b57a4537c7e4f387c632e278a05ca8..cf5f25a613f6099d70f76d91182a7b140694e5f1 100644 (file)
@@ -148,12 +148,13 @@ void
 Multi_measure_rest_engraver::stop_translation_timestep ()
 {
   /* We cannot do this earlier, as breakableSeparationItem is not yet
-     there.  */
+     there.
+
+     Actually, we no longer use breakableSeparationItem -- should this be moved?
+     -- jneem */
   if (bar_seen_)
     {
-      Grob *cmc = unsmob_grob (get_property ("breakableSeparationItem"));
-      if (!cmc)
-       cmc = unsmob_grob (get_property ("currentCommandColumn"));
+      Grob *cmc = unsmob_grob (get_property ("currentCommandColumn"));
 
       /* Ugh, this is a kludge - need this for multi-measure-rest-grace.ly  */
       last_command_item_ = dynamic_cast<Item *> (cmc);
index 569735f85920ea9b988087db6d9ca2fa9ab03fe2..41162265174e3a87a2f4b368da25cf9a6e3aebe7 100644 (file)
@@ -106,7 +106,7 @@ Note_spacing_engraver::stop_translation_timestep ()
       && last_spacing_parent_context_
       && last_spacing_parent_context_ == context ()->get_parent_context ())
     {
-      Grob *sep = unsmob_grob (get_property ("breakableSeparationItem"));
+      Grob *sep = unsmob_grob (get_property ("currentCommandColumn"));
       if (sep)
        Pointer_group_interface::add_grob (last_spacing_,
                                           ly_symbol2scm ("right-items"),
index 28510166dce2ad889257c42168d092549b10515f..7fe9ae9115db8d85e4c8ef5237d29d1769798483 100644 (file)
@@ -45,38 +45,23 @@ struct Spacings
 class Separating_line_group_engraver : public Engraver
 {
 protected:
-  Item *break_item_;
-  Item *musical_item_;
-  Item *last_musical_item_;
-
   Spacings current_spacings_;
   Spacings last_spacings_;
 
   DECLARE_ACKNOWLEDGER (item);
   void stop_translation_timestep ();
-  void start_translation_timestep ();
 public:
   TRANSLATOR_DECLARATIONS (Separating_line_group_engraver);
 };
 
 Separating_line_group_engraver::Separating_line_group_engraver ()
 {
-  break_item_ = 0;
-  musical_item_ = 0;
 }
 
 void
 Separating_line_group_engraver::acknowledge_item (Grob_info i)
 {
   Item *it = i.item ();
-  if (it->get_parent (X_AXIS)
-      && it->get_parent (X_AXIS) == it->get_parent (Y_AXIS)
-      && Axis_group_interface::has_axis (it->get_parent (X_AXIS), X_AXIS)
-      && Axis_group_interface::has_axis (it->get_parent (Y_AXIS), Y_AXIS))
-    return;
-
-  if (to_boolean (it->get_property ("no-spacing-rods")))
-    return;
 
   if (Note_spacing::has_interface (it))
     {
@@ -84,91 +69,44 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i)
       return;
     }
 
-  bool ib = Item::is_non_musical (it);
-  Item *&p_ref_ (ib ? break_item_
-                : musical_item_);
-
-  if (!p_ref_)
+  if (Item::is_non_musical (it)
+      && !current_spacings_.staff_spacing_
+      && to_boolean (get_property ("createSpacing")))
     {
-      p_ref_ = make_item ("SeparationItem", SCM_EOL);
-
-      if (ib)
-       {
-         p_ref_->set_property ("non-musical", SCM_BOOL_T);
-         context ()->set_property ("breakableSeparationItem", p_ref_->self_scm ());
-       }
-
-      if (to_boolean (get_property ("createSpacing"))
-         && p_ref_ == break_item_)
+      current_spacings_.staff_spacing_ = make_item ("StaffSpacing", SCM_EOL);
+      
+      if (!last_spacings_.note_spacings_.size ()
+         && last_spacings_.staff_spacing_)
        {
-         Item *it = make_item ("StaffSpacing", SCM_EOL);
-         current_spacings_.staff_spacing_ = it;
-         Pointer_group_interface::add_grob (it, ly_symbol2scm ("left-items"),
-                                            break_item_);
-
-         if (!last_spacings_.note_spacings_.size ()
-             && last_spacings_.staff_spacing_)
+         SCM ri = last_spacings_.staff_spacing_->get_object ("right-items");
+         Grob_array *ga = unsmob_grob_array (ri);
+         if (!ga)
            {
-             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_);
+             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 (unsmob_grob (get_property ("currentCommandColumn")));
        }
     }
-
-  if (Accidental_placement::has_interface (it))
-    Separation_item::add_conditional_item (p_ref_, it);
-  else
-    Separation_item::add_item (p_ref_, it);
-}
-
-void
-Separating_line_group_engraver::start_translation_timestep ()
-{
-  if (break_item_)
-    {
-      context ()->unset_property (ly_symbol2scm ("breakableSeparationItem"));
-      break_item_ = 0;
-    }
 }
 
 void
 Separating_line_group_engraver::stop_translation_timestep ()
 {
-  if (Item *sp = current_spacings_.staff_spacing_)
-    {
-      /*
-       TODO: should really look at the left-items of following
-       note-spacing grobs.
-      */
-      if (musical_item_)
-       Pointer_group_interface::add_grob (sp, ly_symbol2scm ("right-items"),
-                                          musical_item_);
-    }
-
   if (!current_spacings_.is_empty ())
     last_spacings_ = current_spacings_;
 
   current_spacings_.clear ();
-
-  musical_item_ = 0;
 }
 
 ADD_ACKNOWLEDGER (Separating_line_group_engraver, item);
 ADD_TRANSLATOR (Separating_line_group_engraver,
                /* doc */ "Generates objects for computing spacing parameters.",
 
-               /* create */
-               "SeparationItem "
-               "SeparatingGroupSpanner "
-               "StaffSpacing",
+               /* create */ "StaffSpacing",
                /* read */ "createSpacing",
-               /* write */ "breakableSeparationItem");
+               /* write */ ""
+               );
index 8704a55b456fd4af6446cbc5d73ea4d07faaf2ef..a692fc0b9b558b7e0b30d4419b96232d6aaefc2a 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "separation-item.hh"
 
+#include "axis-group-interface.hh"
 #include "lookup.hh"
 #include "stencil.hh"
 #include "skyline.hh"
@@ -106,20 +107,21 @@ Separation_item::boxes (Grob *me, Grob *left)
     {
       Item *il = dynamic_cast<Item *> (elts[i]);
       if (pc != il->get_column ())
-       {
-         continue;
-       }
+       continue;
+      if (Axis_group_interface::has_interface (il))
+       continue;
 
       Interval y (il->pure_height (ycommon, 0, very_large));
       Interval x (il->extent (pc, X_AXIS));
 
       Interval extra = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"),
-                                           Interval (0, 0));
+                                           Interval (-0.1, 0.1));
       x[LEFT] += extra[LEFT];
       x[RIGHT] += extra[RIGHT];
       if (to_boolean (elts[i]->get_property ("infinite-spacing-height")))
        y = Interval (-infinity_f, infinity_f);
  
+      if (!x.is_empty () && !y.is_empty ())
       out.push_back (Box (x, y));
     }
 
index 9900ba713b48d086afdcdde7ba252232247a202b..57068e6225945da903f2a264840bc7124ded6f2a 100644 (file)
@@ -194,7 +194,7 @@ Slur_engraver::process_music ()
 void
 Slur_engraver::stop_translation_timestep ()
 {
-  if (Grob *g = unsmob_grob (get_property ("breakableSeparationItem")))
+  if (Grob *g = unsmob_grob (get_property ("currentCommandColumn")))
     {
       for (vsize i = 0; i < end_slurs_.size (); i++)
        Slur::add_extra_encompass (end_slurs_[i], g);
index 5f9aad08f92cefeba5db38e020f796fa94872abb..d878c58b7f83e2dfaae14d8b2f2fb99125f7515c 100644 (file)
@@ -223,7 +223,7 @@ set_column_rods (vector<Grob*> const &cols, vsize idx, Real padding)
   if (Separation_item::is_empty (r))
     return;
 
-  for (; idx != VPOS; idx--)
+  while (idx--)
     {
       Item *l = dynamic_cast<Item*> (cols[idx]);
       Item *lb = l->find_prebroken_piece (RIGHT);
index 2b1368137620a890f264340d7f772d6bf24c224f..8a8822a803ad16cd51237eab3f6b754ef553e2f8 100644 (file)
@@ -115,26 +115,11 @@ Staff_spacing::next_notes_correction (Grob *me,
 Spring
 Staff_spacing::get_spacing (Grob *me, Grob *right_col)
 {
-  Grob *separation_item = 0;
   Item *me_item = dynamic_cast<Item *> (me);
-
-  extract_grob_set (me, "left-items", items);
-  for (vsize i = items.size (); i--;)
-    {
-      Grob *cand = items[i];
-      if (cand && Separation_item::has_interface (cand))
-       separation_item = cand;
-    }
-
-  //  printf ("doing col %d\n" , Paper_column::get_rank (left_col));
-  if (!separation_item)
-    {
-      programming_error ("no sep item");
-      return Spring ();
-    }
+  Grob *left_col = me_item->get_column ();
 
   Interval last_ext;
-  Grob *last_grob = Separation_item::extremal_break_aligned_grob (separation_item, RIGHT,
+  Grob *last_grob = Separation_item::extremal_break_aligned_grob (left_col, RIGHT,
                                                                  &last_ext);
   if (!last_grob)
     {
@@ -197,7 +182,7 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col)
       ideal = fixed;
     }
 
-  Grob *left_col = dynamic_cast<Item*> (me)->get_column ();
+
   Real optical_correction = next_notes_correction (me, last_grob);
   Real min_dist = Paper_column::minimum_distance (left_col, right_col);
 
index bdcd3dbb365040465e5aefe238e8a92178dcca06..cf525dc7b967c57d50c562b94b19c87c677e4c4b 100644 (file)
@@ -179,14 +179,9 @@ Tie_engraver::stop_translation_timestep ()
       if (!wait)
        heads_to_tie_.clear ();
 
-      Grob *sep = unsmob_grob (get_property ("breakableSeparationItem"));
       for (vsize i = 0; i < ties_.size (); i++)
-       {
-         if (sep)
-           ties_[i]->set_object  ("separation-item", sep->self_scm ());
-         
          typeset_tie (ties_[i]);
-       }
+
       ties_.clear ();
       tie_column_ = 0;
     }
index 3105d784f1615a8e9ec459bfeb99289fa6bb3e1c..3a8ed37a6248150dc2893d81548a8229f17e8b77 100644 (file)
@@ -316,18 +316,9 @@ Tie_formatting_problem::from_ties (vector<Grob*> const &ties)
        {
          Item *it = dynamic_cast<Spanner*> (ties[i])->get_bound (d);
          if (it->break_status_dir ())
-           {
-             Item *sep
-               = dynamic_cast<Item*> (unsmob_grob (ties[i]->get_object ("separation-item")));
-             if (sep && sep->get_column () == it->get_column ())
-               it = sep;
+             it = it->get_column ();
 
-             bounds.push_back (it);
-           }
-         else 
-           {
-             bounds.push_back (it);
-           }
+         bounds.push_back (it);
        }
       
       set_chord_outline (bounds, d);
index a5b691391ac6aed79253acd56b3efd824d7c8922..d9faba5d708b62241b7c7a088baa3bf7a844435b 100644 (file)
        (meta . ((class . Paper_column)
                 (interfaces . (paper-column-interface
                                axis-group-interface
+                               separation-item-interface
                                spaceable-grob-interface))))))
     
     (NoteCollision