2 hyphen-spanner.cc -- implement Hyphen_spanner
4 source file of the GNU LilyPond music typesetter
6 (c) 1999 Glen Prideaux <glenprideaux@iname.com>
8 (adapted from extender-spanner)
12 TODO: too complicated implementation. Why the dx_drul?.
19 #include "molecule.hh"
20 #include "paper-column.hh"
21 #include "paper-def.hh"
22 #include "hyphen-spanner.hh"
23 #include "dimension-cache.hh"
25 Hyphen_spanner::Hyphen_spanner ()
28 dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
30 set_extent_callback (Score_element::point_dimension_callback,Y_AXIS);
34 Hyphen_spanner::do_brew_molecule () const
38 Real w = spanner_length ();
40 w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
42 Real th = paper_l ()->get_var ("hyphen_thickness");
43 Real h = paper_l ()->get_var ("hyphen_height");
45 // UGH. First try: just make the hyphen take 1/3 of the available space
46 // for length, use a geometric mean of the available space and some minimum
47 Real l = paper_l ()->get_var ("hyphen_minimum_length");
50 Molecule a = lookup_l ()->filledbox ( Box (Interval ((w-l)/2,(w+l)/2), Interval (h,h+th)));
51 a.translate (Offset (dx_f_drul_[LEFT], 0));
60 Hyphen_spanner::after_line_breaking ()
63 Real gap = paper_l ()->get_var ("interline");
68 Item* t = get_bound (d)
69 ? get_bound (d) : get_bound ((Direction)-d);
71 dx_f_drul_[d] += t->extent (X_AXIS).length ();
73 dx_f_drul_[d] -= d * gap / 2;
75 while (flip(&d) != LEFT);
80 Hyphen_spanner::set_textitem (Direction d, Item* textitem_l)
82 set_bound (d, textitem_l);
83 add_dependency (textitem_l);