]> git.donarmstrong.com Git - lilypond.git/blob - lily/p-col.cc
release: 1.1.37
[lilypond.git] / lily / p-col.cc
1 /*
2   p-col.cc -- implement Paper_column
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9 #include "p-col.hh"
10 #include "p-score.hh"
11 #include "debug.hh"
12
13 void
14 Paper_column::add_rod (Paper_column * p, Real d)
15 {
16   Direction dir =  Direction (sign (p->rank_i ()  - rank_i ()));
17   for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
18     {
19       Column_rod &rod = minimal_dists_arr_drul_[dir][i];
20       if (rod.other_l_ == p)
21         {
22           rod.distance_f_ = rod.distance_f_ >? d;
23           return ;
24         }
25     }
26
27   Column_rod cr;
28   cr.distance_f_ = d;
29         cr.other_l_ = p;
30
31   minimal_dists_arr_drul_[dir].push (cr);
32       
33 }
34
35 int
36 Paper_column::rank_i() const
37 {
38   return rank_i_;
39 }
40
41 void
42 Paper_column::set_rank (int i)
43 {
44   rank_i_ = i;
45 }
46
47 void
48 Paper_column::do_print() const
49 {
50 #ifndef NPRINT
51   DOUT << "rank: " << rank_i_ << '\n';
52   if (prebreak_l())
53     {
54       DOUT << "\npre: ";
55       prebreak_l()->print();
56     }
57   if (postbreak_l()) 
58     {
59       DOUT << "post: ";
60       postbreak_l()->print();
61     } 
62   if (break_status_dir ())
63     {
64       DOUT << '\n' << ((break_status_dir () == LEFT) ? "prebreak" : "postbreak");
65       DOUT << '\n';
66     }
67
68   DOUT << "Left: ";
69   for (int i=0; i < minimal_dists_arr_drul_[LEFT].size (); i++)
70     {
71       minimal_dists_arr_drul_[LEFT][i].print ();
72     }
73   DOUT << "Right: ";
74   for (int i=0; i < minimal_dists_arr_drul_[RIGHT].size (); i++)
75     {
76       minimal_dists_arr_drul_[RIGHT][i].print ();
77     }
78 #endif 
79 }
80
81 int
82 Paper_column::compare (Paper_column const &c1, Paper_column const &c2)
83 {
84   return c1.rank_i() - c2.rank_i ();
85 }
86
87 Paper_column*
88 Paper_column::prebreak_l() const
89 {
90   return dynamic_cast<Paper_column*>(find_prebroken_piece (LEFT));
91 }
92
93 Paper_column*
94 Paper_column::postbreak_l() const
95 {
96   return dynamic_cast<Paper_column*>( find_prebroken_piece (RIGHT));
97 }
98
99 bool
100 Paper_column::breakpoint_b() const
101 {
102   return !line_l_;
103 }
104
105 Paper_column::Paper_column()
106 {
107   set_axes (X_AXIS, X_AXIS);
108
109   line_l_=0;
110   rank_i_ = -1;
111 }
112
113 Line_of_score*
114 Paper_column::line_l() const
115 {
116   return line_l_;
117 }
118
119
120
121
122 Paper_column*
123 Paper_column::column_l () const
124 {
125   return (Paper_column*)(this);
126 }
127
128
129 void
130 Paper_column::preprocess ()
131 {
132   minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare);
133   minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare);  
134 }