#ifndef POINTER_HH
#define POINTER_HH
+#error
+
/** P<T> is a handy template to use iso T*. It inits to 0, deletes on
destruction, deep copies upon copying
void
Align_note_column_engraver::do_creation_processing ()
{
- align_item_p_ = new Grace_align_item (SCM_EOL);
+ align_item_p_ = new Grace_align_item (get_property ("basicGraceAlignItemProperties"));
Side_position_interface (align_item_p_).set_axis (X_AXIS);
Side_position_interface (align_item_p_).set_direction (LEFT);
#include "group-interface.hh"
#include "align-interface.hh"
-void
-Break_align_item::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Break_align_item,before_line_breaking);
+SCM
+Break_align_item::member_before_line_breaking ()
{
if (break_status_dir() == LEFT)
{
}
if (!elems.size ())
- return;
+ return SCM_UNDEFINED;
SCM symbol_list = SCM_EOL;
Array<Real> dists;
column_l ()->set_elt_property ("stretch-distance",
gh_cons (gh_double2scm (-dists[0]),
gh_double2scm (stretch_distance)));
-
+
+
+ return SCM_UNDEFINED;
}
Break_align_item::Break_align_item (SCM s)
int j = Chord::find_pitch_i (add_arr_p, (*add_arr_p)[i]);
if ((j != -1) && (i != j))
{
- add_arr_p->get (i);
+ add_arr_p->get (i);
}
}
find tonic
first try: base of longest line of thirds
- */
+ */
int tonic_i = 0;
int longest_i = 0;
for (int i = 0; i < pitch_arr_p->size (); i++)
{
int gap = (*pitch_arr_p)[i].notename_i_
- (*pitch_arr_p)[(i - 1 + pitch_arr_p->size ())
- % pitch_arr_p->size ()].notename_i_;
+ % pitch_arr_p->size ()].notename_i_;
while (gap < 0)
gap += 7;
gap %= 7;
FIXME: this should be schemified.
*/
-void
-Clef_item::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Clef_item,before_line_breaking);
+SCM
+Clef_item::member_before_line_breaking ()
{
SCM style_sym =get_elt_property ("style");
String style;
else
{
suicide ();
- return;
+ return SCM_UNDEFINED;
}
// ugh.
set_elt_property ("molecule-callback", SCM_BOOL_T);
set_extent_callback (0, X_AXIS);
}
+
+ return SCM_UNDEFINED;
}
add_dependency (ncol_l);
}
-void
-Collision::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Collision,before_line_breaking);
+SCM
+Collision::member_before_line_breaking ()
{
do_shifts();
+ return SCM_UNDEFINED;
}
/*
Should be smarter.
*/
-void
-Dot_column::after_line_breaking ()
+
+GLUE_SCORE_ELEMENT(Dot_column,after_line_breaking);
+SCM
+Dot_column::member_after_line_breaking ()
{
Link_array<Dots> dots = Pointer_group_interface__extract_elements (this, (Dots*)0 , "dots");
dots.sort (Dot_column::compare);
if (dots.size () < 2)
- return;
+ return SCM_UNDEFINED;
Slice s;
s.set_empty ();
}
if (!conflicts)
- return;
+ return SCM_UNDEFINED;
+
int middle = s.center ();
/*
if (!(pos % 2))
pos ++; // center () rounds down.
- for (int i=0; i <dots.size (); pos += 2, i++)
+ for (int i=0; i < dots.size (); pos += 2, i++)
{
staff_symbol_referencer (dots[i]).set_position(pos);
}
+
+ return SCM_UNDEFINED;
}
/*
TODO: cfg-able
*/
-void
-Grace_align_item::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Grace_align_item,before_line_breaking);
+SCM
+Grace_align_item::member_before_line_breaking ()
{
Real nhw = // lookup_l ()->notehead (2, "")..extent (X_AXIS).length();
paper_l ()->get_var ("quartwidth");
gh_cons (gh_double2scm (nhw* 1.5),
gh_double2scm (infinity_f)));
column_l ()->set_elt_property ("contains-grace", SCM_BOOL_T);
+
+ return SCM_UNDEFINED;
+
}
class Break_align_item : public Item
{
-protected:
- virtual void before_line_breaking ();
public:
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
+
Break_align_item (SCM s);
VIRTUAL_COPY_CONS(Score_element);
};
*/
class Clef_item : public Item
{
-protected:
- virtual void before_line_breaking ();
public:
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
+
VIRTUAL_COPY_CONS(Score_element);
Clef_item (SCM);
};
*/
class Collision : public Item
{
-protected:
+public:
SCM automatic_shift ();
SCM forced_shift ();
void do_shifts ();
- virtual void before_line_breaking ();
-public:
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
+
void add_column (Note_column*ncol_l);
Collision(SCM);
void add_head (Rhythmic_head*);
Dot_column (SCM);
-protected:
- virtual void after_line_breaking ();
+
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
};
#endif // DOT_COLUMN_HH
public:
VIRTUAL_COPY_CONS (Score_element);
Grace_align_item (SCM);
-protected:
+
virtual void do_add_processing ();
- virtual void before_line_breaking ();
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
};
#endif /* GRACE_ALIGN_ITEM_HH */
*/
class Note_column : public Item
{
-protected:
- virtual void after_line_breaking () ;
public:
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
static int shift_compare (Note_column *const &, Note_column*const&);
/** The relative position of the "voice" containing this
Interval rest_dim () const;
Rest_collision(SCM);
-protected:
- virtual void before_line_breaking ();
+
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
};
#endif // REST_COLLISION_HH
Stem * stem_l () const;
Dots * dots_l () const;
int dot_count () const;
-protected:
- virtual void after_line_breaking ();
+
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
Rhythmic_head (SCM s);
};
public:
Script_column(SCM);
void add_staff_sided (Item*);
-protected:
- virtual void before_line_breaking ();
+
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
};
VIRTUAL_COPY_CONS(Score_element);
void add_bar (Score_element*);
-protected:
void evaluate_empty ();
static Interval width_callback(Score_element const*, Axis) ;
virtual Real get_bar_size () const;
- virtual void before_line_breaking ();
- virtual void after_line_breaking ();
+ SCM member_before_line_breaking ();
+ static SCM before_line_breaking (SCM);
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
};
#endif // SPAN_BAR_HH
VIRTUAL_COPY_CONS (Score_element);
void add_tie (Tie*);
Tie_column (SCM s);
-protected:
- virtual void after_line_breaking ();
+
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
void set_directions ();
};
rest -> stem -> beam -> interpolate_y_position ()
*/
-void
-Note_column::after_line_breaking ()
+GLUE_SCORE_ELEMENT(Note_column,after_line_breaking);
+SCM
+Note_column::member_after_line_breaking ()
{
if (!stem_l () || !rest_b ())
- return;
+ return SCM_UNDEFINED;
Beam * b = stem_l ()->beam_l ();
if (!b || !b->visible_stem_count ())
- return;
+ return SCM_UNDEFINED;
/* ugh. Should be done by beam.
(what? should be done --jcn)
discrete_dist = int (ceil (discrete_dist / 2.0)* 2.0);
translate_rests (-d * discrete_dist);
+
+ return SCM_UNDEFINED;
}
return dynamic_cast<Rhythmic_head*> (e);
}
-void
-Rest_collision::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Rest_collision,before_line_breaking);
+SCM
+Rest_collision::member_before_line_breaking ()
{
Link_array<Note_column> rest_l_arr =
Pointer_group_interface__extract_elements (this, (Note_column*) 0, "rests");
// no rests to collide
if (!rest_l_arr.size())
- return;
+ return SCM_UNDEFINED;
// no partners to collide with
if (rest_l_arr.size() + ncol_l_arr.size () < 2)
- return;
+ return SCM_UNDEFINED;
// meisjes met meisjes
if (!ncol_l_arr.size())
Interval restdim = rcol->rest_dim ();
if (restdim.empty_b ())
- return;
+ return SCM_UNDEFINED;
// staff ref'd?
Real staff_space = paper_l()->get_var ("interline");
rcol->translate_rests (dir * discrete_dist);
}
+ return SCM_UNDEFINED;
}
? gh_scm2int (dots_l ()->get_elt_property ("dot-count")) : 0;
}
-void
-Rhythmic_head::after_line_breaking ()
+GLUE_SCORE_ELEMENT(Rhythmic_head,after_line_breaking);
+SCM
+Rhythmic_head::member_after_line_breaking ()
{
if (Dots *d = dots_l ())
{
Staff_symbol_referencer_interface me (d);
si.set_position(int (me.position_f ()));
}
+
+ return SCM_UNDEFINED;
}
return gh_scm2int (p1) - gh_scm2int (p2);
}
-void
-Script_column::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Script_column,before_line_breaking);
+SCM
+Script_column::member_before_line_breaking ()
{
Drul_array<Link_array<Item> > arrs;
Link_array<Item> staff_sided
}
} while (flip (&d) != DOWN);
+
+ return SCM_UNDEFINED;
}
if (bar_l_arr_.size() >= 2 && !spanbar_p_)
{
- spanbar_p_ = get_span_bar_p( bar_l_arr_[0]->property_alist_);
+ spanbar_p_ = get_span_bar_p (get_property ("basicSpanBarProperties"));
+ spanbar_p_->set_elt_property ("glyph", bar_l_arr_[0]->get_elt_property ("glyph"));
+ spanbar_p_->set_elt_property ("visibility-lambda",
+ bar_l_arr_[0]->get_elt_property ("visibility-lambda"));
+
spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
return m.extent (X_AXIS);
}
-void
-Span_bar::before_line_breaking ()
+GLUE_SCORE_ELEMENT(Span_bar,before_line_breaking);
+SCM
+Span_bar::member_before_line_breaking ()
{
- Bar::before_line_breaking ();
+ Bar::member_before_line_breaking ();
evaluate_empty ();
+
+ return SCM_UNDEFINED;
}
-void
-Span_bar::after_line_breaking ()
+GLUE_SCORE_ELEMENT(Span_bar,after_line_breaking);
+SCM
+Span_bar::member_after_line_breaking ()
{
Interval i (get_spanned_interval ());
we have to translate ourselves to be in the center of the
interval that we span. */
translate_axis (i.center (), Y_AXIS);
+ return SCM_UNDEFINED;
}
void
Direction d = (Direction) sign (p);
if (!d)
d = UP;
-
directional_element (s[i]).set (d);
}
}
-void
-Tie_column::after_line_breaking ()
+GLUE_SCORE_ELEMENT(Tie_column,after_line_breaking);
+SCM
+Tie_column::member_after_line_breaking ()
{
set_directions ();
+ return SCM_UNDEFINED;
}