2 tie-column.cc -- implement Tie_column
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "tie-column.hh"
11 #include "group-interface.hh"
13 #include "directional-element-interface.hh"
14 #include "note-head.hh"
16 Tie_column::Tie_column (SCM s
)
19 set_elt_pointer ("ties", SCM_EOL
);
20 set_extent_callback (0, X_AXIS
);
21 set_extent_callback (0, Y_AXIS
);
25 Tie_column::add_tie (Tie
*s
)
27 Pointer_group_interface
g (this, "ties");
30 set_bound (LEFT
, s
->head (LEFT
));
31 set_bound (RIGHT
, s
->head (RIGHT
));
34 Pointer_group_interface (this, "ties").add_element (s
);
35 s
->add_dependency (this);
40 tie_compare (Tie
* const & s1
,
43 return sign (s1
->position_f () - s2
->position_f());
50 In normal chord cases, the outer ties point outwards, and the
51 direction of the rest is determined by their staff position.
53 Ross forgets about the tie that is *on* the middle staff line. We
54 assume it goes UP. (TODO: make this settable) */
56 Tie_column::set_directions ()
58 Link_array
<Tie
> ties
=
59 Pointer_group_interface__extract_elements (this, (Tie
*)0, "ties");
62 Direction d
= Directional_element_interface (this).get ();
66 for (int i
= ties
.size (); i
--;)
69 Directional_element_interface (t
).set (d
);
74 if (ties
.size () == 1)
77 Directional_element_interface (t
).set (t
->get_default_dir ());
81 ties
.sort (tie_compare
);
82 Directional_element_interface
tie0(ties
[0]);
86 Directional_element_interface
tietop(ties
.pop ());
89 for (int i
=ties
.size(); i
--; )
92 Real p
= t
->position_f ();
93 Direction d
= (Direction
) sign (p
);
96 Directional_element_interface (t
).set (d
);
101 GLUE_SCORE_ELEMENT(Tie_column
,after_line_breaking
);
103 Tie_column::member_after_line_breaking ()
106 return SCM_UNDEFINED
;