]> git.donarmstrong.com Git - lilypond.git/blob - lily/staff-sym.cc
release: 1.1.24
[lilypond.git] / lily / staff-sym.cc
1 /*
2   staffsym.cc -- implement Staff_symbol
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8 #include "staff-sym.hh"
9 #include "lookup.hh"
10 #include "dimensions.hh"
11 #include "paper-def.hh"
12 #include "molecule.hh"
13 #include "debug.hh"
14 #include "item.hh"
15
16
17 Staff_symbol::Staff_symbol ()
18 {
19   no_lines_i_ = 5;
20   interline_f_ =  0 PT;
21 }
22
23
24
25
26 void
27 Staff_symbol::do_print() const
28 {
29 #ifndef NPRINT
30   Spanner::do_print();
31   DOUT << "lines: " << no_lines_i_;
32 #endif
33 }
34
35 Interval
36 Staff_symbol::do_height() const
37 {
38   int n = no_lines_i_ -1;
39 //  return 2* inter_note_f () * Interval (-n, n);
40   return inter_note_f () * Interval (-n, n);
41 }
42
43 Molecule*
44 Staff_symbol::do_brew_molecule_p() const
45 {
46   Real w = extent (X_AXIS).length ();
47   Real left_dx = -spanned_drul_[LEFT]->extent (X_AXIS)[LEFT];
48   Real right_dx = spanned_drul_[RIGHT]->extent (X_AXIS)[RIGHT];
49   
50   Paper_def * p = paper();
51   Atom rule  = lookup_l ()->rule_symbol (p->get_var ("rulethickness"),
52                                          w);
53   Real height = (no_lines_i_-1) * inter_note_f();
54   Molecule * m = new Molecule;
55   for (int i=0; i < no_lines_i_; i++)
56     {
57       Atom a (rule);
58       a.translate_axis (height - i * inter_note_f()*2, Y_AXIS);
59       m->add_molecule (a);
60     }
61
62   //  m->translate_axis (-left_dx, X_AXIS);
63   return m;
64 }
65
66 Real
67 Staff_symbol::inter_note_f() const
68 {
69   if (interline_f_)
70     return interline_f_/2;
71
72   return paper()->internote_f ();
73 }
74
75 int
76 Staff_symbol::steps_i() const
77 {
78   return no_lines_i_*2;
79 }