/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1999--2011 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1999--2012 Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "beaming-pattern.hh"
#include "beam.hh"
#include "context.hh"
+#include "context-handle.hh"
#include "duration.hh"
#include "engraver.hh"
#include "item.hh"
Moment extend_mom_;
Moment beam_start_moment_;
Moment beam_start_location_;
- Context *beam_start_context_;
+ /*
+ Handle on the starting staff keeps it alive until beam is comlete
+ */
+ Context_handle beam_start_context_;
// We act as if beam were created, and start a grouping anyway.
Beaming_pattern *grouping_;
Beam::add_stem (beam, (*stems_)[i]);
Grob_info i = make_grob_info (beam, (*stems_)[0]->self_scm ());
- i.rerouting_daddy_context_ = beam_start_context_;
+ i.rerouting_daddy_context_ = beam_start_context_.get_context ();
announce_grob (i);
return beam;
beaming_options_.from_context (context ());
beam_settings_ = updated_grob_properties (context (), ly_symbol2scm ("Beam"));
- beam_start_context_ = context ()->get_parent_context ();
+ beam_start_context_.set_context (context ()->get_parent_context ());
beam_start_moment_ = now_mom ();
beam_start_location_
= robust_scm2moment (get_property ("measurePosition"), Moment (0));
if (finished_beam_)
{
Grob_info i = make_grob_info (finished_beam_, SCM_EOL);
- i.rerouting_daddy_context_ = beam_start_context_;
+ i.rerouting_daddy_context_ = beam_start_context_.get_context ();
announce_end_grob (i);
finished_grouping_ = grouping_;
beam_settings_ = SCM_EOL;
}
+ beam_start_context_.set_context (NULL);
shortest_mom_ = Moment (Rational (1, 4));
}
if (bool (beam_start_location_.grace_part_) != bool (now.grace_part_))
return;
- Moment dur = unsmob_duration (ev->get_property ("duration"))->get_length ();
+ Duration *stem_duration = unsmob_duration (ev->get_property ("duration"));
+ Moment dur = stem_duration->get_length ();
+
+ //Moment dur = unsmob_duration (ev->get_property ("duration"))->get_length ();
Moment measure_now = measure_position (context ());
bool recheck_needed = false;
grouping_->add_stem (now - beam_start_moment_ + beam_start_location_,
durlog - 2,
- Stem::is_invisible (stem));
+ Stem::is_invisible (stem),
+ stem_duration->factor (),
+ (stem->get_property ("tuplet-start") == SCM_BOOL_T));
stems_->push_back (stem);
last_add_mom_ = now;
extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now);