|| 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_
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);
&& 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"),
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))
{
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 */ ""
+ );
#include "separation-item.hh"
+#include "axis-group-interface.hh"
#include "lookup.hh"
#include "stencil.hh"
#include "skyline.hh"
{
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));
}
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);
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);
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)
{
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);
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;
}
{
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);
(meta . ((class . Paper_column)
(interfaces . (paper-column-interface
axis-group-interface
+ separation-item-interface
spaceable-grob-interface))))))
(NoteCollision