*/
#include "debug.hh"
#include "dimensions.hh"
-#include "dimension-cache.hh"
#include "crescendo.hh"
#include "musical-request.hh"
-#include "lookup.hh"
-#include "paper-def.hh"
#include "paper-column.hh"
-#include "staff-symbol.hh"
#include "note-column.hh"
#include "item.hh"
#include "side-position-interface.hh"
#include "engraver.hh"
-#include "stem.hh"
-#include "note-head.hh"
#include "group-interface.hh"
#include "directional-element-interface.hh"
-#include "staff-symbol-referencer.hh"
#include "translator-group.hh"
#include "axis-group-interface.hh"
class Dynamic_engraver : public Engraver
{
Item * text_p_;
- Crescendo * finished_cresc_p_;
- Crescendo * cresc_p_;
+ Spanner * finished_cresc_p_;
+ Spanner * cresc_p_;
Text_script_req* text_req_l_;
{
line_spanner_ = new Spanner (get_property ("basicDynamicLineSpannerProperties"));
- Side_position_interface (line_spanner_).set_axis (Y_AXIS);
- Axis_group_interface (line_spanner_).set_interface ();
- Axis_group_interface (line_spanner_).set_axes (Y_AXIS, Y_AXIS);
- announce_element (Score_element_info
- (line_spanner_,
- text_req_l_ ? text_req_l_ : accepted_spanreqs_drul_[START]));
+ Side_position::set_axis (line_spanner_, Y_AXIS);
+ Axis_group_interface::set_interface (line_spanner_);
+ Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS);
+ announce_element (line_spanner_,
+ text_req_l_ ? text_req_l_ : accepted_spanreqs_drul_[START]);
}
}
/*
- TODO: should finish and create new spanner if vertical dyn-direction is changed.
+ finish side position alignment if the (de)cresc ends here, and
+ there are no new dynamics.
+
*/
- else if (!accepted_spanreqs_drul_[START] && !text_req_l_)
+ else if (accepted_spanreqs_drul_[STOP]
+ && !accepted_spanreqs_drul_[START] && !text_req_l_)
{
finished_line_spanner_ = line_spanner_;
line_spanner_ = 0;
as (de)crecsendo, b.o. line-breaking.
*/
+
+ /*
+ maybe we should leave dynamic texts to the text-engraver and
+ simply acknowledge them?
+ */
if (text_req_l_)
{
String loud = text_req_l_->text_str_;
text_p_ = new Item (get_property ("basicDynamicTextProperties"));
text_p_->set_elt_property ("text", ly_str02scm (loud.ch_C ()));
if (Direction d=text_req_l_->get_direction ())
- Directional_element_interface (line_spanner_).set (d);
+ Directional_element_interface::set (line_spanner_, d);
- Axis_group_interface (line_spanner_).add_element (text_p_);
+ Axis_group_interface::add_element (line_spanner_, text_p_);
- text_p_->add_offset_callback (Side_position_interface::aligned_on_self,
+ text_p_->add_offset_callback (Side_position::aligned_on_self,
Y_AXIS);
- announce_element (Score_element_info (text_p_, text_req_l_));
+ announce_element (text_p_, text_req_l_);
}
if (accepted_spanreqs_drul_[STOP])
{
if (!cresc_p_)
{
- accepted_spanreqs_drul_[STOP]->warning
+ accepted_spanreqs_drul_[STOP]->origin ()->warning
(_ ("can't find start of (de)crescendo"));
}
else
{
assert (!finished_cresc_p_);
- cresc_p_->set_bound (RIGHT, unsmob_element (get_property ("currentMusicalColumn")));
+ Score_element* cc = unsmob_element (get_property ("currentMusicalColumn"));
+
+ cresc_p_->set_bound (RIGHT, cc);
+
finished_cresc_p_ = cresc_p_;
cresc_p_ = 0;
current_cresc_req_ = 0;
{
if (current_cresc_req_)
{
- accepted_spanreqs_drul_[START]->warning
+ accepted_spanreqs_drul_[START]->origin ()->warning
(current_cresc_req_->span_dir_ == 1
- ?
- _ ("already have a crescendo")
+ ? _ ("already have a crescendo")
: _ ("already have a decrescendo"));
}
else
{
current_cresc_req_ = accepted_spanreqs_drul_[START];
- cresc_p_ = new Crescendo (get_property ("basicCrescendoProperties"));
+ cresc_p_ = new Spanner (get_property ("basicCrescendoProperties"));
+ Crescendo::set_interface (cresc_p_);
cresc_p_->set_elt_property
("grow-direction",
gh_int2scm ((accepted_spanreqs_drul_[START]->span_type_str_ == "crescendo")
+ "Spanner", SCM_UNDEFINED);
}
- cresc_p_->set_bound (LEFT, unsmob_element (get_property ("currentMusicalColumn")));
+ Score_element *cc = unsmob_element (get_property ("currentMusicalColumn"));
+ cresc_p_->set_bound (LEFT, cc);
/*
if (text_p_)
{
index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"),
- LEFT, SCM_BOOL_T);
+ LEFT, text_p_->self_scm ());
if (finished_cresc_p_)
index_set_cell (finished_cresc_p_->get_elt_property ("dynamic-drul"),
- RIGHT, SCM_BOOL_T);
+ RIGHT, text_p_->self_scm ());
}
- Axis_group_interface (line_spanner_).add_element (cresc_p_);
+ Axis_group_interface::add_element (line_spanner_, cresc_p_);
cresc_p_->set_elt_property ("self-alignment-Y", gh_int2scm (0));
cresc_p_->add_offset_callback
- (Side_position_interface::aligned_on_self, Y_AXIS);
- announce_element (Score_element_info (cresc_p_, accepted_spanreqs_drul_[START]));
+ (Side_position::aligned_on_self, Y_AXIS);
+ announce_element (cresc_p_, accepted_spanreqs_drul_[START]);
}
}
}
Dynamic_engraver::do_removal_processing ()
{
typeset_all ();
-
- if (cresc_p_)
- {
- typeset_element (cresc_p_ );
- finished_cresc_p_ = cresc_p_;
- current_cresc_req_->warning (_ ("unterminated (de)crescendo"));
- }
if (line_spanner_)
{
finished_line_spanner_ = line_spanner_;
+ typeset_all ();
+ }
+
+ if (cresc_p_)
+ {
+ current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
+ cresc_p_->suicide ();
}
- typeset_all ();
}
void
}
if (finished_line_spanner_)
{
- Side_position_interface (finished_line_spanner_).add_staff_support ();
-
- if (!finished_line_spanner_->get_bound (LEFT))
- {
- Score_element * cmc
- = unsmob_element (get_property ("currentMusicalColumn"));
- finished_line_spanner_->set_bound (LEFT, cmc);
- }
- if (!finished_line_spanner_->get_bound (RIGHT))
- finished_line_spanner_->set_bound (RIGHT,
- finished_line_spanner_->get_bound (LEFT));
-
-
+ Side_position::add_staff_support (finished_line_spanner_);
+ extend_spanner_over_elements (finished_line_spanner_);
typeset_element (finished_line_spanner_);
finished_line_spanner_ = 0;
}
void
Dynamic_engraver::acknowledge_element (Score_element_info i)
{
- if (Note_column* n = dynamic_cast<Note_column*> (i.elem_l_))
+ if (Note_column::has_interface (i.elem_l_))
{
if (line_spanner_)
{
- Side_position_interface (line_spanner_).add_support (n);
- add_bound_item (line_spanner_,n);
+ Side_position::add_support (line_spanner_,i.elem_l_);
+ add_bound_item (line_spanner_,dynamic_cast<Item*>(i.elem_l_));
}
}
}