#include "beam.hh"
-#include "beaming.hh"
+#include "beaming-pattern.hh"
#include "directional-element-interface.hh"
#include "main.hh"
#include "international.hh"
vector<Beam_segment>
Beam::get_beam_segments (Grob *me_grob, Grob **common)
{
+ /* ugh, this has a side-effect that we need to ensure that
+ Stem #'beaming is correct */
+ (void) me_grob->get_property ("quantized-positions");
+
Spanner *me = dynamic_cast<Spanner*> (me_grob);
extract_grob_set (me, "stems", stems);
i != stem_segments.end (); i++)
{
vector<Beam_stem_segment> segs = (*i).second;
- vector_sort (segs, default_compare);
+ vector_sort (segs, less<Beam_stem_segment> ());
Beam_segment current;
{
Grob *s = stems[i];
Direction stem_dir = CENTER;
- SCM stem_dir_scm = s->get_property_data (ly_symbol2scm ("direction"));
+ SCM stem_dir_scm = s->get_property_data ("direction");
if (is_direction (stem_dir_scm))
{
stem_dir = to_dir (stem_dir_scm);
{
Grob *s = stems[i];
- SCM forcedir = s->get_property_data (ly_symbol2scm ("direction"));
+ SCM forcedir = s->get_property_data ("direction");
if (!to_dir (forcedir))
set_grob_direction (s, d);
}
*/
head_extents += stem->relative_coordinate (common, Y_AXIS);
- if (to_dir (stem->get_property_data (ly_symbol2scm ("direction"))))
+ if (to_dir (stem->get_property_data ("direction")))
{
Direction stemdir = to_dir (stem->get_property ("direction"));
head_extents[-stemdir] = -stemdir * infinity_f;
for (vsize i = 0; i < stems.size (); i++)
{
Grob *s = stems[i];
- if (Stem::is_invisible (s))
- continue;
bool french = to_boolean (s->get_property ("french-beaming"));
Real stem_y = calc_stem_y (me, s, common,
Make the stems go up to the end of the beam. This doesn't matter
for normal beams, but for tremolo beams it looks silly otherwise.
*/
- if (gap)
+ if (gap
+ && !Stem::is_invisible (s))
stem_y += thick * 0.5 * get_grob_direction (s);
+ /*
+ Do set_stemend for invisible stems too, so tuplet brackets
+ have a reference point for sloping
+ */
Stem::set_stemend (s, 2 * stem_y / staff_space);
}
}
void
-Beam::set_beaming (Grob *me, Beaming_info_list const *beaming)
+Beam::set_beaming (Grob *me, Beaming_pattern const *beaming)
{
extract_grob_set (me, "stems", stems);
if (beaming_prop == SCM_EOL
|| index_get_cell (beaming_prop, d) == SCM_EOL)
{
- int count = beaming->infos_.at (i).beam_count_drul_[d];
+ int count = beaming->beamlet_count (i, d);
if (i > 0
&& i < stems.size () -1
&& Stem::is_invisible (stem))
- count = min (count, beaming->infos_.at (i).beam_count_drul_[-d]);
+ count = min (count, beaming->beamlet_count (i,-d));
if ( ((i == 0 && d == LEFT)
|| (i == stems.size ()-1 && d == RIGHT))
rest -> stem -> beam -> interpolate_y_position ()
*/
-MAKE_SCHEME_CALLBACK (Beam, rest_collision_callback, 2);
+MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Beam, rest_collision_callback, 2, 1);
SCM
Beam::rest_collision_callback (SCM smob, SCM prev_offset)
{