/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1998--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
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 "spanner.hh"
#include "stream-event.hh"
#include "stem.hh"
+#include "unpure-pure-container.hh"
#include "warn.hh"
#include "translator.icc"
{
if (finished_beam_)
{
- if (!finished_beam_->get_bound (RIGHT))
- finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT));
- if (forced_direction_)
+ Grob *stem = finished_beam_->get_bound (RIGHT);
+ if (!stem)
{
- Grob *stem = finished_beam_->get_bound (RIGHT);
- set_grob_direction (stem, forced_direction_);
- forced_direction_ = CENTER;
+ stem = finished_beam_->get_bound (LEFT);
+ if (stem)
+ finished_beam_->set_bound (RIGHT, stem);
}
+
+ if (stem && forced_direction_)
+ set_grob_direction (stem, forced_direction_);
+
+ forced_direction_ = CENTER;
finished_beam_info_->beamify (finished_beaming_options_);
Beam::set_beaming (finished_beam_, finished_beam_info_);
if (beam_
&& !scm_is_number (info.grob ()->get_property_data ("staff-position")))
chain_offset_callback (info.grob (),
- Beam::rest_collision_callback_proc, Y_AXIS);
+ ly_make_unpure_pure_container
+ (Beam::rest_collision_callback_proc,
+ Beam::pure_rest_collision_callback_proc),
+ Y_AXIS);
}
void
if (!valid_start_point ())
return;
+ // It's suboptimal that we don't support callbacks returning ##f,
+ // but this makes beams have no effect on "stems" reliably in
+ // TabStaff when \tabFullNotation is switched off: the real stencil
+ // callback for beams is called quite late in the process, and we
+ // don't want to trigger it early.
+ if (scm_is_false (beam_->get_property_data ("stencil")))
+ return;
+
Item *stem = dynamic_cast<Item *> (info.grob ());
if (Stem::get_beam (stem))
return;
beam_info_->add_stem (stem_location,
max (durlog - 2, 0),
Stem::is_invisible (stem),
- stem_duration->factor ());
+ stem_duration->factor (),
+ (stem->get_property ("tuplet-start") == SCM_BOOL_T));
Beam::add_stem (beam_, stem);
}