]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/stem.hh
release: 1.3.94
[lilypond.git] / lily / include / stem.hh
1 /*
2   stem.hh -- declare Stem
3
4   (c) 1996--2000 Han-Wen Nienhuys
5 */
6
7 #ifndef STEM_HH
8 #define STEM_HH
9
10 #include "lily-proto.hh"
11 #include "lily-guile.hh"
12 #include "stem-info.hh"
13
14 /**the rule attached to the ball.
15   takes care of:
16
17   \begin{itemize}
18   \item the rule
19   \item the flag
20   \item up/down position.
21   \end{itemize}
22
23   should move beam_{left, right} into Beam
24
25   TODO.
26   
27   Stem size depends on flag.
28
29   elt properties:
30
31   beam_dir: direction of the beam (int)
32
33   dir_force: is direction explicitely specified? (bool)
34
35   /// how many abbrev beam don't reach stem?
36   int beam_gap_i_;
37   
38   */
39 class Stem 
40 {
41 public:
42   DECLARE_SCHEME_CALLBACK(brew_molecule, (SCM ));
43
44   /// log of the duration. Eg. 4 -> 16th note -> 2 flags
45   static  int flag_i (Score_element*) ;
46   static int beam_count (Score_element*,Direction) ;
47   static void set_beaming (Score_element*,int,  Direction d);
48   /** 
49       don't print flag when in beam.
50       our beam, for aligning abbrev flags
51   */
52   static Score_element * beam_l (Score_element*);
53   static Score_element * first_head (Score_element*) ;
54   static Drul_array<Score_element*> extremal_heads (Score_element*);
55   static Score_element * support_head (Score_element*) ;
56   
57   /// ensure that this Stem also encompasses the Notehead #n#
58   static void add_head (Score_element*me, Score_element*n);
59   static Stem_info calc_stem_info (Score_element *) ;
60   static Real chord_start_f (Score_element *) ;
61   static Direction get_direction (Score_element*) ;
62   static int type_i (Score_element *) ;
63   static void set_stemend (Score_element *,Real);
64   static Direction get_default_dir(Score_element *) ;
65   static int get_center_distance(Score_element *,Direction) ;
66   static int heads_i (Score_element *) ;
67   static bool invisible_b(Score_element *) ;
68  
69   /// heads that the stem encompasses (positions)
70   static Interval head_positions(Score_element *) ;
71   static Real get_default_stem_end_position (Score_element*me) ;
72   static void position_noteheads(Score_element*);
73   static Real stem_end_position (Score_element*) ;
74   DECLARE_SCHEME_CALLBACK(off_callback, (SCM element, SCM axis));
75   static Molecule flag (Score_element*);
76   DECLARE_SCHEME_CALLBACK(before_line_breaking, (SCM ));
77   DECLARE_SCHEME_CALLBACK(dim_callback, (SCM smob, SCM axis));
78   static bool has_interface (Score_element*);
79   static void set_interface (Score_element*);
80
81   static void set_spacing_hints (Score_element*me) ;
82 };
83 #endif