2 stem.hh -- declare Stem
4 (c) 1996--2000 Han-Wen Nienhuys
13 #include "molecule.hh"
14 #include "stem-info.hh"
16 /**the rule attached to the ball.
22 \item up/down position.
25 should move beam_{left, right} into Beam
29 Stem size depends on flag.
33 beam_dir: direction of the beam (int)
35 dir_force: is direction explicitely specified? (bool)
37 /// how many abbrev beam don't reach stem?
43 class Stem : public Item
46 static SCM brew_molecule (SCM);
48 /// log of the duration. Eg. 4 -> 16th note -> 2 flags
49 static int flag_i (Score_element*) ;
51 static int beam_count (Score_element*,Direction) ;
52 static void set_beaming (Score_element*,int, Direction d);
54 don't print flag when in beam.
55 our beam, for aligning abbrev flags
57 static Beam * beam_l (Score_element*);
58 static Score_element * first_head (Score_element*) ;
59 static Drul_array<Score_element*> extremal_heads (Score_element*);
61 static Score_element * support_head (Score_element*) ;
64 /// ensure that this Stem also encompasses the Notehead #n#
65 static void add_head (Score_element*me, Score_element*n);
67 static Stem_info calc_stem_info (Score_element *) ;
69 static Real chord_start_f (Score_element *) ;
70 static Direction get_direction (Score_element*) ;
71 static int type_i (Score_element *) ;
72 static void set_stemend (Score_element *,Real);
73 static Direction get_default_dir(Score_element *) ;
74 static int get_center_distance(Score_element *,Direction) ;
75 static int heads_i (Score_element *) ;
77 static bool invisible_b(Score_element *) ;
79 /// heads that the stem encompasses (positions)
80 static Interval head_positions(Score_element *) ;
83 static Real get_default_stem_end_position (Score_element*me) ;
84 static void position_noteheads(Score_element*);
85 static Real stem_end_position (Score_element*) ;
86 static Real off_callback (Score_element *, Axis);
87 static Molecule flag (Score_element*);
88 static SCM before_line_breaking (SCM);
89 static Interval dim_callback (Score_element *,Axis);
90 static bool has_interface (Score_element*);
91 static void set_interface (Score_element*);
93 static void set_spacing_hints (Score_element*me) ;