]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-column.cc
patch::: 1.3.9.hwn2
[lilypond.git] / lily / paper-column.cc
1 /*
2   paper-column.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 "paper-column.hh"
10 #include "paper-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   
18   if (!dir)
19     {
20       programming_error ("Must set minimum distance between differing columns.");
21       return;
22     }
23   
24   for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
25     {
26       Column_rod &rod = minimal_dists_arr_drul_[dir][i];
27       if (rod.other_l_ == p)
28         {
29           rod.distance_f_ = rod.distance_f_ >? d;
30           return ;
31         }
32     }
33
34   Column_rod cr;
35   cr.distance_f_ = d;
36   cr.other_l_ = p;
37
38   minimal_dists_arr_drul_[dir].push (cr);
39 }
40
41 void
42 Paper_column::add_spring (Paper_column * p, Real d, Real s)
43 {
44   Direction dir =  Direction (sign (p->rank_i ()  - rank_i ()));
45   
46   if (!dir)
47     {
48       warning (_ ("Must set spring between differing columns"));
49       return;
50     }
51   
52   for (int i=0; i < spring_arr_drul_[dir].size (); i++)
53     {
54       Column_spring &spring = spring_arr_drul_[dir][i];
55       if (spring.other_l_ == p)
56         {
57           spring.distance_f_ = spring.distance_f_ >? d;
58           return ;
59         }
60     }
61
62   Column_spring cr;
63   cr.distance_f_ = d;
64   cr.strength_f_ = s;  
65   cr.other_l_ = p;
66
67   spring_arr_drul_[dir].push (cr);
68 }
69
70 int
71 Paper_column::rank_i() const
72 {
73   return rank_i_;
74 }
75
76 void
77 Paper_column::set_rank (int i)
78 {
79   rank_i_ = i;
80 }
81
82 void
83 Paper_column::do_print() const
84 {
85 #ifndef NPRINT
86   DEBUG_OUT << "rank: " << rank_i_ << '\n';
87   Direction d = LEFT;
88   do
89     {
90       for (int i=0; i < minimal_dists_arr_drul_[d].size (); i++)
91         {
92           minimal_dists_arr_drul_[d][i].print ();
93         }
94       for (int i=0; i < spring_arr_drul_[d].size (); i++)
95         {
96           spring_arr_drul_[d][i].print ();
97         }
98       
99     }
100   while ((flip (&d))!=LEFT);
101   Item::do_print ();
102 #endif 
103 }
104
105 bool
106 Paper_column::breakpoint_b() const
107 {
108   return !line_l_;
109 }
110
111 Paper_column::Paper_column()
112 {
113   set_axes (X_AXIS, X_AXIS);
114
115   line_l_=0;
116   rank_i_ = -1;
117 }
118
119 Line_of_score*
120 Paper_column::line_l() const
121 {
122   return line_l_;
123 }
124
125
126
127
128 Paper_column*
129 Paper_column::column_l () const
130 {
131   return (Paper_column*)(this);
132 }
133
134 /*
135   ugh. JUNKME
136  */
137 void
138 Paper_column::preprocess ()
139 {
140   /*
141     JUNKME
142    */ 
143   minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare);
144   minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare);  
145   spring_arr_drul_[LEFT].sort (Column_spring::compare);
146   spring_arr_drul_[RIGHT].sort (Column_spring::compare);  
147 }