]> git.donarmstrong.com Git - lilypond.git/blob - lily/script.cc
release: 0.0.57
[lilypond.git] / lily / script.cc
1 /*
2   script.cc -- implement Script
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "musical-request.hh"
10 #include "paper-def.hh"
11 #include "script.hh"
12 #include "stem.hh"
13 #include "molecule.hh"
14 #include "lookup.hh"
15
16
17
18 void
19 Script::set_stem(Stem*st_l)
20 {
21     stem_l_ = st_l;
22     add_support(st_l);
23 }
24
25
26 Script::Script(Script_req* rq)
27     :Staff_side(this)
28 {    
29     specs_l_ = rq->scriptdef_p_;
30     inside_staff_b_ = specs_l_->inside_staff_b_;
31     stem_l_ = 0;
32     pos_i_ = 0;
33     symdir_i_=1;
34     dir_i_ =rq->dir_i_;
35 }
36
37 void
38 Script::set_symdir()
39 {
40     if (specs_l_->invertsym_b_)
41         symdir_i_ = (dir_i_ < 0) ? -1:1;
42 }
43
44 void
45 Script::set_default_dir()
46 {
47     int s_i=specs_l_->rel_stem_dir_i_;
48     if (s_i && stem_l_)
49         dir_i_ = stem_l_->dir_i_ * s_i;
50     else {
51         dir_i_ =specs_l_->staff_dir_i_;
52     }
53 }
54
55 void
56 Script::set_default_index()
57 {
58     pos_i_ = get_position_i(symbol().dim.y);
59 }
60
61 Interval
62 Script::do_width() const
63 {
64     return symbol().dim.x;
65 }
66
67 Symbol
68 Script::symbol()const
69 {
70     String preidx_str = (symdir_i_ < 0) ?"-" :"";
71     return paper()->lookup_l()->script(preidx_str + specs_l_->symidx);
72 }
73
74 void
75 Script::do_pre_processing()
76 {
77     if (!dir_i_)
78         set_default_dir();
79     set_symdir();
80 }
81
82 void
83 Script::do_post_processing()
84 {
85     set_default_index();
86 }
87
88 Molecule*
89 Script::brew_molecule_p() const
90 {
91     Real dy = paper()->internote();
92     
93     Molecule*out = new Molecule(Atom(symbol()));
94     out->translate(Offset(0,dy * pos_i_));
95     return out;
96 }
97 IMPLEMENT_STATIC_NAME(Script);
98
99 int 
100 Script::compare(Script  *const&l1, Script *const&l2) 
101 {
102     return l1->specs_l_->priority_i_ - l2->specs_l_->priority_i_;
103 }
104